Index: bfd/ChangeLog from Alexandre Oliva * 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. Index: bfd/elf64-mips.c =================================================================== RCS file: /cvs/src/src/bfd/elf64-mips.c,v retrieving revision 1.38 diff -u -p -r1.38 elf64-mips.c --- bfd/elf64-mips.c 18 Sep 2002 17:28:37 -0000 1.38 +++ bfd/elf64-mips.c 6 Nov 2002 03:10:48 -0000 @@ -2073,7 +2073,7 @@ mips_elf64_slurp_one_reloc_table (abfd, 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, 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->reloc_count += relent - relents; + asect->reloc_count += (relent - relents) / 3; if (allocated != NULL) free (allocated);