diff options
author | Nick Clifton <nickc@redhat.com> | 2007-03-07 07:52:09 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2007-03-07 07:52:09 +0000 |
commit | f405559560b298e324c2a2eb90d2f96cd207b1ee (patch) | |
tree | 1d703e01b09a8ed9be86fbd9d5d6827c2ac6f517 /ld/emultempl/aix.em | |
parent | 7b3064952b763123646ecd2977f49044b6bb7432 (diff) | |
download | binutils-redhat-f405559560b298e324c2a2eb90d2f96cd207b1ee.tar.gz |
PR ld/4023
* emultempl/aix.em (..._before_allocation): Strip sysroot prefix
from any paths being inserted into the output binary's DT_RPATH.
Diffstat (limited to 'ld/emultempl/aix.em')
-rw-r--r-- | ld/emultempl/aix.em | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index a85f7d0c05..17639464b8 100644 --- a/ld/emultempl/aix.em +++ b/ld/emultempl/aix.em @@ -651,18 +651,52 @@ gld${EMULATION_NAME}_before_allocation (void) size_t len; search_dirs_type *search; - len = strlen (search_head->name); - libpath = xmalloc (len + 1); - strcpy (libpath, search_head->name); - for (search = search_head->next; search != NULL; search = search->next) + /* PR ld/4023: Strip sysroot prefix from any paths + being inserted into the output binary's DT_RPATH. */ + if (ld_sysroot != NULL + && * ld_sysroot != 0) { - size_t nlen; + const char * name = search_head->name; + size_t ld_sysroot_len = strlen (ld_sysroot); - nlen = strlen (search->name); - libpath = xrealloc (libpath, len + nlen + 2); - libpath[len] = ':'; - strcpy (libpath + len + 1, search->name); - len += nlen + 1; + if (strncmp (name, ld_sysroot, ld_sysroot_len) == 0) + name += ld_sysroot_len; + + len = strlen (name); + libpath = xmalloc (len + 1); + strcpy (libpath, name); + + for (search = search_head->next; search != NULL; search = search->next) + { + size_t nlen; + + name = search->name; + if (strncmp (name, ld_sysroot, ld_sysroot_len) == 0) + name += ld_sysroot_len; + + nlen = strlen (name); + libpath = xrealloc (libpath, len + nlen + 2); + libpath[len] = ':'; + strcpy (libpath + len + 1, name); + len += nlen + 1; + } + } + else + { + len = strlen (search_head->name); + libpath = xmalloc (len + 1); + strcpy (libpath, search_head->name); + + for (search = search_head->next; search != NULL; search = search->next) + { + size_t nlen; + + nlen = strlen (search->name); + libpath = xrealloc (libpath, len + nlen + 2); + libpath[len] = ':'; + strcpy (libpath + len + 1, search->name); + len += nlen + 1; + } } } |