[llvm-objcopy] -O binary: do not align physical addresses
authorAlexey Karyakin <akaryaki@quicinc.com>
Tue, 20 Jun 2023 22:32:42 +0000 (15:32 -0700)
committerKrzysztof Parzyszek <kparzysz@quicinc.com>
Tue, 20 Jun 2023 22:45:33 +0000 (15:45 -0700)
commitc973123fdca7c32d2f7cbbf19883677c81e1edb0
tree397b9888c098657d5f77fafe7218bdb0f8f87e80
parentdf35fc13afa8324cd8de7f533e7568beb844e159
[llvm-objcopy] -O binary: do not align physical addresses

llvm-objcopy should not insert padding before a section if its
physical addresses is not aligned to section's alignment. This
behavior will match GNU objcopy and is important for embedded images
where the physical address is used to store the initial data image.
The loader typically will copy this image using a start symbol
created by the linker. If llvm-objcopy inserts padding before such a
section, the symbol address will not match the location in the image.

This commit refines the change in https://reviews.llvm.org/D128961
which intended to align sections which type changed from NOBITS and
their offset may not be aligned. However, it affected all sections.

Fix https://github.com/llvm/llvm-project/issues/62636

Reviewed By: jhenderson, MaskRay

Differential Revision: https://reviews.llvm.org/D150276
llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp
llvm/lib/ObjCopy/ELF/ELFObject.cpp
llvm/test/tools/llvm-objcopy/ELF/binary-paddr.test