* elf/dl-lookup.c (_dl_lookup_symbol): Undefined symbol is no
authorRoland McGrath <roland@gnu.org>
Thu, 16 Nov 1995 02:37:06 +0000 (02:37 +0000)
committerRoland McGrath <roland@gnu.org>
Thu, 16 Nov 1995 02:37:06 +0000 (02:37 +0000)
error if weak.

* elf/Makefile (default-rpath): New variable.
(CPPFLAGS): Append -DDEFAULT_RPATH=....
* elf/dl-load.c (_dl_map_object): Use DEFAULT_RPATH instead of
hard-coded "/lib:/usr/lib".

ChangeLog
elf/Makefile
elf/dl-load.c
elf/dl-lookup.c

index 1261c47..656afec 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 Wed Nov 15 19:22:07 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>
 
+       * elf/dl-lookup.c (_dl_lookup_symbol): Undefined symbol is no
+       error if weak.
+
+       * elf/Makefile (default-rpath): New variable.
+       (CPPFLAGS): Append -DDEFAULT_RPATH=....
+       * elf/dl-load.c (_dl_map_object): Use DEFAULT_RPATH instead of
+       hard-coded "/lib:/usr/lib".
+
        * sysdeps/mach/hurd/dl-sysdep.c: Include _itoa.h from stdio-common
        instead of stdio.
        (_dl_sysdep_start): If passed user entry is zero and
index 08288f8..a37e95d 100644 (file)
@@ -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.
index b70ba55..126d6aa 100644 (file)
@@ -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
     {
index 62802dd..cb337d4 100644 (file)
@@ -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)];