[parisc-linux] segfaults with new binutils
Alan Modra
alan@linuxcare.com.au
Sun, 11 Mar 2001 13:55:45 +1100 (EST)
On Sat, 10 Mar 2001, Randolph Chung wrote:
> > Running any of the binaries in the binutils deb gives an immediate
> > segfault. This includes things like as, ld, etc... obviously this makes
> > it rather difficult to compile anything.. :-(
>
> ok, one more bit of info; removing the --enable-shared from the binutils
> build line gives binaries that work, so i'm guessing there's some
> problems with the shared libs (libopcodes and libbfd) ?
Very likely. I'm downloading at the moment to have a look at
it. You can check yourself by disassembling the shared libs.
"objdump -j .init -dr libbfd.so" should give you something like the
following:
0000000000011a0c <_init-0x1c>:
11a0c: e8 20 00 00 b,l 11a14 <_init-0x14>,r1
11a10: 28 2a 50 00 addil 54800,r1,%r1
11a14: e0 20 22 02 be,n 100(sr4,r1)
11a18: 2a 7f ff ff addil -800,r19,%r1
11a1c: 48 35 06 88 ldw 344(r1),r21
11a20: ea a0 c0 00 bv r0(r21)
11a24: 48 33 06 90 ldw 348(r1),r19
0000000000011a28 <_init>:
11a28: 6b c2 3f d9 stw rp,-14(sp)
11a2c: 6f c4 00 80 stw,ma r4,40(sp)
11a30: 6b d3 3f c1 stw r19,-20(sp)
11a34: e8 5f 1f bd b,l 11a18 <_init-0x10>,rp
11a38: 08 13 02 44 copy r19,r4
11a3c: 08 04 02 53 copy r4,r19
11a40: e8 40 02 a0 b,l 11b98 <frame_dummy>,rp
11a44: 08 00 02 40 nop
11a48: 08 04 02 53 copy r4,r19
11a4c: e8 5f 1f 75 b,l 11a0c <_init-0x1c>,rp
11a50: 08 00 02 40 nop
11a54: 08 04 02 53 copy r4,r19
11a58: 4b c2 3f 59 ldw -54(sp),rp
11a5c: 08 04 02 53 copy r4,r19
11a60: e8 40 c0 00 bv r0(rp)
0000000000011a64 <_end_init>:
11a64: 4f c4 3f 81 ldw,mb -40(sp),r4
If you see a mix of r4 and r3 being used to save/restore r19, then that's
the direct cause of your crashes. The indirect cause is a bad crti.o and
crtn.o built from glibc sources checked out from pehc between 2001/01/16
and 2001/02/05.
You've already started down the path to recovery:
build and install binutils with --disable-shared,
build and install gcc with --enable-languages=c --disable-shared,
build and install glibc
You can then build tools with --enable-shared if you like.
Alan Modra
--
Linuxcare