2
0
mirror of https://sourceware.org/git/binutils-gdb.git synced 2025-02-23 13:21:43 +08:00

merge_gnu_build_notes reloc deletion

If moving relocs, the next reloc to look at is at the same location.

	* objcopy.c (merge_gnu_build_notes): Correct code deleting
	relocs.
This commit is contained in:
Alan Modra 2017-05-01 14:11:27 +09:30
parent 6224c85813
commit ee7e95efb9
2 changed files with 13 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2017-05-01 Alan Modra <amodra@gmail.com>
* objcopy.c (merge_gnu_build_notes): Correct code deleting
relocs.
2017-04-28 Nick Clifton <nickc@redhat.com> 2017-04-28 Nick Clifton <nickc@redhat.com>
PR binutils/21439 PR binutils/21439

View File

@ -2185,15 +2185,18 @@ merge_gnu_build_notes (bfd * abfd, asection * sec, bfd_size_type size, bfd_byte
if (relcount > 0) if (relcount > 0)
{ {
arelent ** rel; arelent **rel = relpp;
for (rel = relpp; rel < relpp + relcount; rel ++) while (rel < relpp + relcount)
if ((* rel)->howto == NULL) if ((*rel)->howto != NULL)
rel++;
else
{ {
/* Delete eliminated relocs. /* Delete eliminated relocs.
FIXME: There are better ways to do this. */ FIXME: There are better ways to do this. */
memmove (rel, rel + 1, ((relcount - (rel - relpp)) - 1) * sizeof (* rel)); memmove (rel, rel + 1,
relcount --; ((relcount - (rel - relpp)) - 1) * sizeof (*rel));
relcount--;
} }
bfd_set_reloc (abfd, sec, relpp, relcount); bfd_set_reloc (abfd, sec, relpp, relcount);
} }