2001-08-27 H.J. Lu <hjl@gnu.org>
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 27 Aug 2001 15:40:38 +0000 (15:40 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 27 Aug 2001 15:40:38 +0000 (15:40 +0000)
* elf32-mips.c (mips_elf_create_dynamic_relocation): Add more
sanity check.
(mips_elf_calculate_relocation): Create dynamic relocation for
symbols with weak definition or the ELF_LINK_HASH_DEF_REGULAR
bit is not set.

bfd/ChangeLog
bfd/elf32-mips.c

index 7df8ea2f07ed0b0f5f55f154884edd50096b1e61..4fb59bd93c1a97f0afefecc3af873626af4dd96a 100644 (file)
@@ -1,3 +1,11 @@
+2001-08-27  H.J. Lu  <hjl@gnu.org>
+
+       * elf32-mips.c (mips_elf_create_dynamic_relocation): Add more
+       sanity check.
+       (mips_elf_calculate_relocation): Create dynamic relocation for
+       symbols with weak definition or the ELF_LINK_HASH_DEF_REGULAR
+       bit is not set.
+
 2001-08-27  H.J. Lu  <hjl@gnu.org>
 
        * elf32-mips.c (_bfd_mips_elf_hide_symbol): Add prototype.
index cc2f00659d05c07d29417219b1073a26a347c1b4..1f6ecef2d600f6e1a453a7c1282ae7e5f4481e3b 100644 (file)
@@ -5830,6 +5830,8 @@ mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
                               MIPS_ELF_REL_DYN_SECTION_NAME (output_bfd));
   BFD_ASSERT (sreloc != NULL);
   BFD_ASSERT (sreloc->contents != NULL);
+  BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
+             < sreloc->_raw_size);
 
   skip = false;
 
@@ -6330,8 +6332,9 @@ mips_elf_calculate_relocation (abfd,
       if ((info->shared
           || (elf_hash_table (info)->dynamic_sections_created
               && h != NULL
-              && ((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC)
-                  != 0)))
+              && (h->root.type == bfd_link_hash_defweak
+                  || (h->root.elf_link_hash_flags
+                      & ELF_LINK_HASH_DEF_REGULAR) == 0)))
          && (input_section->flags & SEC_ALLOC) != 0)
        {
          /* If we're creating a shared library, or this relocation is