[Patch] ldd failures on multilb architectures
Hannes Reinecke
hare@suse.de
Fri Nov 14 10:54:00 GMT 2003
Jakub Jelinek wrote:
> On Fri, Nov 14, 2003 at 10:48:32AM +0100, Hannes Reinecke wrote:
>
>>Hi all,
>>
>>/usr/bin/ldd has some slight problems with multilib architectures.
>>First, it tries to execute all eligible 'ld.so', but does not redirect
>>the output to /dev/null, so we always get the nasty 'Cannot execute
>>binary file' error message.
>
>
> Who issues this error message? Works just fine for me in current CVS
> (and several months old glibc too).
> Say on s390x (looking at your signature):
> echo 'int main () { return 0; }' > test.c
> for i in -m31 -m64; do for j in "" -static; do gcc $i $j -o test test.c; ldd ./test; echo $?; done; done
> libc.so.6 => /lib/libc.so.6 (0x4002d000)
> /lib/ld.so.1 => /lib/ld.so.1 (0x40000000)
> 0
> not a dynamic executable
> 1
> libc.so.6 => /lib64/tls/libc.so.6 (0x0000010000031000)
> /lib64/ld64.so.1 => /lib64/ld64.so.1 (0x0000010000000000)
> 0
> not a dynamic executable
> 1
>
> which is the expected output.
>
It says here (disregarding 31bit, since the installation appears to be
broken on my machine):
hare> gcc -m64 -o test test.c
hare> ldd ./test
/usr/bin/ldd: line 1: /lib/ld.so.1: cannot execute binary file
libc.so.6 => /lib64/libc.so.6 (0x0000010000025000)
/lib/ld64.so.1 => /lib/ld64.so.1 (0x0000010000000000)
hare> gcc -m64 -static -o test test.c
hare> ldd ./test
/usr/bin/ldd: line 1: /lib/ld.so.1: cannot execute binary file
/usr/bin/ldd: line 1: /lib/ld.so.1: cannot execute binary file
ldd: /lib/ld.so.1 exited with unknown exit code (126)
hare> gcc --version
gcc (GCC) 3.3.2 (SuSE Linux)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
hare> ldd --version
ldd (GNU libc) 2.3.2
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
>
>>Second, 'ld.so' might return 1 in case it found a statically linked
>>binary. Since ldd only checks for return codes 0 or 2, it fails horribly.
>
>
> And this second change is clearly broken.
> ld.so will exit with 1 if any error happens, e.g. incompatible object
> or statically linked object. If you break for 1, you just killed multi-lib
> ldd.
>
Hmm. See output above. I'd be very surprised if this is the expected
output. I've attached the ldd script for reference.
Cheers,
Hannes
--
Dr. Hannes Reinecke hare@suse.de
SuSE Linux AG S390 & zSeries
Deutschherrnstr. 15-19 +49 911 74053 688
90429 Nürnberg http://www.suse.de
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: ldd
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20031114/9779289a/attachment.ksh>
More information about the Libc-alpha
mailing list