[ELF] Respect output section alignment for AT> (non-null lmaRegion)
authorFangrui Song <maskray@google.com>
Sat, 8 Feb 2020 19:07:03 +0000 (11:07 -0800)
committerFangrui Song <maskray@google.com>
Wed, 12 Feb 2020 16:19:42 +0000 (08:19 -0800)
commite21b9ca751c525f5927ad313482be9a9c9e4dc9d
tree6482a6dfd1afdf8377bd9db8121001f59df9090f
parent60a8a504f16dbbc5f2a6887ecb668ef4cb834949
[ELF] Respect output section alignment for AT> (non-null lmaRegion)

When lmaRegion is non-null, respect `sec->alignment`
This rule is analogous to `switchTo(sec)` which advances sh_addr (VMA).

This fixes the p_paddr misalignment issue as reported by
https://android-review.googlesource.com/c/trusty/external/trusted-firmware-a/+/1230058

Note, `sec->alignment` is the maximum of ALIGN and input section alignments. We may overalign LMA than GNU ld.

linkerscript/align-lma.s has a FIXME that demonstrates another bug:
`.bss ... >RAM` should be placed in a different PT_LOAD (GNU ld
behavior) because its lmaRegion (nullptr) is different from the previous
section's lmaRegion (ROM).

Reviewed By: psmith

Differential Revision: https://reviews.llvm.org/D74286
lld/ELF/LinkerScript.cpp
lld/test/ELF/linkerscript/lma-align.test [new file with mode: 0644]