https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82754
Bug ID: 82754 Summary: -m32 -B doesn't work with crtn.o Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: driver Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- Host: x86_64 Target: i386 [hjl@gnu-6 tmp]$ cat foo.c #include <stdio.h> int main () { printf ("hello\n"); return 0; } [hjl@gnu-6 tmp]$ /usr/gcc-8.0.0-x32/bin/gcc -c foo.c [hjl@gnu-6 tmp]$ cp /lib64/crtn.o . [hjl@gnu-6 tmp]$ /usr/gcc-8.0.0-x32/bin/gcc -v -B./ foo.o Using built-in specs. COLLECT_GCC=/usr/gcc-8.0.0-x32/bin/gcc COLLECT_LTO_WRAPPER=/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse : (reconfigured) /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse : (reconfigured) /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse Thread model: posix gcc version 8.0.0 20171024 (experimental) (GCC) COMPILER_PATH=./:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/ LIBRARY_PATH=./:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-B' './' '-mtune=generic' '-march=x86-64' /usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/collect2 -plugin /usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/liblto_plugin.so -plugin-opt=/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccyafVxV.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /lib/../lib64/crt1.o /lib/../lib64/crti.o /usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/crtbegin.o -L. -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0 -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../.. foo.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/crtend.o ./crtn.o COLLECT_GCC_OPTIONS='-v' '-B' './' '-mtune=generic' '-march=x86-64' [hjl@gnu-6 tmp]$ ./crtn.o is used. But with -m32: [hjl@gnu-6 tmp]$ /usr/gcc-8.0.0-x32/bin/gcc -c foo.c -m32 [hjl@gnu-6 tmp]$ cp /lib/crtn.o . [hjl@gnu-6 tmp]$ /usr/gcc-8.0.0-x32/bin/gcc -v -B./ foo.o -m32 Using built-in specs. COLLECT_GCC=/usr/gcc-8.0.0-x32/bin/gcc COLLECT_LTO_WRAPPER=/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse : (reconfigured) /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse : (reconfigured) /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse Thread model: posix gcc version 8.0.0 20171024 (experimental) (GCC) COMPILER_PATH=./:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/ LIBRARY_PATH=/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/32/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:./:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-B' './' '-m32' '-mtune=generic' '-march=x86-64' /usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/collect2 -plugin /usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/liblto_plugin.so -plugin-opt=/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccnQpjoN.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /lib/../lib/crt1.o /lib/../lib/crti.o /usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/32/crtbegin.o -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/32 -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L. -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0 -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../.. foo.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/32/crtend.o /lib/../lib/crtn.o COLLECT_GCC_OPTIONS='-v' '-B' './' '-m32' '-mtune=generic' '-march=x86-64' [hjl@gnu-6 tmp]$ ./crtn.o isn't used. It looks like -m32 takes precedent over -B./. If I rename /lib/crtn.o, ./crtn.o is used: [root@gnu-6 lib64]# cd /lib [root@gnu-6 lib]# mv crtn.o crtn.o.saved [root@gnu-6 lib]# [hjl@gnu-6 tmp]$ /usr/gcc-8.0.0-x32/bin/gcc -v -m32 -B./ foo.o Using built-in specs. COLLECT_GCC=/usr/gcc-8.0.0-x32/bin/gcc COLLECT_LTO_WRAPPER=/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse : (reconfigured) /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse : (reconfigured) /export/gnu/import/git/sources/gcc/configure --with-demangler-in-ld --enable-languages=c,c++,fortran,lto,objc,ada,obj-c++,go --prefix=/usr/gcc-8.0.0-x32 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-libmpx --with-multilib-list=m32,m64,mx32 --enable-linker-build-id --enable-gnu-unique-object --with-fpmath=sse Thread model: posix gcc version 8.0.0 20171024 (experimental) (GCC) COMPILER_PATH=./:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/ LIBRARY_PATH=/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/32/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:./:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/:/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-m32' '-B' './' '-mtune=generic' '-march=x86-64' /usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/collect2 -plugin /usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/liblto_plugin.so -plugin-opt=/usr/gcc-8.0.0-x32/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/lto-wrapper -plugin-opt=-fresolution=/tmp/cc023LGU.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /lib/../lib/crt1.o /lib/../lib/crti.o /usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/32/crtbegin.o -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/32 -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L. -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0 -L/usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/../../.. foo.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/gcc-8.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/8.0.0/32/crtend.o ./crtn.o COLLECT_GCC_OPTIONS='-v' '-m32' '-B' './' '-mtune=generic' '-march=x86-64' [hjl@gnu-6 tmp]$