Despite their reputations as workstation application development tools, the GNU compiler and linker excel at producing high-quality executables for embedded targets. The reason is only partly because an increasing number of embedded systems are based on the same 32-bit processors found in some desktop workstations; it is mostly because the diverse, high-end workstation environment demands flexible and powerful tools, and such tools can also be used to make great embedded systems.

This paper describes the features of the GNU compiler and linker that are most important for embedded developers. It begins with a brief overview of the tools themselves and some of their most useful command line options, then covers the compiler’s syntax extensions, in particular its inline assembly language support. It then introduces the linker’s command language, and concludes with the procedure used to build the tools from source code.