[parisc-linux] Re: Fix for hppa-linux ld.so with newer binutils

Ben Collins bcollins@debian.org
Sat, 20 Oct 2001 09:54:06 -0400


On Sat, Oct 20, 2001 at 05:09:07PM +0930, Alan Modra wrote:
> Newer binutils don't initialise .got entries for global syms, so the
> scheme used by sysdeps/hppa/dl-machine.h:elf_machine_dynamic to find
> the address of .dynamic no longer works.
> 
> ChangeLog
> 	* sysdeps/hppa/dl-machine.h (elf_machine_dynamic):  Make it a
> 	const function.  Do not use &_DYNAMIC as .got entries for global
> 	syms are no longer initialised.  Instead they rely on the reloc,
> 	which hasn't yet been applied.
> 	(elf_machine_load_address): Make it const.  Call
> 	elf_machine_dynamic as that function is called fropm rtld anyway.

Is this the fix for a newly built ld.so segfaulting? If so, there seems
to be something else wrong too. Newly built ld.so still segfaults,
here's the gdb:

Starting program: /usr/src/glibc/glibc-2.2.4/./hppa-linux/obj/elf/ld.so

Program received signal SIGSEGV, Segmentation fault.
0x41003298 in _dl_start_final (arg=0xbff00414, bootstrap_map_p=0xbff00508, start_time=1090519040)
    at rtld.c:233
233       _dl_rtld_map.l_addr = bootstrap_map_p->l_addr;
(gdb) print bootstrap_map_p
$1 = (struct link_map *) 0xbff00508
(gdb) print bootstrap_map_p->l_addr
$2 = 1090519040
(gdb) print &_dl_rtld_map
$3 = (struct link_map *) 0x41029270
(gdb) print _dl_rtld_map.l_addr
$4 = 0


This is with binutils 2.11.92.0.7 and gcc-3.0.2 snapshot from 9-22-2001
(latest Debian packages available). I can give you more info if you need
it.

-- 
 .----------=======-=-======-=========-----------=====------------=-=-----.
/                   Ben Collins    --    Debian GNU/Linux                  \
`  bcollins@debian.org  --  bcollins@openldap.org  --  bcollins@linux.com  '
 `---=========------=======-------------=-=-----=-===-======-------=--=---'