18 #define DEBUG_TYPE "hexagon-elf-writer"
21 using namespace Hexagon;
30 HexagonELFObjectWriter(uint8_t OSABI,
StringRef C);
37 HexagonELFObjectWriter::HexagonELFObjectWriter(uint8_t OSABI,
StringRef C)
47 switch ((
unsigned)Fixup.
getKind()) {
53 case MCSymbolRefExpr::VariantKind::VK_DTPREL:
54 return ELF::R_HEX_DTPREL_32;
55 case MCSymbolRefExpr::VariantKind::VK_GOT:
56 return ELF::R_HEX_GOT_32;
57 case MCSymbolRefExpr::VariantKind::VK_GOTREL:
58 return ELF::R_HEX_GOTREL_32;
59 case MCSymbolRefExpr::VariantKind::VK_Hexagon_GD_GOT:
60 return ELF::R_HEX_GD_GOT_32;
61 case MCSymbolRefExpr::VariantKind::VK_Hexagon_IE:
62 return ELF::R_HEX_IE_32;
63 case MCSymbolRefExpr::VariantKind::VK_Hexagon_IE_GOT:
64 return ELF::R_HEX_IE_GOT_32;
65 case MCSymbolRefExpr::VariantKind::VK_Hexagon_LD_GOT:
66 return ELF::R_HEX_LD_GOT_32;
67 case MCSymbolRefExpr::VariantKind::VK_Hexagon_PCREL:
68 return ELF::R_HEX_32_PCREL;
69 case MCSymbolRefExpr::VariantKind::VK_TPREL:
70 return ELF::R_HEX_TPREL_32;
71 case MCSymbolRefExpr::VariantKind::VK_None:
72 return IsPCRel ? ELF::R_HEX_32_PCREL : ELF::R_HEX_32;
77 return ELF::R_HEX_32_PCREL;
80 case MCSymbolRefExpr::VariantKind::VK_DTPREL:
81 return ELF::R_HEX_DTPREL_16;
82 case MCSymbolRefExpr::VariantKind::VK_GOT:
83 return ELF::R_HEX_GOT_16;
84 case MCSymbolRefExpr::VariantKind::VK_Hexagon_GD_GOT:
85 return ELF::R_HEX_GD_GOT_16;
86 case MCSymbolRefExpr::VariantKind::VK_Hexagon_IE_GOT:
87 return ELF::R_HEX_IE_GOT_16;
88 case MCSymbolRefExpr::VariantKind::VK_Hexagon_LD_GOT:
89 return ELF::R_HEX_LD_GOT_16;
90 case MCSymbolRefExpr::VariantKind::VK_TPREL:
91 return ELF::R_HEX_TPREL_16;
92 case MCSymbolRefExpr::VariantKind::VK_None:
100 return ELF::R_HEX_B22_PCREL;
102 return ELF::R_HEX_B15_PCREL;
104 return ELF::R_HEX_B7_PCREL;
106 return ELF::R_HEX_LO16;
108 return ELF::R_HEX_HI16;
110 return ELF::R_HEX_32;
112 return ELF::R_HEX_16;
116 return ELF::R_HEX_GPREL16_0;
118 return ELF::R_HEX_GPREL16_1;
120 return ELF::R_HEX_GPREL16_2;
122 return ELF::R_HEX_GPREL16_3;
124 return ELF::R_HEX_HL16;
126 return ELF::R_HEX_B13_PCREL;
128 return ELF::R_HEX_B9_PCREL;
130 return ELF::R_HEX_B32_PCREL_X;
132 return ELF::R_HEX_32_6_X;
134 return ELF::R_HEX_B22_PCREL_X;
136 return ELF::R_HEX_B15_PCREL_X;
138 return ELF::R_HEX_B13_PCREL_X;
140 return ELF::R_HEX_B9_PCREL_X;
142 return ELF::R_HEX_B7_PCREL_X;
144 return ELF::R_HEX_16_X;
146 return ELF::R_HEX_12_X;
148 return ELF::R_HEX_11_X;
150 return ELF::R_HEX_10_X;
152 return ELF::R_HEX_9_X;
154 return ELF::R_HEX_8_X;
156 return ELF::R_HEX_7_X;
158 return ELF::R_HEX_6_X;
160 return ELF::R_HEX_32_PCREL;
162 return ELF::R_HEX_COPY;
164 return ELF::R_HEX_GLOB_DAT;
166 return ELF::R_HEX_JMP_SLOT;
168 return ELF::R_HEX_RELATIVE;
170 return ELF::R_HEX_PLT_B22_PCREL;
172 return ELF::R_HEX_GOTREL_LO16;
174 return ELF::R_HEX_GOTREL_HI16;
176 return ELF::R_HEX_GOTREL_32;
178 return ELF::R_HEX_GOT_LO16;
180 return ELF::R_HEX_GOT_HI16;
182 return ELF::R_HEX_GOT_32;
184 return ELF::R_HEX_GOT_16;
186 return ELF::R_HEX_DTPMOD_32;
188 return ELF::R_HEX_DTPREL_LO16;
190 return ELF::R_HEX_DTPREL_HI16;
192 return ELF::R_HEX_DTPREL_32;
194 return ELF::R_HEX_DTPREL_16;
196 return ELF::R_HEX_GD_PLT_B22_PCREL;
198 return ELF::R_HEX_LD_PLT_B22_PCREL;
200 return ELF::R_HEX_GD_GOT_LO16;
202 return ELF::R_HEX_GD_GOT_HI16;
204 return ELF::R_HEX_GD_GOT_32;
206 return ELF::R_HEX_GD_GOT_16;
208 return ELF::R_HEX_LD_GOT_LO16;
210 return ELF::R_HEX_LD_GOT_HI16;
212 return ELF::R_HEX_LD_GOT_32;
214 return ELF::R_HEX_LD_GOT_16;
216 return ELF::R_HEX_IE_LO16;
218 return ELF::R_HEX_IE_HI16;
220 return ELF::R_HEX_IE_32;
222 return ELF::R_HEX_IE_GOT_LO16;
224 return ELF::R_HEX_IE_GOT_HI16;
226 return ELF::R_HEX_IE_GOT_32;
228 return ELF::R_HEX_IE_GOT_16;
230 return ELF::R_HEX_TPREL_LO16;
232 return ELF::R_HEX_TPREL_HI16;
234 return ELF::R_HEX_TPREL_32;
236 return ELF::R_HEX_TPREL_16;
238 return ELF::R_HEX_6_PCREL_X;
240 return ELF::R_HEX_GOTREL_32_6_X;
242 return ELF::R_HEX_GOTREL_16_X;
244 return ELF::R_HEX_GOTREL_11_X;
246 return ELF::R_HEX_GOT_32_6_X;
248 return ELF::R_HEX_GOT_16_X;
250 return ELF::R_HEX_GOT_11_X;
252 return ELF::R_HEX_DTPREL_32_6_X;
254 return ELF::R_HEX_DTPREL_16_X;
256 return ELF::R_HEX_DTPREL_11_X;
258 return ELF::R_HEX_GD_GOT_32_6_X;
260 return ELF::R_HEX_GD_GOT_16_X;
262 return ELF::R_HEX_GD_GOT_11_X;
264 return ELF::R_HEX_LD_GOT_32_6_X;
266 return ELF::R_HEX_LD_GOT_16_X;
268 return ELF::R_HEX_LD_GOT_11_X;
270 return ELF::R_HEX_IE_32_6_X;
272 return ELF::R_HEX_IE_16_X;
274 return ELF::R_HEX_IE_GOT_32_6_X;
276 return ELF::R_HEX_IE_GOT_16_X;
278 return ELF::R_HEX_IE_GOT_11_X;
280 return ELF::R_HEX_TPREL_32_6_X;
282 return ELF::R_HEX_TPREL_16_X;
284 return ELF::R_HEX_TPREL_11_X;
286 return ELF::R_HEX_23_REG;
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
This represents an "assembler immediate".
Defines the object file and target independent interfaces used by the assembler backend to write nati...
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
static unsigned getRelocType(const MCValue &Target, const MCFixupKind FixupKind, const bool IsPCRel)
Translates generic PPC fixup kind to Mach-O/PPC relocation type enum.
Context object for machine code objects.
Function Alias Analysis false
MCObjectWriter * createHexagonELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI, StringRef CPU)
MCSymbolRefExpr::VariantKind getAccessVariant() const
MCFixupKind getKind() const
PowerPC TLS Dynamic Call Fixup
A four-byte pc relative fixup.
static GCRegistry::Add< ShadowStackGC > C("shadow-stack","Very portable GC for uncooperative code generators")
Target - Wrapper for Target specific information.
MCObjectWriter * createELFObjectWriter(MCELFObjectTargetWriter *MOTW, raw_pwrite_stream &OS, bool IsLittleEndian)
Construct a new ELF writer instance.
An abstract base class for streams implementations that also support a pwrite operation.
StringRef - Represent a constant reference to a string, i.e.