aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/emultempl/elf32.em50
2 files changed, 20 insertions, 36 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 0335d58..245b262 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2000-08-23 H.J. Lu <hjl@gnu.org>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Get
+ the current runpath list from bfd_elf_get_runpath_list ()
+ before search.
+
2000-08-22 H.J. Lu <hjl@gnu.org>
* emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Search
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index dee6e8c..9698e9f 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -570,34 +570,11 @@ static void
gld${EMULATION_NAME}_after_open ()
{
struct bfd_link_needed_list *needed, *l;
-EOF
-if [ "x${host}" = "x${target}" ] ; then
- case " ${EMULATION_LIBPATH} " in
- *" ${EMULATION_NAME} "*)
-cat >>e${EMULATION_NAME}.c <<EOF
- struct bfd_link_needed_list *run_path;
-EOF
- ;;
- esac
-fi
-cat >>e${EMULATION_NAME}.c <<EOF
/* We only need to worry about this when doing a final link. */
if (link_info.relocateable || link_info.shared)
return;
-EOF
-if [ "x${host}" = "x${target}" ] ; then
- case " ${EMULATION_LIBPATH} " in
- *" ${EMULATION_NAME} "*)
-cat >>e${EMULATION_NAME}.c <<EOF
- run_path = bfd_elf_get_runpath_list (output_bfd, &link_info);
-EOF
- ;;
- esac
-fi
-cat >>e${EMULATION_NAME}.c <<EOF
-
/* Get the list of files which appear in DT_NEEDED entries in
dynamic objects included in the link (often there will be none).
For each such file, we want to track down the corresponding
@@ -612,18 +589,6 @@ cat >>e${EMULATION_NAME}.c <<EOF
{
struct bfd_link_needed_list *ll;
int force;
-EOF
-if [ "x${host}" = "x${target}" ] ; then
- case " ${EMULATION_LIBPATH} " in
- *" ${EMULATION_NAME} "*)
-cat >>e${EMULATION_NAME}.c <<EOF
- struct bfd_link_needed_list *rp;
- int found;
-EOF
- ;;
- esac
-fi
-cat >>e${EMULATION_NAME}.c <<EOF
/* If we've already seen this file, skip it. */
for (ll = needed; ll != l; ll = ll->next)
@@ -658,6 +623,18 @@ cat >>e${EMULATION_NAME}.c <<EOF
const char *lib_path;
size_t len;
search_dirs_type *search;
+EOF
+if [ "x${host}" = "x${target}" ] ; then
+ case " ${EMULATION_LIBPATH} " in
+ *" ${EMULATION_NAME} "*)
+cat >>e${EMULATION_NAME}.c <<EOF
+ struct bfd_link_needed_list *rp;
+ int found;
+EOF
+ ;;
+ esac
+fi
+cat >>e${EMULATION_NAME}.c <<EOF
if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link,
l->name, force))
@@ -683,7 +660,8 @@ cat >>e${EMULATION_NAME}.c <<EOF
break;
found = 0;
- for (rp = run_path; !found && rp != NULL; rp = rp->next)
+ rp = bfd_elf_get_runpath_list (output_bfd, &link_info);
+ for (; !found && rp != NULL; rp = rp->next)
{
found = (rp->by == l->by
&& gld${EMULATION_NAME}_search_needed (rp->name,