enable_break() in solib-svr4.c
Mark Kettenis
mark.kettenis@xs4all.nl
Mon Aug 15 20:59:00 GMT 2005
> Date: Mon, 15 Aug 2005 16:20:59 -0400
> From: Paul Koning <pkoning@equallogic.com>
>
> The code in solib-svr4.c in several places seems to assume that the
> shared lib loader is linked to base address 0, loaded somewhere else,
> and relocated at runtime -- and ditto for other libraries.
>
> I've just been battling a bug in enable_break, where the load address
> of the shared lib loader is added to a symbol address from the
> solib_break_names[] list. That produces nonsense on NetBSD/MIPS,
> because ldd.elf_so is linked to 5ffe0000 so that address is added to
> the symbol address (5ffexxxx).
I seem to recall that we have had problems with this in the past, and
that MIPS is a bit of an odd one out in this respect. I also seem to
recall that NetBSD/MIPS changed some data structures in the dynamic
linker which doesn't make things easier for gdb. What version of
NetBSD are you using?
> As a hack solution I have it add the load address only if the symbol
> value is less than the load address. It seems to me the correct way
> to cure this is to compute the relocation delta -- the difference
> between the load address and the as-linked VMA of the start of the
> library (from the program headers). I did something like this in
> svr4_relocate_section_addresses.
It'd help if you actually attached your solution ;-).
Mark
More information about the Gdb
mailing list