From: Alan Modra Date: Mon, 1 May 2017 04:41:27 +0000 (+0930) Subject: merge_gnu_build_notes reloc deletion X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ee7e95efb98186c09dc2c39b32263aa15b147bb0;p=binutils-gdb.git 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. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 9eea3a050b4..ae8defb4dd3 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2017-05-01 Alan Modra + + * objcopy.c (merge_gnu_build_notes): Correct code deleting + relocs. + 2017-04-28 Nick Clifton PR binutils/21439 diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 9bad4b70f2c..42c7775234d 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -2185,15 +2185,18 @@ merge_gnu_build_notes (bfd * abfd, asection * sec, bfd_size_type size, bfd_byte if (relcount > 0) { - arelent ** rel; + arelent **rel = relpp; - for (rel = relpp; rel < relpp + relcount; rel ++) - if ((* rel)->howto == NULL) + while (rel < relpp + relcount) + if ((*rel)->howto != NULL) + rel++; + else { /* Delete eliminated relocs. FIXME: There are better ways to do this. */ - memmove (rel, rel + 1, ((relcount - (rel - relpp)) - 1) * sizeof (* rel)); - relcount --; + memmove (rel, rel + 1, + ((relcount - (rel - relpp)) - 1) * sizeof (*rel)); + relcount--; } bfd_set_reloc (abfd, sec, relpp, relcount); }