1 // x86_64 relocations
2 /// No reloc.
3 pub const R_X86_64_NONE: u32 = 0;
4 /// Direct 64 bit.
5 pub const R_X86_64_64: u32 = 1;
6 /// PC relative 32 bit signed.
7 pub const R_X86_64_PC32: u32 = 2;
8 /// 32 bit GOT entry.
9 pub const R_X86_64_GOT32: u32 = 3;
10 /// 32 bit PLT address.
11 pub const R_X86_64_PLT32: u32 = 4;
12 /// Copy symbol at runtime.
13 pub const R_X86_64_COPY: u32 = 5;
14 /// Create GOT entry.
15 pub const R_X86_64_GLOB_DAT: u32 = 6;
16 /// Create PLT entry.
17 pub const R_X86_64_JUMP_SLOT: u32 = 7;
18 /// Adjust by program base.
19 pub const R_X86_64_RELATIVE: u32 = 8;
20 /// 32 bit signed PC relative offset to GOT.
21 pub const R_X86_64_GOTPCREL: u32 = 9;
22 /// Direct 32 bit zero extended.
23 pub const R_X86_64_32: u32 = 10;
24 /// Direct 32 bit sign extended.
25 pub const R_X86_64_32S: u32 = 11;
26 /// Direct 16 bit zero extended.
27 pub const R_X86_64_16: u32 = 12;
28 /// 16 bit sign extended pc relative.
29 pub const R_X86_64_PC16: u32 = 13;
30 /// Direct 8 bit sign extended.
31 pub const R_X86_64_8: u32 = 14;
32 /// 8 bit sign extended pc relative.
33 pub const R_X86_64_PC8: u32 = 15;
34 /// ID of module containing symbol.
35 pub const R_X86_64_DTPMOD64: u32 = 16;
36 /// Offset in module's TLS block.
37 pub const R_X86_64_DTPOFF64: u32 = 17;
38 /// Offset in initial TLS block.
39 pub const R_X86_64_TPOFF64: u32 = 18;
40 /// 32 bit signed PC relative offset to two GOT entries for GD symbol.
41 pub const R_X86_64_TLSGD: u32 = 19;
42 /// 32 bit signed PC relative offset to two GOT entries for LD symbol.
43 pub const R_X86_64_TLSLD: u32 = 20;
44 /// Offset in TLS block.
45 pub const R_X86_64_DTPOFF32: u32 = 21;
46 /// 32 bit signed PC relative offset to GOT entry for IE symbol.
47 pub const R_X86_64_GOTTPOFF: u32 = 22;
48 /// Offset in initial TLS block.
49 pub const R_X86_64_TPOFF32: u32 = 23;
50 /// PC relative 64 bit.
51 pub const R_X86_64_PC64: u32 = 24;
52 /// 64 bit offset to GOT.
53 pub const R_X86_64_GOTOFF64: u32 = 25;
54 /// 32 bit signed pc relative offset to GOT.
55 pub const R_X86_64_GOTPC32: u32 = 26;
56 /// 64-bit GOT entry offset.
57 pub const R_X86_64_GOT64: u32 = 27;
58 /// 64-bit PC relative offset to GOT entry.
59 pub const R_X86_64_GOTPCREL64: u32 = 28;
60 /// 64-bit PC relative offset to GOT.
61 pub const R_X86_64_GOTPC64: u32 = 29;
62 /// like GOT64, says PLT entry needed.
63 pub const R_X86_64_GOTPLT64: u32 = 30;
64 /// 64-bit GOT relative offset to PLT entry.
65 pub const R_X86_64_PLTOFF64: u32 = 31;
66 /// Size of symbol plus 32-bit addend.
67 pub const R_X86_64_SIZE32: u32 = 32;
68 /// Size of symbol plus 64-bit addend.
69 pub const R_X86_64_SIZE64: u32 = 33;
70 /// GOT offset for TLS descriptor..
71 pub const R_X86_64_GOTPC32_TLSDESC: u32 = 34;
72 /// Marker for call through TLS descriptor..
73 pub const R_X86_64_TLSDESC_CALL: u32 = 35;
74 /// TLS descriptor..
75 pub const R_X86_64_TLSDESC: u32 = 36;
76 /// Adjust indirectly by program base.
77 pub const R_X86_64_IRELATIVE: u32 = 37;
78 /// 64-bit adjust by program base.
79 pub const R_X86_64_RELATIVE64: u32 = 38;
80 ///Load from 32 bit signed pc relative offset to GOT entry without REX prefix, relaxable.
81 pub const R_X86_64_GOTPCRELX: u32 = 41;
82 /// Load from 32 bit signed pc relative offset to GOT entry with REX prefix, relaxable.
83 pub const R_X86_64_REX_GOTPCRELX: u32 = 42;
84 pub const R_X86_64_NUM: u32 = 43;
85 
86 // Intel 80386 specific definitions
87 
88 // i386 relocs
89 /// No reloc
90 pub const R_386_NONE: u32 = 0;
91 /// Direct 32 bit
92 pub const R_386_32: u32 = 1;
93 /// PC relative 32 bit
94 pub const R_386_PC32: u32 = 2;
95 /// 32 bit GOT entry
96 pub const R_386_GOT32: u32 = 3;
97 /// 32 bit PLT address
98 pub const R_386_PLT32: u32 = 4;
99 /// Copy symbol at runtime
100 pub const R_386_COPY: u32 = 5;
101 /// Create GOT entry
102 pub const R_386_GLOB_DAT: u32 = 6;
103 /// Create PLT entry
104 pub const R_386_JMP_SLOT: u32 = 7;
105 /// Adjust by program base
106 pub const R_386_RELATIVE: u32 = 8;
107 /// 32 bit offset to GOT
108 pub const R_386_GOTOFF: u32 = 9;
109 /// 32 bit PC relative offset to GOT
110 pub const R_386_GOTPC: u32 = 10;
111 pub const R_386_32PLT: u32 = 11;
112 /// Offset in static TLS block
113 pub const R_386_TLS_TPOFF: u32 = 14;
114 /// Address of GOT entry for static TLS block offset
115 pub const R_386_TLS_IE: u32 = 15;
116 /// GOT entry for static TLS block offset
117 pub const R_386_TLS_GOTIE: u32 = 16;
118 /// Offset relative to static TLS block
119 pub const R_386_TLS_LE: u32 = 17;
120 /// Direct 32 bit for GNU version of general dynamic thread local data
121 pub const R_386_TLS_GD: u32 = 18;
122 /// Direct 32 bit for GNU version of local dynamic thread local data in LE code
123 pub const R_386_TLS_LDM: u32 = 19;
124 pub const R_386_16: u32 = 20;
125 pub const R_386_PC16: u32 = 21;
126 pub const R_386_8: u32 = 22;
127 pub const R_386_PC8: u32 = 23;
128 /// Direct 32 bit for general dynamic thread local data
129 pub const R_386_TLS_GD_32: u32 = 24;
130 /// Tag for pushl in GD TLS code
131 pub const R_386_TLS_GD_PUSH: u32 = 25;
132 /// Relocation for call to __tls_get_addr()
133 pub const R_386_TLS_GD_CALL: u32 = 26;
134 /// Tag for popl in GD TLS code
135 pub const R_386_TLS_GD_POP: u32 = 27;
136 /// Direct 32 bit for local dynamic thread local data in LE code
137 pub const R_386_TLS_LDM_32: u32 = 28;
138 /// Tag for pushl in LDM TLS code
139 pub const R_386_TLS_LDM_PUSH: u32 = 29;
140 /// Relocation for call to __tls_get_addr() in LDM code
141 pub const R_386_TLS_LDM_CALL: u32 = 30;
142 /// Tag for popl in LDM TLS code
143 pub const R_386_TLS_LDM_POP: u32 = 31;
144 /// Offset relative to TLS block
145 pub const R_386_TLS_LDO_32: u32 = 32;
146 /// GOT entry for negated static TLS block offset
147 pub const R_386_TLS_IE_32: u32 = 33;
148 /// Negated offset relative to static TLS block
149 pub const R_386_TLS_LE_32: u32 = 34;
150 /// ID of module containing symbol
151 pub const R_386_TLS_DTPMOD32: u32 = 35;
152 /// Offset in TLS block
153 pub const R_386_TLS_DTPOFF32: u32 = 36;
154 /// Negated offset in static TLS block
155 pub const R_386_TLS_TPOFF32: u32 = 37;
156 /// 32-bit symbol size
157 pub const R_386_SIZE32: u32 = 38;
158 /// GOT offset for TLS descriptor.
159 pub const R_386_TLS_GOTDESC: u32 = 39;
160 /// Marker of call through TLS descriptor for relaxation
161 pub const R_386_TLS_DESC_CALL: u32 = 40;
162 /// TLS descriptor containing pointer to code and to argument, returning the TLS offset for the symbol
163 pub const R_386_TLS_DESC: u32 = 41;
164 /// Adjust indirectly by program base
165 pub const R_386_IRELATIVE: u32 = 42;
166 /// Load from 32 bit GOT entry, relaxable
167 pub const R_386_GOT32X: u32 = 43;
168 /// Keep this the last entry
169 pub const R_386_NUM: u32 = 44;
170 
171 // AArch64 relocs
172 /// No relocation
173 pub const R_AARCH64_NONE: u32 = 0;
174 
175 // ILP32 AArch64 relocs
176 /// Direct 32 bit
177 pub const R_AARCH64_P32_ABS32: u32 = 1;
178 /// Copy symbol at runtime
179 pub const R_AARCH64_P32_COPY: u32 = 180;
180 /// Create GOT entry
181 pub const R_AARCH64_P32_GLOB_DAT: u32 = 181;
182 /// Create PLT entry
183 pub const R_AARCH64_P32_JUMP_SLOT: u32 = 182;
184 /// Adjust by program base
185 pub const R_AARCH64_P32_RELATIVE: u32 = 183;
186 /// Module number, 32 bit
187 pub const R_AARCH64_P32_TLS_DTPMOD: u32 = 184;
188 /// Module-relative offset, 32 bit
189 pub const R_AARCH64_P32_TLS_DTPREL: u32 = 185;
190 /// TP-relative offset, 32 bit
191 pub const R_AARCH64_P32_TLS_TPREL: u32 = 186;
192 /// TLS Descriptor
193 pub const R_AARCH64_P32_TLSDESC: u32 = 187;
194 /// STT_GNU_IFUNC relocation
195 pub const R_AARCH64_P32_IRELATIVE: u32 = 188;
196 
197 // LP64 AArch64 relocs
198 /// Direct 64 bit
199 pub const R_AARCH64_ABS64: u32 = 257;
200 /// Direct 32 bit
201 pub const R_AARCH64_ABS32: u32 = 258;
202 /// Direct 16-bit
203 pub const R_AARCH64_ABS16: u32 = 259;
204 /// PC-relative 64-bit
205 pub const R_AARCH64_PREL64: u32 = 260;
206 /// PC-relative 32-bit
207 pub const R_AARCH64_PREL32: u32 = 261;
208 /// PC-relative 16-bit
209 pub const R_AARCH64_PREL16: u32 = 262;
210 /// Dir. MOVZ imm. from bits 15:0
211 pub const R_AARCH64_MOVW_UABS_G0: u32 = 263;
212 /// Likewise for MOVK; no check
213 pub const R_AARCH64_MOVW_UABS_G0_NC: u32 = 264;
214 /// Dir. MOVZ imm. from bits 31:16
215 pub const R_AARCH64_MOVW_UABS_G1: u32 = 265;
216 /// Likewise for MOVK; no check
217 pub const R_AARCH64_MOVW_UABS_G1_NC: u32 = 266;
218 /// Dir. MOVZ imm. from bits 47:32
219 pub const R_AARCH64_MOVW_UABS_G2: u32 = 267;
220 /// Likewise for MOVK; no check
221 pub const R_AARCH64_MOVW_UABS_G2_NC: u32 = 268;
222 /// Dir. MOV{K,Z} imm. from 63:48
223 pub const R_AARCH64_MOVW_UABS_G3: u32 = 269;
224 /// Dir. MOV{N,Z} imm. from 15:0
225 pub const R_AARCH64_MOVW_SABS_G0: u32 = 270;
226 /// Dir. MOV{N,Z} imm. from 31:16
227 pub const R_AARCH64_MOVW_SABS_G1: u32 = 271;
228 /// Dir. MOV{N,Z} imm. from 47:32
229 pub const R_AARCH64_MOVW_SABS_G2: u32 = 272;
230 /// PC-rel. LD imm. from bits 20:2
231 pub const R_AARCH64_LD_PREL_LO19: u32 = 273;
232 /// PC-rel. ADR imm. from bits 20:0
233 pub const R_AARCH64_ADR_PREL_LO21: u32 = 274;
234 /// Page-rel. ADRP imm. from 32:12
235 pub const R_AARCH64_ADR_PREL_PG_HI21: u32 = 275;
236 /// Likewise; no overflow check
237 pub const R_AARCH64_ADR_PREL_PG_HI21_NC: u32 = 276;
238 /// Dir. ADD imm. from bits 11:0
239 pub const R_AARCH64_ADD_ABS_LO12_NC: u32 = 277;
240 /// Likewise for LD/ST; no check.
241 pub const R_AARCH64_LDST8_ABS_LO12_NC: u32 = 278;
242 /// PC-rel. TBZ/TBNZ imm. from 15:2
243 pub const R_AARCH64_TSTBR14: u32 = 279;
244 /// PC-rel. cond. br. imm. from 20:2.
245 pub const R_AARCH64_CONDBR19: u32 = 280;
246 /// PC-rel. B imm. from bits 27:2
247 pub const R_AARCH64_JUMP26: u32 = 282;
248 /// Likewise for CALL
249 pub const R_AARCH64_CALL26: u32 = 283;
250 /// Dir. ADD imm. from bits 11:1
251 pub const R_AARCH64_LDST16_ABS_LO12_NC: u32 = 284;
252 /// Likewise for bits 11:2
253 pub const R_AARCH64_LDST32_ABS_LO12_NC: u32 = 285;
254 /// Likewise for bits 11:3
255 pub const R_AARCH64_LDST64_ABS_LO12_NC: u32 = 286;
256 /// PC-rel. MOV{N,Z} imm. from 15:0
257 pub const R_AARCH64_MOVW_PREL_G0: u32 = 287;
258 /// Likewise for MOVK; no check
259 pub const R_AARCH64_MOVW_PREL_G0_NC: u32 = 288;
260 /// PC-rel. MOV{N,Z} imm. from 31:16.
261 pub const R_AARCH64_MOVW_PREL_G1: u32 = 289;
262 /// Likewise for MOVK; no check
263 pub const R_AARCH64_MOVW_PREL_G1_NC: u32 = 290;
264 /// PC-rel. MOV{N,Z} imm. from 47:32.
265 pub const R_AARCH64_MOVW_PREL_G2: u32 = 291;
266 /// Likewise for MOVK; no check
267 pub const R_AARCH64_MOVW_PREL_G2_NC: u32 = 292;
268 /// PC-rel. MOV{N,Z} imm. from 63:48.
269 pub const R_AARCH64_MOVW_PREL_G3: u32 = 293;
270 /// Dir. ADD imm. from bits 11:4
271 pub const R_AARCH64_LDST128_ABS_LO12_NC: u32 = 299;
272 /// GOT-rel. off. MOV{N,Z} imm. 15:0.
273 pub const R_AARCH64_MOVW_GOTOFF_G0: u32 = 300;
274 /// Likewise for MOVK; no check
275 pub const R_AARCH64_MOVW_GOTOFF_G0_NC: u32 = 301;
276 /// GOT-rel. o. MOV{N,Z} imm. 31:16
277 pub const R_AARCH64_MOVW_GOTOFF_G1: u32 = 302;
278 /// Likewise for MOVK; no check
279 pub const R_AARCH64_MOVW_GOTOFF_G1_NC: u32 = 303;
280 /// GOT-rel. o. MOV{N,Z} imm. 47:32
281 pub const R_AARCH64_MOVW_GOTOFF_G2: u32 = 304;
282 /// Likewise for MOVK; no check
283 pub const R_AARCH64_MOVW_GOTOFF_G2_NC: u32 = 305;
284 /// GOT-rel. o. MOV{N,Z} imm. 63:48
285 pub const R_AARCH64_MOVW_GOTOFF_G3: u32 = 306;
286 /// GOT-relative 64-bit
287 pub const R_AARCH64_GOTREL64: u32 = 307;
288 /// GOT-relative 32-bit
289 pub const R_AARCH64_GOTREL32: u32 = 308;
290 /// PC-rel. GOT off. load imm. 20:2
291 pub const R_AARCH64_GOT_LD_PREL19: u32 = 309;
292 /// GOT-rel. off. LD/ST imm. 14:3
293 pub const R_AARCH64_LD64_GOTOFF_LO15: u32 = 310;
294 /// P-page-rel. GOT off. ADRP 32:12
295 pub const R_AARCH64_ADR_GOT_PAGE: u32 = 311;
296 /// Dir. GOT off. LD/ST imm. 11:3
297 pub const R_AARCH64_LD64_GOT_LO12_NC: u32 = 312;
298 /// GOT-page-rel. GOT off. LD/ST 14:3
299 pub const R_AARCH64_LD64_GOTPAGE_LO15: u32 = 313;
300 /// PC-relative ADR imm. 20:0
301 pub const R_AARCH64_TLSGD_ADR_PREL21: u32 = 512;
302 /// page-rel. ADRP imm. 32:12
303 pub const R_AARCH64_TLSGD_ADR_PAGE21: u32 = 513;
304 /// direct ADD imm. from 11:0
305 pub const R_AARCH64_TLSGD_ADD_LO12_NC: u32 = 514;
306 /// GOT-rel. MOV{N,Z} 31:16
307 pub const R_AARCH64_TLSGD_MOVW_G1: u32 = 515;
308 /// GOT-rel. MOVK imm. 15:0
309 pub const R_AARCH64_TLSGD_MOVW_G0_NC: u32 = 516;
310 /// Like 512; local dynamic model
311 pub const R_AARCH64_TLSLD_ADR_PREL21: u32 = 517;
312 /// Like 513; local dynamic model
313 pub const R_AARCH64_TLSLD_ADR_PAGE21: u32 = 518;
314 /// Like 514; local dynamic model
315 pub const R_AARCH64_TLSLD_ADD_LO12_NC: u32 = 519;
316 /// Like 515; local dynamic model
317 pub const R_AARCH64_TLSLD_MOVW_G1: u32 = 520;
318 /// Like 516; local dynamic model
319 pub const R_AARCH64_TLSLD_MOVW_G0_NC: u32 = 521;
320 /// TLS PC-rel. load imm. 20:2
321 pub const R_AARCH64_TLSLD_LD_PREL19: u32 = 522;
322 /// TLS DTP-rel. MOV{N,Z} 47:32
323 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G2: u32 = 523;
324 /// TLS DTP-rel. MOV{N,Z} 31:16
325 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G1: u32 = 524;
326 /// Likewise; MOVK; no check
327 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: u32 = 525;
328 /// TLS DTP-rel. MOV{N,Z} 15:0
329 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G0: u32 = 526;
330 /// Likewise; MOVK; no check
331 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: u32 = 527;
332 /// DTP-rel. ADD imm. from 23:12.
333 pub const R_AARCH64_TLSLD_ADD_DTPREL_HI12: u32 = 528;
334 /// DTP-rel. ADD imm. from 11:0
335 pub const R_AARCH64_TLSLD_ADD_DTPREL_LO12: u32 = 529;
336 /// Likewise; no ovfl. check
337 pub const R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: u32 = 530;
338 /// DTP-rel. LD/ST imm. 11:0
339 pub const R_AARCH64_TLSLD_LDST8_DTPREL_LO12: u32 = 531;
340 /// Likewise; no check
341 pub const R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC: u32 = 532;
342 /// DTP-rel. LD/ST imm. 11:1
343 pub const R_AARCH64_TLSLD_LDST16_DTPREL_LO12: u32 = 533;
344 /// Likewise; no check
345 pub const R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC: u32 = 534;
346 /// DTP-rel. LD/ST imm. 11:2
347 pub const R_AARCH64_TLSLD_LDST32_DTPREL_LO12: u32 = 535;
348 /// Likewise; no check
349 pub const R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC: u32 = 536;
350 /// DTP-rel. LD/ST imm. 11:3
351 pub const R_AARCH64_TLSLD_LDST64_DTPREL_LO12: u32 = 537;
352 /// Likewise; no check
353 pub const R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC: u32 = 538;
354 /// GOT-rel. MOV{N,Z} 31:16
355 pub const R_AARCH64_TLSIE_MOVW_GOTTPREL_G1: u32 = 539;
356 /// GOT-rel. MOVK 15:0
357 pub const R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: u32 = 540;
358 /// Page-rel. ADRP 32:12
359 pub const R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: u32 = 541;
360 /// Direct LD off. 11:3
361 pub const R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: u32 = 542;
362 /// PC-rel. load imm. 20:2
363 pub const R_AARCH64_TLSIE_LD_GOTTPREL_PREL19: u32 = 543;
364 /// TLS TP-rel. MOV{N,Z} 47:32
365 pub const R_AARCH64_TLSLE_MOVW_TPREL_G2: u32 = 544;
366 /// TLS TP-rel. MOV{N,Z} 31:16
367 pub const R_AARCH64_TLSLE_MOVW_TPREL_G1: u32 = 545;
368 /// Likewise; MOVK; no check
369 pub const R_AARCH64_TLSLE_MOVW_TPREL_G1_NC: u32 = 546;
370 /// TLS TP-rel. MOV{N,Z} 15:0
371 pub const R_AARCH64_TLSLE_MOVW_TPREL_G0: u32 = 547;
372 /// Likewise; MOVK; no check
373 pub const R_AARCH64_TLSLE_MOVW_TPREL_G0_NC: u32 = 548;
374 /// TP-rel. ADD imm. 23:12
375 pub const R_AARCH64_TLSLE_ADD_TPREL_HI12: u32 = 549;
376 /// TP-rel. ADD imm. 11:0
377 pub const R_AARCH64_TLSLE_ADD_TPREL_LO12: u32 = 550;
378 /// Likewise; no ovfl. check
379 pub const R_AARCH64_TLSLE_ADD_TPREL_LO12_NC: u32 = 551;
380 /// TP-rel. LD/ST off. 11:0
381 pub const R_AARCH64_TLSLE_LDST8_TPREL_LO12: u32 = 552;
382 /// Likewise; no ovfl. check.
383 pub const R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC: u32 = 553;
384 /// TP-rel. LD/ST off. 11:1
385 pub const R_AARCH64_TLSLE_LDST16_TPREL_LO12: u32 = 554;
386 /// Likewise; no check
387 pub const R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC: u32 = 555;
388 /// TP-rel. LD/ST off. 11:2
389 pub const R_AARCH64_TLSLE_LDST32_TPREL_LO12: u32 = 556;
390 /// Likewise; no check
391 pub const R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC: u32 = 557;
392 /// TP-rel. LD/ST off. 11:3
393 pub const R_AARCH64_TLSLE_LDST64_TPREL_LO12: u32 = 558;
394 /// Likewise; no check
395 pub const R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC: u32 = 559;
396 /// PC-rel. load immediate 20:2
397 pub const R_AARCH64_TLSDESC_LD_PREL19: u32 = 560;
398 /// PC-rel. ADR immediate 20:0
399 pub const R_AARCH64_TLSDESC_ADR_PREL21: u32 = 561;
400 /// Page-rel. ADRP imm. 32:12
401 pub const R_AARCH64_TLSDESC_ADR_PAGE21: u32 = 562;
402 /// Direct LD off. from 11:3
403 pub const R_AARCH64_TLSDESC_LD64_LO12: u32 = 563;
404 /// Direct ADD imm. from 11:0
405 pub const R_AARCH64_TLSDESC_ADD_LO12: u32 = 564;
406 /// GOT-rel. MOV{N,Z} imm. 31:16
407 pub const R_AARCH64_TLSDESC_OFF_G1: u32 = 565;
408 /// GOT-rel. MOVK imm. 15:0; no ck
409 pub const R_AARCH64_TLSDESC_OFF_G0_NC: u32 = 566;
410 /// Relax LDR
411 pub const R_AARCH64_TLSDESC_LDR: u32 = 567;
412 /// Relax ADD
413 pub const R_AARCH64_TLSDESC_ADD: u32 = 568;
414 /// Relax BLR
415 pub const R_AARCH64_TLSDESC_CALL: u32 = 569;
416 /// TP-rel. LD/ST off. 11:4
417 pub const R_AARCH64_TLSLE_LDST128_TPREL_LO12: u32 = 570;
418 /// Likewise; no check
419 pub const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC: u32 = 571;
420 /// DTP-rel. LD/ST imm. 11:4.
421 pub const R_AARCH64_TLSLD_LDST128_DTPREL_LO12: u32 = 572;
422 /// Likewise; no check
423 pub const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC: u32 = 573;
424 /// Copy symbol at runtime
425 pub const R_AARCH64_COPY: u32 = 1024;
426 /// Create GOT entry
427 pub const R_AARCH64_GLOB_DAT: u32 = 1025;
428 /// Create PLT entry
429 pub const R_AARCH64_JUMP_SLOT: u32 = 1026;
430 /// Adjust by program base
431 pub const R_AARCH64_RELATIVE: u32 = 1027;
432 /// Module number, 64 bit
433 pub const R_AARCH64_TLS_DTPMOD: u32 = 1028;
434 /// Module-relative offset, 64 bit
435 pub const R_AARCH64_TLS_DTPREL: u32 = 1029;
436 /// TP-relative offset, 64 bit
437 pub const R_AARCH64_TLS_TPREL: u32 = 1030;
438 /// TLS Descriptor
439 pub const R_AARCH64_TLSDESC: u32 = 1031;
440 /// STT_GNU_IFUNC relocation
441 pub const R_AARCH64_IRELATIVE: u32 = 1032;
442 
443 // ARM relocs
444 /// No reloc
445 pub const R_ARM_NONE: u32 = 0;
446 /// Deprecated PC relative 26 bit branch
447 pub const R_ARM_PC24: u32 = 1;
448 /// Direct 32 bit
449 pub const R_ARM_ABS32: u32 = 2;
450 /// PC relative 32 bit
451 pub const R_ARM_REL32: u32 = 3;
452 pub const R_ARM_PC13: u32 = 4;
453 /// Direct 16 bit
454 pub const R_ARM_ABS16: u32 = 5;
455 /// Direct 12 bit
456 pub const R_ARM_ABS12: u32 = 6;
457 /// Direct & 0x7C (LDR, STR)
458 pub const R_ARM_THM_ABS5: u32 = 7;
459 /// Direct 8 bit
460 pub const R_ARM_ABS8: u32 = 8;
461 pub const R_ARM_SBREL32: u32 = 9;
462 /// PC relative 24 bit (Thumb32 BL)
463 pub const R_ARM_THM_PC22: u32 = 10;
464 /// PC relative & 0x3FC(Thumb16 LDR, ADD, ADR).
465 pub const R_ARM_THM_PC8: u32 = 11;
466 pub const R_ARM_AMP_VCALL9: u32 = 12;
467 /// Obsolete static relocation
468 pub const R_ARM_SWI24: u32 = 13;
469 /// Dynamic relocation
470 pub const R_ARM_TLS_DESC: u32 = 13;
471 /// Reserved
472 pub const R_ARM_THM_SWI8: u32 = 14;
473 /// Reserved
474 pub const R_ARM_XPC25: u32 = 15;
475 /// Reserved
476 pub const R_ARM_THM_XPC22: u32 = 16;
477 /// ID of module containing symbol
478 pub const R_ARM_TLS_DTPMOD32: u32 = 17;
479 /// Offset in TLS block
480 pub const R_ARM_TLS_DTPOFF32: u32 = 18;
481 /// Offset in static TLS block
482 pub const R_ARM_TLS_TPOFF32: u32 = 19;
483 /// Copy symbol at runtime
484 pub const R_ARM_COPY: u32 = 20;
485 /// Create GOT entry
486 pub const R_ARM_GLOB_DAT: u32 = 21;
487 /// Create PLT entry
488 pub const R_ARM_JUMP_SLOT: u32 = 22;
489 /// Adjust by program base
490 pub const R_ARM_RELATIVE: u32 = 23;
491 /// 32 bit offset to GOT
492 pub const R_ARM_GOTOFF: u32 = 24;
493 /// 32 bit PC relative offset to GOT
494 pub const R_ARM_GOTPC: u32 = 25;
495 /// 32 bit GOT entry
496 pub const R_ARM_GOT32: u32 = 26;
497 /// Deprecated, 32 bit PLT address
498 pub const R_ARM_PLT32: u32 = 27;
499 /// PC relative 24 bit (BL, BLX)
500 pub const R_ARM_CALL: u32 = 28;
501 /// PC relative 24 bit (B, BL<cond>)
502 pub const R_ARM_JUMP24: u32 = 29;
503 /// PC relative 24 bit (Thumb32 B.W)
504 pub const R_ARM_THM_JUMP24: u32 = 30;
505 /// Adjust by program base
506 pub const R_ARM_BASE_ABS: u32 = 31;
507 /// Obsolete
508 pub const R_ARM_ALU_PCREL_7_0: u32 = 32;
509 /// Obsolete
510 pub const R_ARM_ALU_PCREL_15_8: u32 = 33;
511 /// Obsolete
512 pub const R_ARM_ALU_PCREL_23_15: u32 = 34;
513 /// Deprecated, prog. base relative
514 pub const R_ARM_LDR_SBREL_11_0: u32 = 35;
515 /// Deprecated, prog. base relative
516 pub const R_ARM_ALU_SBREL_19_12: u32 = 36;
517 /// Deprecated, prog. base relative
518 pub const R_ARM_ALU_SBREL_27_20: u32 = 37;
519 pub const R_ARM_TARGET1: u32 = 38;
520 /// Program base relative
521 pub const R_ARM_SBREL31: u32 = 39;
522 pub const R_ARM_V4BX: u32 = 40;
523 pub const R_ARM_TARGET2: u32 = 41;
524 /// 32 bit PC relative
525 pub const R_ARM_PREL31: u32 = 42;
526 /// Direct 16-bit (MOVW)
527 pub const R_ARM_MOVW_ABS_NC: u32 = 43;
528 /// Direct high 16-bit (MOVT)
529 pub const R_ARM_MOVT_ABS: u32 = 44;
530 /// PC relative 16-bit (MOVW)
531 pub const R_ARM_MOVW_PREL_NC: u32 = 45;
532 /// PC relative (MOVT)
533 pub const R_ARM_MOVT_PREL: u32 = 46;
534 /// Direct 16 bit (Thumb32 MOVW)
535 pub const R_ARM_THM_MOVW_ABS_NC: u32 = 47;
536 /// Direct high 16 bit (Thumb32 MOVT)
537 pub const R_ARM_THM_MOVT_ABS: u32 = 48;
538 /// PC relative 16 bit (Thumb32 MOVW)
539 pub const R_ARM_THM_MOVW_PREL_NC: u32 = 49;
540 /// PC relative high 16 bit (Thumb32 MOVT)
541 pub const R_ARM_THM_MOVT_PREL: u32 = 50;
542 /// PC relative 20 bit (Thumb32 B<cond>.W)
543 pub const R_ARM_THM_JUMP19: u32 = 51;
544 /// PC relative X & 0x7E (Thumb16 CBZ, CBNZ)
545 pub const R_ARM_THM_JUMP6: u32 = 52;
546 /// PC relative 12 bit (Thumb32 ADR.W)
547 pub const R_ARM_THM_ALU_PREL_11_0: u32 = 53;
548 /// PC relative 12 bit (Thumb32 LDR{D,SB,H,SH})
549 pub const R_ARM_THM_PC12: u32 = 54;
550 /// Direct 32-bit
551 pub const R_ARM_ABS32_NOI: u32 = 55;
552 /// PC relative 32-bit
553 pub const R_ARM_REL32_NOI: u32 = 56;
554 /// PC relative (ADD, SUB)
555 pub const R_ARM_ALU_PC_G0_NC: u32 = 57;
556 /// PC relative (ADD, SUB)
557 pub const R_ARM_ALU_PC_G0: u32 = 58;
558 /// PC relative (ADD, SUB)
559 pub const R_ARM_ALU_PC_G1_NC: u32 = 59;
560 /// PC relative (ADD, SUB)
561 pub const R_ARM_ALU_PC_G1: u32 = 60;
562 /// PC relative (ADD, SUB)
563 pub const R_ARM_ALU_PC_G2: u32 = 61;
564 /// PC relative (LDR,STR,LDRB,STRB)
565 pub const R_ARM_LDR_PC_G1: u32 = 62;
566 /// PC relative (LDR,STR,LDRB,STRB)
567 pub const R_ARM_LDR_PC_G2: u32 = 63;
568 /// PC relative (STR{D,H},LDR{D,SB,H,SH})
569 pub const R_ARM_LDRS_PC_G0: u32 = 64;
570 /// PC relative (STR{D,H},LDR{D,SB,H,SH})
571 pub const R_ARM_LDRS_PC_G1: u32 = 65;
572 /// PC relative (STR{D,H},LDR{D,SB,H,SH})
573 pub const R_ARM_LDRS_PC_G2: u32 = 66;
574 /// PC relative (LDC, STC)
575 pub const R_ARM_LDC_PC_G0: u32 = 67;
576 /// PC relative (LDC, STC)
577 pub const R_ARM_LDC_PC_G1: u32 = 68;
578 /// PC relative (LDC, STC)
579 pub const R_ARM_LDC_PC_G2: u32 = 69;
580 /// Program base relative (ADD,SUB)
581 pub const R_ARM_ALU_SB_G0_NC: u32 = 70;
582 /// Program base relative (ADD,SUB)
583 pub const R_ARM_ALU_SB_G0: u32 = 71;
584 /// Program base relative (ADD,SUB)
585 pub const R_ARM_ALU_SB_G1_NC: u32 = 72;
586 /// Program base relative (ADD,SUB)
587 pub const R_ARM_ALU_SB_G1: u32 = 73;
588 /// Program base relative (ADD,SUB)
589 pub const R_ARM_ALU_SB_G2: u32 = 74;
590 /// Program base relative (LDR,STR, LDRB, STRB)
591 pub const R_ARM_LDR_SB_G0: u32 = 75;
592 /// Program base relative (LDR, STR, LDRB, STRB)
593 pub const R_ARM_LDR_SB_G1: u32 = 76;
594 /// Program base relative (LDR, STR, LDRB, STRB)
595 pub const R_ARM_LDR_SB_G2: u32 = 77;
596 /// Program base relative (LDR, STR, LDRB, STRB)
597 pub const R_ARM_LDRS_SB_G0: u32 = 78;
598 /// Program base relative (LDR, STR, LDRB, STRB)
599 pub const R_ARM_LDRS_SB_G1: u32 = 79;
600 /// Program base relative (LDR, STR, LDRB, STRB)
601 pub const R_ARM_LDRS_SB_G2: u32 = 80;
602 /// Program base relative (LDC,STC)
603 pub const R_ARM_LDC_SB_G0: u32 = 81;
604 /// Program base relative (LDC,STC)
605 pub const R_ARM_LDC_SB_G1: u32 = 82;
606 /// Program base relative (LDC,STC)
607 pub const R_ARM_LDC_SB_G2: u32 = 83;
608 /// Program base relative 16 bit (MOVW)
609 pub const R_ARM_MOVW_BREL_NC: u32 = 84;
610 /// Program base relative high 16 bit (MOVT)
611 pub const R_ARM_MOVT_BREL: u32 = 85;
612 /// Program base relative 16 bit (MOVW)
613 pub const R_ARM_MOVW_BREL: u32 = 86;
614 /// Program base relative 16 bit (Thumb32 MOVW)
615 pub const R_ARM_THM_MOVW_BREL_NC: u32 = 87;
616 /// Program base relative high 16 bit (Thumb32 MOVT)
617 pub const R_ARM_THM_MOVT_BREL: u32 = 88;
618 /// Program base relative 16 bit (Thumb32 MOVW)
619 pub const R_ARM_THM_MOVW_BREL: u32 = 89;
620 pub const R_ARM_TLS_GOTDESC: u32 = 90;
621 pub const R_ARM_TLS_CALL: u32 = 91;
622 /// TLS relaxation
623 pub const R_ARM_TLS_DESCSEQ: u32 = 92;
624 pub const R_ARM_THM_TLS_CALL: u32 = 93;
625 pub const R_ARM_PLT32_ABS: u32 = 94;
626 /// GOT entry
627 pub const R_ARM_GOT_ABS: u32 = 95;
628 /// PC relative GOT entry
629 pub const R_ARM_GOT_PREL: u32 = 96;
630 /// GOT entry relative to GOT origin (LDR)
631 pub const R_ARM_GOT_BREL12: u32 = 97;
632 /// 12 bit, GOT entry relative to GOT origin (LDR, STR)
633 pub const R_ARM_GOTOFF12: u32 = 98;
634 pub const R_ARM_GOTRELAX: u32 = 99;
635 pub const R_ARM_GNU_VTENTRY: u32 = 100;
636 pub const R_ARM_GNU_VTINHERIT: u32 = 101;
637 /// PC relative & 0xFFE (Thumb16 B)
638 pub const R_ARM_THM_PC11: u32 = 102;
639 /// PC relative & 0x1FE (Thumb16 B/B<cond>)
640 pub const R_ARM_THM_PC9: u32 = 103;
641 /// PC-rel 32 bit for global dynamic thread local data
642 pub const R_ARM_TLS_GD32: u32 = 104;
643 /// PC-rel 32 bit for local dynamic thread local data
644 pub const R_ARM_TLS_LDM32: u32 = 105;
645 /// 32 bit offset relative to TLS block
646 pub const R_ARM_TLS_LDO32: u32 = 106;
647 /// PC-rel 32 bit for GOT entry of static TLS block offset
648 pub const R_ARM_TLS_IE32: u32 = 107;
649 /// 32 bit offset relative to static TLS block
650 pub const R_ARM_TLS_LE32: u32 = 108;
651 /// 12 bit relative to TLS block (LDR, STR)
652 pub const R_ARM_TLS_LDO12: u32 = 109;
653 /// 12 bit relative to static TLS block (LDR, STR)
654 pub const R_ARM_TLS_LE12: u32 = 110;
655 /// 12 bit GOT entry relative to GOT origin (LDR)
656 pub const R_ARM_TLS_IE12GP: u32 = 111;
657 /// Obsolete
658 pub const R_ARM_ME_TOO: u32 = 128;
659 pub const R_ARM_THM_TLS_DESCSEQ: u32 = 129;
660 pub const R_ARM_THM_TLS_DESCSEQ16: u32 = 129;
661 pub const R_ARM_THM_TLS_DESCSEQ32: u32 = 130;
662 /// GOT entry relative to GOT origin, 12 bit (Thumb32 LDR)
663 pub const R_ARM_THM_GOT_BREL12: u32 = 131;
664 pub const R_ARM_IRELATIVE: u32 = 160;
665 pub const R_ARM_RXPC25: u32 = 249;
666 pub const R_ARM_RSBREL32: u32 = 250;
667 pub const R_ARM_THM_RPC22: u32 = 251;
668 pub const R_ARM_RREL32: u32 = 252;
669 pub const R_ARM_RABS22: u32 = 253;
670 pub const R_ARM_RPC24: u32 = 254;
671 pub const R_ARM_RBASE: u32 = 255;
672 /// Keep this the last entry
673 pub const R_ARM_NUM: u32 = 256;
674 
675 ///////////////////
676 // OpenRisc
677 ///////////////////
678 pub const R_OR1K_NONE: u32 = 0;
679 pub const R_OR1K_32: u32 = 1;
680 pub const R_OR1K_16: u32 = 2;
681 pub const R_OR1K_8: u32 = 3;
682 pub const R_OR1K_LO_16_IN_INSN: u32 = 4;
683 pub const R_OR1K_HI_16_IN_INSN: u32 = 5;
684 pub const R_OR1K_INSN_REL_26: u32 = 6;
685 pub const R_OR1K_GNU_VTENTRY: u32 = 7;
686 pub const R_OR1K_GNU_VTINHERIT: u32 = 8;
687 pub const R_OR1K_32_PCREL: u32 = 9;
688 pub const R_OR1K_16_PCREL: u32 = 10;
689 pub const R_OR1K_8_PCREL: u32 = 11;
690 pub const R_OR1K_GOTPC_HI16: u32 = 12;
691 pub const R_OR1K_GOTPC_LO16: u32 = 13;
692 pub const R_OR1K_GOT16: u32 = 14;
693 pub const R_OR1K_PLT26: u32 = 15;
694 pub const R_OR1K_GOTOFF_HI16: u32 = 16;
695 pub const R_OR1K_GOTOFF_LO16: u32 = 17;
696 pub const R_OR1K_COPY: u32 = 18;
697 pub const R_OR1K_GLOB_DAT: u32 = 19;
698 pub const R_OR1K_JMP_SLOT: u32 = 20;
699 pub const R_OR1K_RELATIVE: u32 = 21;
700 pub const R_OR1K_TLS_GD_HI16: u32 = 22;
701 pub const R_OR1K_TLS_GD_LO16: u32 = 23;
702 pub const R_OR1K_TLS_LDM_HI16: u32 = 24;
703 pub const R_OR1K_TLS_LDM_LO16: u32 = 25;
704 pub const R_OR1K_TLS_LDO_HI16: u32 = 26;
705 pub const R_OR1K_TLS_LDO_LO16: u32 = 27;
706 pub const R_OR1K_TLS_IE_HI16: u32 = 28;
707 pub const R_OR1K_TLS_IE_LO16: u32 = 29;
708 pub const R_OR1K_TLS_LE_HI16: u32 = 30;
709 pub const R_OR1K_TLS_LE_LO16: u32 = 31;
710 pub const R_OR1K_TLS_TPOFF: u32 = 32;
711 pub const R_OR1K_TLS_DTPOFF: u32 = 33;
712 pub const R_OR1K_TLS_DTPMOD: u32 = 34;
713 pub const R_OR1K_NUM: u32 = 35;
714 
715 /////////////////////
716 // MIPS
717 /////////////////////
718 /// No reloc
719 pub const R_MIPS_NONE: u32 = 0;
720 /// Direct 16 bit
721 pub const R_MIPS_16: u32 = 1;
722 /// Direct 32 bit
723 pub const R_MIPS_32: u32 = 2;
724 /// PC relative 32 bit
725 pub const R_MIPS_REL32: u32 = 3;
726 /// Direct 26 bit shifted
727 pub const R_MIPS_26: u32 = 4;
728 /// High 16 bit
729 pub const R_MIPS_HI16: u32 = 5;
730 /// Low 16 bit
731 pub const R_MIPS_LO16: u32 = 6;
732 /// GP relative 16 bit
733 pub const R_MIPS_GPREL16: u32 = 7;
734 /// 16 bit literal entry
735 pub const R_MIPS_LITERAL: u32 = 8;
736 /// 16 bit GOT entry
737 pub const R_MIPS_GOT16: u32 = 9;
738 /// PC relative 16 bit
739 pub const R_MIPS_PC16: u32 = 10;
740 /// 16 bit GOT entry for function
741 pub const R_MIPS_CALL16: u32 = 11;
742 /// GP relative 32 bit
743 pub const R_MIPS_GPREL32: u32 = 12;
744 pub const R_MIPS_SHIFT5: u32 = 16;
745 pub const R_MIPS_SHIFT6: u32 = 17;
746 pub const R_MIPS_64: u32 = 18;
747 pub const R_MIPS_GOT_DISP: u32 = 19;
748 pub const R_MIPS_GOT_PAGE: u32 = 20;
749 pub const R_MIPS_GOT_OFST: u32 = 21;
750 pub const R_MIPS_GOT_HI16: u32 = 22;
751 pub const R_MIPS_GOT_LO16: u32 = 23;
752 pub const R_MIPS_SUB: u32 = 24;
753 pub const R_MIPS_INSERT_A: u32 = 25;
754 pub const R_MIPS_INSERT_B: u32 = 26;
755 pub const R_MIPS_DELETE: u32 = 27;
756 pub const R_MIPS_HIGHER: u32 = 28;
757 pub const R_MIPS_HIGHEST: u32 = 29;
758 pub const R_MIPS_CALL_HI16: u32 = 30;
759 pub const R_MIPS_CALL_LO16: u32 = 31;
760 pub const R_MIPS_SCN_DISP: u32 = 32;
761 pub const R_MIPS_REL16: u32 = 33;
762 pub const R_MIPS_ADD_IMMEDIATE: u32 = 34;
763 pub const R_MIPS_PJUMP: u32 = 35;
764 pub const R_MIPS_RELGOT: u32 = 36;
765 pub const R_MIPS_JALR: u32 = 37;
766 /// Module number 32 bit
767 pub const R_MIPS_TLS_DTPMOD32: u32 = 38;
768 /// Module-relative offset 32 bit
769 pub const R_MIPS_TLS_DTPREL32: u32 = 39;
770 /// Module number 64 bit
771 pub const R_MIPS_TLS_DTPMOD64: u32 = 40;
772 /// Module-relative offset 64 bit
773 pub const R_MIPS_TLS_DTPREL64: u32 = 41;
774 /// 16 bit GOT offset for GD
775 pub const R_MIPS_TLS_GD: u32 = 42;
776 /// 16 bit GOT offset for LDM
777 pub const R_MIPS_TLS_LDM: u32 = 43;
778 /// Module-relative offset, high 16 bits
779 pub const R_MIPS_TLS_DTPREL_HI16: u32 = 44;
780 /// Module-relative offset, low 16 bits
781 pub const R_MIPS_TLS_DTPREL_LO16: u32 = 45;
782 /// 16 bit GOT offset for IE
783 pub const R_MIPS_TLS_GOTTPREL: u32 = 46;
784 /// TP-relative offset, 32 bit6
785 pub const R_MIPS_TLS_TPREL32: u32 = 47;
786 /// TP-relative offset, 64 bit
787 pub const R_MIPS_TLS_TPREL64: u32 = 48;
788 /// TP-relative offset, high 16 bits
789 pub const R_MIPS_TLS_TPREL_HI16: u32 = 49;
790 /// TP-relative offset, low 16 bits
791 pub const R_MIPS_TLS_TPREL_LO16: u32 = 50;
792 pub const R_MIPS_GLOB_DAT: u32 = 51;
793 pub const R_MIPS_COPY: u32 = 126;
794 pub const R_MIPS_JUMP_SLOT: u32 = 127;
795 pub const R_MIPS_NUM: u32 = 128;
796 
797 ///////////////////
798 // RISC-V
799 // See https://github.com/riscv/riscv-elf-psabi-doc
800 ///////////////////
801 /// None
802 pub const R_RISCV_NONE: u32 = 0;
803 /// Runtime relocation: word32 = S + A
804 pub const R_RISCV_32: u32 = 1;
805 /// Runtime relocation: word64 = S + A
806 pub const R_RISCV_64: u32 = 2;
807 /// Runtime relocation: word32,64 = B + A
808 pub const R_RISCV_RELATIVE: u32 = 3;
809 /// Runtime relocation: must be in executable, not allowed in shared library
810 pub const R_RISCV_COPY: u32 = 4;
811 /// Runtime relocation: word32,64 = S; handled by PLT unless LD_BIND_NOW
812 pub const R_RISCV_JUMP_SLOT: u32 = 5;
813 /// TLS relocation: word32 = S->TLSINDEX
814 pub const R_RISCV_TLS_DTPMOD32: u32 = 6;
815 /// TLS relocation: word64 = S->TLSINDEX
816 pub const R_RISCV_TLS_DTPMOD64: u32 = 7;
817 /// TLS relocation: word32 = TLS + S + A - TLS_TP_OFFSET
818 pub const R_RISCV_TLS_DTPREL32: u32 = 8;
819 /// TLS relocation: word64 = TLS + S + A - TLS_TP_OFFSET
820 pub const R_RISCV_TLS_DTPREL64: u32 = 9;
821 /// TLS relocation: word32 = TLS + S + A + S_TLS_OFFSET - TLS_DTV_OFFSET
822 pub const R_RISCV_TLS_TPREL32: u32 = 10;
823 /// TLS relocation: word64 = TLS + S + A + S_TLS_OFFSET - TLS_DTV_OFFSET
824 pub const R_RISCV_TLS_TPREL64: u32 = 11;
825 /// PC-relative branch (SB-Type)
826 pub const R_RISCV_BRANCH: u32 = 16;
827 /// PC-relative jump (UJ-Type)
828 pub const R_RISCV_JAL: u32 = 17;
829 /// PC-relative call: MACRO call,tail (auipc+jalr pair)
830 pub const R_RISCV_CALL: u32 = 18;
831 /// PC-relative call (PLT): MACRO call,tail (auipc+jalr pair) PIC
832 pub const R_RISCV_CALL_PLT: u32 = 19;
833 /// PC-relative GOT reference: MACRO la
834 pub const R_RISCV_GOT_HI20: u32 = 20;
835 /// PC-relative TLS IE GOT offset: MACRO la.tls.ie
836 pub const R_RISCV_TLS_GOT_HI20: u32 = 21;
837 /// PC-relative TLS GD reference: MACRO la.tls.gd
838 pub const R_RISCV_TLS_GD_HI20: u32 = 22;
839 /// PC-relative reference: %pcrel_hi(symbol) (U-Type)
840 pub const R_RISCV_PCREL_HI20: u32 = 23;
841 /// PC-relative reference: %pcrel_lo(symbol) (I-Type)
842 pub const R_RISCV_PCREL_LO12_I: u32 = 24;
843 /// PC-relative reference: %pcrel_lo(symbol) (S-Type)
844 pub const R_RISCV_PCREL_LO12_S: u32 = 25;
845 /// Absolute address: %hi(symbol) (U-Type)
846 pub const R_RISCV_HI20: u32 = 26;
847 /// Absolute address: %lo(symbol) (I-Type)
848 pub const R_RISCV_LO12_I: u32 = 27;
849 /// Absolute address: %lo(symbol) (S-Type)
850 pub const R_RISCV_LO12_S: u32 = 28;
851 /// TLS LE thread offset: %tprel_hi(symbol) (U-Type)
852 pub const R_RISCV_TPREL_HI20: u32 = 29;
853 /// TLS LE thread offset: %tprel_lo(symbol) (I-Type)
854 pub const R_RISCV_TPREL_LO12_I: u32 = 30;
855 /// TLS LE thread offset: %tprel_lo(symbol) (S-Type)
856 pub const R_RISCV_TPREL_LO12_S: u32 = 31;
857 /// TLS LE thread usage: %tprel_add(symbol)
858 pub const R_RISCV_TPREL_ADD: u32 = 32;
859 /// 8-bit label addition: word8 = S + A
860 pub const R_RISCV_ADD8: u32 = 33;
861 /// 16-bit label addition: word16 = S + A
862 pub const R_RISCV_ADD16: u32 = 34;
863 /// 32-bit label addition: word32 = S + A
864 pub const R_RISCV_ADD32: u32 = 35;
865 /// 64-bit label addition: word64 = S + A
866 pub const R_RISCV_ADD64: u32 = 36;
867 /// 8-bit label subtraction: word8 = S - A
868 pub const R_RISCV_SUB8: u32 = 37;
869 /// 16-bit label subtraction: word16 = S - A
870 pub const R_RISCV_SUB16: u32 = 38;
871 /// 32-bit label subtraction: word32 = S - A
872 pub const R_RISCV_SUB32: u32 = 39;
873 /// 64-bit label subtraction: word64 = S - A
874 pub const R_RISCV_SUB64: u32 = 40;
875 /// GNU C++ vtable hierarchy
876 pub const R_RISCV_GNU_VTINHERIT: u32 = 41;
877 /// GNU C++ vtable member usage
878 pub const R_RISCV_GNU_VTENTRY: u32 = 42;
879 /// Alignment statement
880 pub const R_RISCV_ALIGN: u32 = 43;
881 /// PC-relative branch offset (CB-Type)
882 pub const R_RISCV_RVC_BRANCH: u32 = 44;
883 /// PC-relative jump offset (CJ-Type)
884 pub const R_RISCV_RVC_JUMP: u32 = 45;
885 /// Absolute address (CI-Type)
886 pub const R_RISCV_RVC_LUI: u32 = 46;
887 /// GP-relative reference (I-Type)
888 pub const R_RISCV_GPREL_I: u32 = 47;
889 /// GP-relative reference (S-Type)
890 pub const R_RISCV_GPREL_S: u32 = 48;
891 /// TP-relative TLS LE load (I-Type)
892 pub const R_RISCV_TPREL_I: u32 = 49;
893 /// TP-relative TLS LE store (S-Type)
894 pub const R_RISCV_TPREL_S: u32 = 50;
895 /// Instruction pair can be relaxed
896 pub const R_RISCV_RELAX: u32 = 51;
897 /// Local label subtraction
898 pub const R_RISCV_SUB6: u32 = 52;
899 /// Local label subtraction
900 pub const R_RISCV_SET6: u32 = 53;
901 /// Local label subtraction
902 pub const R_RISCV_SET8: u32 = 54;
903 /// Local label subtraction
904 pub const R_RISCV_SET16: u32 = 55;
905 /// Local label subtraction
906 pub const R_RISCV_SET32: u32 = 56;
907 
908 #[inline]
r_to_str(typ: u32, machine: u16) -> &'static str909 pub fn r_to_str(typ: u32, machine: u16) -> &'static str {
910     use crate::elf::header::*;
911     match machine {
912         // x86
913         EM_386 => { match typ {
914         R_386_NONE => "386_NONE",
915         R_386_32 => "386_32",
916         R_386_PC32 => "386_PC32",
917         R_386_GOT32 => "386_GOT32",
918         R_386_PLT32 => "386_PLT32",
919         R_386_COPY => "386_COPY",
920         R_386_GLOB_DAT => "386_GLOB_DAT",
921         R_386_JMP_SLOT => "386_JMP_SLOT",
922         R_386_RELATIVE => "386_RELATIVE",
923         R_386_GOTOFF => "386_GOTOFF",
924         R_386_GOTPC => "386_GOTPC",
925         R_386_32PLT => "386_32PLT",
926         R_386_TLS_TPOFF => "386_TLS_TPOFF",
927         R_386_TLS_IE => "386_TLS_IE",
928         R_386_TLS_GOTIE => "386_TLS_GOTIE",
929         R_386_TLS_LE => "386_TLS_LE",
930         R_386_TLS_GD => "386_TLS_GD",
931         R_386_TLS_LDM => "386_TLS_LDM",
932         R_386_16 => "386_16",
933         R_386_PC16 => "386_PC16",
934         R_386_8 => "386_8",
935         R_386_PC8 => "386_PC8",
936         R_386_TLS_GD_32 => "386_TLS_GD_32",
937         R_386_TLS_GD_PUSH => "386_TLS_GD_PUSH",
938         R_386_TLS_GD_CALL => "386_TLS_GD_CALL",
939         R_386_TLS_GD_POP => "386_TLS_GD_POP",
940         R_386_TLS_LDM_32 => "386_TLS_LDM_32",
941         R_386_TLS_LDM_PUSH => "386_TLS_LDM_PUSH",
942         R_386_TLS_LDM_CALL => "386_TLS_LDM_CALL",
943         R_386_TLS_LDM_POP => "386_TLS_LDM_POP",
944         R_386_TLS_LDO_32 => "386_TLS_LDO_32",
945         R_386_TLS_IE_32 => "386_TLS_IE_32",
946         R_386_TLS_LE_32 => "386_TLS_LE_32",
947         R_386_TLS_DTPMOD32 => "386_TLS_DTPMOD32",
948         R_386_TLS_DTPOFF32 => "386_TLS_DTPOFF32",
949         R_386_TLS_TPOFF32 => "386_TLS_TPOFF32",
950         R_386_SIZE32 => "386_SIZE32",
951         R_386_TLS_GOTDESC => "386_TLS_GOTDESC",
952         R_386_TLS_DESC_CALL => "386_TLS_DESC_CALL",
953         R_386_TLS_DESC => "386_TLS_DESC",
954         R_386_IRELATIVE => "386_IRELATIVE",
955         R_386_GOT32X => "386_GOT32X",
956         _ => "R_UNKNOWN_386",
957         }},
958         EM_X86_64 => { match typ {
959         R_X86_64_64 => "X86_64_64",
960         R_X86_64_PC32 => "X86_64_PC32",
961         R_X86_64_GOT32 => "X86_64_GOT32",
962         R_X86_64_PLT32 => "X86_64_PLT32",
963         R_X86_64_COPY => "X86_64_COPY",
964         R_X86_64_GLOB_DAT => "X86_64_GLOB_DAT",
965         R_X86_64_JUMP_SLOT => "X86_64_JUMP_SLOT",
966         R_X86_64_RELATIVE => "X86_64_RELATIVE",
967         R_X86_64_GOTPCREL => "X86_64_GOTPCREL",
968         R_X86_64_32 => "X86_64_32",
969         R_X86_64_32S => "X86_64_32S",
970         R_X86_64_16 => "X86_64_16",
971         R_X86_64_PC16 => "X86_64_PC16",
972         R_X86_64_8 => "X86_64_8",
973         R_X86_64_PC8 => "X86_64_PC8",
974         R_X86_64_DTPMOD64 => "X86_64_DTPMOD64",
975         R_X86_64_DTPOFF64 => "X86_64_DTPOFF64",
976         R_X86_64_TPOFF64 => "X86_64_TPOFF64",
977         R_X86_64_TLSGD => "X86_64_TLSGD",
978         R_X86_64_TLSLD => "X86_64_TLSLD",
979         R_X86_64_DTPOFF32 => "X86_64_DTPOFF32",
980         R_X86_64_GOTTPOFF => "X86_64_GOTTPOFF",
981         R_X86_64_TPOFF32 => "X86_64_TPOFF32",
982         R_X86_64_PC64 => "X86_64_PC64",
983         R_X86_64_GOTOFF64 => "X86_64_GOTOFF64",
984         R_X86_64_GOTPC32 => "X86_64_GOTPC32",
985         R_X86_64_GOT64 => "X86_64_GOT64",
986         R_X86_64_GOTPCREL64 => "X86_64_GOTPCREL64",
987         R_X86_64_GOTPC64 => "X86_64_GOTPC64",
988         R_X86_64_GOTPLT64 => "X86_64_GOTPLT64",
989         R_X86_64_PLTOFF64 => "X86_64_PLTOFF64",
990         R_X86_64_SIZE32 => "X86_64_SIZE32",
991         R_X86_64_SIZE64 => "X86_64_SIZE64",
992         R_X86_64_GOTPC32_TLSDESC => "X86_64_GOTPC32_TLSDESC",
993         R_X86_64_TLSDESC_CALL => "X86_64_TLSDESC_CALL",
994         R_X86_64_TLSDESC => "X86_64_TLSDESC",
995         R_X86_64_IRELATIVE => "X86_64_IRELATIVE",
996         R_X86_64_RELATIVE64 => "X86_64_RELATIVE64",
997         R_X86_64_GOTPCRELX => "R_X86_64_GOTPCRELX",
998         R_X86_64_REX_GOTPCRELX => "R_X86_64_REX_GOTPCRELX",
999         _ => "R_UNKNOWN_X86_64",
1000         }},
1001         // openrisc
1002         EM_OPENRISC => { match typ {
1003         R_OR1K_NONE => "OR1K_NONE",
1004         R_OR1K_32 => "OR1K_32",
1005         R_OR1K_16 => "OR1K_16",
1006         R_OR1K_8 => "OR1K_8",
1007         R_OR1K_LO_16_IN_INSN => "OR1K_LO_16_IN_INSN",
1008         R_OR1K_HI_16_IN_INSN => "OR1K_HI_16_IN_INSN",
1009         R_OR1K_INSN_REL_26 => "OR1K_INSN_REL_26",
1010         R_OR1K_GNU_VTENTRY => "OR1K_GNU_VTENTRY",
1011         R_OR1K_GNU_VTINHERIT => "OR1K_GNU_VTINHERIT",
1012         R_OR1K_32_PCREL => "OR1K_32_PCREL",
1013         R_OR1K_16_PCREL => "OR1K_16_PCREL",
1014         R_OR1K_8_PCREL => "OR1K_8_PCREL",
1015         R_OR1K_GOTPC_HI16 => "OR1K_GOTPC_HI16",
1016         R_OR1K_GOTPC_LO16 => "OR1K_GOTPC_LO16",
1017         R_OR1K_GOT16 => "OR1K_GOT16",
1018         R_OR1K_PLT26 => "OR1K_PLT26",
1019         R_OR1K_GOTOFF_HI16 => "OR1K_GOTOFF_HI16",
1020         R_OR1K_GOTOFF_LO16 => "OR1K_GOTOFF_LO16",
1021         R_OR1K_COPY => "OR1K_COPY",
1022         R_OR1K_GLOB_DAT => "OR1K_GLOB_DAT",
1023         R_OR1K_JMP_SLOT => "OR1K_JMP_SLOT",
1024         R_OR1K_RELATIVE => "OR1K_RELATIVE",
1025         R_OR1K_TLS_GD_HI16 => "OR1K_TLS_GD_HI16",
1026         R_OR1K_TLS_GD_LO16 => "OR1K_TLS_GD_LO16",
1027         R_OR1K_TLS_LDM_HI16 => "OR1K_TLS_LDM_HI16",
1028         R_OR1K_TLS_LDM_LO16 => "OR1K_TLS_LDM_LO16",
1029         R_OR1K_TLS_LDO_HI16 => "OR1K_TLS_LDO_HI16",
1030         R_OR1K_TLS_LDO_LO16 => "OR1K_TLS_LDO_LO16",
1031         R_OR1K_TLS_IE_HI16 => "OR1K_TLS_IE_HI16",
1032         R_OR1K_TLS_IE_LO16 => "OR1K_TLS_IE_LO16",
1033         R_OR1K_TLS_LE_HI16 => "OR1K_TLS_LE_HI16",
1034         R_OR1K_TLS_LE_LO16 => "OR1K_TLS_LE_LO16",
1035         R_OR1K_TLS_TPOFF => "OR1K_TLS_TPOFF",
1036         R_OR1K_TLS_DTPOFF => "OR1K_TLS_DTPOFF",
1037         R_OR1K_TLS_DTPMOD => "OR1K_TLS_DTPMOD",
1038         _ => "R_UNKNOWN_OR1K",
1039         }},
1040         // arm64
1041         EM_AARCH64 => { match typ {
1042         R_AARCH64_P32_ABS32 => "AARCH64_P32_ABS32",
1043         R_AARCH64_P32_COPY => "AARCH64_P32_COPY",
1044         R_AARCH64_P32_GLOB_DAT => "AARCH64_P32_GLOB_DAT",
1045         R_AARCH64_P32_JUMP_SLOT => "AARCH64_P32_JUMP_SLOT",
1046         R_AARCH64_P32_RELATIVE => "AARCH64_P32_RELATIVE",
1047         R_AARCH64_P32_TLS_DTPMOD => "AARCH64_P32_TLS_DTPMOD",
1048         R_AARCH64_P32_TLS_DTPREL => "AARCH64_P32_TLS_DTPREL",
1049         R_AARCH64_P32_TLS_TPREL => "AARCH64_P32_TLS_TPREL",
1050         R_AARCH64_P32_TLSDESC => "AARCH64_P32_TLSDESC",
1051         R_AARCH64_P32_IRELATIVE => "AARCH64_P32_IRELATIVE",
1052         R_AARCH64_ABS64 => "AARCH64_ABS64",
1053         R_AARCH64_ABS32 => "AARCH64_ABS32",
1054         R_AARCH64_ABS16 => "AARCH64_ABS16",
1055         R_AARCH64_PREL64 => "AARCH64_PREL64",
1056         R_AARCH64_PREL32 => "AARCH64_PREL32",
1057         R_AARCH64_PREL16 => "AARCH64_PREL16",
1058         R_AARCH64_MOVW_UABS_G0 => "AARCH64_MOVW_UABS_G0",
1059         R_AARCH64_MOVW_UABS_G0_NC => "AARCH64_MOVW_UABS_G0_NC",
1060         R_AARCH64_MOVW_UABS_G1 => "AARCH64_MOVW_UABS_G1",
1061         R_AARCH64_MOVW_UABS_G1_NC => "AARCH64_MOVW_UABS_G1_NC",
1062         R_AARCH64_MOVW_UABS_G2 => "AARCH64_MOVW_UABS_G2",
1063         R_AARCH64_MOVW_UABS_G2_NC => "AARCH64_MOVW_UABS_G2_NC",
1064         R_AARCH64_MOVW_UABS_G3 => "AARCH64_MOVW_UABS_G3",
1065         R_AARCH64_MOVW_SABS_G0 => "AARCH64_MOVW_SABS_G0",
1066         R_AARCH64_MOVW_SABS_G1 => "AARCH64_MOVW_SABS_G1",
1067         R_AARCH64_MOVW_SABS_G2 => "AARCH64_MOVW_SABS_G2",
1068         R_AARCH64_LD_PREL_LO19 => "AARCH64_LD_PREL_LO19",
1069         R_AARCH64_ADR_PREL_LO21 => "AARCH64_ADR_PREL_LO21",
1070         R_AARCH64_ADR_PREL_PG_HI21 => "AARCH64_ADR_PREL_PG_HI21",
1071         R_AARCH64_ADR_PREL_PG_HI21_NC => "AARCH64_ADR_PREL_PG_HI21_NC",
1072         R_AARCH64_ADD_ABS_LO12_NC => "AARCH64_ADD_ABS_LO12_NC",
1073         R_AARCH64_LDST8_ABS_LO12_NC => "AARCH64_LDST8_ABS_LO12_NC",
1074         R_AARCH64_TSTBR14 => "AARCH64_TSTBR14",
1075         R_AARCH64_CONDBR19 => "AARCH64_CONDBR19",
1076         R_AARCH64_JUMP26 => "AARCH64_JUMP26",
1077         R_AARCH64_CALL26 => "AARCH64_CALL26",
1078         R_AARCH64_LDST16_ABS_LO12_NC => "AARCH64_LDST16_ABS_LO12_NC",
1079         R_AARCH64_LDST32_ABS_LO12_NC => "AARCH64_LDST32_ABS_LO12_NC",
1080         R_AARCH64_LDST64_ABS_LO12_NC => "AARCH64_LDST64_ABS_LO12_NC",
1081         R_AARCH64_MOVW_PREL_G0 => "AARCH64_MOVW_PREL_G0",
1082         R_AARCH64_MOVW_PREL_G0_NC => "AARCH64_MOVW_PREL_G0_NC",
1083         R_AARCH64_MOVW_PREL_G1 => "AARCH64_MOVW_PREL_G1",
1084         R_AARCH64_MOVW_PREL_G1_NC => "AARCH64_MOVW_PREL_G1_NC",
1085         R_AARCH64_MOVW_PREL_G2 => "AARCH64_MOVW_PREL_G2",
1086         R_AARCH64_MOVW_PREL_G2_NC => "AARCH64_MOVW_PREL_G2_NC",
1087         R_AARCH64_MOVW_PREL_G3 => "AARCH64_MOVW_PREL_G3",
1088         R_AARCH64_LDST128_ABS_LO12_NC => "AARCH64_LDST128_ABS_LO12_NC",
1089         R_AARCH64_MOVW_GOTOFF_G0 => "AARCH64_MOVW_GOTOFF_G0",
1090         R_AARCH64_MOVW_GOTOFF_G0_NC => "AARCH64_MOVW_GOTOFF_G0_NC",
1091         R_AARCH64_MOVW_GOTOFF_G1 => "AARCH64_MOVW_GOTOFF_G1",
1092         R_AARCH64_MOVW_GOTOFF_G1_NC => "AARCH64_MOVW_GOTOFF_G1_NC",
1093         R_AARCH64_MOVW_GOTOFF_G2 => "AARCH64_MOVW_GOTOFF_G2",
1094         R_AARCH64_MOVW_GOTOFF_G2_NC => "AARCH64_MOVW_GOTOFF_G2_NC",
1095         R_AARCH64_MOVW_GOTOFF_G3 => "AARCH64_MOVW_GOTOFF_G3",
1096         R_AARCH64_GOTREL64 => "AARCH64_GOTREL64",
1097         R_AARCH64_GOTREL32 => "AARCH64_GOTREL32",
1098         R_AARCH64_GOT_LD_PREL19 => "AARCH64_GOT_LD_PREL19",
1099         R_AARCH64_LD64_GOTOFF_LO15 => "AARCH64_LD64_GOTOFF_LO15",
1100         R_AARCH64_ADR_GOT_PAGE => "AARCH64_ADR_GOT_PAGE",
1101         R_AARCH64_LD64_GOT_LO12_NC => "AARCH64_LD64_GOT_LO12_NC",
1102         R_AARCH64_LD64_GOTPAGE_LO15 => "AARCH64_LD64_GOTPAGE_LO15",
1103         R_AARCH64_TLSGD_ADR_PREL21 => "AARCH64_TLSGD_ADR_PREL21",
1104         R_AARCH64_TLSGD_ADR_PAGE21 => "AARCH64_TLSGD_ADR_PAGE21",
1105         R_AARCH64_TLSGD_ADD_LO12_NC => "AARCH64_TLSGD_ADD_LO12_NC",
1106         R_AARCH64_TLSGD_MOVW_G1 => "AARCH64_TLSGD_MOVW_G1",
1107         R_AARCH64_TLSGD_MOVW_G0_NC => "AARCH64_TLSGD_MOVW_G0_NC",
1108         R_AARCH64_TLSLD_ADR_PREL21 => "AARCH64_TLSLD_ADR_PREL21",
1109         R_AARCH64_TLSLD_ADR_PAGE21 => "AARCH64_TLSLD_ADR_PAGE21",
1110         R_AARCH64_TLSLD_ADD_LO12_NC => "AARCH64_TLSLD_ADD_LO12_NC",
1111         R_AARCH64_TLSLD_MOVW_G1 => "AARCH64_TLSLD_MOVW_G1",
1112         R_AARCH64_TLSLD_MOVW_G0_NC => "AARCH64_TLSLD_MOVW_G0_NC",
1113         R_AARCH64_TLSLD_LD_PREL19 => "AARCH64_TLSLD_LD_PREL19",
1114         R_AARCH64_TLSLD_MOVW_DTPREL_G2 => "AARCH64_TLSLD_MOVW_DTPREL_G2",
1115         R_AARCH64_TLSLD_MOVW_DTPREL_G1 => "AARCH64_TLSLD_MOVW_DTPREL_G1",
1116         R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC => "AARCH64_TLSLD_MOVW_DTPREL_G1_NC",
1117         R_AARCH64_TLSLD_MOVW_DTPREL_G0 => "AARCH64_TLSLD_MOVW_DTPREL_G0",
1118         R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC => "AARCH64_TLSLD_MOVW_DTPREL_G0_NC",
1119         R_AARCH64_TLSLD_ADD_DTPREL_HI12 => "AARCH64_TLSLD_ADD_DTPREL_HI12",
1120         R_AARCH64_TLSLD_ADD_DTPREL_LO12 => "AARCH64_TLSLD_ADD_DTPREL_LO12",
1121         R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC => "AARCH64_TLSLD_ADD_DTPREL_LO12_NC",
1122         R_AARCH64_TLSLD_LDST8_DTPREL_LO12 => "AARCH64_TLSLD_LDST8_DTPREL_LO12",
1123         R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC => "AARCH64_TLSLD_LDST8_DTPREL_LO12_NC",
1124         R_AARCH64_TLSLD_LDST16_DTPREL_LO12 => "AARCH64_TLSLD_LDST16_DTPREL_LO12",
1125         R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC => "AARCH64_TLSLD_LDST16_DTPREL_LO12_NC",
1126         R_AARCH64_TLSLD_LDST32_DTPREL_LO12 => "AARCH64_TLSLD_LDST32_DTPREL_LO12",
1127         R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC => "AARCH64_TLSLD_LDST32_DTPREL_LO12_NC",
1128         R_AARCH64_TLSLD_LDST64_DTPREL_LO12 => "AARCH64_TLSLD_LDST64_DTPREL_LO12",
1129         R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC => "AARCH64_TLSLD_LDST64_DTPREL_LO12_NC",
1130         R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 => "AARCH64_TLSIE_MOVW_GOTTPREL_G1",
1131         R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC => "AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC",
1132         R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 => "AARCH64_TLSIE_ADR_GOTTPREL_PAGE21",
1133         R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC => "AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC",
1134         R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 => "AARCH64_TLSIE_LD_GOTTPREL_PREL19",
1135         R_AARCH64_TLSLE_MOVW_TPREL_G2 => "AARCH64_TLSLE_MOVW_TPREL_G2",
1136         R_AARCH64_TLSLE_MOVW_TPREL_G1 => "AARCH64_TLSLE_MOVW_TPREL_G1",
1137         R_AARCH64_TLSLE_MOVW_TPREL_G1_NC => "AARCH64_TLSLE_MOVW_TPREL_G1_NC",
1138         R_AARCH64_TLSLE_MOVW_TPREL_G0 => "AARCH64_TLSLE_MOVW_TPREL_G0",
1139         R_AARCH64_TLSLE_MOVW_TPREL_G0_NC => "AARCH64_TLSLE_MOVW_TPREL_G0_NC",
1140         R_AARCH64_TLSLE_ADD_TPREL_HI12 => "AARCH64_TLSLE_ADD_TPREL_HI12",
1141         R_AARCH64_TLSLE_ADD_TPREL_LO12 => "AARCH64_TLSLE_ADD_TPREL_LO12",
1142         R_AARCH64_TLSLE_ADD_TPREL_LO12_NC => "AARCH64_TLSLE_ADD_TPREL_LO12_NC",
1143         R_AARCH64_TLSLE_LDST8_TPREL_LO12 => "AARCH64_TLSLE_LDST8_TPREL_LO12",
1144         R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC => "AARCH64_TLSLE_LDST8_TPREL_LO12_NC",
1145         R_AARCH64_TLSLE_LDST16_TPREL_LO12 => "AARCH64_TLSLE_LDST16_TPREL_LO12",
1146         R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC => "AARCH64_TLSLE_LDST16_TPREL_LO12_NC",
1147         R_AARCH64_TLSLE_LDST32_TPREL_LO12 => "AARCH64_TLSLE_LDST32_TPREL_LO12",
1148         R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC => "AARCH64_TLSLE_LDST32_TPREL_LO12_NC",
1149         R_AARCH64_TLSLE_LDST64_TPREL_LO12 => "AARCH64_TLSLE_LDST64_TPREL_LO12",
1150         R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC => "AARCH64_TLSLE_LDST64_TPREL_LO12_NC",
1151         R_AARCH64_TLSDESC_LD_PREL19 => "AARCH64_TLSDESC_LD_PREL19",
1152         R_AARCH64_TLSDESC_ADR_PREL21 => "AARCH64_TLSDESC_ADR_PREL21",
1153         R_AARCH64_TLSDESC_ADR_PAGE21 => "AARCH64_TLSDESC_ADR_PAGE21",
1154         R_AARCH64_TLSDESC_LD64_LO12 => "AARCH64_TLSDESC_LD64_LO12",
1155         R_AARCH64_TLSDESC_ADD_LO12 => "AARCH64_TLSDESC_ADD_LO12",
1156         R_AARCH64_TLSDESC_OFF_G1 => "AARCH64_TLSDESC_OFF_G1",
1157         R_AARCH64_TLSDESC_OFF_G0_NC => "AARCH64_TLSDESC_OFF_G0_NC",
1158         R_AARCH64_TLSDESC_LDR => "AARCH64_TLSDESC_LDR",
1159         R_AARCH64_TLSDESC_ADD => "AARCH64_TLSDESC_ADD",
1160         R_AARCH64_TLSDESC_CALL => "AARCH64_TLSDESC_CALL",
1161         R_AARCH64_TLSLE_LDST128_TPREL_LO12 => "AARCH64_TLSLE_LDST128_TPREL_LO12",
1162         R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC => "AARCH64_TLSLE_LDST128_TPREL_LO12_NC",
1163         R_AARCH64_TLSLD_LDST128_DTPREL_LO12 => "AARCH64_TLSLD_LDST128_DTPREL_LO12",
1164         R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC => "AARCH64_TLSLD_LDST128_DTPREL_LO12_NC",
1165         R_AARCH64_COPY => "AARCH64_COPY",
1166         R_AARCH64_GLOB_DAT => "AARCH64_GLOB_DAT",
1167         R_AARCH64_JUMP_SLOT => "AARCH64_JUMP_SLOT",
1168         R_AARCH64_RELATIVE => "AARCH64_RELATIVE",
1169         R_AARCH64_TLS_DTPMOD => "AARCH64_TLS_DTPMOD",
1170         R_AARCH64_TLS_DTPREL => "AARCH64_TLS_DTPREL",
1171         R_AARCH64_TLS_TPREL => "AARCH64_TLS_TPREL",
1172         R_AARCH64_TLSDESC => "AARCH64_TLSDESC",
1173         R_AARCH64_IRELATIVE => "AARCH64_IRELATIVE",
1174          _ => "R_UNKNOWN_AARCH64",
1175         }},
1176         // arm
1177         EM_ARM => { match typ {
1178         R_ARM_PC24 => "ARM_PC24",
1179         R_ARM_ABS32 => "ARM_ABS32",
1180         R_ARM_REL32 => "ARM_REL32",
1181         R_ARM_PC13 => "ARM_PC13",
1182         R_ARM_ABS16 => "ARM_ABS16",
1183         R_ARM_ABS12 => "ARM_ABS12",
1184         R_ARM_THM_ABS5 => "ARM_THM_ABS5",
1185         R_ARM_ABS8 => "ARM_ABS8",
1186         R_ARM_SBREL32 => "ARM_SBREL32",
1187         R_ARM_THM_PC22 => "ARM_THM_PC22",
1188         R_ARM_THM_PC8 => "ARM_THM_PC8",
1189         R_ARM_AMP_VCALL9 => "ARM_AMP_VCALL9",
1190         R_ARM_TLS_DESC => "ARM_TLS_DESC",
1191         R_ARM_THM_SWI8 => "ARM_THM_SWI8",
1192         R_ARM_XPC25 => "ARM_XPC25",
1193         R_ARM_THM_XPC22 => "ARM_THM_XPC22",
1194         R_ARM_TLS_DTPMOD32 => "ARM_TLS_DTPMOD32",
1195         R_ARM_TLS_DTPOFF32 => "ARM_TLS_DTPOFF32",
1196         R_ARM_TLS_TPOFF32 => "ARM_TLS_TPOFF32",
1197         R_ARM_COPY => "ARM_COPY",
1198         R_ARM_GLOB_DAT => "ARM_GLOB_DAT",
1199         R_ARM_JUMP_SLOT => "ARM_JUMP_SLOT",
1200         R_ARM_RELATIVE => "ARM_RELATIVE",
1201         R_ARM_GOTOFF => "ARM_GOTOFF",
1202         R_ARM_GOTPC => "ARM_GOTPC",
1203         R_ARM_GOT32 => "ARM_GOT32",
1204         R_ARM_PLT32 => "ARM_PLT32",
1205         R_ARM_CALL => "ARM_CALL",
1206         R_ARM_JUMP24 => "ARM_JUMP24",
1207         R_ARM_THM_JUMP24 => "ARM_THM_JUMP24",
1208         R_ARM_BASE_ABS => "ARM_BASE_ABS",
1209         R_ARM_ALU_PCREL_7_0 => "ARM_ALU_PCREL_7_0",
1210         R_ARM_ALU_PCREL_15_8 => "ARM_ALU_PCREL_15_8",
1211         R_ARM_ALU_PCREL_23_15 => "ARM_ALU_PCREL_23_15",
1212         R_ARM_LDR_SBREL_11_0 => "ARM_LDR_SBREL_11_0",
1213         R_ARM_ALU_SBREL_19_12 => "ARM_ALU_SBREL_19_12",
1214         R_ARM_ALU_SBREL_27_20 => "ARM_ALU_SBREL_27_20",
1215         R_ARM_TARGET1 => "ARM_TARGET1",
1216         R_ARM_SBREL31 => "ARM_SBREL31",
1217         R_ARM_V4BX => "ARM_V4BX",
1218         R_ARM_TARGET2 => "ARM_TARGET2",
1219         R_ARM_PREL31 => "ARM_PREL31",
1220         R_ARM_MOVW_ABS_NC => "ARM_MOVW_ABS_NC",
1221         R_ARM_MOVT_ABS => "ARM_MOVT_ABS",
1222         R_ARM_MOVW_PREL_NC => "ARM_MOVW_PREL_NC",
1223         R_ARM_MOVT_PREL => "ARM_MOVT_PREL",
1224         R_ARM_THM_MOVW_ABS_NC => "ARM_THM_MOVW_ABS_NC",
1225         R_ARM_THM_MOVT_ABS => "ARM_THM_MOVT_ABS",
1226         R_ARM_THM_MOVW_PREL_NC => "ARM_THM_MOVW_PREL_NC",
1227         R_ARM_THM_MOVT_PREL => "ARM_THM_MOVT_PREL",
1228         R_ARM_THM_JUMP19 => "ARM_THM_JUMP19",
1229         R_ARM_THM_JUMP6 => "ARM_THM_JUMP6",
1230         R_ARM_THM_ALU_PREL_11_0 => "ARM_THM_ALU_PREL_11_0",
1231         R_ARM_THM_PC12 => "ARM_THM_PC12",
1232         R_ARM_ABS32_NOI => "ARM_ABS32_NOI",
1233         R_ARM_REL32_NOI => "ARM_REL32_NOI",
1234         R_ARM_ALU_PC_G0_NC => "ARM_ALU_PC_G0_NC",
1235         R_ARM_ALU_PC_G0 => "ARM_ALU_PC_G0",
1236         R_ARM_ALU_PC_G1_NC => "ARM_ALU_PC_G1_NC",
1237         R_ARM_ALU_PC_G1 => "ARM_ALU_PC_G1",
1238         R_ARM_ALU_PC_G2 => "ARM_ALU_PC_G2",
1239         R_ARM_LDR_PC_G1 => "ARM_LDR_PC_G1",
1240         R_ARM_LDR_PC_G2 => "ARM_LDR_PC_G2",
1241         R_ARM_LDRS_PC_G0 => "ARM_LDRS_PC_G0",
1242         R_ARM_LDRS_PC_G1 => "ARM_LDRS_PC_G1",
1243         R_ARM_LDRS_PC_G2 => "ARM_LDRS_PC_G2",
1244         R_ARM_LDC_PC_G0 => "ARM_LDC_PC_G0",
1245         R_ARM_LDC_PC_G1 => "ARM_LDC_PC_G1",
1246         R_ARM_LDC_PC_G2 => "ARM_LDC_PC_G2",
1247         R_ARM_ALU_SB_G0_NC => "ARM_ALU_SB_G0_NC",
1248         R_ARM_ALU_SB_G0 => "ARM_ALU_SB_G0",
1249         R_ARM_ALU_SB_G1_NC => "ARM_ALU_SB_G1_NC",
1250         R_ARM_ALU_SB_G1 => "ARM_ALU_SB_G1",
1251         R_ARM_ALU_SB_G2 => "ARM_ALU_SB_G2",
1252         R_ARM_LDR_SB_G0 => "ARM_LDR_SB_G0",
1253         R_ARM_LDR_SB_G1 => "ARM_LDR_SB_G1",
1254         R_ARM_LDR_SB_G2 => "ARM_LDR_SB_G2",
1255         R_ARM_LDRS_SB_G0 => "ARM_LDRS_SB_G0",
1256         R_ARM_LDRS_SB_G1 => "ARM_LDRS_SB_G1",
1257         R_ARM_LDRS_SB_G2 => "ARM_LDRS_SB_G2",
1258         R_ARM_LDC_SB_G0 => "ARM_LDC_SB_G0",
1259         R_ARM_LDC_SB_G1 => "ARM_LDC_SB_G1",
1260         R_ARM_LDC_SB_G2 => "ARM_LDC_SB_G2",
1261         R_ARM_MOVW_BREL_NC => "ARM_MOVW_BREL_NC",
1262         R_ARM_MOVT_BREL => "ARM_MOVT_BREL",
1263         R_ARM_MOVW_BREL => "ARM_MOVW_BREL",
1264         R_ARM_THM_MOVW_BREL_NC => "ARM_THM_MOVW_BREL_NC",
1265         R_ARM_THM_MOVT_BREL => "ARM_THM_MOVT_BREL",
1266         R_ARM_THM_MOVW_BREL => "ARM_THM_MOVW_BREL",
1267         R_ARM_TLS_GOTDESC => "ARM_TLS_GOTDESC",
1268         R_ARM_TLS_CALL => "ARM_TLS_CALL",
1269         R_ARM_TLS_DESCSEQ => "ARM_TLS_DESCSEQ",
1270         R_ARM_THM_TLS_CALL => "ARM_THM_TLS_CALL",
1271         R_ARM_PLT32_ABS => "ARM_PLT32_ABS",
1272         R_ARM_GOT_ABS => "ARM_GOT_ABS",
1273         R_ARM_GOT_PREL => "ARM_GOT_PREL",
1274         R_ARM_GOT_BREL12 => "ARM_GOT_BREL12",
1275         R_ARM_GOTOFF12 => "ARM_GOTOFF12",
1276         R_ARM_GOTRELAX => "ARM_GOTRELAX",
1277         R_ARM_GNU_VTENTRY => "ARM_GNU_VTENTRY",
1278         R_ARM_GNU_VTINHERIT => "ARM_GNU_VTINHERIT",
1279         R_ARM_THM_PC11 => "ARM_THM_PC11",
1280         R_ARM_THM_PC9 => "ARM_THM_PC9",
1281         R_ARM_TLS_GD32 => "ARM_TLS_GD32",
1282         R_ARM_TLS_LDM32 => "ARM_TLS_LDM32",
1283         R_ARM_TLS_LDO32 => "ARM_TLS_LDO32",
1284         R_ARM_TLS_IE32 => "ARM_TLS_IE32",
1285         R_ARM_TLS_LE32 => "ARM_TLS_LE32",
1286         R_ARM_TLS_LDO12 => "ARM_TLS_LDO12",
1287         R_ARM_TLS_LE12 => "ARM_TLS_LE12",
1288         R_ARM_TLS_IE12GP => "ARM_TLS_IE12GP",
1289         R_ARM_ME_TOO => "ARM_ME_TOO",
1290         R_ARM_THM_TLS_DESCSEQ16 => "ARM_THM_TLS_DESCSEQ16",
1291         R_ARM_THM_TLS_DESCSEQ32 => "ARM_THM_TLS_DESCSEQ32",
1292         R_ARM_THM_GOT_BREL12 => "ARM_THM_GOT_BREL12",
1293         R_ARM_IRELATIVE => "ARM_IRELATIVE",
1294         R_ARM_RXPC25 => "ARM_RXPC25",
1295         R_ARM_RSBREL32 => "ARM_RSBREL32",
1296         R_ARM_THM_RPC22 => "ARM_THM_RPC22",
1297         R_ARM_RREL32 => "ARM_RREL32",
1298         R_ARM_RABS22 => "ARM_RABS22",
1299         R_ARM_RPC24 => "ARM_RPC24",
1300         R_ARM_RBASE => "ARM_RBASE",
1301          _ => "R_UNKNOWN_ARM",
1302         }},
1303         // MIPS
1304         EM_MIPS | EM_MIPS_RS3_LE | EM_MIPS_X => { match typ {
1305         R_MIPS_NONE => "R_MIPS_NONE",
1306         R_MIPS_16 => "R_MIPS_16",
1307         R_MIPS_32 => "R_MIPS_32",
1308         R_MIPS_REL32 => "R_MIPS_REL32",
1309         R_MIPS_26 => "R_MIPS_26",
1310         R_MIPS_HI16 => "R_MIPS_HI16",
1311         R_MIPS_LO16 => "R_MIPS_LO16",
1312         R_MIPS_GPREL16 => "R_MIPS_GPREL16",
1313         R_MIPS_LITERAL => "R_MIPS_LITERAL",
1314         R_MIPS_GOT16 => "R_MIPS_GOT16",
1315         R_MIPS_PC16 => "R_MIPS_PC16",
1316         R_MIPS_CALL16 => "R_MIPS_CALL16",
1317         R_MIPS_GPREL32 => "R_MIPS_GPREL32",
1318         R_MIPS_SHIFT5 => "R_MIPS_SHIFT5",
1319         R_MIPS_SHIFT6 => "R_MIPS_SHIFT6",
1320         R_MIPS_64 => "R_MIPS_64",
1321         R_MIPS_GOT_DISP => "R_MIPS_GOT_DISP",
1322         R_MIPS_GOT_PAGE => "R_MIPS_GOT_PAGE",
1323         R_MIPS_GOT_OFST => "R_MIPS_GOT_OFST",
1324         R_MIPS_GOT_HI16 => "R_MIPS_GOT_HI16",
1325         R_MIPS_GOT_LO16 => "R_MIPS_GOT_LO16",
1326         R_MIPS_SUB => "R_MIPS_SUB",
1327         R_MIPS_INSERT_A => "R_MIPS_INSERT_A",
1328         R_MIPS_INSERT_B => "R_MIPS_INSERT_B",
1329         R_MIPS_DELETE => "R_MIPS_DELETE",
1330         R_MIPS_HIGHER => "R_MIPS_HIGHER",
1331         R_MIPS_HIGHEST => "R_MIPS_HIGHEST",
1332         R_MIPS_CALL_HI16 => "R_MIPS_CALL_HI16",
1333         R_MIPS_CALL_LO16 => "R_MIPS_CALL_LO16",
1334         R_MIPS_SCN_DISP => "R_MIPS_SCN_DISP",
1335         R_MIPS_REL16 => "R_MIPS_REL16",
1336         R_MIPS_ADD_IMMEDIATE => "R_MIPS_ADD_IMMEDIATE",
1337         R_MIPS_PJUMP => "R_MIPS_PJUMP",
1338         R_MIPS_RELGOT => "R_MIPS_RELGOT",
1339         R_MIPS_JALR => "R_MIPS_JALR",
1340         R_MIPS_TLS_DTPMOD32 => "R_MIPS_TLS_DTPMOD32",
1341         R_MIPS_TLS_DTPREL32 => "R_MIPS_TLS_DTPREL32",
1342         R_MIPS_TLS_DTPMOD64 => "R_MIPS_TLS_DTPMOD64",
1343         R_MIPS_TLS_DTPREL64 => "R_MIPS_TLS_DTPREL64",
1344         R_MIPS_TLS_GD => "R_MIPS_TLS_GD",
1345         R_MIPS_TLS_LDM => "R_MIPS_TLS_LDM",
1346         R_MIPS_TLS_DTPREL_HI16 => "R_MIPS_TLS_DTPREL_HI16",
1347         R_MIPS_TLS_DTPREL_LO16 => "R_MIPS_TLS_DTPREL_LO16",
1348         R_MIPS_TLS_GOTTPREL => "R_MIPS_TLS_GOTTPREL",
1349         R_MIPS_TLS_TPREL32 => "R_MIPS_TLS_TPREL32",
1350         R_MIPS_TLS_TPREL64 => "R_MIPS_TLS_TPREL64",
1351         R_MIPS_TLS_TPREL_HI16 => "R_MIPS_TLS_TPREL_HI16",
1352         R_MIPS_TLS_TPREL_LO16 => "R_MIPS_TLS_TPREL_LO16",
1353         R_MIPS_GLOB_DAT => "R_MIPS_GLOB_DAT",
1354         R_MIPS_COPY => "R_MIPS_COPY",
1355         R_MIPS_JUMP_SLOT => "R_MIPS_JUMP_SLOT",
1356         _ => "R_UNKNOWN_MIPS",
1357         }},
1358         // RISC-V
1359         EM_RISCV => { match typ {
1360         R_RISCV_NONE => "R_RISCV_NONE",
1361         R_RISCV_32 => "R_RISCV_32",
1362         R_RISCV_64 => "R_RISCV_64",
1363         R_RISCV_RELATIVE => "R_RISCV_RELATIVE",
1364         R_RISCV_COPY => "R_RISCV_COPY",
1365         R_RISCV_JUMP_SLOT => "R_RISCV_JUMP_SLOT",
1366         R_RISCV_TLS_DTPMOD32 => "R_RISCV_TLS_DTPMOD32",
1367         R_RISCV_TLS_DTPMOD64 => "R_RISCV_TLS_DTPMOD64",
1368         R_RISCV_TLS_DTPREL32 => "R_RISCV_TLS_DTPREL32",
1369         R_RISCV_TLS_DTPREL64 => "R_RISCV_TLS_DTPREL64",
1370         R_RISCV_TLS_TPREL32 => "R_RISCV_TLS_TPREL32",
1371         R_RISCV_TLS_TPREL64 => "R_RISCV_TLS_TPREL64",
1372         R_RISCV_BRANCH => "R_RISCV_BRANCH",
1373         R_RISCV_JAL => "R_RISCV_JAL",
1374         R_RISCV_CALL => "R_RISCV_CALL",
1375         R_RISCV_CALL_PLT => "R_RISCV_CALL_PLT",
1376         R_RISCV_GOT_HI20 => "R_RISCV_GOT_HI20",
1377         R_RISCV_TLS_GOT_HI20 => "R_RISCV_TLS_GOT_HI20",
1378         R_RISCV_TLS_GD_HI20 => "R_RISCV_TLS_GD_HI20",
1379         R_RISCV_PCREL_HI20 => "R_RISCV_PCREL_HI20",
1380         R_RISCV_PCREL_LO12_I => "R_RISCV_PCREL_LO12_I",
1381         R_RISCV_PCREL_LO12_S => "R_RISCV_PCREL_LO12_S",
1382         R_RISCV_HI20 => "R_RISCV_HI20",
1383         R_RISCV_LO12_I => "R_RISCV_LO12_I",
1384         R_RISCV_LO12_S => "R_RISCV_LO12_S",
1385         R_RISCV_TPREL_HI20 => "R_RISCV_TPREL_HI20",
1386         R_RISCV_TPREL_LO12_I => "R_RISCV_TPREL_LO12_I",
1387         R_RISCV_TPREL_LO12_S => "R_RISCV_TPREL_LO12_S",
1388         R_RISCV_TPREL_ADD => "R_RISCV_TPREL_ADD",
1389         R_RISCV_ADD8 => "R_RISCV_ADD8",
1390         R_RISCV_ADD16 => "R_RISCV_ADD16",
1391         R_RISCV_ADD32 => "R_RISCV_ADD32",
1392         R_RISCV_ADD64 => "R_RISCV_ADD64",
1393         R_RISCV_SUB8 => "R_RISCV_SUB8",
1394         R_RISCV_SUB16 => "R_RISCV_SUB16",
1395         R_RISCV_SUB32 => "R_RISCV_SUB32",
1396         R_RISCV_SUB64 => "R_RISCV_SUB64",
1397         R_RISCV_GNU_VTINHERIT => "R_RISCV_GNU_VTINHERIT",
1398         R_RISCV_GNU_VTENTRY => "R_RISCV_GNU_VTENTRY",
1399         R_RISCV_ALIGN => "R_RISCV_ALIGN",
1400         R_RISCV_RVC_BRANCH => "R_RISCV_RVC_BRANCH",
1401         R_RISCV_RVC_JUMP => "R_RISCV_RVC_JUMP",
1402         R_RISCV_RVC_LUI => "R_RISCV_RVC_LUI",
1403         R_RISCV_GPREL_I => "R_RISCV_GPREL_I",
1404         R_RISCV_GPREL_S => "R_RISCV_GPREL_S",
1405         R_RISCV_TPREL_I => "R_RISCV_TPREL_I",
1406         R_RISCV_TPREL_S => "R_RISCV_TPREL_S",
1407         R_RISCV_RELAX => "R_RISCV_RELAX",
1408         R_RISCV_SUB6 => "R_RISCV_SUB6",
1409         R_RISCV_SET6 => "R_RISCV_SET6",
1410         R_RISCV_SET8 => "R_RISCV_SET8",
1411         R_RISCV_SET16 => "R_RISCV_SET16",
1412         R_RISCV_SET32 => "R_RISCV_SET32",
1413         _ => "R_UNKNOWN_RISCV",
1414         }},
1415         _ => "R_UNKNOWN",
1416     }
1417 }
1418