From 057cac083006e9c5e43e5f5ce7ed18730f499af2 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 7 Mar 2007 07:52:09 +0000 Subject: [PATCH] PR ld/4023 * emultempl/aix.em (..._before_allocation): Strip sysroot prefix from any paths being inserted into the output binary's DT_RPATH. --- ld/ChangeLog | 6 +++++ ld/emultempl/aix.em | 54 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index ba7af36f700..01902c01820 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2007-03-07 Nick Clifton + + 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 * emulparams/shelf_uclinux.sh: New. Missed in 2007-02-28 commit. diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index a85f7d0c057..17639464b82 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; + } } } -- 2.30.2