29 enum { DefaultEABIVersion = 0x05000000U };
32 ARMELFObjectWriter(
uint8_t OSABI);
34 ~ARMELFObjectWriter()
override =
default;
37 bool IsPCRel)
const override;
40 unsigned Type)
const override;
45ARMELFObjectWriter::ARMELFObjectWriter(
uint8_t OSABI)
50bool ARMELFObjectWriter::needsRelocateWithSymbol(
const MCValue &V,
51 unsigned Type)
const {
56 if (
Asm->isThumbFunc(
V.getAddSym()))
66 case ELF::R_ARM_PREL31:
67 case ELF::R_ARM_ABS32:
75unsigned ARMELFObjectWriter::getRelocType(
const MCFixup &
Fixup,
85 " only supported in FDPIC mode");
108 switch (
Fixup.getKind()) {
111 return ELF::R_ARM_NONE;
116 "invalid fixup for 4-byte pc-relative data relocation");
117 return ELF::R_ARM_NONE;
119 if (
const auto *SA =
Target.getAddSym()) {
122 if (SA->getName() ==
"_GLOBAL_OFFSET_TABLE_")
123 return ELF::R_ARM_BASE_PREL;
125 return ELF::R_ARM_REL32;
128 return ELF::R_ARM_TLS_IE32;
130 return ELF::R_ARM_GOT_PREL;
132 return ELF::R_ARM_PREL31;
138 return ELF::R_ARM_CALL;
140 return ELF::R_ARM_TLS_CALL;
142 return ELF::R_ARM_CALL;
147 return ELF::R_ARM_JUMP24;
149 return ELF::R_ARM_THM_JUMP19;
151 return ELF::R_ARM_THM_JUMP24;
153 return ELF::R_ARM_MOVT_PREL;
155 return ELF::R_ARM_MOVW_PREL_NC;
157 return ELF::R_ARM_THM_MOVT_PREL;
159 return ELF::R_ARM_THM_MOVW_PREL_NC;
161 return ELF::R_ARM_THM_ALU_ABS_G3;
163 return ELF::R_ARM_THM_ALU_ABS_G2_NC;
165 return ELF::R_ARM_THM_ALU_ABS_G1_NC;
167 return ELF::R_ARM_THM_ALU_ABS_G0_NC;
169 return ELF::R_ARM_THM_JUMP11;
171 return ELF::R_ARM_THM_JUMP8;
176 return ELF::R_ARM_THM_TLS_CALL;
178 return ELF::R_ARM_THM_CALL;
181 return ELF::R_ARM_LDR_PC_G0;
183 return ELF::R_ARM_LDRS_PC_G0;
185 return ELF::R_ARM_THM_PC12;
187 return ELF::R_ARM_ALU_PC_G0;
189 return ELF::R_ARM_THM_PC8;
191 return ELF::R_ARM_THM_ALU_PREL_11_0;
193 return ELF::R_ARM_THM_BF16;
195 return ELF::R_ARM_THM_BF12;
197 return ELF::R_ARM_THM_BF18;
203 return ELF::R_ARM_NONE;
208 return ELF::R_ARM_NONE;
210 return ELF::R_ARM_ABS8;
216 return ELF::R_ARM_NONE;
218 return ELF::R_ARM_ABS16;
224 return ELF::R_ARM_NONE;
226 return ELF::R_ARM_NONE;
228 return ELF::R_ARM_GOT_BREL;
230 return ELF::R_ARM_TLS_GD32;
232 return ELF::R_ARM_TLS_LE32;
234 return ELF::R_ARM_TLS_IE32;
236 return ELF::R_ARM_ABS32;
238 return ELF::R_ARM_GOTOFF32;
240 return ELF::R_ARM_GOT_PREL;
242 return ELF::R_ARM_TARGET1;
244 return ELF::R_ARM_TARGET2;
246 return ELF::R_ARM_PREL31;
248 return ELF::R_ARM_SBREL32;
250 return ELF::R_ARM_TLS_LDO32;
252 return ELF::R_ARM_TLS_CALL;
254 return ELF::R_ARM_TLS_GOTDESC;
256 return ELF::R_ARM_TLS_LDM32;
258 return ELF::R_ARM_TLS_DESCSEQ;
260 return CheckFDPIC(ELF::R_ARM_FUNCDESC);
262 return CheckFDPIC(ELF::R_ARM_GOTFUNCDESC);
264 return CheckFDPIC(ELF::R_ARM_GOTOFFFUNCDESC);
266 return CheckFDPIC(ELF::R_ARM_TLS_GD32_FDPIC);
268 return CheckFDPIC(ELF::R_ARM_TLS_LDM32_FDPIC);
270 return CheckFDPIC(ELF::R_ARM_TLS_IE32_FDPIC);
274 return ELF::R_ARM_JUMP24;
279 return ELF::R_ARM_NONE;
281 return ELF::R_ARM_MOVT_ABS;
283 return ELF::R_ARM_MOVT_BREL;
289 return ELF::R_ARM_NONE;
291 return ELF::R_ARM_MOVW_ABS_NC;
293 return ELF::R_ARM_MOVW_BREL_NC;
299 return ELF::R_ARM_NONE;
301 return ELF::R_ARM_THM_MOVT_ABS;
303 return ELF::R_ARM_THM_MOVT_BREL;
309 return ELF::R_ARM_NONE;
311 return ELF::R_ARM_THM_MOVW_ABS_NC;
313 return ELF::R_ARM_THM_MOVW_BREL_NC;
317 return ELF::R_ARM_THM_ALU_ABS_G3;
319 return ELF::R_ARM_THM_ALU_ABS_G2_NC;
321 return ELF::R_ARM_THM_ALU_ABS_G1_NC;
323 return ELF::R_ARM_THM_ALU_ABS_G0_NC;
327std::unique_ptr<MCObjectTargetWriter>
329 return std::make_unique<ARMELFObjectWriter>(OSABI);
static Error reportError(StringRef Message)
PowerPC TLS Dynamic Call Fixup
virtual unsigned getRelocType(const MCFixup &Fixup, const MCValue &Target, bool IsPCRel) const =0
virtual bool needsRelocateWithSymbol(const MCValue &, unsigned Type) const
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
void setType(unsigned Type) const
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Target - Wrapper for Target specific information.
The instances of the Type class are immutable: once they are created, they are never changed.
@ fixup_thumb_adr_pcrel_10
@ fixup_arm_thumb_upper_8_15
@ fixup_arm_thumb_lower_0_7
@ fixup_arm_pcrel_10_unscaled
@ fixup_arm_thumb_upper_0_7
@ fixup_arm_ldst_pcrel_12
@ fixup_arm_thumb_lower_8_15
LLVM_ABI StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type)
This is an optimization pass for GlobalISel generic memory operations.
@ FK_Data_1
A one-byte fixup.
@ FK_Data_4
A four-byte fixup.
@ FK_Data_2
A two-byte fixup.
std::unique_ptr< MCObjectTargetWriter > createARMELFObjectWriter(uint8_t OSABI)
Construct an ELF Mach-O object writer.