IMHO this makes the code easier to read and should help with linker scripts.
This is strongly based on D16575. The main differences are
- We record a range of sections, not every section in a program header.
- ScanHeaders takes case of deciding what goes in every program header, including PT_GNU_RELRO
- We create dummy sections for the start of the file
With this, program header creation has 3 isolated stages:
- Map sections to program headers.
- Assign addresses to *sections*
- Looking at sections find the address and size of each program header.
extra 'm'