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]$

Reply via email to