1999-08-09 Geoff Keating <geoffk@cygnus.com>
authorIan Lance Taylor <ian@airs.com>
Mon, 9 Aug 1999 05:42:31 +0000 (05:42 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 9 Aug 1999 05:42:31 +0000 (05:42 +0000)
* elflink.h (elf_link_output_extsym): Don't output a weak
reference to an undefined symbol just because it was defined weak
in a shared object.

bfd/ChangeLog
bfd/elflink.h

index 46e8c26f7cdca474f8c9c577cb8b586b2d48a224..7b81796778b53a9dbd354be5470599315bb6e9ba 100644 (file)
@@ -1,3 +1,9 @@
+1999-08-09  Geoff Keating  <geoffk@cygnus.com>
+
+       * elflink.h (elf_link_output_extsym): Don't output a weak
+       reference to an undefined symbol just because it was defined weak
+       in a shared object.
+
 1999-08-09  Eli Zaretskii  <eliz@is.elta.co.il>
 
        * coffgen.c (coff_find_nearest_line): When looking for file, use
index 7b3a41725cec720c7d4be92508cbb96f8b8bf3f5..60de241ad09f9e365d9d012322a57200050c9feb 100644 (file)
@@ -4840,14 +4840,23 @@ elf_link_output_extsym (h, data)
 
   /* If we are marking the symbol as undefined, and there are no
      non-weak references to this symbol from a regular object, then
-     mark the symbol as weak undefined.  We can't do this earlier,
+     mark the symbol as weak undefined; if there are non-weak
+     references, mark the symbol as strong.  We can't do this earlier,
      because it might not be marked as undefined until the
      finish_dynamic_symbol routine gets through with it.  */
   if (sym.st_shndx == SHN_UNDEF
-      && sym.st_info == ELF_ST_INFO (STB_GLOBAL, h->type)
       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
-      && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) == 0)
-    sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
+      && (ELF_ST_BIND(sym.st_info) == STB_GLOBAL
+         || ELF_ST_BIND(sym.st_info) == STB_WEAK))
+    {
+      int bindtype;
+
+      if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) != 0)
+       bindtype = STB_GLOBAL;
+      else
+       bindtype = STB_WEAK;
+      sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info));
+    }
 
   /* If this symbol should be put in the .dynsym section, then put it
      there now.  We have already know the symbol index.  We also fill