[ELF] --oformat=binary: use LMA to compute file offsets
--oformat=binary is rare (used in a few places in FreeBSD, see `stand/i386/mbr/Makefile` `LDFLAGS_BIN`) The result should be identical to a normal output transformed by `objcopy -O binary`. The current implementation ignores addresses and lays out sections by respecting output section alignments. It can fail when an output section address is specified, e.g. `.rodata ALIGN(16) :` (PR33651). Fix PR33651 by respecting LMA. The code is similar to `tools/llvm-objcop/ELF/Object.cpp` BinaryWriter::finalize after D71035 and D79229. Unforunately for an output section without PT_LOAD, we assume its LMA is equal to its VMA. So the result is still incorrect when an output section LMA (`AT(...)`) is specified Also drop `alignTo(off, config->wordsize)`. GNU ld does not round up the file size. Differential Revision: https://reviews.llvm.org/D85086
Loading
Please sign in to comment