[ELF] OVERLAY: support optional start address and LMA
commit7c89b20e02ff079ec84fc54880dbc6c063d8c915
authorFangrui Song <i@maskray.me>
Tue, 9 Jan 2024 00:12:49 +0000 (8 16:12 -0800)
committerFangrui Song <i@maskray.me>
Tue, 9 Jan 2024 00:12:49 +0000 (8 16:12 -0800)
treeea1a13c3c23618538b6dcb487cc37d1e9213cba1
parent6958986f77bdbedd6ba571af7b546018f9108067
[ELF] OVERLAY: support optional start address and LMA

https://reviews.llvm.org/D44780 implemented rudimentary support for
OVERLAY. The start address and `AT(ldaddr)` in `OVERLAY [start] :
[NOCROSSREFS] [AT ( ldaddr )]` are not optional.

In addition, there are two issues:

* When the start address is `.`, subsequent sections don't share the
  address of the first overlay section.
* When the first overlay section is empty and discardable, `p_paddr` is
  incorrectly zero. This is because a discarded section has a zero
  address, causing `prev->getLMA() + prev->size` where `prev` refers to
  the first section to evaluate to zero.

This patch supports optional start address and LMA and fix the issues.
Close #77265

Pull Request: https://github.com/llvm/llvm-project/pull/77272
lld/ELF/ScriptParser.cpp
lld/test/ELF/linkerscript/overlay.test