fix objcopy of PE images with .buildid section
authorJan Beulich <jbeulich@suse.com>
Fri, 21 Aug 2020 08:28:35 +0000 (10:28 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 21 Aug 2020 08:28:35 +0000 (10:28 +0200)
commit610ed3e08f13b3886fd7194fb7a248dee8724685
treef72f21054bc5b20cade2d9ebea3e3a1ca6eb318b
parent9cc9699833ccf94634b247da10a31c2ed60a9aad
fix objcopy of PE images with .buildid section

Xen Project embeds a build ID in its hypervisor binary (including its
EFI variant), living in a standalone section. This usually gets placed
right after .rodata, and due to the rounding done on the (file) size of
.rodata the two sections appear to overlap (as far as e.g.
find_section_by_vma() is concerned). With the first byte "found" in
.rodata, nothing guarantees that the entire debug dir fits in that
section, leading to apparently random failure of objcopy on such an
image.

Possible alternatives to the solution chosen:
- make find_section_by_vma() honor virt_size,
- correct the recording of sizes elsewhere (ibfd has size == virt_size,
  while obfd doesn't),
- fix the linker to avoid producing apparently overlapping sections.

While touching the condition around and the contents of the disgnostic,
pull it up ahead of the bfd_malloc_and_get_section() call: There's no
point first obtaining the section contents, in order to then fail.
bfd/ChangeLog
bfd/peXXigen.c