GNU toolchains
§§ every damn single GNU toolchain binary
NOTE:
<m> - placeholder for machine tuple e.g. x86_64-linux-gnu
<v> - placeholder for toolchain (gcc) version
GCC, under /usr/bin; Sometimes they are prefixed with machine tuples.
Archlinux is x86_64 exclusive, therefore the prefixes are not necessary.
And, gcc seemingly overlaps binutils. Some of those are wrappers (see below)
From binutils:
compile stuffs:---
as the assembler
ld the linker. ld.bfd and ld.gold are two different
implementation of ld. ld points to either of them
ld.bfd "Binary File Descriptor". The older one. More support
and compatability
ld.gold "Gold". Newer, faster linker
objcopy copy and translate object files / bin formats
combine stuffs:---
ar handle archives;
mostly, combine .o files into single .a
linker could extract desired .o from .a
dwp conbine DWARF object files (dwo) into single package
ranlib generate index into archive
poke stuffs:------
strip remove symbols, debug info etc. from obj files
elfedit update header and program property of elf files
print stuffs:-----
objdump display info about object files + dissambly
readelf display info about elf files
addr2line addr or symbol+offset into file + line number
c++filt demangle c++ (and java) symbols
nm list symbols from object files (+sizes)
size list section size and total size of binary
strings show printable chars in files
From gcc:
The "frontend" under /usr/bin
They are the user-facing programs that you may call directly
gcc the GNU compiler "collection" all-in-one tool
cc alias to (or same as) gcc
c89, c99 gcc wrappers with std=c89/99
g++ gcc with c++
c++ alias to (or same as) g++
cpp C preprocessor
gcc-ar wrapper of ar w/ --plugin=/../liblto_plugin.so
gcc-nm wrapper of nm w/ liblto plugin
gcc-ranlib wrapper of ranlib w/ liblto plugin
gcov coverage testing tool
gcov-tool offline gcda profile processing tool
The "backends" under /usr/lib/gcc/<m>/<v>/
They are internal binaries called by tools like gcc. You don't call it directly
cc1 the C Compiler
cc1plus the C++ Compiler
collect2 wrapper of ld (from binutils); also wrapps around lto?
lto1 collect2 invokes it if -flto is enabled (indirectly via ld?)
lto-wrapper called by collect2 ... (ok this is twisted...but I won't worry
about this level of "details")
Also check gcc/Makefile (configure first)
§§ misc:
Also gprof stuffs from binutils
gprof stuffs:
gp-archive
gp-collect-app
gp-display-html
gp-display-src
gp-display-text
gprof
gprofng
gprofng-archive
gprofng-collect-app
gprofng-display-html
gprofng-display-src
gprofng-display-text
comments from gcc/collect2.cc
/* !!! When GCC calls collect2, it does not know whether it is calling collect2
* or ld. So collect2 cannot meaningfully understand any options except those ld
* understands. If you propose to make GCC pass some other option, just imagine
* what will happen if ld is really ld!!!
*/