2003-09-18 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 18 Sep 2003 19:01:46 +0000 (19:01 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 18 Sep 2003 19:01:46 +0000 (19:01 +0000)
* elflink.c (_bfd_elf_merge_symbol): Allow type change if
the old symbol is undefined and the new symbol is defined.

bfd/ChangeLog
bfd/elflink.c

index a7ead7e54df1523399bec63f9d979d1bf76704e3..49cfb2b411ef8862c36f5450bc43023fdddaac10 100644 (file)
@@ -1,3 +1,8 @@
+2003-09-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elflink.c (_bfd_elf_merge_symbol): Allow type change if
+       the old symbol is undefined and the new symbol is defined.
+
 2003-09-18  Andreas Schwab  <schwab@suse.de>
 
        * simple.c (bfd_simple_get_relocated_section_contents): Use
index d53571d448a04ffef7eca426b02e6d597a0ce01c..58acc144bc937b2ee2571e0d29af312f3515724e 100644 (file)
@@ -962,12 +962,16 @@ _bfd_elf_merge_symbol (bfd *abfd,
   /* It's OK to change the type if either the existing symbol or the
      new symbol is weak unless it comes from a DT_NEEDED entry of
      a shared object, in which case, the DT_NEEDED entry may not be
-     required at the run time.  */
+     required at the run time. The type change is also OK if the
+     old symbol is undefined and the new symbol is defined.  */
 
   if ((! dt_needed && oldweakdef)
       || oldweakundef
       || newweakdef
-      || newweakundef)
+      || newweakundef
+      || (newdef
+         && (h->root.type == bfd_link_hash_undefined
+             || h->root.type == bfd_link_hash_undefweak)))
     *type_change_ok = TRUE;
 
   /* It's OK to change the size if either the existing symbol or the