27 AArch64ELFObjectWriter(uint8_t OSABI,
bool IsLittleEndian);
29 ~AArch64ELFObjectWriter()
override;
33 bool IsPCRel)
const override;
39 AArch64ELFObjectWriter::AArch64ELFObjectWriter(uint8_t OSABI,
44 AArch64ELFObjectWriter::~AArch64ELFObjectWriter() {}
46 unsigned AArch64ELFObjectWriter::GetRelocType(
const MCValue &
Target,
56 "Should only be expression-level modifiers here");
60 "Should only be expression-level modifiers here");
63 switch ((
unsigned)Fixup.
getKind()) {
65 return ELF::R_AARCH64_PREL16;
67 return ELF::R_AARCH64_PREL32;
69 return ELF::R_AARCH64_PREL64;
72 return ELF::R_AARCH64_ADR_PREL_LO21;
75 return ELF::R_AARCH64_ADR_PREL_PG_HI21;
77 return ELF::R_AARCH64_ADR_GOT_PAGE;
79 return ELF::R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21;
81 return ELF::R_AARCH64_TLSDESC_ADR_PAGE21;
84 return ELF::R_AARCH64_JUMP26;
86 return ELF::R_AARCH64_CALL26;
89 return ELF::R_AARCH64_TLSIE_LD_GOTTPREL_PREL19;
90 return ELF::R_AARCH64_LD_PREL_LO19;
92 return ELF::R_AARCH64_TSTBR14;
94 return ELF::R_AARCH64_CONDBR19;
99 switch ((
unsigned)Fixup.
getKind()) {
101 return ELF::R_AARCH64_ABS16;
103 return ELF::R_AARCH64_ABS32;
105 return ELF::R_AARCH64_ABS64;
108 return ELF::R_AARCH64_TLSLD_ADD_DTPREL_HI12;
110 return ELF::R_AARCH64_TLSLE_ADD_TPREL_HI12;
112 return ELF::R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC;
114 return ELF::R_AARCH64_TLSLD_ADD_DTPREL_LO12;
116 return ELF::R_AARCH64_TLSLE_ADD_TPREL_LO12_NC;
118 return ELF::R_AARCH64_TLSLE_ADD_TPREL_LO12;
120 return ELF::R_AARCH64_TLSDESC_ADD_LO12_NC;
122 return ELF::R_AARCH64_ADD_ABS_LO12_NC;
128 return ELF::R_AARCH64_LDST8_ABS_LO12_NC;
130 return ELF::R_AARCH64_TLSLD_LDST8_DTPREL_LO12;
132 return ELF::R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC;
134 return ELF::R_AARCH64_TLSLE_LDST8_TPREL_LO12;
136 return ELF::R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC;
142 return ELF::R_AARCH64_LDST16_ABS_LO12_NC;
144 return ELF::R_AARCH64_TLSLD_LDST16_DTPREL_LO12;
146 return ELF::R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC;
148 return ELF::R_AARCH64_TLSLE_LDST16_TPREL_LO12;
150 return ELF::R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC;
156 return ELF::R_AARCH64_LDST32_ABS_LO12_NC;
158 return ELF::R_AARCH64_TLSLD_LDST32_DTPREL_LO12;
160 return ELF::R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC;
162 return ELF::R_AARCH64_TLSLE_LDST32_TPREL_LO12;
164 return ELF::R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC;
170 return ELF::R_AARCH64_LDST64_ABS_LO12_NC;
172 return ELF::R_AARCH64_LD64_GOT_LO12_NC;
174 return ELF::R_AARCH64_TLSLD_LDST64_DTPREL_LO12;
176 return ELF::R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC;
178 return ELF::R_AARCH64_TLSLE_LDST64_TPREL_LO12;
180 return ELF::R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC;
182 return ELF::R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC;
184 return ELF::R_AARCH64_TLSDESC_LD64_LO12_NC;
190 return ELF::R_AARCH64_LDST128_ABS_LO12_NC;
196 return ELF::R_AARCH64_MOVW_UABS_G3;
198 return ELF::R_AARCH64_MOVW_UABS_G2;
200 return ELF::R_AARCH64_MOVW_SABS_G2;
202 return ELF::R_AARCH64_MOVW_UABS_G2_NC;
204 return ELF::R_AARCH64_MOVW_UABS_G1;
206 return ELF::R_AARCH64_MOVW_SABS_G1;
208 return ELF::R_AARCH64_MOVW_UABS_G1_NC;
210 return ELF::R_AARCH64_MOVW_UABS_G0;
212 return ELF::R_AARCH64_MOVW_SABS_G0;
214 return ELF::R_AARCH64_MOVW_UABS_G0_NC;
216 return ELF::R_AARCH64_TLSLD_MOVW_DTPREL_G2;
218 return ELF::R_AARCH64_TLSLD_MOVW_DTPREL_G1;
220 return ELF::R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC;
222 return ELF::R_AARCH64_TLSLD_MOVW_DTPREL_G0;
224 return ELF::R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC;
226 return ELF::R_AARCH64_TLSLE_MOVW_TPREL_G2;
228 return ELF::R_AARCH64_TLSLE_MOVW_TPREL_G1;
230 return ELF::R_AARCH64_TLSLE_MOVW_TPREL_G1_NC;
232 return ELF::R_AARCH64_TLSLE_MOVW_TPREL_G0;
234 return ELF::R_AARCH64_TLSLE_MOVW_TPREL_G0_NC;
236 return ELF::R_AARCH64_TLSIE_MOVW_GOTTPREL_G1;
238 return ELF::R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC;
242 return ELF::R_AARCH64_TLSDESC_CALL;
253 bool IsLittleEndian) {
255 new AArch64ELFObjectWriter(OSABI, IsLittleEndian);
This represents an "assembler immediate".
Defines the object file and target independent interfaces used by the assembler backend to write nati...
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(const char *reason, bool gen_crash_diag=true)
Reports a serious error, calling any installed error handler.
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
MCObjectWriter * createAArch64ELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI, bool IsLittleEndian)
MCFixupKind getKind() const
const MCSymbolRefExpr * getSymB() const
PowerPC TLS Dynamic Call Fixup
const MCSymbolRefExpr * getSymA() const
uint32_t getRefKind() const
Target - Wrapper for Target specific information.
MCObjectWriter * createELFObjectWriter(MCELFObjectTargetWriter *MOTW, raw_pwrite_stream &OS, bool IsLittleEndian)
Construct a new ELF writer instance.
static bool isNotChecked(VariantKind Kind)
An abstract base class for streams implementations that also support a pwrite operation.
static VariantKind getSymbolLoc(VariantKind Kind)
VariantKind getKind() const