* elflink.h (elf_link_add_object_symbols): Don't warn about
authorIan Lance Taylor <ian@airs.com>
Tue, 10 Oct 1995 05:30:17 +0000 (05:30 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 10 Oct 1995 05:30:17 +0000 (05:30 +0000)
changing the size or type if the old definition was weak.

bfd/ChangeLog
bfd/elflink.h

index 864a86c4c2349f03711f89c7f02f6eb5e41f714c..2b60d1c9da68d440d2adc70669dde9b94f8079c3 100644 (file)
@@ -1,3 +1,8 @@
+Tue Oct 10 01:28:29 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * elflink.h (elf_link_add_object_symbols): Don't warn about
+       changing the size or type if the old definition was weak.
+
 Mon Oct  9 11:24:08 1995  Ian Lance Taylor  <ian@cygnus.com>
 
        * coffcode.h (combined_entry_type): Add fix_line field.
index 1aaa17ed08e29b146d19cbc38a0940e42619f3ef..dc2da5ef3dce369cb243b1851c761f0eb016ac5c 100644 (file)
@@ -555,6 +555,7 @@ elf_link_add_object_symbols (abfd, info)
       const char *name;
       struct elf_link_hash_entry *h;
       boolean definition;
+      boolean wasweak;
       boolean new_weakdef;
 
       elf_swap_symbol_in (abfd, esym, &sym);
@@ -641,6 +642,7 @@ elf_link_add_object_symbols (abfd, info)
       else
        definition = true;
 
+      wasweak = false;
       if (info->hash->creator->flavour == bfd_target_elf_flavour)
        {
          /* We need to look up the symbol now in order to get some of
@@ -657,6 +659,10 @@ elf_link_add_object_symbols (abfd, info)
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
+         /* Remember whether this used to be a weak definition.  */
+         wasweak = (h->root.type == bfd_link_hash_defweak
+                    || h->root.type == bfd_link_hash_undefweak);
+
          /* If we are looking at a dynamic object, and this is a
             definition, we need to see if it has already been defined
             by some other object.  If it has, we want to use the
@@ -750,7 +756,7 @@ elf_link_add_object_symbols (abfd, info)
          if (sym.st_size != 0
              && (definition || h->size == 0))
            {
-             if (h->size != 0 && h->size != sym.st_size)
+             if (h->size != 0 && h->size != sym.st_size && ! wasweak)
                (*_bfd_error_handler)
                  ("Warning: size of symbol `%s' changed from %lu to %lu in %s",
                   name, (unsigned long) h->size, (unsigned long) sym.st_size,
@@ -762,7 +768,8 @@ elf_link_add_object_symbols (abfd, info)
              && (definition || h->type == STT_NOTYPE))
            {
              if (h->type != STT_NOTYPE
-                 && h->type != ELF_ST_TYPE (sym.st_info))
+                 && h->type != ELF_ST_TYPE (sym.st_info)
+                 && ! wasweak)
                (*_bfd_error_handler)
                  ("Warning: type of symbol `%s' changed from %d to %d in %s",
                   name, h->type, ELF_ST_TYPE (sym.st_info),