diff options
author | Rich Felker <dalias@aerifal.cx> | 2014-11-23 16:17:57 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2014-11-23 16:17:57 -0500 |
commit | d8dc2b7c0289b12eeef4feff65e3c918111b0f55 (patch) | |
tree | 6e5d4233dc9b2d3e534581d45f0b2e71c2e30521 /src/ldso | |
parent | 9911754b198aaf1e2b0e98951766a9d83c277c67 (diff) | |
download | musl-d8dc2b7c0289b12eeef4feff65e3c918111b0f55.tar.gz musl-d8dc2b7c0289b12eeef4feff65e3c918111b0f55.tar.bz2 musl-d8dc2b7c0289b12eeef4feff65e3c918111b0f55.tar.xz musl-d8dc2b7c0289b12eeef4feff65e3c918111b0f55.zip |
adapt dynamic linker for new binutils versions that omit DT_RPATH
the new DT_RUNPATH semantics for search order are always used, and
since binutils had always set both DT_RPATH and DT_RUNPATH when the
latter was used, processing only DT_RPATH worked fine. however, recent
binutils has stopped generating DT_RPATH when DT_RUNPATH is used,
which broke support for this feature completely.
Diffstat (limited to 'src/ldso')
-rw-r--r-- | src/ldso/dynlink.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 1de430c6..00af8865 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -645,6 +645,8 @@ static void decode_dyn(struct dso *p) p->hashtab = (void *)(p->base + dyn[DT_HASH]); if (dyn[0]&(1<<DT_RPATH)) p->rpath_orig = (void *)(p->strings + dyn[DT_RPATH]); + if (dyn[0]&(1<<DT_RUNPATH)) + p->rpath_orig = (void *)(p->strings + dyn[DT_RUNPATH]); if (search_vec(p->dynv, dyn, DT_GNU_HASH)) p->ghashtab = (void *)(p->base + *dyn); if (search_vec(p->dynv, dyn, DT_VERSYM)) |