26#define ELFMAG "\177ELF"
29 u8 e_ident[EI_NIDENT];
100 SHN_LORESERVE = 0xff00,
108 SHN_HIRESERVE = 0xffff
126 SHT_PREINIT_ARRAY = 16,
128 SHT_SYMTAB_SHNDX = 18,
129 SHT_X86_64_UNWIND = 0x70000001,
133 SHF_WRITE = u32{1} << 0,
134 SHF_ALLOC = u32{1} << 1,
135 SHF_EXECINSTR = u32{1} << 2,
136 SHF_MERGE = u32{1} << 4,
137 SHF_STRINGS = u32{1} << 5,
138 SHF_INFO_LINK = u32{1} << 6,
139 SHF_LINK_ORDER = u32{1} << 7,
140 SHF_OS_NONCONFORMING = u32{1} << 8,
141 SHF_GROUP = u32{1} << 9,
142 SHF_TLS = u32{1} << 10,
143 SHF_COMPRESSED = u32{1} << 11,
144 SHF_GNU_RETAIN = u32{1} << 21,
145 SHF_EXCLUDE = u32{1} << 31,
150 GRP_MASKOS = 0x0ff00000,
151 GRP_MASKPROC = 0xf0000000
168#define ELF64_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
213#define ELF64_R_INFO(sym, type) ((u64(sym) << 32) + u32(type))
222 R_X86_64_GLOB_DAT = 6,
223 R_X86_64_JUMP_SLOT = 7,
224 R_X86_64_RELATIVE = 8,
225 R_X86_64_GOTPCREL = 9,
232 R_X86_64_DTPMOD64 = 16,
233 R_X86_64_DTPOFF64 = 17,
234 R_X86_64_TPOFF64 = 18,
237 R_X86_64_DTPOFF32 = 21,
238 R_X86_64_GOTTPOFF = 22,
239 R_X86_64_TPOFF32 = 23,
241 R_X86_64_GOTOFF64 = 25,
242 R_X86_64_GOTPC32 = 26,
244 R_X86_64_GOTPCREL64 = 28,
245 R_X86_64_GOTPC64 = 29,
246 R_X86_64_GOTPLT64 = 30,
247 R_X86_64_PLTOFF64 = 31,
248 R_X86_64_SIZE32 = 32,
249 R_X86_64_SIZE64 = 33,
250 R_X86_64_GOTPC32_TLSDESC = 34,
251 R_X86_64_TLSDESC_CALL = 35,
252 R_X86_64_TLSDESC = 36,
253 R_X86_64_IRELATIVE = 37,
254 R_X86_64_GOTPCRELX = 41,
255 R_X86_64_REX_GOTPCRELX = 42,
256 R_X86_64_CODE_4_GOTPCRELX = 43,
257 R_X86_64_CODE_4_GOTTPOFF = 44,
258 R_X86_64_CODE_4_GOTPC32_TLSDESC = 45,
259 R_X86_64_CODE_6_GOTTPOFF = 50,
264 R_AARCH64_ABS64 = 257,
265 R_AARCH64_ABS32 = 258,
266 R_AARCH64_ABS16 = 259,
267 R_AARCH64_PREL64 = 260,
268 R_AARCH64_PREL32 = 261,
269 R_AARCH64_PREL16 = 262,
270 R_AARCH64_MOVW_UABS_G0 = 263,
271 R_AARCH64_MOVW_UABS_G0_NC = 264,
272 R_AARCH64_MOVW_UABS_G1 = 265,
273 R_AARCH64_MOVW_UABS_G1_NC = 266,
274 R_AARCH64_MOVW_UABS_G2 = 267,
275 R_AARCH64_MOVW_UABS_G2_NC = 268,
276 R_AARCH64_MOVW_UABS_G3 = 269,
277 R_AARCH64_MOVW_SABS_G0 = 270,
278 R_AARCH64_MOVW_SABS_G1 = 271,
279 R_AARCH64_MOVW_SABS_G2 = 272,
280 R_AARCH64_LD_PREL_LO19 = 273,
281 R_AARCH64_ADR_PREL_LO21 = 274,
282 R_AARCH64_ADR_PREL_PG_HI21 = 275,
283 R_AARCH64_ADR_PREL_PG_HI21_NC = 276,
284 R_AARCH64_ADD_ABS_LO12_NC = 277,
285 R_AARCH64_LDST8_ABS_LO12_NC = 278,
286 R_AARCH64_TSTBR14 = 279,
287 R_AARCH64_CONDBR19 = 280,
288 R_AARCH64_JUMP26 = 282,
289 R_AARCH64_CALL26 = 283,
290 R_AARCH64_LDST16_ABS_LO12_NC = 284,
291 R_AARCH64_LDST32_ABS_LO12_NC = 285,
292 R_AARCH64_LDST64_ABS_LO12_NC = 286,
293 R_AARCH64_MOVW_PREL_G0 = 287,
294 R_AARCH64_MOVW_PREL_G0_NC = 288,
295 R_AARCH64_MOVW_PREL_G1 = 289,
296 R_AARCH64_MOVW_PREL_G1_NC = 290,
297 R_AARCH64_MOVW_PREL_G2 = 291,
298 R_AARCH64_MOVW_PREL_G2_NC = 292,
299 R_AARCH64_MOVW_PREL_G3 = 293,
300 R_AARCH64_LDST128_ABS_LO12_NC = 299,
301 R_AARCH64_MOVW_GOTOFF_G0 = 300,
302 R_AARCH64_MOVW_GOTOFF_G0_NC = 301,
303 R_AARCH64_MOVW_GOTOFF_G1 = 302,
304 R_AARCH64_MOVW_GOTOFF_G1_NC = 303,
305 R_AARCH64_MOVW_GOTOFF_G2 = 304,
306 R_AARCH64_MOVW_GOTOFF_G2_NC = 305,
307 R_AARCH64_MOVW_GOTOFF_G3 = 306,
308 R_AARCH64_GOTREL64 = 307,
309 R_AARCH64_GOTREL32 = 308,
310 R_AARCH64_GOT_LD_PREL19 = 309,
311 R_AARCH64_LD64_GOTOFF_LO15 = 310,
312 R_AARCH64_ADR_GOT_PAGE = 311,
313 R_AARCH64_LD64_GOT_LO12_NC = 312,
314 R_AARCH64_LD64_GOTPAGE_LO15 = 313,
315 R_AARCH64_TLSGD_ADR_PREL21 = 512,
316 R_AARCH64_TLSGD_ADR_PAGE21 = 513,
317 R_AARCH64_TLSGD_ADD_LO12_NC = 514,
318 R_AARCH64_TLSGD_MOVW_G1 = 515,
319 R_AARCH64_TLSGD_MOVW_G0_NC = 516,
320 R_AARCH64_TLSLD_ADR_PREL21 = 517,
321 R_AARCH64_TLSLD_ADR_PAGE21 = 518,
322 R_AARCH64_TLSLD_ADD_LO12_NC = 519,
323 R_AARCH64_TLSLD_MOVW_G1 = 520,
324 R_AARCH64_TLSLD_MOVW_G0_NC = 521,
325 R_AARCH64_TLSLD_LD_PREL19 = 522,
326 R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 523,
327 R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 524,
328 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 525,
329 R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 526,
330 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 527,
331 R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 528,
332 R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 529,
333 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 530,
334 R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 531,
335 R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 532,
336 R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 533,
337 R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 534,
338 R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 535,
339 R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 536,
340 R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 537,
341 R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 538,
342 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 539,
343 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 540,
344 R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 541,
345 R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 542,
346 R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 543,
347 R_AARCH64_TLSLE_MOVW_TPREL_G2 = 544,
348 R_AARCH64_TLSLE_MOVW_TPREL_G1 = 545,
349 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 546,
350 R_AARCH64_TLSLE_MOVW_TPREL_G0 = 547,
351 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 548,
352 R_AARCH64_TLSLE_ADD_TPREL_HI12 = 549,
353 R_AARCH64_TLSLE_ADD_TPREL_LO12 = 550,
354 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 551,
355 R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 552,
356 R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 553,
357 R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 554,
358 R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 555,
359 R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 556,
360 R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 557,
361 R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 558,
362 R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 559,
363 R_AARCH64_TLSDESC_LD_PREL19 = 560,
364 R_AARCH64_TLSDESC_ADR_PREL21 = 561,
365 R_AARCH64_TLSDESC_ADR_PAGE21 = 562,
366 R_AARCH64_TLSDESC_LD64_LO12 = 563,
367 R_AARCH64_TLSDESC_ADD_LO12 = 564,
368 R_AARCH64_TLSDESC_OFF_G1 = 565,
369 R_AARCH64_TLSDESC_OFF_G0_NC = 566,
370 R_AARCH64_TLSDESC_LDR = 567,
371 R_AARCH64_TLSDESC_ADD = 568,
372 R_AARCH64_TLSDESC_CALL = 569,
373 R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570,
374 R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571,
375 R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572,
376 R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573,
377 R_AARCH64_COPY = 1024,
378 R_AARCH64_GLOB_DAT = 1025,
379 R_AARCH64_JUMP_SLOT = 1026,
380 R_AARCH64_RELATIVE = 1027,
381 R_AARCH64_TLS_DTPMOD = 1028,
382 R_AARCH64_TLS_DTPREL = 1029,
383 R_AARCH64_TLS_TPREL = 1030,
384 R_AARCH64_TLSDESC = 1031,
385 R_AARCH64_IRELATIVE = 1032,