diff options
Diffstat (limited to 'contrib/llvm-project/lld/ELF/Relocations.h')
-rw-r--r-- | contrib/llvm-project/lld/ELF/Relocations.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/contrib/llvm-project/lld/ELF/Relocations.h b/contrib/llvm-project/lld/ELF/Relocations.h index bfec1e628851..ec59c63410d0 100644 --- a/contrib/llvm-project/lld/ELF/Relocations.h +++ b/contrib/llvm-project/lld/ELF/Relocations.h @@ -24,6 +24,7 @@ class SectionBase; // Represents a relocation type, such as R_X86_64_PC32 or R_ARM_THM_CALL. using RelType = uint32_t; +using JumpModType = uint32_t; // List of target-independent relocation types. Relocations read // from files are converted to these types so that the main code @@ -80,6 +81,7 @@ enum RelExpr { R_AARCH64_PAGE_PC, R_AARCH64_RELAX_TLS_GD_TO_IE_PAGE_PC, R_AARCH64_TLSDESC_PAGE, + R_ARM_PCA, R_ARM_SBREL, R_MIPS_GOTREL, R_MIPS_GOT_GP, @@ -107,6 +109,15 @@ struct Relocation { Symbol *sym; }; +// Manipulate jump instructions with these modifiers. These are used to relax +// jump instruction opcodes at basic block boundaries and are particularly +// useful when basic block sections are enabled. +struct JumpInstrMod { + JumpModType original; + uint64_t offset; + unsigned size; +}; + // This function writes undefined symbol diagnostics to an internal buffer. // Call reportUndefinedSymbols() after calling scanRelocations() to emit // the diagnostics. @@ -114,6 +125,9 @@ template <class ELFT> void scanRelocations(InputSectionBase &); template <class ELFT> void reportUndefinedSymbols(); +void hexagonTLSSymbolUpdate(ArrayRef<OutputSection *> outputSections); +bool hexagonNeedsTLSSymbol(ArrayRef<OutputSection *> outputSections); + class ThunkSection; class Thunk; struct InputSectionDescription; |