* elflink.h (elf_adjust_dynamic_symbol): If a common symbol got
authorIan Lance Taylor <ian@airs.com>
Mon, 1 Apr 1996 17:42:59 +0000 (17:42 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 1 Apr 1996 17:42:59 +0000 (17:42 +0000)
defined in a regular file, set ELF_LINK_HASH_DEF_REGULAR.

bfd/ChangeLog
bfd/elflink.h

index 21fa35056297fcce3d762489665dd043dffadb4c..317e22115d3ecc99332649f265355abfabb73747 100644 (file)
@@ -1,3 +1,8 @@
+Mon Apr  1 12:35:36 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * elflink.h (elf_adjust_dynamic_symbol): If a common symbol got
+       defined in a regular file, set ELF_LINK_HASH_DEF_REGULAR.
+
 Sun Mar 31 01:58:41 1996  steve chamberlain  <sac@slash.cygnus.com>
 
        * peicode.h (coff_swap_aouthdr_out): Delete test for .junk.
index a27f930e4d38a12c49637c1ad94aacbc5d5169c7..32da750eacb3edfaef07871f79ae555bdf4484b8 100644 (file)
@@ -1554,6 +1554,18 @@ elf_adjust_dynamic_symbol (h, data)
        }
     }
 
+  /* If this is a final link, and the symbol was defined as a common
+     symbol in a regular object file, and there was no definition in
+     any dynamic object, then the linker will have allocated space for
+     the symbol in a common section but the ELF_LINK_HASH_DEF_REGULAR
+     flag will not have been set.  */
+  if (h->root.type == bfd_link_hash_defined
+      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
+      && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
+      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
+      && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
+    h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
+
   /* If -Bsymbolic was used (which means to bind references to global
      symbols to the definition within the shared object), and this
      symbol was defined in a regular object, then it actually doesn't