Fix a problem with remapping textrel segments on nommu

Bernd Schmidt bernds at codesourcery.com
Thu May 26 16:28:02 UTC 2011


Alan Davis discovered a problem using shared libraries with textrel
symbols on nommu (C6X). He writes:

"I think I've found a bug in the dynamic loader's dynamic DSBT index
assignment. When I try to execute a program that has a textrel DSO, it
fails to load. The telltale line in the LD_DEBUG output is:

_dl_get_ready_to_run:779:       file='';  needed by './a.out'

The corresponding DT_NEEDED entry has 'libc.so.0', but here the filename
is empty. This is what is happening in _dl_elf_shared_library():

First, map all segments according to their permissions. Text gets
initially mapped read-only.

Then, parse the dynamic information. The dynamic table is in RW but some
of the tags may point to RO. For example, DT_NEEDED points to a string
in .dynstr which is in RO. These pointers get computed according to the
loadmap from the original mapping.

Then, in response to a DT_TEXTREL tag, the RO segment gets remapped,
thereby invaliding anything that points to it, in particular certain
dynamic tags such as DT_NEEDED.

I validated this by applying the following patch, which re-parses the
dynamic info after the remapping so as to re-compute any invalid
pointers. There are perhaps better solutions; perhaps split the tag
parsing into two passes, the first of which scans only for DT_TEXTREL
and then the rest can happen after remapping."


I've looked over the patch and it looks good to me. Ok to apply?


Bernd
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001-Correct-a-bug-when-remapping-textrel-segments-on-nom.patch
URL: <http://lists.busybox.net/pipermail/uclibc/attachments/20110526/50a40cca/attachment.ksh>


More information about the uClibc mailing list