This is the mail archive of the gdb-patches@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: cope with varying prelink base addresses


On Thu, Feb 09, 2006 at 10:08:47PM -0200, Alexandre Oliva wrote:
> > And MIPS targets
> > have a history of doing things differently even for the same OS.
> > Basically the two interpretations are:
> 
> > a. l_addr is the absolute address at which the shared object is loaded.
> 
> > b. l_addr is the relative address used to relocate the shared object.
> 
> Actually, both interpretations are the same.  It looks one or the
> other because of the base addresses that appear in the program
> headers.  In general, dynamic libraries start at address zero, but
> when they're prelinked, they don't, and then l_addr may remain as zero
> to reflect that no additional offset was applied.

No, Alexandre, Mark is talking about something that we actually
experienced.  The interpretations are _not_ the same when the base
address in the program header is non-zero.  There was at least
one dynamic loader which set l_addr to the absolute address
the segment was loaded to, even though the program header's l_addr
was non-zero.

I believe that this was, at varying times, MIPS Linux and MIPS NetBSD.
At least one of the loaders was later changed to avoid the problem, and
I'm not sure what happened to the other.  The linker was also updated.

-- 
Daniel Jacobowitz
CodeSourcery


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