aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
Diffstat (limited to 'elf')
-rw-r--r--elf/Makefile10
-rw-r--r--elf/dl-load.c2
-rw-r--r--elf/dl-lookup.c4
3 files changed, 13 insertions, 3 deletions
diff --git a/elf/Makefile b/elf/Makefile
index 08288f8..a37e95d 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -50,6 +50,16 @@ endif
include ../Rules
+# Choose the default search path for the dynamic linker based on
+# where we will install libraries.
+ifneq ($(libdir),$(slibdir))
+default-rpath = $(slibdir):$(libdir)
+else
+default-rpath = $(libdir)
+endif
+CPPFLAGS += -DDEFAULT_RPATH='"$(default-rpath)"'
+
+
# Link together the dynamic linker into a single relocatable object.
# We use this to produce both the ABI-compliant and Linux-compatible
# dynamic linker shared objects below.
diff --git a/elf/dl-load.c b/elf/dl-load.c
index b70ba55..126d6aa 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -139,7 +139,7 @@ _dl_map_object (struct link_map *loader, const char *name)
if (fd == -1 && ! _dl_secure)
trypath (getenv ("LD_LIBRARY_PATH"));
if (fd == -1)
- trypath ("/lib:/usr/lib");
+ trypath (DEFAULT_RPATH);
}
else
{
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 62802dd..cb337d4 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -22,7 +22,7 @@ Cambridge, MA 02139, USA. */
#include <link.h>
#include <assert.h>
-/* Search loaded objects' symbol tables for a definition of
+/* Search loaded objects' symbol tables for a definition of
the symbol UNDEF_NAME. If NOSELF is nonzero, then *REF
cannot satisfy the reference itself; some different binding
must be found. */
@@ -100,7 +100,7 @@ _dl_lookup_symbol (const char *undef_name, const Elf32_Sym **ref,
}
}
- if (weak_value.s == NULL)
+ if (weak_value.s == NULL && ELF32_ST_BIND ((*ref)->st_info) != STB_WEAK)
{
const char msg[] = "undefined symbol: ";
char buf[sizeof msg + strlen (undef_name)];