This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: enable_break() in solib-svr4.c


>>>>> "Kevin" == Kevin Buettner <kevinb@redhat.com> writes:

 Kevin> On Mon, 15 Aug 2005 16:20:59 -0400 Paul Koning
 Kevin> <pkoning@equallogic.com> wrote:

 >> 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).
 >> 
 >> 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.

 Kevin> I too would like to see your solution, hack or not.

 Kevin> Is this issue different than the ones already discussed as
 Kevin> part of the following thread?

 Kevin> http://sources.redhat.com/ml/gdb/2002-12/msg00266.html

No, it's the same issue, materializing in a second place.

The same conclusion applies as before: either NetBSD is wrong -- it
should use the bizarre and unintuitive meaning of "base address" that
appears to be intended by the document you quoted -- or NetBSD is
right, "base address" means "the address where the thing ended up"
(which is the intuitive definition) and GDB is wrong in several
places.

The reason I'm picking on the meaning of "base address" is that
"address" normally means a place, not a difference.  If people mean
difference, the normal term used is "offset" or "displacement" or
something like that.  So I find it hard to believe that "base address"
is meant to be a difference between two addresses.

It's not an issue that's commonly seen, because the vaddr in a shared
library is nearly always zero.  Nearly always, but not in MIPS/NetBSD,
which is why I ran into this.

I still have no further data from anyone more knowledgeable about
NetBSD as to whether this should be viewed as a NetBSD dynamic loader
bug.

	paul


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]