28 enum { DefaultEABIVersion = 0x05000000U };
34 ARMELFObjectWriter(
uint8_t OSABI);
36 ~ARMELFObjectWriter()
override =
default;
42 unsigned Type)
const override;
47ARMELFObjectWriter::ARMELFObjectWriter(
uint8_t OSABI)
52bool ARMELFObjectWriter::needsRelocateWithSymbol(
const MCValue &,
54 unsigned Type)
const {
62 case ELF::R_ARM_PREL31:
63 case ELF::R_ARM_ABS32:
74 return GetRelocTypeInner(
Target,
Fixup, IsPCRel, Ctx);
77unsigned ARMELFObjectWriter::GetRelocTypeInner(
const MCValue &
Target,
90 " only supported in FDPIC mode");
95 switch (
Fixup.getTargetKind()) {
98 return ELF::R_ARM_NONE;
103 "invalid fixup for 4-byte pc-relative data relocation");
104 return ELF::R_ARM_NONE;
109 if (SymRef->getSymbol().getName() ==
"_GLOBAL_OFFSET_TABLE_")
110 return ELF::R_ARM_BASE_PREL;
112 return ELF::R_ARM_REL32;
115 return ELF::R_ARM_TLS_IE32;
117 return ELF::R_ARM_GOT_PREL;
119 return ELF::R_ARM_PREL31;
125 return ELF::R_ARM_CALL;
127 return ELF::R_ARM_TLS_CALL;
129 return ELF::R_ARM_CALL;
134 return ELF::R_ARM_JUMP24;
136 return ELF::R_ARM_THM_JUMP19;
138 return ELF::R_ARM_THM_JUMP24;
140 return ELF::R_ARM_MOVT_PREL;
142 return ELF::R_ARM_MOVW_PREL_NC;
144 return ELF::R_ARM_THM_MOVT_PREL;
146 return ELF::R_ARM_THM_MOVW_PREL_NC;
148 return ELF::R_ARM_THM_ALU_ABS_G3;
150 return ELF::R_ARM_THM_ALU_ABS_G2_NC;
152 return ELF::R_ARM_THM_ALU_ABS_G1_NC;
154 return ELF::R_ARM_THM_ALU_ABS_G0_NC;
156 return ELF::R_ARM_THM_JUMP11;
158 return ELF::R_ARM_THM_JUMP8;
163 return ELF::R_ARM_THM_TLS_CALL;
165 return ELF::R_ARM_THM_CALL;
168 return ELF::R_ARM_LDR_PC_G0;
170 return ELF::R_ARM_LDRS_PC_G0;
172 return ELF::R_ARM_THM_PC12;
174 return ELF::R_ARM_ALU_PC_G0;
176 return ELF::R_ARM_THM_PC8;
178 return ELF::R_ARM_THM_ALU_PREL_11_0;
180 return ELF::R_ARM_THM_BF16;
182 return ELF::R_ARM_THM_BF12;
184 return ELF::R_ARM_THM_BF18;
190 return ELF::R_ARM_NONE;
195 "invalid fixup for 1-byte data relocation");
196 return ELF::R_ARM_NONE;
198 return ELF::R_ARM_ABS8;
204 "invalid fixup for 2-byte data relocation");
205 return ELF::R_ARM_NONE;
207 return ELF::R_ARM_ABS16;
213 "invalid fixup for 4-byte data relocation");
214 return ELF::R_ARM_NONE;
216 return ELF::R_ARM_NONE;
218 return ELF::R_ARM_GOT_BREL;
220 return ELF::R_ARM_TLS_GD32;
222 return ELF::R_ARM_TLS_LE32;
224 return ELF::R_ARM_TLS_IE32;
226 return ELF::R_ARM_ABS32;
228 return ELF::R_ARM_GOTOFF32;
230 return ELF::R_ARM_GOT_PREL;
232 return ELF::R_ARM_TARGET1;
234 return ELF::R_ARM_TARGET2;
236 return ELF::R_ARM_PREL31;
238 return ELF::R_ARM_SBREL32;
240 return ELF::R_ARM_TLS_LDO32;
242 return ELF::R_ARM_TLS_CALL;
244 return ELF::R_ARM_TLS_GOTDESC;
246 return ELF::R_ARM_TLS_LDM32;
248 return ELF::R_ARM_TLS_DESCSEQ;
250 return CheckFDPIC(ELF::R_ARM_FUNCDESC);
252 return CheckFDPIC(ELF::R_ARM_GOTFUNCDESC);
254 return CheckFDPIC(ELF::R_ARM_GOTOFFFUNCDESC);
256 return CheckFDPIC(ELF::R_ARM_TLS_GD32_FDPIC);
258 return CheckFDPIC(ELF::R_ARM_TLS_LDM32_FDPIC);
260 return CheckFDPIC(ELF::R_ARM_TLS_IE32_FDPIC);
264 return ELF::R_ARM_JUMP24;
269 return ELF::R_ARM_NONE;
271 return ELF::R_ARM_MOVT_ABS;
273 return ELF::R_ARM_MOVT_BREL;
279 return ELF::R_ARM_NONE;
281 return ELF::R_ARM_MOVW_ABS_NC;
283 return ELF::R_ARM_MOVW_BREL_NC;
289 "invalid fixup for Thumb MOVT instruction");
290 return ELF::R_ARM_NONE;
292 return ELF::R_ARM_THM_MOVT_ABS;
294 return ELF::R_ARM_THM_MOVT_BREL;
300 "invalid fixup for Thumb MOVW instruction");
301 return ELF::R_ARM_NONE;
303 return ELF::R_ARM_THM_MOVW_ABS_NC;
305 return ELF::R_ARM_THM_MOVW_BREL_NC;
309 return ELF::R_ARM_THM_ALU_ABS_G3;
311 return ELF::R_ARM_THM_ALU_ABS_G2_NC;
313 return ELF::R_ARM_THM_ALU_ABS_G1_NC;
315 return ELF::R_ARM_THM_ALU_ABS_G0_NC;
319std::unique_ptr<MCObjectTargetWriter>
321 return std::make_unique<ARMELFObjectWriter>(OSABI);
PowerPC TLS Dynamic Call Fixup
Context object for machine code objects.
void reportError(SMLoc L, const Twine &Msg)
virtual bool needsRelocateWithSymbol(const MCValue &Val, const MCSymbol &Sym, unsigned Type) const
virtual unsigned getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsPCRel) const =0
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Represent a reference to a symbol from inside an expression.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
This represents an "assembler immediate".
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
StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type)
This is an optimization pass for GlobalISel generic memory operations.
@ FirstLiteralRelocationKind
The range [FirstLiteralRelocationKind, MaxTargetFixupKind) is used for relocations coming from ....
@ 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.