aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/emultempl/aix.em54
2 files changed, 50 insertions, 10 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index ba7af36..01902c0 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2007-03-07 Nick Clifton <nickc@redhat.com>
+
+ PR ld/4023
+ * emultempl/aix.em (..._before_allocation): Strip sysroot prefix
+ from any paths being inserted into the output binary's DT_RPATH.
+
2007-03-02 Nathan Sidwell <nathan@codesourcery.com>
* emulparams/shelf_uclinux.sh: New. Missed in 2007-02-28 commit.
diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em
index a85f7d0..1763946 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;
+ }
}
}