mirror of
https://github.com/intel/llvm.git
synced 2026-01-31 16:29:50 +08:00
[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
This commit is contained in:
@@ -835,7 +835,7 @@ void LinkerScript::assignOffsets(OutputSection *sec) {
|
||||
ctx->lmaOffset = sec->lmaExpr().getValue() - dot;
|
||||
|
||||
if (MemoryRegion *mr = sec->lmaRegion)
|
||||
ctx->lmaOffset = mr->curPos - dot;
|
||||
ctx->lmaOffset = alignTo(mr->curPos, sec->alignment) - dot;
|
||||
|
||||
// If neither AT nor AT> is specified for an allocatable section, the linker
|
||||
// will set the LMA such that the difference between VMA and LMA for the
|
||||
|
||||
Reference in New Issue
Block a user