% gcc a.c -static -fuse-ld=bfd -Wl,-t /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/10/crtbeginT.o /tmp/ccczCGoq.o /usr/lib/gcc/x86_64-linux-gnu/10/libgcc.a /usr/lib/gcc/x86_64-linux-gnu/10/libgcc_eh.a /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a /usr/lib/gcc/x86_64-linux-gnu/10/libgcc.a /usr/lib/gcc/x86_64-linux-gnu/10/libgcc_eh.a /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a /usr/lib/gcc/x86_64-linux-gnu/10/libgcc.a /usr/lib/gcc/x86_64-linux-gnu/10/libgcc_eh.a /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a /usr/lib/gcc/x86_64-linux-gnu/10/crtend.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crtn.o gold's includes archive member names, which is IMHO more useful % gcc a.c -static -fuse-ld=gold -Wl,-t /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/10/crtbeginT.o /tmp/ccX5yMOZ.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a(libc-start.o) /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a(check_fds.o) /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a(libc-tls.o) /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a(elf-init.o) ... When debugging multiple definition errors, we sometimes want to know the origin symbols. I think including the symbol causing archive member extraction in --trace can be useful, e.g. ``` /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/10/crtbeginT.o /tmp/ccX5yMOZ.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a(libc-start.o)\txxx /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a(check_fds.o)\tyyy /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a(libc-tls.o)\tzzz /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/libc.a(elf-init.o)\twww ```
I'll add a comment that on Mach-O, ld64 -why_live gives you clue why a symbol is defined (via a potentially long archive member extraction chain). The --trace feature can make some other debugging tasks convenient.
That information is already part of the map file, including the symbol which has triggered the inclusion.