Re: Re: call_init in libc6 2.3.6.ds1-11
"Carlos O'Donell" <[email protected]>
| Newsgroups | gmane.linux.ports.hppa |
|---|---|
| Message-ID | <[email protected]> |
On 2/18/07, John David Anglin <[email protected]> wrote: > Segv case: > (gdb) x/16x $r20 > 0x4086221c <.LC2+84>: 0x00000003 0x40df252f 0x00000002 0x0000147c > 0x4086222c <.LC2+100>: 0x00000014 0x00000007 0x00000017 0x407397cc > 0x4086223c <.LC2+116>: 0x00000007 0x4072d0ac 0x00000008 0x0000c720 > 0x4086224c <.LC2+132>: 0x00000009 0x0000000c 0x6ffffffc 0x00010ec0 > > I think '3' in the preceeding location indicates the erronious value > is a PLTGOT value (i.e., we're looking at part of the relocated dynamic > section in /lib/libc.so.6). In dl-machine.h (elf_machine_runtime_setup), we look for the PLT stub marker e.g. sig = {{0x00,0xc0,0xff,0xee, 0xde,0xad,0xbe,0xef}}. When we find that marker we assume teh GOT is *right* against the end of the PLT. The PLTGOT entry is the *second* entry in the GOT e.g. 0x40df252f, which seems plausible. I still don't think the code is wrong... now if the PLT and GOT have > 0 space between themselves then we get this wrong. c.