llvm-project/lld/test/ELF/oformat-binary-ttext.s
Fangrui Song acb66b9111 [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
2020-08-05 09:10:01 -07:00

18 lines
432 B
ArmAsm

# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
# RUN: ld.lld -N -Ttext 0x100 -o %t.out %t --oformat binary
# RUN: od -t x1 -v %t.out | FileCheck %s --check-prefix=BIN
# BIN: 0000000 90
# BIN-NEXT: 0000001
## The same but without OMAGIC.
# RUN: ld.lld -Ttext 0x100 -o %t.out %t --oformat binary
# RUN: od -t x1 -v %t.out | FileCheck %s --check-prefix=BIN
.text
.globl _start
_start:
nop