OSDN Git Service

* elf64-mips.c (mips_elf64_slurp_one_reloc_table): Generate
authorAlexandre Oliva <aoliva@redhat.com>
Wed, 6 Nov 2002 21:56:05 +0000 (21:56 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Wed, 6 Nov 2002 21:56:05 +0000 (21:56 +0000)
exactly three internal relocs per external reloc.  Set reloc_count
to the external reloc count.

bfd/ChangeLog
bfd/elf64-mips.c

index 187c611..d905588 100644 (file)
@@ -1,3 +1,9 @@
+2002-11-06  Alexandre Oliva  <aoliva@redhat.com>
+
+       * elf64-mips.c (mips_elf64_slurp_one_reloc_table): Generate
+       exactly three internal relocs per external reloc.  Set reloc_count
+       to the external reloc count.
+
 2002-11-06  Klee Dienes  <kdienes@apple.com>
 
          * coff-stgo32.c (stub_bytes): Mark as const.
index bf98c91..f06d065 100644 (file)
@@ -2073,7 +2073,7 @@ mips_elf64_slurp_one_reloc_table (abfd, asect, symbols, rel_hdr)
          rela.r_addend = 0;
        }
 
-      /* Each entry represents up to three actual relocations.  */
+      /* Each entry represents exactly three actual relocations.  */
 
       used_sym = false;
       used_ssym = false;
@@ -2096,27 +2096,6 @@ mips_elf64_slurp_one_reloc_table (abfd, asect, symbols, rel_hdr)
              break;
            }
 
-         if (type == R_MIPS_NONE)
-           {
-             /* There are no more relocations in this entry.  If this
-                 is the first entry, we need to generate a dummy
-                 relocation so that the generic linker knows that
-                 there has been a break in the sequence of relocations
-                 applying to a particular address.  */
-             if (ir == 0)
-               {
-                 relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-                 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
-                   relent->address = rela.r_offset;
-                 else
-                   relent->address = rela.r_offset - asect->vma;
-                 relent->addend = 0;
-                 relent->howto = &howto_table[(int) R_MIPS_NONE];
-                 ++relent;
-               }
-             break;
-           }
-
          /* Some types require symbols, whereas some do not.  */
          switch (type)
            {
@@ -2194,7 +2173,7 @@ mips_elf64_slurp_one_reloc_table (abfd, asect, symbols, rel_hdr)
        }
     }
 
-  asect->reloc_count += relent - relents;
+  asect->reloc_count += (relent - relents) / 3;
 
   if (allocated != NULL)
     free (allocated);