18#define DEBUG_TYPE "csky-elf-object-writer"
26 CSKYELFObjectWriter(
uint8_t OSABI = 0)
28 ~CSKYELFObjectWriter() {}
31 bool IsPCRel)
const override;
32 bool needsRelocateWithSymbol(
const MCValue &,
unsigned Type)
const override;
37unsigned CSKYELFObjectWriter::getRelocType(
const MCFixup &
Fixup,
40 const MCExpr *Expr =
Fixup.getValue();
43 uint8_t Modifier =
Target.getSpecifier();
45 switch (
Target.getSpecifier()) {
63 return ELF::R_CKCORE_NONE;
65 return ELF::R_CKCORE_PCREL32;
67 return ELF::R_CKCORE_PCREL_IMM16_4;
69 return ELF::R_CKCORE_PCREL_IMM8_4;
71 return ELF::R_CKCORE_PCREL_IMM26_2;
73 return ELF::R_CKCORE_PCREL_IMM18_2;
75 return ELF::R_CKCORE_PCREL_IMM16_2;
77 return ELF::R_CKCORE_PCREL_IMM10_2;
79 return ELF::R_CKCORE_PCREL_IMM7_4;
87 return ELF::R_CKCORE_NONE;
90 return ELF::R_CKCORE_NONE;
93 return ELF::R_CKCORE_NONE;
98 return ELF::R_CKCORE_ADDR32;
100 return ELF::R_CKCORE_GOT32;
102 return ELF::R_CKCORE_GOTOFF;
104 return ELF::R_CKCORE_PLT32;
106 return ELF::R_CKCORE_TLS_IE32;
108 return ELF::R_CKCORE_TLS_LE32;
110 return ELF::R_CKCORE_TLS_GD32;
112 return ELF::R_CKCORE_TLS_LDM32;
114 return ELF::R_CKCORE_TLS_LDO32;
116 return ELF::R_CKCORE_GOTPC;
118 return ELF::R_CKCORE_ADDR32;
126 return ELF::R_CKCORE_NONE;
128 return ELF::R_CKCORE_GOT32;
130 return ELF::R_CKCORE_GOTOFF;
132 return ELF::R_CKCORE_PLT32;
134 return ELF::R_CKCORE_TLS_GD32;
136 return ELF::R_CKCORE_TLS_LDM32;
138 return ELF::R_CKCORE_TLS_LE32;
140 return ELF::R_CKCORE_ADDR32;
143 return ELF::R_CKCORE_NONE;
146 return ELF::R_CKCORE_NONE;
148 return ELF::R_CKCORE_ADDR32;
150 return ELF::R_CKCORE_ADDR_HI16;
152 return ELF::R_CKCORE_ADDR_LO16;
154 return ELF::R_CKCORE_DOFFSET_IMM18;
156 return ELF::R_CKCORE_DOFFSET_IMM18_2;
158 return ELF::R_CKCORE_DOFFSET_IMM18_4;
160 return ELF::R_CKCORE_GOT_IMM18_4;
162 return ELF::R_CKCORE_PLT_IMM18_4;
166bool CSKYELFObjectWriter::needsRelocateWithSymbol(
const MCValue &V,
167 unsigned Type)
const {
168 switch (
V.getSpecifier()) {
178 return std::make_unique<CSKYELFObjectWriter>();
static Error reportError(StringRef Message)
PowerPC TLS Dynamic Call Fixup
@ Specifier
Expression with a relocation specifier.
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Target - Wrapper for Target specific information.
The instances of the Type class are immutable: once they are created, they are never changed.
@ fixup_csky_pcrel_imm10_scale2
@ fixup_csky_pcrel_uimm7_scale4
@ fixup_csky_doffset_imm18_scale2
@ fixup_csky_pcrel_imm16_scale2
@ fixup_csky_pcrel_imm18_scale2
@ fixup_csky_doffset_imm18_scale4
@ fixup_csky_pcrel_uimm16_scale4
@ fixup_csky_plt_imm18_scale4
@ fixup_csky_pcrel_imm26_scale2
@ fixup_csky_got_imm18_scale4
@ fixup_csky_pcrel_uimm8_scale4
@ fixup_csky_doffset_imm18
This is an optimization pass for GlobalISel generic memory operations.
std::unique_ptr< MCObjectTargetWriter > createCSKYELFObjectWriter()
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
@ FK_Data_8
A eight-byte fixup.
@ FK_Data_1
A one-byte fixup.
@ FK_Data_4
A four-byte fixup.
@ FK_Data_2
A two-byte fixup.
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.