This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PR15382 mips64 reloc discard
- From: Alan Modra <amodra at gmail dot com>
- To: binutils at sourceware dot org
- Date: Tue, 23 Apr 2013 00:33:09 +0930
- Subject: PR15382 mips64 reloc discard
The MIPS64 backend creates three internal relocs for each external
reloc. Thus when deleting a reloc we need to shuffle the internal
reloc array by three, but no factor of three applies to the external
sh_size or reloc_count.
PR ld/15382
* elf-bfd.h (RELOC_AGAINST_DISCARDED_SECTION): Don't multiply
sh_size or reloc_count adjustment by count.
Index: bfd/elf-bfd.h
===================================================================
RCS file: /cvs/src/src/bfd/elf-bfd.h,v
retrieving revision 1.369
diff -u -p -r1.369 elf-bfd.h
--- bfd/elf-bfd.h 27 Mar 2013 13:37:50 -0000 1.369
+++ bfd/elf-bfd.h 22 Apr 2013 14:33:16 -0000
@@ -2497,16 +2497,16 @@ extern asection _bfd_elf_large_com_secti
rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \
\
/* Avoid empty output section. */ \
- if (rel_hdr->sh_size > count * rel_hdr->sh_entsize) \
+ if (rel_hdr->sh_size > rel_hdr->sh_entsize) \
{ \
- rel_hdr->sh_size -= count * rel_hdr->sh_entsize; \
+ rel_hdr->sh_size -= rel_hdr->sh_entsize; \
rel_hdr = _bfd_elf_single_rel_hdr (input_section); \
- rel_hdr->sh_size -= count * rel_hdr->sh_entsize; \
+ rel_hdr->sh_size -= rel_hdr->sh_entsize; \
\
memmove (rel, rel + count, \
(relend - rel - count) * sizeof (*rel)); \
\
- input_section->reloc_count -= count; \
+ input_section->reloc_count--; \
relend -= count; \
rel--; \
continue; \
--
Alan Modra
Australia Development Lab, IBM