llvm-project/lld/ELF
Peter Smith 6b035b607f [LLD][ELF][ARM] Implement Thumb pc-relative relocations for adr and ldr
MC will now output the R_ARM_THM_PC8, R_ARM_THM_PC12 and
R_ARM_THM_PREL_11_0 relocations. These are short-ranged relocations that
are used to implement the adr rd, literal and ldr rd, literal pseudo
instructions.

The instructions use a new RelExpr called R_ARM_PCA in order to calculate
the required S + A - Pa expression, where Pa is AlignDown(P, 4) as the
instructions add their immediate to AlignDown(PC, 4). We also do not want
these relocations to generate or resolve against a PLT entry as the range
of these relocations is so short they would never reach.

The R_ARM_THM_PC8 has a special encoding convention for the relocation
addend, the immediate field is unsigned, yet the addend must be -4 to
account for the Thumb PC bias. The ABI (not the architecture) uses the
convention that the 8-byte immediate of 0xff represents -4.

Differential Revision: https://reviews.llvm.org/D75042
2020-02-28 11:29:29 +00:00
..
Arch [LLD][ELF][ARM] Implement Thumb pc-relative relocations for adr and ldr 2020-02-28 11:29:29 +00:00
AArch64ErrataFix.cpp [ELF] Rename relocateOne() to relocate() and pass `Relocation` to it 2020-01-25 12:00:18 -08:00
AArch64ErrataFix.h [ELF] Fix variable names in comments after VariableName -> variableName change 2019-07-16 05:50:45 +00:00
ARMErrataFix.cpp [ELF] Rename relocateOne() to relocate() and pass `Relocation` to it 2020-01-25 12:00:18 -08:00
ARMErrataFix.h [ELF][ARM] Implement --fix-cortex-a8 to fix erratum 657417 2019-09-16 09:38:38 +00:00
CMakeLists.txt [ThinLTO] Pass CodeGenOpts like UnrollLoops/VectorizeLoop/VectorizeSLP 2020-01-09 21:13:11 -08:00
CallGraphSort.cpp Fix a few typos in lld/ELF to cycle bots 2019-10-28 21:41:47 -04:00
CallGraphSort.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Config.h [lld][ELF] Add --shuffle-sections=seed to shuffle input sections 2020-02-19 13:44:12 -08:00
DWARF.cpp [ELF] Wrap things in `namespace lld { namespace elf {`, NFC 2019-10-07 08:31:18 +00:00
DWARF.h gdb-index: Wire up str_offsets section to avoid incorrect error message about offsets_base 2019-08-07 22:49:14 +00:00
Driver.cpp [lld][ELF] Add --shuffle-sections=seed to shuffle input sections 2020-02-19 13:44:12 -08:00
Driver.h [Coding style change] Rename variables so that they start with a lowercase letter 2019-07-10 05:00:37 +00:00
DriverUtils.cpp [lld] Replace SmallStr.str().str() with std::string conversion operator. 2020-01-29 21:30:21 -08:00
EhFrame.cpp [ELF] Wrap things in `namespace lld { namespace elf {`, NFC 2019-10-07 08:31:18 +00:00
EhFrame.h [Coding style change] Rename variables so that they start with a lowercase letter 2019-07-10 05:00:37 +00:00
ICF.cpp [LLD][ELF] Add time-trace to ELF LLD 2020-02-06 12:14:13 +00:00
ICF.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
InputFiles.cpp [ARM] Change ARMAttributeParser::Parse to use support::endianness and simplify 2020-02-21 11:05:33 -08:00
InputFiles.h Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
InputSection.cpp [LLD][ELF][ARM] Implement Thumb pc-relative relocations for adr and ldr 2020-02-28 11:29:29 +00:00
InputSection.h [ELF] Fix a null pointer dereference when --emit-relocs and --strip-debug are used together 2020-02-13 08:56:38 -08:00
LTO.cpp [LLD][ELF] Add time-trace to ELF LLD 2020-02-06 12:14:13 +00:00
LTO.h [Coding style change] Rename variables so that they start with a lowercase letter 2019-07-10 05:00:37 +00:00
LinkerScript.cpp [ELF] --orphan-handling=: don't warn/error for input SHT_REL[A] retained by --emit-relocs 2020-02-26 10:32:54 -08:00
LinkerScript.h [ELF] --orphan-handling=: don't warn/error for unused synthesized sections 2020-02-26 08:56:12 -08:00
MapFile.cpp Make it possible to redirect not only errs() but also outs() 2019-11-18 11:18:06 +09:00
MapFile.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
MarkLive.cpp [LLD][ELF] Add time-trace to ELF LLD 2020-02-06 12:14:13 +00:00
MarkLive.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Options.td [lld][ELF] Add --shuffle-sections=seed to shuffle input sections 2020-02-19 13:44:12 -08:00
OutputSections.cpp [ELF] Refactor uses of getInputSections to improve efficiency NFC 2020-01-21 12:27:52 +00:00
OutputSections.h [ELF] Refactor uses of getInputSections to improve efficiency NFC 2020-01-21 12:27:52 +00:00
README.md
Relocations.cpp [ELF] Mention symbol name in reportRangeError() 2020-01-29 09:38:25 -08:00
Relocations.h [LLD][ELF][ARM] Implement Thumb pc-relative relocations for adr and ldr 2020-02-28 11:29:29 +00:00
ScriptLexer.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
ScriptLexer.h [Coding style change] Rename variables so that they start with a lowercase letter 2019-07-10 05:00:37 +00:00
ScriptParser.cpp [ELF] Support INSERT [AFTER|BEFORE] for orphan sections 2020-02-12 08:21:52 -08:00
ScriptParser.h [ELF] Fix variable names in comments after VariableName -> variableName change 2019-07-16 05:50:45 +00:00
SymbolTable.cpp [lld/ELF] PR44498: Support input filename in double quote 2020-01-22 12:03:10 +00:00
SymbolTable.h [ELF] Replace SymbolTable::forEachSymbol with iterator_range symbols() 2019-11-26 09:09:32 -08:00
Symbols.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
Symbols.h [ELF] --icf: do not fold preemptible symbols 2019-12-10 09:06:08 -08:00
SyntheticSections.cpp [LLD][ELF][AArch64] Change the semantics of -z pac-plt. 2020-02-18 09:56:57 +01:00
SyntheticSections.h [ELF][PPC32] Support canonical PLT 2020-01-25 17:56:37 -08:00
Target.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
Target.h [ELF] Mention symbol name in reportRangeError() 2020-01-29 09:38:25 -08:00
Thunks.cpp [ELF][PPC32] Support range extension thunks with addends 2020-01-25 22:32:42 -08:00
Thunks.h [ELF][PPC32] Implement IPLT code sequence for non-preemptible IFUNC 2019-12-29 22:42:53 -08:00
Writer.cpp [ELF] --orphan-handling=: don't warn/error for unused synthesized sections 2020-02-26 08:56:12 -08:00
Writer.h Revert "Revert r370635, it caused PR43241." 2019-09-06 15:57:24 +00:00

README.md

See docs/NewLLD.rst