Remove doesSectionRequireSymbols.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 30 Dec 2014 13:13:27 +0000 (13:13 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 30 Dec 2014 13:13:27 +0000 (13:13 +0000)
commit65300b95e6403879337799b97ab4399e65b431cc
tree00e0971c7d3c88236ba85d40953661803e35b773
parent96341cbb3654eaa8f98415f6d37cb26016ee09d4
Remove doesSectionRequireSymbols.

In an assembly expression like

bar:
.long L0 + 1

the intended semantics is that bar will contain a pointer one byte past L0.

In sections that are merged by content (strings, 4 byte constants, etc), a
single position in the section doesn't give the linker enough information.
For example, it would not be able to tell a relocation must point to the
end of a string, since that would look just like the start of the next.

The solution used in ELF to use relocation with symbols if there is a non-zero
addend.

In MachO before this patch we would just keep all symbols in some sections.

This would miss some cases (only cstrings on x86_64 were implemented) and was
inefficient since most relocations have an addend of 0 and can be represented
without the symbol.

This patch implements the non-zero addend logic for MachO too.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224985 91177308-0d34-0410-b5e6-96231b3b80d8
19 files changed:
include/llvm/MC/MCAsmBackend.h
include/llvm/MC/MCAssembler.h
include/llvm/MC/MCMachObjectWriter.h
include/llvm/MC/MCObjectWriter.h
lib/MC/ELFObjectWriter.cpp
lib/MC/MCAsmInfoDarwin.cpp
lib/MC/MCAssembler.cpp
lib/MC/MachObjectWriter.cpp
lib/MC/WinCOFFObjectWriter.cpp
lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp
lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp
lib/Target/R600/MCTargetDesc/AMDGPUAsmBackend.cpp
lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
test/MC/MachO/AArch64/mergeable.s [new file with mode: 0644]
test/MC/MachO/x86_64-mergeable.s [new file with mode: 0644]
test/MC/MachO/x86_64-symbols.s