Don't merge notes when the relocs associated with them cannot be reliably deleted.

* objcopy.c (merge_gnu_build_notes): Disable merge if there are
	more internal relocs than external relocs.
This commit is contained in:
Nick Clifton 2017-05-02 16:54:53 +01:00
parent 73ec947d59
commit 1395c6ce47
2 changed files with 12 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2017-05-02 Nick Clifton <nickc@redhat.com>
* objcopy.c (merge_gnu_build_notes): Disable merge if there are
more internal relocs than external relocs.
2017-05-02 Maciej W. Rozycki <macro@imgtec.com>
* testsuite/binutils-all/mips/mips16-undecoded.d: Adjust the

View File

@ -2137,6 +2137,13 @@ merge_gnu_build_notes (bfd * abfd, asection * sec, bfd_size_type size, bfd_byte
relcount = 0;
}
/* A few targets (eg MIPS, SPARC) create multiple internal relocs to
represent a single external reloc. Unfortunately the current BFD
API does not handle deleting relocs in such situations very well
and so it is unsafe to proceed. */
if (relcount > sec->reloc_count)
goto done;
/* Eliminate the duplicates. */
new = new_contents = xmalloc (size);
for (pnote = pnotes, old = contents;