RE: [RFC][MIPS] What to do about DT_MIPS_RLD_MAP and PIE

"Maciej W. Rozycki" <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha,gmane.comp.gnu.binutils,gmane.comp.gdb.devel
Message-ID <[email protected]>
On Thu, 30 Oct 2014, Roland McGrath wrote:

> >  Alternatively, we could cook up a generic DT_GNU_RLD_MAP tag for 
> > platforms that want to opt in to a read-only dynamic section/segment and 
> > start using it with the MIPS target first.  I think I like the latter a 
> > bit better, any thoughts, anyone?
> 
> What's the specification of this tag's semantics?

 Here's what the 32-bit MIPS psABI[1] says about it:

"DT_MIPS_RLD_MAP
                This member is used by debugging.  It contains the
                address of a 32-bit word in the .data section which is
                supplied by the compilation environment.  The word's
                contents are not specified and programs using this value
                are not ABI - compliant."

In a 64-bit ELF file the word is 64-bit instead; the 64-bit MIPS ELF 
specification[2] mentions the tag, but does not document it further.

 The GNU toolchain does not really use a location in the `.data' section; 
instead the BFD linker creates a separate `.rld_map' section that spans 
only this piece of data, and points DT_MIPS_RLD_MAP at it.  The section is 
then mapped to a writable segment.

 Our `ld.so' then puts the address of its link map there just as it puts 
it directly into the DT_DEBUG tag if present instead.  The value of the 
DT_MIPS_RLD_MAP tag is intepreted as a final virtual memory address and 
therefore does not work for PIE executables though.

 For a new DT_GNU_RLD_MAP to work universally, both for traditional and 
PIE executables, I propose that the contents of this tag were not an 
address of, but a relative offset from the location of the tag to the 
location referred.  This will be straightforward to handle in GDB too.

 References:

[1] "SYSTEM V APPLICATION BINARY INTERFACE, MIPS RISC Processor 
    Supplement, 3rd Edition"
    http://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf

[2] "64-bit ELF Object File Specification, Draft Version 2.5"
    http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf

  Maciej
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.