summaryrefslogtreecommitdiff
path: root/ld/emultempl/aix.em
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2007-03-07 07:52:09 +0000
committerNick Clifton <nickc@redhat.com>2007-03-07 07:52:09 +0000
commitf405559560b298e324c2a2eb90d2f96cd207b1ee (patch)
tree1d703e01b09a8ed9be86fbd9d5d6827c2ac6f517 /ld/emultempl/aix.em
parent7b3064952b763123646ecd2977f49044b6bb7432 (diff)
downloadbinutils-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.em54
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;
+ }
}
}