This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Many tests fail when gcc passes --no-add-needed to linker


On Thu, Apr 8, 2010 at 7:38 PM, Ulrich Drepper <drepper@redhat.com> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 03/19/2010 03:57 PM, H.J. Lu wrote:
>> Many tests failed if gcc passes --no-add-needed to linker with
>> error messages like:
>
> These all look like bugs in the linker to me. ?The symbols in question
> are contained in DSOs which are linked in. ?Aside, the tst-tls1 error
> looks like this:
>
> /usr/bin/ld: ?: invalid DSO for symbol `__tls_get_addr@@GLIBC_2.3'
> definition
> /home/drepper/local/glibc-builds/20100408/elf/ld-linux-x86-64.so.2:
> could not read symbols: Bad value
>
>
> This works fine with --no-add-needed.
>

That is not the case for elf/tst-tls12. It is liked against tst-tlsmod12.so:

[hjl@gnu-15 needed-1]$ ldd tst-tlsmod12.so
	linux-gate.so.1 =>  (0x00354000)
	libc.so.6 => /lib/libc.so.6 (0x003eb000)
	/export/build/gnu/glibc/build-i686-linux/elf/tst-tlsmod11.so (0x0027b000)
	/lib/ld-linux.so.2 (0x00917000)
[hjl@gnu-15 needed-1]$ gcc -nostdlib -nostartfiles -o
/export/build/gnu/glibc/build-i686-linux/elf/tst-tls12
-Wl,-dynamic-linker=/lib/ld-linux.so.2   -Wl,-z,combreloc -Wl,-z,relro
-Wl,--hash-style=both
/export/build/gnu/glibc/build-i686-linux/csu/crt1.o
/export/build/gnu/glibc/build-i686-linux/csu/crti.o `gcc
--print-file-name=crtbegin.o`
/export/build/gnu/glibc/build-i686-linux/elf/tst-tls12.o
/export/build/gnu/glibc/build-i686-linux/elf/tst-tlsmod12.so
-Wl,-rpath-link=/export/build/gnu/glibc/build-i686-linux:/export/build/gnu/glibc/build-i686-linux/math:/export/build/gnu/glibc/build-i686-linux/elf:/export/build/gnu/glibc/build-i686-linux/dlfcn:/export/build/gnu/glibc/build-i686-linux/nss:/export/build/gnu/glibc/build-i686-linux/nis:/export/build/gnu/glibc/build-i686-linux/rt:/export/build/gnu/glibc/build-i686-linux/resolv:/export/build/gnu/glibc/build-i686-linux/crypt:/export/build/gnu/glibc/build-i686-linux/nptl
/export/build/gnu/glibc/build-i686-linux/libc.so.6
/export/build/gnu/glibc/build-i686-linux/libc_nonshared.a -lgcc
-Wl,--as-needed -lgcc_s  -Wl,--no-as-needed -Wl,--as-needed
/export/build/gnu/glibc/build-i686-linux/elf/ld-linux.so.2
-Wl,--no-as-needed `gcc  --print-file-name=crtend.o`
/export/build/gnu/glibc/build-i686-linux/csu/crtn.o
/usr/local/bin/ld:
/export/build/gnu/glibc/build-i686-linux/elf/tst-tls12.o: undefined
reference to symbol 'a1'
/usr/local/bin/ld: note: 'a1' is defined in DSO
/export/build/gnu/glibc/build-i686-linux/elf/tst-tlsmod11.so so try
adding it to the linker command line
/export/build/gnu/glibc/build-i686-linux/elf/tst-tlsmod11.so: could
not read symbols: Invalid operation
collect2: ld returned 1 exit status
[hjl@gnu-15 needed-1]$

Linker is invoked via

 /usr/libexec/gcc/i686-redhat-linux/4.4.3/collect2 --no-add-needed
--eh-frame-hdr --build-id -m elf_i386 --hash-style=gnu -dynamic-linker
/lib/ld-linux.so.2 -o
/export/build/gnu/glibc/build-i686-linux/elf/tst-tls12
-L/usr/lib/gcc/i686-redhat-linux/4.4.3
-L/usr/lib/gcc/i686-redhat-linux/4.4.3
-L/usr/lib/gcc/i686-redhat-linux/4.4.3/../../..
-dynamic-linker=/lib/ld-linux.so.2 -z combreloc -z relro
--hash-style=both /export/build/gnu/glibc/build-i686-linux/csu/crt1.o
/export/build/gnu/glibc/build-i686-linux/csu/crti.o
/usr/lib/gcc/i686-redhat-linux/4.4.3/crtbegin.o
/export/build/gnu/glibc/build-i686-linux/elf/tst-tls12.o
/export/build/gnu/glibc/build-i686-linux/elf/tst-tlsmod12.so
-rpath-link=/export/build/gnu/glibc/build-i686-linux:/export/build/gnu/glibc/build-i686-linux/math:/export/build/gnu/glibc/build-i686-linux/elf:/export/build/gnu/glibc/build-i686-linux/dlfcn:/export/build/gnu/glibc/build-i686-linux/nss:/export/build/gnu/glibc/build-i686-linux/nis:/export/build/gnu/glibc/build-i686-linux/rt:/export/build/gnu/glibc/build-i686-linux/resolv:/export/build/gnu/glibc/build-i686-linux/crypt:/export/build/gnu/glibc/build-i686-linux/nptl
/export/build/gnu/glibc/build-i686-linux/libc.so.6
/export/build/gnu/glibc/build-i686-linux/libc_nonshared.a -lgcc
--as-needed -lgcc_s --no-as-needed --as-needed
/export/build/gnu/glibc/build-i686-linux/elf/ld-linux.so.2
--no-as-needed /usr/lib/gcc/i686-redhat-linux/4.4.3/crtend.o
/export/build/gnu/glibc/build-i686-linux/csu/crtn.o
/usr/local/bin/ld:
/export/build/gnu/glibc/build-i686-linux/elf/tst-tls12.o: undefined
reference to symbol 'a1'
/usr/local/bin/ld: note: 'a1' is defined in DSO
/export/build/gnu/glibc/build-i686-linux/elf/tst-tlsmod11.so so try
adding it to the linker command line
/export/build/gnu/glibc/build-i686-linux/elf/tst-tlsmod11.so: could
not read symbols: Invalid operation
collect2: ld returned 1 exit status
[hjl@gnu-15 needed-1]$

--no-add-needed is the first argument.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]