--- binutils.orig/binutils/objcopy.c 2021-02-18 11:35:48.062479490 +0000 +++ binutils-2.30/binutils/objcopy.c 2021-02-18 11:36:52.207071148 +0000 @@ -2224,6 +2224,11 @@ merge_gnu_build_notes (bfd * ab goto done; } + if (start > end) + /* This can happen with PPC64LE binaries where empty notes are + encoded as start = end + 4. */ + start = end; + if (is_open_note (pnote)) { if (start) --- binutils.orig/binutils/objcopy.c 2021-02-22 10:36:15.710374328 +0000 +++ binutils-2.36.1/binutils/objcopy.c 2021-02-22 16:47:11.702344502 +0000 @@ -2246,23 +2246,8 @@ merge_gnu_build_notes (bfd * ab break; case 8: - if (! is_64bit (abfd)) - { - start = bfd_get_32 (abfd, pnote->note.descdata); - end = bfd_get_32 (abfd, pnote->note.descdata + 4); - } - else - { - start = bfd_get_64 (abfd, pnote->note.descdata); - /* FIXME: For version 1 and 2 notes we should try to - calculate the end address by finding a symbol whose - value is START, and then adding in its size. - - For now though, since v1 and v2 was not intended to - handle gaps, we chose an artificially large end - address. */ - end = (bfd_vma) -1; - } + start = bfd_get_32 (abfd, pnote->note.descdata); + end = bfd_get_32 (abfd, pnote->note.descdata + 4); break; case 16: