File indexing completed on 2026-05-10 08:43:21
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #ifndef LLVM_BINARYFORMAT_ELF_H
0020 #define LLVM_BINARYFORMAT_ELF_H
0021
0022 #include "llvm/ADT/StringRef.h"
0023 #include <cstdint>
0024 #include <cstring>
0025 #include <type_traits>
0026
0027 namespace llvm {
0028 namespace ELF {
0029
0030 using Elf32_Addr = uint32_t;
0031 using Elf32_Off = uint32_t;
0032 using Elf32_Half = uint16_t;
0033 using Elf32_Word = uint32_t;
0034 using Elf32_Sword = int32_t;
0035
0036 using Elf64_Addr = uint64_t;
0037 using Elf64_Off = uint64_t;
0038 using Elf64_Half = uint16_t;
0039 using Elf64_Word = uint32_t;
0040 using Elf64_Sword = int32_t;
0041 using Elf64_Xword = uint64_t;
0042 using Elf64_Sxword = int64_t;
0043
0044
0045 static const char ElfMagic[] = {0x7f, 'E', 'L', 'F', '\0'};
0046
0047
0048 enum {
0049 EI_MAG0 = 0,
0050 EI_MAG1 = 1,
0051 EI_MAG2 = 2,
0052 EI_MAG3 = 3,
0053 EI_CLASS = 4,
0054 EI_DATA = 5,
0055 EI_VERSION = 6,
0056 EI_OSABI = 7,
0057 EI_ABIVERSION = 8,
0058 EI_PAD = 9,
0059 EI_NIDENT = 16
0060 };
0061
0062 struct Elf32_Ehdr {
0063 unsigned char e_ident[EI_NIDENT];
0064 Elf32_Half e_type;
0065 Elf32_Half e_machine;
0066 Elf32_Word e_version;
0067 Elf32_Addr e_entry;
0068 Elf32_Off e_phoff;
0069 Elf32_Off e_shoff;
0070 Elf32_Word e_flags;
0071 Elf32_Half e_ehsize;
0072 Elf32_Half e_phentsize;
0073 Elf32_Half e_phnum;
0074 Elf32_Half e_shentsize;
0075 Elf32_Half e_shnum;
0076 Elf32_Half e_shstrndx;
0077
0078 bool checkMagic() const {
0079 return (memcmp(e_ident, ElfMagic, strlen(ElfMagic))) == 0;
0080 }
0081
0082 unsigned char getFileClass() const { return e_ident[EI_CLASS]; }
0083 unsigned char getDataEncoding() const { return e_ident[EI_DATA]; }
0084 };
0085
0086
0087
0088 struct Elf64_Ehdr {
0089 unsigned char e_ident[EI_NIDENT];
0090 Elf64_Half e_type;
0091 Elf64_Half e_machine;
0092 Elf64_Word e_version;
0093 Elf64_Addr e_entry;
0094 Elf64_Off e_phoff;
0095 Elf64_Off e_shoff;
0096 Elf64_Word e_flags;
0097 Elf64_Half e_ehsize;
0098 Elf64_Half e_phentsize;
0099 Elf64_Half e_phnum;
0100 Elf64_Half e_shentsize;
0101 Elf64_Half e_shnum;
0102 Elf64_Half e_shstrndx;
0103
0104 bool checkMagic() const {
0105 return (memcmp(e_ident, ElfMagic, strlen(ElfMagic))) == 0;
0106 }
0107
0108 unsigned char getFileClass() const { return e_ident[EI_CLASS]; }
0109 unsigned char getDataEncoding() const { return e_ident[EI_DATA]; }
0110 };
0111
0112
0113
0114
0115 enum {
0116 ET_NONE = 0,
0117 ET_REL = 1,
0118 ET_EXEC = 2,
0119 ET_DYN = 3,
0120 ET_CORE = 4,
0121 ET_LOOS = 0xfe00,
0122 ET_HIOS = 0xfeff,
0123 ET_LOPROC = 0xff00,
0124 ET_HIPROC = 0xffff
0125 };
0126
0127
0128 enum { EV_NONE = 0, EV_CURRENT = 1 };
0129
0130
0131
0132
0133
0134
0135 enum {
0136 EM_NONE = 0,
0137 EM_M32 = 1,
0138 EM_SPARC = 2,
0139 EM_386 = 3,
0140 EM_68K = 4,
0141 EM_88K = 5,
0142 EM_IAMCU = 6,
0143 EM_860 = 7,
0144 EM_MIPS = 8,
0145 EM_S370 = 9,
0146 EM_MIPS_RS3_LE = 10,
0147 EM_PARISC = 15,
0148 EM_VPP500 = 17,
0149 EM_SPARC32PLUS = 18,
0150 EM_960 = 19,
0151 EM_PPC = 20,
0152 EM_PPC64 = 21,
0153 EM_S390 = 22,
0154 EM_SPU = 23,
0155 EM_V800 = 36,
0156 EM_FR20 = 37,
0157 EM_RH32 = 38,
0158 EM_RCE = 39,
0159 EM_ARM = 40,
0160 EM_ALPHA = 41,
0161 EM_SH = 42,
0162 EM_SPARCV9 = 43,
0163 EM_TRICORE = 44,
0164 EM_ARC = 45,
0165 EM_H8_300 = 46,
0166 EM_H8_300H = 47,
0167 EM_H8S = 48,
0168 EM_H8_500 = 49,
0169 EM_IA_64 = 50,
0170 EM_MIPS_X = 51,
0171 EM_COLDFIRE = 52,
0172 EM_68HC12 = 53,
0173 EM_MMA = 54,
0174 EM_PCP = 55,
0175 EM_NCPU = 56,
0176 EM_NDR1 = 57,
0177 EM_STARCORE = 58,
0178 EM_ME16 = 59,
0179 EM_ST100 = 60,
0180 EM_TINYJ = 61,
0181 EM_X86_64 = 62,
0182 EM_PDSP = 63,
0183 EM_PDP10 = 64,
0184 EM_PDP11 = 65,
0185 EM_FX66 = 66,
0186 EM_ST9PLUS = 67,
0187 EM_ST7 = 68,
0188 EM_68HC16 = 69,
0189 EM_68HC11 = 70,
0190 EM_68HC08 = 71,
0191 EM_68HC05 = 72,
0192 EM_SVX = 73,
0193 EM_ST19 = 74,
0194 EM_VAX = 75,
0195 EM_CRIS = 76,
0196 EM_JAVELIN = 77,
0197 EM_FIREPATH = 78,
0198 EM_ZSP = 79,
0199 EM_MMIX = 80,
0200 EM_HUANY = 81,
0201 EM_PRISM = 82,
0202 EM_AVR = 83,
0203 EM_FR30 = 84,
0204 EM_D10V = 85,
0205 EM_D30V = 86,
0206 EM_V850 = 87,
0207 EM_M32R = 88,
0208 EM_MN10300 = 89,
0209 EM_MN10200 = 90,
0210 EM_PJ = 91,
0211 EM_OPENRISC = 92,
0212 EM_ARC_COMPACT = 93,
0213
0214 EM_XTENSA = 94,
0215 EM_VIDEOCORE = 95,
0216 EM_TMM_GPP = 96,
0217 EM_NS32K = 97,
0218 EM_TPC = 98,
0219 EM_SNP1K = 99,
0220 EM_ST200 = 100,
0221 EM_IP2K = 101,
0222 EM_MAX = 102,
0223 EM_CR = 103,
0224 EM_F2MC16 = 104,
0225 EM_MSP430 = 105,
0226 EM_BLACKFIN = 106,
0227 EM_SE_C33 = 107,
0228 EM_SEP = 108,
0229 EM_ARCA = 109,
0230 EM_UNICORE = 110,
0231
0232 EM_EXCESS = 111,
0233 EM_DXP = 112,
0234 EM_ALTERA_NIOS2 = 113,
0235 EM_CRX = 114,
0236 EM_XGATE = 115,
0237 EM_C166 = 116,
0238 EM_M16C = 117,
0239 EM_DSPIC30F = 118,
0240
0241 EM_CE = 119,
0242 EM_M32C = 120,
0243 EM_TSK3000 = 131,
0244 EM_RS08 = 132,
0245 EM_SHARC = 133,
0246
0247 EM_ECOG2 = 134,
0248 EM_SCORE7 = 135,
0249 EM_DSP24 = 136,
0250 EM_VIDEOCORE3 = 137,
0251 EM_LATTICEMICO32 = 138,
0252 EM_SE_C17 = 139,
0253 EM_TI_C6000 = 140,
0254 EM_TI_C2000 = 141,
0255 EM_TI_C5500 = 142,
0256 EM_MMDSP_PLUS = 160,
0257 EM_CYPRESS_M8C = 161,
0258 EM_R32C = 162,
0259 EM_TRIMEDIA = 163,
0260 EM_HEXAGON = 164,
0261 EM_8051 = 165,
0262 EM_STXP7X = 166,
0263
0264 EM_NDS32 = 167,
0265
0266 EM_ECOG1 = 168,
0267 EM_ECOG1X = 168,
0268 EM_MAXQ30 = 169,
0269 EM_XIMO16 = 170,
0270 EM_MANIK = 171,
0271 EM_CRAYNV2 = 172,
0272 EM_RX = 173,
0273 EM_METAG = 174,
0274
0275 EM_MCST_ELBRUS = 175,
0276 EM_ECOG16 = 176,
0277 EM_CR16 = 177,
0278
0279 EM_ETPU = 178,
0280 EM_SLE9X = 179,
0281 EM_L10M = 180,
0282 EM_K10M = 181,
0283 EM_AARCH64 = 183,
0284 EM_AVR32 = 185,
0285 EM_STM8 = 186,
0286 EM_TILE64 = 187,
0287 EM_TILEPRO = 188,
0288 EM_MICROBLAZE = 189,
0289 EM_CUDA = 190,
0290 EM_TILEGX = 191,
0291 EM_CLOUDSHIELD = 192,
0292 EM_COREA_1ST = 193,
0293 EM_COREA_2ND = 194,
0294 EM_ARC_COMPACT2 = 195,
0295 EM_OPEN8 = 196,
0296 EM_RL78 = 197,
0297 EM_VIDEOCORE5 = 198,
0298 EM_78KOR = 199,
0299 EM_56800EX = 200,
0300 EM_BA1 = 201,
0301 EM_BA2 = 202,
0302 EM_XCORE = 203,
0303 EM_MCHP_PIC = 204,
0304 EM_INTEL205 = 205,
0305 EM_INTEL206 = 206,
0306 EM_INTEL207 = 207,
0307 EM_INTEL208 = 208,
0308 EM_INTEL209 = 209,
0309 EM_KM32 = 210,
0310 EM_KMX32 = 211,
0311 EM_KMX16 = 212,
0312 EM_KMX8 = 213,
0313 EM_KVARC = 214,
0314 EM_CDP = 215,
0315 EM_COGE = 216,
0316 EM_COOL = 217,
0317 EM_NORC = 218,
0318 EM_CSR_KALIMBA = 219,
0319 EM_AMDGPU = 224,
0320 EM_RISCV = 243,
0321 EM_LANAI = 244,
0322 EM_BPF = 247,
0323 EM_VE = 251,
0324 EM_CSKY = 252,
0325 EM_LOONGARCH = 258,
0326 };
0327
0328
0329 enum {
0330 ELFCLASSNONE = 0,
0331 ELFCLASS32 = 1,
0332 ELFCLASS64 = 2
0333 };
0334
0335
0336 enum {
0337 ELFDATANONE = 0,
0338 ELFDATA2LSB = 1,
0339 ELFDATA2MSB = 2
0340 };
0341
0342
0343 enum {
0344 ELFOSABI_NONE = 0,
0345 ELFOSABI_HPUX = 1,
0346 ELFOSABI_NETBSD = 2,
0347 ELFOSABI_GNU = 3,
0348 ELFOSABI_LINUX = 3,
0349 ELFOSABI_HURD = 4,
0350 ELFOSABI_SOLARIS = 6,
0351 ELFOSABI_AIX = 7,
0352 ELFOSABI_IRIX = 8,
0353 ELFOSABI_FREEBSD = 9,
0354 ELFOSABI_TRU64 = 10,
0355 ELFOSABI_MODESTO = 11,
0356 ELFOSABI_OPENBSD = 12,
0357 ELFOSABI_OPENVMS = 13,
0358 ELFOSABI_NSK = 14,
0359 ELFOSABI_AROS = 15,
0360 ELFOSABI_FENIXOS = 16,
0361 ELFOSABI_CLOUDABI = 17,
0362 ELFOSABI_CUDA = 51,
0363 ELFOSABI_FIRST_ARCH = 64,
0364 ELFOSABI_AMDGPU_HSA = 64,
0365 ELFOSABI_AMDGPU_PAL = 65,
0366 ELFOSABI_AMDGPU_MESA3D = 66,
0367 ELFOSABI_ARM = 97,
0368 ELFOSABI_ARM_FDPIC = 65,
0369 ELFOSABI_C6000_ELFABI = 64,
0370 ELFOSABI_C6000_LINUX = 65,
0371 ELFOSABI_STANDALONE = 255,
0372 ELFOSABI_LAST_ARCH = 255
0373 };
0374
0375
0376 enum {
0377
0378
0379 ELFABIVERSION_AMDGPU_HSA_V2 = 0,
0380 ELFABIVERSION_AMDGPU_HSA_V3 = 1,
0381 ELFABIVERSION_AMDGPU_HSA_V4 = 2,
0382 ELFABIVERSION_AMDGPU_HSA_V5 = 3,
0383 ELFABIVERSION_AMDGPU_HSA_V6 = 4,
0384 };
0385
0386 #define ELF_RELOC(name, value) name = value,
0387
0388
0389 enum {
0390 #include "ELFRelocs/x86_64.def"
0391 };
0392
0393
0394 enum {
0395 #include "ELFRelocs/i386.def"
0396 };
0397
0398
0399 enum {
0400 #include "ELFRelocs/PowerPC.def"
0401 };
0402
0403
0404 enum {
0405
0406
0407
0408
0409 EF_PPC64_ABI = 3
0410 };
0411
0412
0413 enum {
0414 STO_PPC64_LOCAL_BIT = 5,
0415 STO_PPC64_LOCAL_MASK = (7 << STO_PPC64_LOCAL_BIT)
0416 };
0417 static inline int64_t decodePPC64LocalEntryOffset(unsigned Other) {
0418 unsigned Val = (Other & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT;
0419 return ((1 << Val) >> 2) << 2;
0420 }
0421
0422
0423 enum {
0424 #include "ELFRelocs/PowerPC64.def"
0425 };
0426
0427
0428 enum {
0429 #include "ELFRelocs/AArch64.def"
0430 };
0431
0432
0433 enum {
0434
0435 STO_AARCH64_VARIANT_PCS = 0x80
0436 };
0437
0438
0439 enum : unsigned {
0440 EF_ARM_SOFT_FLOAT = 0x00000200U,
0441 EF_ARM_ABI_FLOAT_SOFT = 0x00000200U,
0442 EF_ARM_VFP_FLOAT = 0x00000400U,
0443 EF_ARM_ABI_FLOAT_HARD = 0x00000400U,
0444 EF_ARM_BE8 = 0x00800000U,
0445 EF_ARM_EABI_UNKNOWN = 0x00000000U,
0446 EF_ARM_EABI_VER1 = 0x01000000U,
0447 EF_ARM_EABI_VER2 = 0x02000000U,
0448 EF_ARM_EABI_VER3 = 0x03000000U,
0449 EF_ARM_EABI_VER4 = 0x04000000U,
0450 EF_ARM_EABI_VER5 = 0x05000000U,
0451 EF_ARM_EABIMASK = 0xFF000000U
0452 };
0453
0454
0455 enum {
0456 #include "ELFRelocs/ARM.def"
0457 };
0458
0459
0460 enum : unsigned {
0461 EF_ARC_MACH_MSK = 0x000000ff,
0462 EF_ARC_OSABI_MSK = 0x00000f00,
0463 E_ARC_MACH_ARC600 = 0x00000002,
0464 E_ARC_MACH_ARC601 = 0x00000004,
0465 E_ARC_MACH_ARC700 = 0x00000003,
0466 EF_ARC_CPU_ARCV2EM = 0x00000005,
0467 EF_ARC_CPU_ARCV2HS = 0x00000006,
0468 E_ARC_OSABI_ORIG = 0x00000000,
0469 E_ARC_OSABI_V2 = 0x00000200,
0470 E_ARC_OSABI_V3 = 0x00000300,
0471 E_ARC_OSABI_V4 = 0x00000400,
0472 EF_ARC_PIC = 0x00000100
0473 };
0474
0475
0476 enum {
0477 #include "ELFRelocs/ARC.def"
0478 };
0479
0480
0481 enum : unsigned {
0482 EF_AVR_ARCH_AVR1 = 1,
0483 EF_AVR_ARCH_AVR2 = 2,
0484 EF_AVR_ARCH_AVR25 = 25,
0485 EF_AVR_ARCH_AVR3 = 3,
0486 EF_AVR_ARCH_AVR31 = 31,
0487 EF_AVR_ARCH_AVR35 = 35,
0488 EF_AVR_ARCH_AVR4 = 4,
0489 EF_AVR_ARCH_AVR5 = 5,
0490 EF_AVR_ARCH_AVR51 = 51,
0491 EF_AVR_ARCH_AVR6 = 6,
0492 EF_AVR_ARCH_AVRTINY = 100,
0493 EF_AVR_ARCH_XMEGA1 = 101,
0494 EF_AVR_ARCH_XMEGA2 = 102,
0495 EF_AVR_ARCH_XMEGA3 = 103,
0496 EF_AVR_ARCH_XMEGA4 = 104,
0497 EF_AVR_ARCH_XMEGA5 = 105,
0498 EF_AVR_ARCH_XMEGA6 = 106,
0499 EF_AVR_ARCH_XMEGA7 = 107,
0500
0501 EF_AVR_ARCH_MASK = 0x7f,
0502
0503 EF_AVR_LINKRELAX_PREPARED = 0x80,
0504
0505 };
0506
0507
0508 enum {
0509 #include "ELFRelocs/AVR.def"
0510 };
0511
0512
0513 enum : unsigned {
0514 EF_MIPS_NOREORDER = 0x00000001,
0515 EF_MIPS_PIC = 0x00000002,
0516 EF_MIPS_CPIC = 0x00000004,
0517 EF_MIPS_ABI2 = 0x00000020,
0518 EF_MIPS_32BITMODE = 0x00000100,
0519
0520 EF_MIPS_FP64 = 0x00000200,
0521
0522 EF_MIPS_NAN2008 = 0x00000400,
0523
0524
0525 EF_MIPS_ABI_O32 = 0x00001000,
0526 EF_MIPS_ABI_O64 = 0x00002000,
0527 EF_MIPS_ABI_EABI32 = 0x00003000,
0528 EF_MIPS_ABI_EABI64 = 0x00004000,
0529 EF_MIPS_ABI = 0x0000f000,
0530
0531
0532 EF_MIPS_MACH_NONE = 0x00000000,
0533 EF_MIPS_MACH_3900 = 0x00810000,
0534 EF_MIPS_MACH_4010 = 0x00820000,
0535 EF_MIPS_MACH_4100 = 0x00830000,
0536 EF_MIPS_MACH_4650 = 0x00850000,
0537 EF_MIPS_MACH_4120 = 0x00870000,
0538 EF_MIPS_MACH_4111 = 0x00880000,
0539 EF_MIPS_MACH_SB1 = 0x008a0000,
0540 EF_MIPS_MACH_OCTEON = 0x008b0000,
0541 EF_MIPS_MACH_XLR = 0x008c0000,
0542 EF_MIPS_MACH_OCTEON2 = 0x008d0000,
0543 EF_MIPS_MACH_OCTEON3 = 0x008e0000,
0544 EF_MIPS_MACH_5400 = 0x00910000,
0545 EF_MIPS_MACH_5900 = 0x00920000,
0546 EF_MIPS_MACH_5500 = 0x00980000,
0547 EF_MIPS_MACH_9000 = 0x00990000,
0548 EF_MIPS_MACH_LS2E = 0x00a00000,
0549 EF_MIPS_MACH_LS2F = 0x00a10000,
0550 EF_MIPS_MACH_LS3A = 0x00a20000,
0551 EF_MIPS_MACH = 0x00ff0000,
0552
0553
0554 EF_MIPS_MICROMIPS = 0x02000000,
0555 EF_MIPS_ARCH_ASE_M16 = 0x04000000,
0556 EF_MIPS_ARCH_ASE_MDMX = 0x08000000,
0557 EF_MIPS_ARCH_ASE = 0x0f000000,
0558
0559
0560 EF_MIPS_ARCH_1 = 0x00000000,
0561 EF_MIPS_ARCH_2 = 0x10000000,
0562 EF_MIPS_ARCH_3 = 0x20000000,
0563 EF_MIPS_ARCH_4 = 0x30000000,
0564 EF_MIPS_ARCH_5 = 0x40000000,
0565 EF_MIPS_ARCH_32 = 0x50000000,
0566 EF_MIPS_ARCH_64 = 0x60000000,
0567 EF_MIPS_ARCH_32R2 = 0x70000000,
0568 EF_MIPS_ARCH_64R2 = 0x80000000,
0569 EF_MIPS_ARCH_32R6 = 0x90000000,
0570 EF_MIPS_ARCH_64R6 = 0xa0000000,
0571 EF_MIPS_ARCH = 0xf0000000
0572 };
0573
0574
0575 enum {
0576 SHN_MIPS_ACOMMON = 0xff00,
0577 SHN_MIPS_TEXT = 0xff01,
0578 SHN_MIPS_DATA = 0xff02,
0579 SHN_MIPS_SCOMMON = 0xff03,
0580 SHN_MIPS_SUNDEFINED = 0xff04
0581 };
0582
0583
0584 enum {
0585 #include "ELFRelocs/Mips.def"
0586 };
0587
0588
0589 enum {
0590 STO_MIPS_OPTIONAL = 0x04,
0591 STO_MIPS_PLT = 0x08,
0592 STO_MIPS_PIC = 0x20,
0593 STO_MIPS_MICROMIPS = 0x80,
0594 STO_MIPS_MIPS16 = 0xf0
0595 };
0596
0597
0598 enum {
0599 ODK_NULL = 0,
0600 ODK_REGINFO = 1,
0601 ODK_EXCEPTIONS = 2,
0602 ODK_PAD = 3,
0603 ODK_HWPATCH = 4,
0604 ODK_FILL = 5,
0605 ODK_TAGS = 6,
0606 ODK_HWAND = 7,
0607 ODK_HWOR = 8,
0608 ODK_GP_GROUP = 9,
0609 ODK_IDENT = 10,
0610 ODK_PAGESIZE = 11
0611 };
0612
0613
0614 enum {
0615
0616 EF_HEXAGON_MACH_V2 = 0x00000001,
0617 EF_HEXAGON_MACH_V3 = 0x00000002,
0618 EF_HEXAGON_MACH_V4 = 0x00000003,
0619 EF_HEXAGON_MACH_V5 = 0x00000004,
0620 EF_HEXAGON_MACH_V55 = 0x00000005,
0621 EF_HEXAGON_MACH_V60 = 0x00000060,
0622 EF_HEXAGON_MACH_V61 = 0x00000061,
0623 EF_HEXAGON_MACH_V62 = 0x00000062,
0624 EF_HEXAGON_MACH_V65 = 0x00000065,
0625 EF_HEXAGON_MACH_V66 = 0x00000066,
0626 EF_HEXAGON_MACH_V67 = 0x00000067,
0627 EF_HEXAGON_MACH_V67T = 0x00008067,
0628 EF_HEXAGON_MACH_V68 = 0x00000068,
0629 EF_HEXAGON_MACH_V69 = 0x00000069,
0630 EF_HEXAGON_MACH_V71 = 0x00000071,
0631 EF_HEXAGON_MACH_V71T = 0x00008071,
0632 EF_HEXAGON_MACH_V73 = 0x00000073,
0633 EF_HEXAGON_MACH_V75 = 0x00000075,
0634 EF_HEXAGON_MACH_V77 = 0x00000077,
0635 EF_HEXAGON_MACH_V79 = 0x00000079,
0636 EF_HEXAGON_MACH_V81 = 0x00000081,
0637 EF_HEXAGON_MACH_V83 = 0x00000083,
0638 EF_HEXAGON_MACH_V85 = 0x00000085,
0639 EF_HEXAGON_MACH = 0x000003ff,
0640
0641
0642 EF_HEXAGON_ISA_MACH = 0x00000000,
0643
0644 EF_HEXAGON_ISA_V2 = 0x00000010,
0645 EF_HEXAGON_ISA_V3 = 0x00000020,
0646 EF_HEXAGON_ISA_V4 = 0x00000030,
0647 EF_HEXAGON_ISA_V5 = 0x00000040,
0648 EF_HEXAGON_ISA_V55 = 0x00000050,
0649 EF_HEXAGON_ISA_V60 = 0x00000060,
0650 EF_HEXAGON_ISA_V61 = 0x00000061,
0651 EF_HEXAGON_ISA_V62 = 0x00000062,
0652 EF_HEXAGON_ISA_V65 = 0x00000065,
0653 EF_HEXAGON_ISA_V66 = 0x00000066,
0654 EF_HEXAGON_ISA_V67 = 0x00000067,
0655 EF_HEXAGON_ISA_V68 = 0x00000068,
0656 EF_HEXAGON_ISA_V69 = 0x00000069,
0657 EF_HEXAGON_ISA_V71 = 0x00000071,
0658 EF_HEXAGON_ISA_V73 = 0x00000073,
0659 EF_HEXAGON_ISA_V75 = 0x00000075,
0660 EF_HEXAGON_ISA_V77 = 0x00000077,
0661 EF_HEXAGON_ISA_V79 = 0x00000079,
0662 EF_HEXAGON_ISA_V81 = 0x00000081,
0663 EF_HEXAGON_ISA_V83 = 0x00000083,
0664 EF_HEXAGON_ISA_V85 = 0x00000085,
0665 EF_HEXAGON_ISA = 0x000003ff,
0666 };
0667
0668
0669 enum {
0670 SHN_HEXAGON_SCOMMON = 0xff00,
0671 SHN_HEXAGON_SCOMMON_1 = 0xff01,
0672 SHN_HEXAGON_SCOMMON_2 = 0xff02,
0673 SHN_HEXAGON_SCOMMON_4 = 0xff03,
0674 SHN_HEXAGON_SCOMMON_8 = 0xff04
0675 };
0676
0677
0678 enum {
0679 #include "ELFRelocs/Hexagon.def"
0680 };
0681
0682
0683 enum {
0684 #include "ELFRelocs/Lanai.def"
0685 };
0686
0687
0688 enum : unsigned {
0689 EF_RISCV_RVC = 0x0001,
0690 EF_RISCV_FLOAT_ABI = 0x0006,
0691 EF_RISCV_FLOAT_ABI_SOFT = 0x0000,
0692 EF_RISCV_FLOAT_ABI_SINGLE = 0x0002,
0693 EF_RISCV_FLOAT_ABI_DOUBLE = 0x0004,
0694 EF_RISCV_FLOAT_ABI_QUAD = 0x0006,
0695 EF_RISCV_RVE = 0x0008,
0696 EF_RISCV_TSO = 0x0010,
0697 };
0698
0699
0700 enum {
0701 #include "ELFRelocs/RISCV.def"
0702 #define ELF_RISCV_NONSTANDARD_RELOC(_vendor, name, value) name = value,
0703 #include "ELFRelocs/RISCV_nonstandard.def"
0704 #undef ELF_RISCV_NONSTANDARD_RELOC
0705 };
0706
0707 enum {
0708
0709
0710 STO_RISCV_VARIANT_CC = 0x80
0711 };
0712
0713
0714 enum {
0715 #include "ELFRelocs/SystemZ.def"
0716 };
0717
0718
0719 enum : unsigned {
0720
0721
0722
0723
0724
0725
0726 EF_SPARC_EXT_MASK = 0xffff00,
0727 EF_SPARC_32PLUS = 0x000100,
0728 EF_SPARC_SUN_US1 = 0x000200,
0729 EF_SPARC_HAL_R1 = 0x000400,
0730 EF_SPARC_SUN_US3 = 0x000800,
0731
0732
0733 EF_SPARCV9_MM = 0x3,
0734 EF_SPARCV9_TSO = 0x0,
0735 EF_SPARCV9_PSO = 0x1,
0736 EF_SPARCV9_RMO = 0x2,
0737 };
0738
0739
0740 enum {
0741 #include "ELFRelocs/Sparc.def"
0742 };
0743
0744
0745 enum : unsigned {
0746
0747 EF_AMDGPU_MACH = 0x0ff,
0748
0749
0750 EF_AMDGPU_MACH_NONE = 0x000,
0751
0752
0753
0754
0755 EF_AMDGPU_MACH_R600_R600 = 0x001,
0756 EF_AMDGPU_MACH_R600_R630 = 0x002,
0757 EF_AMDGPU_MACH_R600_RS880 = 0x003,
0758 EF_AMDGPU_MACH_R600_RV670 = 0x004,
0759
0760 EF_AMDGPU_MACH_R600_RV710 = 0x005,
0761 EF_AMDGPU_MACH_R600_RV730 = 0x006,
0762 EF_AMDGPU_MACH_R600_RV770 = 0x007,
0763
0764 EF_AMDGPU_MACH_R600_CEDAR = 0x008,
0765 EF_AMDGPU_MACH_R600_CYPRESS = 0x009,
0766 EF_AMDGPU_MACH_R600_JUNIPER = 0x00a,
0767 EF_AMDGPU_MACH_R600_REDWOOD = 0x00b,
0768 EF_AMDGPU_MACH_R600_SUMO = 0x00c,
0769
0770 EF_AMDGPU_MACH_R600_BARTS = 0x00d,
0771 EF_AMDGPU_MACH_R600_CAICOS = 0x00e,
0772 EF_AMDGPU_MACH_R600_CAYMAN = 0x00f,
0773 EF_AMDGPU_MACH_R600_TURKS = 0x010,
0774
0775
0776 EF_AMDGPU_MACH_R600_RESERVED_FIRST = 0x011,
0777 EF_AMDGPU_MACH_R600_RESERVED_LAST = 0x01f,
0778
0779
0780 EF_AMDGPU_MACH_R600_FIRST = EF_AMDGPU_MACH_R600_R600,
0781 EF_AMDGPU_MACH_R600_LAST = EF_AMDGPU_MACH_R600_TURKS,
0782
0783
0784
0785 EF_AMDGPU_MACH_AMDGCN_GFX600 = 0x020,
0786 EF_AMDGPU_MACH_AMDGCN_GFX601 = 0x021,
0787 EF_AMDGPU_MACH_AMDGCN_GFX700 = 0x022,
0788 EF_AMDGPU_MACH_AMDGCN_GFX701 = 0x023,
0789 EF_AMDGPU_MACH_AMDGCN_GFX702 = 0x024,
0790 EF_AMDGPU_MACH_AMDGCN_GFX703 = 0x025,
0791 EF_AMDGPU_MACH_AMDGCN_GFX704 = 0x026,
0792 EF_AMDGPU_MACH_AMDGCN_RESERVED_0X27 = 0x027,
0793 EF_AMDGPU_MACH_AMDGCN_GFX801 = 0x028,
0794 EF_AMDGPU_MACH_AMDGCN_GFX802 = 0x029,
0795 EF_AMDGPU_MACH_AMDGCN_GFX803 = 0x02a,
0796 EF_AMDGPU_MACH_AMDGCN_GFX810 = 0x02b,
0797 EF_AMDGPU_MACH_AMDGCN_GFX900 = 0x02c,
0798 EF_AMDGPU_MACH_AMDGCN_GFX902 = 0x02d,
0799 EF_AMDGPU_MACH_AMDGCN_GFX904 = 0x02e,
0800 EF_AMDGPU_MACH_AMDGCN_GFX906 = 0x02f,
0801 EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030,
0802 EF_AMDGPU_MACH_AMDGCN_GFX909 = 0x031,
0803 EF_AMDGPU_MACH_AMDGCN_GFX90C = 0x032,
0804 EF_AMDGPU_MACH_AMDGCN_GFX1010 = 0x033,
0805 EF_AMDGPU_MACH_AMDGCN_GFX1011 = 0x034,
0806 EF_AMDGPU_MACH_AMDGCN_GFX1012 = 0x035,
0807 EF_AMDGPU_MACH_AMDGCN_GFX1030 = 0x036,
0808 EF_AMDGPU_MACH_AMDGCN_GFX1031 = 0x037,
0809 EF_AMDGPU_MACH_AMDGCN_GFX1032 = 0x038,
0810 EF_AMDGPU_MACH_AMDGCN_GFX1033 = 0x039,
0811 EF_AMDGPU_MACH_AMDGCN_GFX602 = 0x03a,
0812 EF_AMDGPU_MACH_AMDGCN_GFX705 = 0x03b,
0813 EF_AMDGPU_MACH_AMDGCN_GFX805 = 0x03c,
0814 EF_AMDGPU_MACH_AMDGCN_GFX1035 = 0x03d,
0815 EF_AMDGPU_MACH_AMDGCN_GFX1034 = 0x03e,
0816 EF_AMDGPU_MACH_AMDGCN_GFX90A = 0x03f,
0817 EF_AMDGPU_MACH_AMDGCN_GFX940 = 0x040,
0818 EF_AMDGPU_MACH_AMDGCN_GFX1100 = 0x041,
0819 EF_AMDGPU_MACH_AMDGCN_GFX1013 = 0x042,
0820 EF_AMDGPU_MACH_AMDGCN_GFX1150 = 0x043,
0821 EF_AMDGPU_MACH_AMDGCN_GFX1103 = 0x044,
0822 EF_AMDGPU_MACH_AMDGCN_GFX1036 = 0x045,
0823 EF_AMDGPU_MACH_AMDGCN_GFX1101 = 0x046,
0824 EF_AMDGPU_MACH_AMDGCN_GFX1102 = 0x047,
0825 EF_AMDGPU_MACH_AMDGCN_GFX1200 = 0x048,
0826 EF_AMDGPU_MACH_AMDGCN_RESERVED_0X49 = 0x049,
0827 EF_AMDGPU_MACH_AMDGCN_GFX1151 = 0x04a,
0828 EF_AMDGPU_MACH_AMDGCN_GFX941 = 0x04b,
0829 EF_AMDGPU_MACH_AMDGCN_GFX942 = 0x04c,
0830 EF_AMDGPU_MACH_AMDGCN_RESERVED_0X4D = 0x04d,
0831 EF_AMDGPU_MACH_AMDGCN_GFX1201 = 0x04e,
0832 EF_AMDGPU_MACH_AMDGCN_GFX950 = 0x04f,
0833 EF_AMDGPU_MACH_AMDGCN_RESERVED_0X50 = 0x050,
0834 EF_AMDGPU_MACH_AMDGCN_GFX9_GENERIC = 0x051,
0835 EF_AMDGPU_MACH_AMDGCN_GFX10_1_GENERIC = 0x052,
0836 EF_AMDGPU_MACH_AMDGCN_GFX10_3_GENERIC = 0x053,
0837 EF_AMDGPU_MACH_AMDGCN_GFX11_GENERIC = 0x054,
0838 EF_AMDGPU_MACH_AMDGCN_GFX1152 = 0x055,
0839 EF_AMDGPU_MACH_AMDGCN_RESERVED_0X56 = 0x056,
0840 EF_AMDGPU_MACH_AMDGCN_RESERVED_0X57 = 0x057,
0841 EF_AMDGPU_MACH_AMDGCN_GFX1153 = 0x058,
0842 EF_AMDGPU_MACH_AMDGCN_GFX12_GENERIC = 0x059,
0843 EF_AMDGPU_MACH_AMDGCN_GFX9_4_GENERIC = 0x05f,
0844
0845
0846
0847 EF_AMDGPU_MACH_AMDGCN_FIRST = EF_AMDGPU_MACH_AMDGCN_GFX600,
0848 EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX9_4_GENERIC,
0849
0850
0851
0852
0853
0854 EF_AMDGPU_FEATURE_XNACK_V2 = 0x01,
0855
0856
0857
0858
0859 EF_AMDGPU_FEATURE_TRAP_HANDLER_V2 = 0x02,
0860
0861
0862
0863
0864
0865 EF_AMDGPU_FEATURE_XNACK_V3 = 0x100,
0866
0867
0868
0869
0870 EF_AMDGPU_FEATURE_SRAMECC_V3 = 0x200,
0871
0872
0873
0874
0875 EF_AMDGPU_FEATURE_XNACK_V4 = 0x300,
0876
0877 EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 = 0x000,
0878
0879 EF_AMDGPU_FEATURE_XNACK_ANY_V4 = 0x100,
0880
0881 EF_AMDGPU_FEATURE_XNACK_OFF_V4 = 0x200,
0882
0883 EF_AMDGPU_FEATURE_XNACK_ON_V4 = 0x300,
0884
0885
0886
0887
0888 EF_AMDGPU_FEATURE_SRAMECC_V4 = 0xc00,
0889
0890 EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4 = 0x000,
0891
0892 EF_AMDGPU_FEATURE_SRAMECC_ANY_V4 = 0x400,
0893
0894 EF_AMDGPU_FEATURE_SRAMECC_OFF_V4 = 0x800,
0895
0896 EF_AMDGPU_FEATURE_SRAMECC_ON_V4 = 0xc00,
0897
0898
0899 EF_AMDGPU_GENERIC_VERSION = 0xff000000,
0900 EF_AMDGPU_GENERIC_VERSION_OFFSET = 24,
0901 EF_AMDGPU_GENERIC_VERSION_MIN = 1,
0902 EF_AMDGPU_GENERIC_VERSION_MAX = 0xff,
0903 };
0904
0905
0906 enum {
0907 #include "ELFRelocs/AMDGPU.def"
0908 };
0909
0910
0911 enum : unsigned {
0912
0913 EF_CUDA_SM = 0xff,
0914
0915
0916 EF_CUDA_SM20 = 0x14,
0917 EF_CUDA_SM21 = 0x15,
0918 EF_CUDA_SM30 = 0x1e,
0919 EF_CUDA_SM32 = 0x20,
0920 EF_CUDA_SM35 = 0x23,
0921 EF_CUDA_SM37 = 0x25,
0922 EF_CUDA_SM50 = 0x32,
0923 EF_CUDA_SM52 = 0x34,
0924 EF_CUDA_SM53 = 0x35,
0925 EF_CUDA_SM60 = 0x3c,
0926 EF_CUDA_SM61 = 0x3d,
0927 EF_CUDA_SM62 = 0x3e,
0928 EF_CUDA_SM70 = 0x46,
0929 EF_CUDA_SM72 = 0x48,
0930 EF_CUDA_SM75 = 0x4b,
0931 EF_CUDA_SM80 = 0x50,
0932 EF_CUDA_SM86 = 0x56,
0933 EF_CUDA_SM87 = 0x57,
0934 EF_CUDA_SM89 = 0x59,
0935
0936 EF_CUDA_SM90 = 0x5a,
0937
0938
0939 EF_CUDA_TEXMODE_UNIFIED = 0x100,
0940
0941 EF_CUDA_TEXMODE_INDEPENDANT = 0x200,
0942
0943 EF_CUDA_64BIT_ADDRESS = 0x400,
0944
0945 EF_CUDA_ACCELERATORS = 0x800,
0946
0947 EF_CUDA_SW_FLAG_V2 = 0x1000,
0948
0949
0950 EF_CUDA_VIRTUAL_SM = 0xff0000,
0951 };
0952
0953
0954 enum {
0955 #include "ELFRelocs/BPF.def"
0956 };
0957
0958
0959 enum {
0960 #include "ELFRelocs/M68k.def"
0961 };
0962
0963
0964 enum : unsigned {
0965 EF_MSP430_MACH_MSP430x11 = 11,
0966 EF_MSP430_MACH_MSP430x11x1 = 110,
0967 EF_MSP430_MACH_MSP430x12 = 12,
0968 EF_MSP430_MACH_MSP430x13 = 13,
0969 EF_MSP430_MACH_MSP430x14 = 14,
0970 EF_MSP430_MACH_MSP430x15 = 15,
0971 EF_MSP430_MACH_MSP430x16 = 16,
0972 EF_MSP430_MACH_MSP430x20 = 20,
0973 EF_MSP430_MACH_MSP430x22 = 22,
0974 EF_MSP430_MACH_MSP430x23 = 23,
0975 EF_MSP430_MACH_MSP430x24 = 24,
0976 EF_MSP430_MACH_MSP430x26 = 26,
0977 EF_MSP430_MACH_MSP430x31 = 31,
0978 EF_MSP430_MACH_MSP430x32 = 32,
0979 EF_MSP430_MACH_MSP430x33 = 33,
0980 EF_MSP430_MACH_MSP430x41 = 41,
0981 EF_MSP430_MACH_MSP430x42 = 42,
0982 EF_MSP430_MACH_MSP430x43 = 43,
0983 EF_MSP430_MACH_MSP430x44 = 44,
0984 EF_MSP430_MACH_MSP430X = 45,
0985 EF_MSP430_MACH_MSP430x46 = 46,
0986 EF_MSP430_MACH_MSP430x47 = 47,
0987 EF_MSP430_MACH_MSP430x54 = 54,
0988 };
0989
0990
0991 enum {
0992 #include "ELFRelocs/MSP430.def"
0993 };
0994
0995
0996 enum {
0997 #include "ELFRelocs/VE.def"
0998 };
0999
1000
1001 enum : unsigned {
1002 EF_CSKY_801 = 0xa,
1003 EF_CSKY_802 = 0x10,
1004 EF_CSKY_803 = 0x9,
1005 EF_CSKY_805 = 0x11,
1006 EF_CSKY_807 = 0x6,
1007 EF_CSKY_810 = 0x8,
1008 EF_CSKY_860 = 0xb,
1009 EF_CSKY_800 = 0x1f,
1010 EF_CSKY_FLOAT = 0x2000,
1011 EF_CSKY_DSP = 0x4000,
1012 EF_CSKY_ABIV2 = 0x20000000,
1013 EF_CSKY_EFV1 = 0x1000000,
1014 EF_CSKY_EFV2 = 0x2000000,
1015 EF_CSKY_EFV3 = 0x3000000
1016 };
1017
1018
1019 enum {
1020 #include "ELFRelocs/CSKY.def"
1021 };
1022
1023
1024 enum : unsigned {
1025
1026
1027
1028
1029
1030 EF_LOONGARCH_ABI_SOFT_FLOAT = 0x1,
1031 EF_LOONGARCH_ABI_SINGLE_FLOAT = 0x2,
1032 EF_LOONGARCH_ABI_DOUBLE_FLOAT = 0x3,
1033 EF_LOONGARCH_ABI_MODIFIER_MASK = 0x7,
1034
1035
1036 EF_LOONGARCH_OBJABI_V0 = 0x0,
1037 EF_LOONGARCH_OBJABI_V1 = 0x40,
1038 EF_LOONGARCH_OBJABI_MASK = 0xC0,
1039 };
1040
1041
1042 enum {
1043 #include "ELFRelocs/LoongArch.def"
1044 };
1045
1046
1047 enum : unsigned {
1048
1049 EF_XTENSA_MACH = 0x0000000f,
1050
1051 EF_XTENSA_MACH_NONE = 0x00000000,
1052 EF_XTENSA_XT_INSN = 0x00000100,
1053 EF_XTENSA_XT_LIT = 0x00000200,
1054 };
1055
1056
1057 enum {
1058 #include "ELFRelocs/Xtensa.def"
1059 };
1060
1061 #undef ELF_RELOC
1062
1063
1064 struct Elf32_Shdr {
1065 Elf32_Word sh_name;
1066 Elf32_Word sh_type;
1067 Elf32_Word sh_flags;
1068 Elf32_Addr sh_addr;
1069 Elf32_Off sh_offset;
1070 Elf32_Word sh_size;
1071 Elf32_Word sh_link;
1072 Elf32_Word sh_info;
1073 Elf32_Word sh_addralign;
1074 Elf32_Word sh_entsize;
1075 };
1076
1077
1078 struct Elf64_Shdr {
1079 Elf64_Word sh_name;
1080 Elf64_Word sh_type;
1081 Elf64_Xword sh_flags;
1082 Elf64_Addr sh_addr;
1083 Elf64_Off sh_offset;
1084 Elf64_Xword sh_size;
1085 Elf64_Word sh_link;
1086 Elf64_Word sh_info;
1087 Elf64_Xword sh_addralign;
1088 Elf64_Xword sh_entsize;
1089 };
1090
1091
1092 enum {
1093 SHN_UNDEF = 0,
1094 SHN_LORESERVE = 0xff00,
1095 SHN_LOPROC = 0xff00,
1096 SHN_HIPROC = 0xff1f,
1097 SHN_LOOS = 0xff20,
1098 SHN_HIOS = 0xff3f,
1099 SHN_ABS = 0xfff1,
1100 SHN_COMMON = 0xfff2,
1101 SHN_XINDEX = 0xffff,
1102 SHN_HIRESERVE = 0xffff
1103 };
1104
1105
1106 enum : unsigned {
1107 SHT_NULL = 0,
1108 SHT_PROGBITS = 1,
1109 SHT_SYMTAB = 2,
1110 SHT_STRTAB = 3,
1111 SHT_RELA = 4,
1112 SHT_HASH = 5,
1113 SHT_DYNAMIC = 6,
1114 SHT_NOTE = 7,
1115 SHT_NOBITS = 8,
1116 SHT_REL = 9,
1117 SHT_SHLIB = 10,
1118 SHT_DYNSYM = 11,
1119 SHT_INIT_ARRAY = 14,
1120 SHT_FINI_ARRAY = 15,
1121 SHT_PREINIT_ARRAY = 16,
1122 SHT_GROUP = 17,
1123 SHT_SYMTAB_SHNDX = 18,
1124
1125
1126 SHT_RELR = 19,
1127
1128
1129 SHT_CREL = 0x40000014,
1130 SHT_LOOS = 0x60000000,
1131
1132
1133 SHT_ANDROID_REL = 0x60000001,
1134 SHT_ANDROID_RELA = 0x60000002,
1135 SHT_LLVM_ODRTAB = 0x6fff4c00,
1136 SHT_LLVM_LINKER_OPTIONS = 0x6fff4c01,
1137 SHT_LLVM_ADDRSIG = 0x6fff4c03,
1138
1139 SHT_LLVM_DEPENDENT_LIBRARIES =
1140 0x6fff4c04,
1141 SHT_LLVM_SYMPART = 0x6fff4c05,
1142 SHT_LLVM_PART_EHDR = 0x6fff4c06,
1143 SHT_LLVM_PART_PHDR = 0x6fff4c07,
1144 SHT_LLVM_BB_ADDR_MAP_V0 =
1145 0x6fff4c08,
1146
1147 SHT_LLVM_CALL_GRAPH_PROFILE = 0x6fff4c09,
1148 SHT_LLVM_BB_ADDR_MAP = 0x6fff4c0a,
1149 SHT_LLVM_OFFLOADING = 0x6fff4c0b,
1150 SHT_LLVM_LTO = 0x6fff4c0c,
1151 SHT_LLVM_JT_SIZES = 0x6fff4c0d,
1152
1153
1154 SHT_ANDROID_RELR = 0x6fffff00,
1155 SHT_GNU_ATTRIBUTES = 0x6ffffff5,
1156 SHT_GNU_HASH = 0x6ffffff6,
1157 SHT_GNU_verdef = 0x6ffffffd,
1158 SHT_GNU_verneed = 0x6ffffffe,
1159 SHT_GNU_versym = 0x6fffffff,
1160 SHT_HIOS = 0x6fffffff,
1161 SHT_LOPROC = 0x70000000,
1162
1163
1164 SHT_ARM_EXIDX = 0x70000001U,
1165
1166 SHT_ARM_PREEMPTMAP = 0x70000002U,
1167
1168 SHT_ARM_ATTRIBUTES = 0x70000003U,
1169 SHT_ARM_DEBUGOVERLAY = 0x70000004U,
1170 SHT_ARM_OVERLAYSECTION = 0x70000005U,
1171
1172 SHT_AARCH64_ATTRIBUTES = 0x70000003U,
1173
1174
1175 SHT_AARCH64_AUTH_RELR = 0x70000004U,
1176
1177
1178 SHT_AARCH64_MEMTAG_GLOBALS_STATIC = 0x70000007U,
1179 SHT_AARCH64_MEMTAG_GLOBALS_DYNAMIC = 0x70000008U,
1180 SHT_HEX_ORDERED = 0x70000000,
1181
1182 SHT_X86_64_UNWIND = 0x70000001,
1183
1184 SHT_MIPS_REGINFO = 0x70000006,
1185 SHT_MIPS_OPTIONS = 0x7000000d,
1186 SHT_MIPS_DWARF = 0x7000001e,
1187 SHT_MIPS_ABIFLAGS = 0x7000002a,
1188
1189 SHT_MSP430_ATTRIBUTES = 0x70000003U,
1190
1191 SHT_RISCV_ATTRIBUTES = 0x70000003U,
1192
1193 SHT_CSKY_ATTRIBUTES = 0x70000001U,
1194
1195 SHT_HEXAGON_ATTRIBUTES = 0x70000003U,
1196
1197 SHT_HIPROC = 0x7fffffff,
1198 SHT_LOUSER = 0x80000000,
1199 SHT_HIUSER = 0xffffffff
1200 };
1201
1202
1203 enum : unsigned {
1204
1205 SHF_WRITE = 0x1,
1206
1207
1208 SHF_ALLOC = 0x2,
1209
1210
1211 SHF_EXECINSTR = 0x4,
1212
1213
1214 SHF_MERGE = 0x10,
1215
1216
1217 SHF_STRINGS = 0x20,
1218
1219
1220 SHF_INFO_LINK = 0x40U,
1221
1222
1223 SHF_LINK_ORDER = 0x80U,
1224
1225
1226
1227 SHF_OS_NONCONFORMING = 0x100U,
1228
1229
1230 SHF_GROUP = 0x200U,
1231
1232
1233 SHF_TLS = 0x400U,
1234
1235
1236 SHF_COMPRESSED = 0x800U,
1237
1238
1239 SHF_GNU_RETAIN = 0x200000,
1240
1241
1242 SHF_EXCLUDE = 0x80000000U,
1243
1244
1245
1246 SHF_MASKOS = 0x0ff00000,
1247
1248
1249 SHF_SUNW_NODISCARD = 0x00100000,
1250
1251
1252 SHF_MASKPROC = 0xf0000000,
1253
1254
1255
1256
1257 XCORE_SHF_DP_SECTION = 0x10000000,
1258
1259
1260
1261
1262 XCORE_SHF_CP_SECTION = 0x20000000,
1263
1264
1265
1266
1267
1268
1269
1270
1271 SHF_X86_64_LARGE = 0x10000000,
1272
1273
1274
1275 SHF_HEX_GPREL = 0x10000000,
1276
1277
1278
1279 SHF_MIPS_NODUPES = 0x01000000,
1280
1281
1282 SHF_MIPS_NAMES = 0x02000000,
1283
1284
1285 SHF_MIPS_LOCAL = 0x04000000,
1286
1287
1288 SHF_MIPS_NOSTRIP = 0x08000000,
1289
1290
1291 SHF_MIPS_GPREL = 0x10000000,
1292
1293
1294 SHF_MIPS_MERGE = 0x20000000,
1295
1296
1297 SHF_MIPS_ADDR = 0x40000000,
1298
1299
1300 SHF_MIPS_STRING = 0x80000000,
1301
1302
1303 SHF_ARM_PURECODE = 0x20000000
1304 };
1305
1306
1307 enum : unsigned {
1308 GRP_COMDAT = 0x1,
1309 GRP_MASKOS = 0x0ff00000,
1310 GRP_MASKPROC = 0xf0000000
1311 };
1312
1313
1314 struct Elf32_Sym {
1315 Elf32_Word st_name;
1316 Elf32_Addr st_value;
1317 Elf32_Word st_size;
1318 unsigned char st_info;
1319 unsigned char st_other;
1320 Elf32_Half st_shndx;
1321
1322
1323
1324 unsigned char getBinding() const { return st_info >> 4; }
1325 unsigned char getType() const { return st_info & 0x0f; }
1326 void setBinding(unsigned char b) { setBindingAndType(b, getType()); }
1327 void setType(unsigned char t) { setBindingAndType(getBinding(), t); }
1328 void setBindingAndType(unsigned char b, unsigned char t) {
1329 st_info = (b << 4) + (t & 0x0f);
1330 }
1331 };
1332
1333
1334 struct Elf64_Sym {
1335 Elf64_Word st_name;
1336 unsigned char st_info;
1337 unsigned char st_other;
1338 Elf64_Half st_shndx;
1339 Elf64_Addr st_value;
1340 Elf64_Xword st_size;
1341
1342
1343
1344 unsigned char getBinding() const { return st_info >> 4; }
1345 unsigned char getType() const { return st_info & 0x0f; }
1346 void setBinding(unsigned char b) { setBindingAndType(b, getType()); }
1347 void setType(unsigned char t) { setBindingAndType(getBinding(), t); }
1348 void setBindingAndType(unsigned char b, unsigned char t) {
1349 st_info = (b << 4) + (t & 0x0f);
1350 }
1351 };
1352
1353
1354 enum {
1355 SYMENTRY_SIZE32 = 16,
1356 SYMENTRY_SIZE64 = 24
1357 };
1358
1359
1360 enum {
1361 STB_LOCAL = 0,
1362 STB_GLOBAL = 1,
1363 STB_WEAK = 2,
1364 STB_GNU_UNIQUE = 10,
1365 STB_LOOS = 10,
1366 STB_HIOS = 12,
1367 STB_LOPROC = 13,
1368 STB_HIPROC = 15
1369 };
1370
1371
1372 enum {
1373 STT_NOTYPE = 0,
1374 STT_OBJECT = 1,
1375 STT_FUNC = 2,
1376 STT_SECTION = 3,
1377 STT_FILE = 4,
1378 STT_COMMON = 5,
1379 STT_TLS = 6,
1380 STT_GNU_IFUNC = 10,
1381 STT_LOOS = 10,
1382 STT_HIOS = 12,
1383 STT_LOPROC = 13,
1384 STT_HIPROC = 15,
1385
1386
1387 STT_AMDGPU_HSA_KERNEL = 10
1388 };
1389
1390 enum {
1391 STV_DEFAULT = 0,
1392 STV_INTERNAL = 1,
1393 STV_HIDDEN = 2,
1394 STV_PROTECTED = 3
1395 };
1396
1397
1398 enum { STN_UNDEF = 0 };
1399
1400
1401 enum {
1402 RSS_UNDEF = 0,
1403 RSS_GP = 1,
1404 RSS_GP0 = 2,
1405 RSS_LOC = 3
1406 };
1407
1408
1409 struct Elf32_Rel {
1410 Elf32_Addr r_offset;
1411 Elf32_Word r_info;
1412
1413
1414
1415 Elf32_Word getSymbol() const { return (r_info >> 8); }
1416 unsigned char getType() const { return (unsigned char)(r_info & 0x0ff); }
1417 void setSymbol(Elf32_Word s) { setSymbolAndType(s, getType()); }
1418 void setType(unsigned char t) { setSymbolAndType(getSymbol(), t); }
1419 void setSymbolAndType(Elf32_Word s, unsigned char t) {
1420 r_info = (s << 8) + t;
1421 }
1422 };
1423
1424
1425 struct Elf32_Rela {
1426 Elf32_Addr r_offset;
1427 Elf32_Word r_info;
1428 Elf32_Sword r_addend;
1429
1430
1431
1432 Elf32_Word getSymbol() const { return (r_info >> 8); }
1433 unsigned char getType() const { return (unsigned char)(r_info & 0x0ff); }
1434 void setSymbol(Elf32_Word s) { setSymbolAndType(s, getType()); }
1435 void setType(unsigned char t) { setSymbolAndType(getSymbol(), t); }
1436 void setSymbolAndType(Elf32_Word s, unsigned char t) {
1437 r_info = (s << 8) + t;
1438 }
1439 };
1440
1441
1442 typedef Elf32_Word Elf32_Relr;
1443
1444
1445 struct Elf64_Rel {
1446 Elf64_Addr r_offset;
1447 Elf64_Xword r_info;
1448
1449
1450
1451 Elf64_Word getSymbol() const { return (r_info >> 32); }
1452 Elf64_Word getType() const { return (Elf64_Word)(r_info & 0xffffffffL); }
1453 void setSymbol(Elf64_Word s) { setSymbolAndType(s, getType()); }
1454 void setType(Elf64_Word t) { setSymbolAndType(getSymbol(), t); }
1455 void setSymbolAndType(Elf64_Word s, Elf64_Word t) {
1456 r_info = ((Elf64_Xword)s << 32) + (t & 0xffffffffL);
1457 }
1458 };
1459
1460
1461 struct Elf64_Rela {
1462 Elf64_Addr r_offset;
1463 Elf64_Xword r_info;
1464 Elf64_Sxword r_addend;
1465
1466
1467
1468 Elf64_Word getSymbol() const { return (r_info >> 32); }
1469 Elf64_Word getType() const { return (Elf64_Word)(r_info & 0xffffffffL); }
1470 void setSymbol(Elf64_Word s) { setSymbolAndType(s, getType()); }
1471 void setType(Elf64_Word t) { setSymbolAndType(getSymbol(), t); }
1472 void setSymbolAndType(Elf64_Word s, Elf64_Word t) {
1473 r_info = ((Elf64_Xword)s << 32) + (t & 0xffffffffL);
1474 }
1475 };
1476
1477
1478 template <bool Is64> struct Elf_Crel {
1479 std::conditional_t<Is64, uint64_t, uint32_t> r_offset;
1480 uint32_t r_symidx;
1481 uint32_t r_type;
1482 std::conditional_t<Is64, int64_t, int32_t> r_addend;
1483 };
1484
1485
1486 typedef Elf64_Xword Elf64_Relr;
1487
1488
1489 struct Elf32_Phdr {
1490 Elf32_Word p_type;
1491 Elf32_Off p_offset;
1492 Elf32_Addr p_vaddr;
1493 Elf32_Addr p_paddr;
1494 Elf32_Word p_filesz;
1495 Elf32_Word p_memsz;
1496 Elf32_Word p_flags;
1497 Elf32_Word p_align;
1498 };
1499
1500
1501 struct Elf64_Phdr {
1502 Elf64_Word p_type;
1503 Elf64_Word p_flags;
1504 Elf64_Off p_offset;
1505 Elf64_Addr p_vaddr;
1506 Elf64_Addr p_paddr;
1507 Elf64_Xword p_filesz;
1508 Elf64_Xword p_memsz;
1509 Elf64_Xword p_align;
1510 };
1511
1512
1513 enum {
1514 PT_NULL = 0,
1515 PT_LOAD = 1,
1516 PT_DYNAMIC = 2,
1517 PT_INTERP = 3,
1518 PT_NOTE = 4,
1519 PT_SHLIB = 5,
1520 PT_PHDR = 6,
1521 PT_TLS = 7,
1522 PT_LOOS = 0x60000000,
1523 PT_HIOS = 0x6fffffff,
1524 PT_LOPROC = 0x70000000,
1525 PT_HIPROC = 0x7fffffff,
1526
1527
1528
1529 PT_GNU_EH_FRAME = 0x6474e550,
1530 PT_SUNW_EH_FRAME = 0x6474e550,
1531 PT_SUNW_UNWIND = 0x6464e550,
1532
1533 PT_GNU_STACK = 0x6474e551,
1534 PT_GNU_RELRO = 0x6474e552,
1535 PT_GNU_PROPERTY = 0x6474e553,
1536
1537 PT_OPENBSD_MUTABLE = 0x65a3dbe5,
1538 PT_OPENBSD_RANDOMIZE = 0x65a3dbe6,
1539 PT_OPENBSD_WXNEEDED = 0x65a3dbe7,
1540 PT_OPENBSD_NOBTCFI = 0x65a3dbe8,
1541 PT_OPENBSD_SYSCALLS = 0x65a3dbe9,
1542 PT_OPENBSD_BOOTDATA = 0x65a41be6,
1543
1544
1545 PT_ARM_ARCHEXT = 0x70000000,
1546
1547 PT_ARM_EXIDX = 0x70000001,
1548 PT_ARM_UNWIND = 0x70000001,
1549
1550 PT_AARCH64_MEMTAG_MTE = 0x70000002,
1551
1552
1553 PT_MIPS_REGINFO = 0x70000000,
1554 PT_MIPS_RTPROC = 0x70000001,
1555 PT_MIPS_OPTIONS = 0x70000002,
1556 PT_MIPS_ABIFLAGS = 0x70000003,
1557
1558
1559 PT_RISCV_ATTRIBUTES = 0x70000003,
1560 };
1561
1562
1563 enum : unsigned {
1564 PF_X = 1,
1565 PF_W = 2,
1566 PF_R = 4,
1567 PF_MASKOS = 0x0ff00000,
1568 PF_MASKPROC = 0xf0000000
1569 };
1570
1571
1572 struct Elf32_Dyn {
1573 Elf32_Sword d_tag;
1574 union {
1575 Elf32_Word d_val;
1576 Elf32_Addr d_ptr;
1577 } d_un;
1578 };
1579
1580
1581 struct Elf64_Dyn {
1582 Elf64_Sxword d_tag;
1583 union {
1584 Elf64_Xword d_val;
1585 Elf64_Addr d_ptr;
1586 } d_un;
1587 };
1588
1589
1590 enum {
1591 #define DYNAMIC_TAG(name, value) DT_##name = value,
1592 #include "DynamicTags.def"
1593 #undef DYNAMIC_TAG
1594 };
1595
1596
1597 enum {
1598 DF_ORIGIN = 0x01,
1599 DF_SYMBOLIC = 0x02,
1600 DF_TEXTREL = 0x04,
1601 DF_BIND_NOW = 0x08,
1602 DF_STATIC_TLS = 0x10
1603 };
1604
1605
1606 enum {
1607 DF_1_NOW = 0x00000001,
1608 DF_1_GLOBAL = 0x00000002,
1609 DF_1_GROUP = 0x00000004,
1610 DF_1_NODELETE = 0x00000008,
1611 DF_1_LOADFLTR = 0x00000010,
1612 DF_1_INITFIRST = 0x00000020,
1613 DF_1_NOOPEN = 0x00000040,
1614 DF_1_ORIGIN = 0x00000080,
1615 DF_1_DIRECT = 0x00000100,
1616 DF_1_TRANS = 0x00000200,
1617 DF_1_INTERPOSE = 0x00000400,
1618 DF_1_NODEFLIB = 0x00000800,
1619 DF_1_NODUMP = 0x00001000,
1620 DF_1_CONFALT = 0x00002000,
1621 DF_1_ENDFILTEE = 0x00004000,
1622 DF_1_DISPRELDNE = 0x00008000,
1623 DF_1_DISPRELPND = 0x00010000,
1624 DF_1_NODIRECT = 0x00020000,
1625 DF_1_IGNMULDEF = 0x00040000,
1626 DF_1_NOKSYMS = 0x00080000,
1627 DF_1_NOHDR = 0x00100000,
1628 DF_1_EDITED = 0x00200000,
1629 DF_1_NORELOC = 0x00400000,
1630 DF_1_SYMINTPOSE = 0x00800000,
1631 DF_1_GLOBAUDIT = 0x01000000,
1632 DF_1_SINGLETON = 0x02000000,
1633 DF_1_PIE = 0x08000000,
1634 };
1635
1636
1637 enum {
1638 RHF_NONE = 0x00000000,
1639 RHF_QUICKSTART = 0x00000001,
1640 RHF_NOTPOT = 0x00000002,
1641 RHS_NO_LIBRARY_REPLACEMENT = 0x00000004,
1642 RHF_NO_MOVE = 0x00000008,
1643 RHF_SGI_ONLY = 0x00000010,
1644 RHF_GUARANTEE_INIT = 0x00000020,
1645
1646
1647 RHF_DELTA_C_PLUS_PLUS = 0x00000040,
1648 RHF_GUARANTEE_START_INIT = 0x00000080,
1649
1650
1651 RHF_PIXIE = 0x00000100,
1652 RHF_DEFAULT_DELAY_LOAD = 0x00000200,
1653 RHF_REQUICKSTART = 0x00000400,
1654 RHF_REQUICKSTARTED = 0x00000800,
1655 RHF_CORD = 0x00001000,
1656 RHF_NO_UNRES_UNDEF = 0x00002000,
1657
1658 RHF_RLD_ORDER_SAFE = 0x00004000
1659 };
1660
1661
1662 enum { VER_DEF_NONE = 0, VER_DEF_CURRENT = 1 };
1663
1664
1665 enum { VER_FLG_BASE = 0x1, VER_FLG_WEAK = 0x2, VER_FLG_INFO = 0x4 };
1666
1667
1668 enum {
1669 VER_NDX_LOCAL = 0,
1670 VER_NDX_GLOBAL = 1,
1671 VERSYM_VERSION = 0x7fff,
1672 VERSYM_HIDDEN = 0x8000
1673 };
1674
1675
1676 enum { VER_NEED_NONE = 0, VER_NEED_CURRENT = 1 };
1677
1678
1679
1680
1681 enum : unsigned {
1682 NT_VERSION = 1,
1683 NT_ARCH = 2,
1684 NT_GNU_BUILD_ATTRIBUTE_OPEN = 0x100,
1685 NT_GNU_BUILD_ATTRIBUTE_FUNC = 0x101,
1686 };
1687
1688
1689 enum : unsigned {
1690 NT_PRSTATUS = 1,
1691 NT_FPREGSET = 2,
1692 NT_PRPSINFO = 3,
1693 NT_TASKSTRUCT = 4,
1694 NT_AUXV = 6,
1695 NT_PSTATUS = 10,
1696 NT_FPREGS = 12,
1697 NT_PSINFO = 13,
1698 NT_LWPSTATUS = 16,
1699 NT_LWPSINFO = 17,
1700 NT_WIN32PSTATUS = 18,
1701
1702 NT_PPC_VMX = 0x100,
1703 NT_PPC_VSX = 0x102,
1704 NT_PPC_TAR = 0x103,
1705 NT_PPC_PPR = 0x104,
1706 NT_PPC_DSCR = 0x105,
1707 NT_PPC_EBB = 0x106,
1708 NT_PPC_PMU = 0x107,
1709 NT_PPC_TM_CGPR = 0x108,
1710 NT_PPC_TM_CFPR = 0x109,
1711 NT_PPC_TM_CVMX = 0x10a,
1712 NT_PPC_TM_CVSX = 0x10b,
1713 NT_PPC_TM_SPR = 0x10c,
1714 NT_PPC_TM_CTAR = 0x10d,
1715 NT_PPC_TM_CPPR = 0x10e,
1716 NT_PPC_TM_CDSCR = 0x10f,
1717
1718 NT_386_TLS = 0x200,
1719 NT_386_IOPERM = 0x201,
1720 NT_X86_XSTATE = 0x202,
1721
1722 NT_S390_HIGH_GPRS = 0x300,
1723 NT_S390_TIMER = 0x301,
1724 NT_S390_TODCMP = 0x302,
1725 NT_S390_TODPREG = 0x303,
1726 NT_S390_CTRS = 0x304,
1727 NT_S390_PREFIX = 0x305,
1728 NT_S390_LAST_BREAK = 0x306,
1729 NT_S390_SYSTEM_CALL = 0x307,
1730 NT_S390_TDB = 0x308,
1731 NT_S390_VXRS_LOW = 0x309,
1732 NT_S390_VXRS_HIGH = 0x30a,
1733 NT_S390_GS_CB = 0x30b,
1734 NT_S390_GS_BC = 0x30c,
1735
1736 NT_ARM_VFP = 0x400,
1737 NT_ARM_TLS = 0x401,
1738 NT_ARM_HW_BREAK = 0x402,
1739 NT_ARM_HW_WATCH = 0x403,
1740 NT_ARM_SVE = 0x405,
1741 NT_ARM_PAC_MASK = 0x406,
1742 NT_ARM_TAGGED_ADDR_CTRL = 0x409,
1743 NT_ARM_SSVE = 0x40b,
1744 NT_ARM_ZA = 0x40c,
1745 NT_ARM_ZT = 0x40d,
1746 NT_ARM_FPMR = 0x40e,
1747 NT_ARM_GCS = 0x410,
1748
1749 NT_FILE = 0x46494c45,
1750 NT_PRXFPREG = 0x46e62b7f,
1751 NT_SIGINFO = 0x53494749,
1752 };
1753
1754
1755 enum {
1756 NT_LLVM_HWASAN_GLOBALS = 3,
1757 };
1758
1759
1760 enum {
1761 NT_GNU_ABI_TAG = 1,
1762 NT_GNU_HWCAP = 2,
1763 NT_GNU_BUILD_ID = 3,
1764 NT_GNU_GOLD_VERSION = 4,
1765 NT_GNU_PROPERTY_TYPE_0 = 5,
1766 FDO_PACKAGING_METADATA = 0xcafe1a7e,
1767 };
1768
1769
1770 enum {
1771 NT_ANDROID_TYPE_IDENT = 1,
1772 NT_ANDROID_TYPE_KUSER = 3,
1773 NT_ANDROID_TYPE_MEMTAG = 4,
1774 };
1775
1776
1777 enum {
1778
1779
1780
1781
1782
1783
1784 NT_MEMTAG_LEVEL_NONE = 0,
1785 NT_MEMTAG_LEVEL_ASYNC = 1,
1786 NT_MEMTAG_LEVEL_SYNC = 2,
1787 NT_MEMTAG_LEVEL_MASK = 3,
1788
1789
1790 NT_MEMTAG_HEAP = 4,
1791 NT_MEMTAG_STACK = 8,
1792 };
1793
1794
1795 enum : unsigned {
1796 GNU_PROPERTY_STACK_SIZE = 1,
1797 GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2,
1798 GNU_PROPERTY_AARCH64_FEATURE_1_AND = 0xc0000000,
1799 GNU_PROPERTY_AARCH64_FEATURE_PAUTH = 0xc0000001,
1800 GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002,
1801
1802 GNU_PROPERTY_X86_UINT32_OR_LO = 0xc0008000,
1803 GNU_PROPERTY_X86_FEATURE_2_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 1,
1804 GNU_PROPERTY_X86_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 2,
1805
1806 GNU_PROPERTY_X86_UINT32_OR_AND_LO = 0xc0010000,
1807 GNU_PROPERTY_X86_FEATURE_2_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1,
1808 GNU_PROPERTY_X86_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2,
1809 };
1810
1811
1812 enum : unsigned {
1813 GNU_PROPERTY_AARCH64_FEATURE_1_BTI = 1 << 0,
1814 GNU_PROPERTY_AARCH64_FEATURE_1_PAC = 1 << 1,
1815 GNU_PROPERTY_AARCH64_FEATURE_1_GCS = 1 << 2,
1816 };
1817
1818
1819 enum : unsigned {
1820 AARCH64_PAUTH_PLATFORM_INVALID = 0x0,
1821 AARCH64_PAUTH_PLATFORM_BAREMETAL = 0x1,
1822 AARCH64_PAUTH_PLATFORM_LLVM_LINUX = 0x10000002,
1823 };
1824
1825
1826 enum : unsigned {
1827 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_INTRINSICS = 0,
1828 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_CALLS = 1,
1829 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_RETURNS = 2,
1830 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_AUTHTRAPS = 3,
1831 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_VPTRADDRDISCR = 4,
1832 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_VPTRTYPEDISCR = 5,
1833 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_INITFINI = 6,
1834 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_INITFINIADDRDISC = 7,
1835 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_GOT = 8,
1836 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_GOTOS = 9,
1837 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_TYPEINFOVPTRDISCR = 10,
1838 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_FPTRTYPEDISCR = 11,
1839 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_LAST =
1840 AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_FPTRTYPEDISCR,
1841 };
1842
1843
1844 enum : unsigned {
1845 GNU_PROPERTY_X86_FEATURE_1_IBT = 1 << 0,
1846 GNU_PROPERTY_X86_FEATURE_1_SHSTK = 1 << 1,
1847
1848 GNU_PROPERTY_X86_FEATURE_2_X86 = 1 << 0,
1849 GNU_PROPERTY_X86_FEATURE_2_X87 = 1 << 1,
1850 GNU_PROPERTY_X86_FEATURE_2_MMX = 1 << 2,
1851 GNU_PROPERTY_X86_FEATURE_2_XMM = 1 << 3,
1852 GNU_PROPERTY_X86_FEATURE_2_YMM = 1 << 4,
1853 GNU_PROPERTY_X86_FEATURE_2_ZMM = 1 << 5,
1854 GNU_PROPERTY_X86_FEATURE_2_FXSR = 1 << 6,
1855 GNU_PROPERTY_X86_FEATURE_2_XSAVE = 1 << 7,
1856 GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT = 1 << 8,
1857 GNU_PROPERTY_X86_FEATURE_2_XSAVEC = 1 << 9,
1858
1859 GNU_PROPERTY_X86_ISA_1_BASELINE = 1 << 0,
1860 GNU_PROPERTY_X86_ISA_1_V2 = 1 << 1,
1861 GNU_PROPERTY_X86_ISA_1_V3 = 1 << 2,
1862 GNU_PROPERTY_X86_ISA_1_V4 = 1 << 3,
1863 };
1864
1865
1866 enum {
1867 NT_FREEBSD_ABI_TAG = 1,
1868 NT_FREEBSD_NOINIT_TAG = 2,
1869 NT_FREEBSD_ARCH_TAG = 3,
1870 NT_FREEBSD_FEATURE_CTL = 4,
1871 };
1872
1873
1874 enum {
1875 NT_FREEBSD_FCTL_ASLR_DISABLE = 0x00000001,
1876 NT_FREEBSD_FCTL_PROTMAX_DISABLE = 0x00000002,
1877 NT_FREEBSD_FCTL_STKGAP_DISABLE = 0x00000004,
1878 NT_FREEBSD_FCTL_WXNEEDED = 0x00000008,
1879 NT_FREEBSD_FCTL_LA48 = 0x00000010,
1880 NT_FREEBSD_FCTL_ASG_DISABLE = 0x00000020,
1881 };
1882
1883
1884 enum {
1885 NT_FREEBSD_THRMISC = 7,
1886 NT_FREEBSD_PROCSTAT_PROC = 8,
1887 NT_FREEBSD_PROCSTAT_FILES = 9,
1888 NT_FREEBSD_PROCSTAT_VMMAP = 10,
1889 NT_FREEBSD_PROCSTAT_GROUPS = 11,
1890 NT_FREEBSD_PROCSTAT_UMASK = 12,
1891 NT_FREEBSD_PROCSTAT_RLIMIT = 13,
1892 NT_FREEBSD_PROCSTAT_OSREL = 14,
1893 NT_FREEBSD_PROCSTAT_PSSTRINGS = 15,
1894 NT_FREEBSD_PROCSTAT_AUXV = 16,
1895 };
1896
1897
1898 enum {
1899 NT_NETBSDCORE_PROCINFO = 1,
1900 NT_NETBSDCORE_AUXV = 2,
1901 NT_NETBSDCORE_LWPSTATUS = 24,
1902 };
1903
1904
1905 enum {
1906 NT_OPENBSD_PROCINFO = 10,
1907 NT_OPENBSD_AUXV = 11,
1908 NT_OPENBSD_REGS = 20,
1909 NT_OPENBSD_FPREGS = 21,
1910 NT_OPENBSD_XFPREGS = 22,
1911 NT_OPENBSD_WCOOKIE = 23,
1912 };
1913
1914
1915 enum {
1916 SHN_AMDGPU_LDS = 0xff00,
1917 };
1918
1919
1920 enum {
1921 NT_AMD_HSA_CODE_OBJECT_VERSION = 1,
1922 NT_AMD_HSA_HSAIL = 2,
1923 NT_AMD_HSA_ISA_VERSION = 3,
1924
1925 NT_AMD_HSA_METADATA = 10,
1926 NT_AMD_HSA_ISA_NAME = 11,
1927 NT_AMD_PAL_METADATA = 12
1928 };
1929
1930
1931 enum {
1932
1933 NT_AMDGPU_METADATA = 32
1934 };
1935
1936
1937 enum : unsigned {
1938 NT_LLVM_OPENMP_OFFLOAD_VERSION = 1,
1939 NT_LLVM_OPENMP_OFFLOAD_PRODUCER = 2,
1940 NT_LLVM_OPENMP_OFFLOAD_PRODUCER_VERSION = 3
1941 };
1942
1943 enum {
1944 GNU_ABI_TAG_LINUX = 0,
1945 GNU_ABI_TAG_HURD = 1,
1946 GNU_ABI_TAG_SOLARIS = 2,
1947 GNU_ABI_TAG_FREEBSD = 3,
1948 GNU_ABI_TAG_NETBSD = 4,
1949 GNU_ABI_TAG_SYLLABLE = 5,
1950 GNU_ABI_TAG_NACL = 6,
1951 };
1952
1953 constexpr const char *ELF_NOTE_GNU = "GNU";
1954
1955
1956 enum {
1957 RELOCATION_GROUPED_BY_INFO_FLAG = 1,
1958 RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG = 2,
1959 RELOCATION_GROUPED_BY_ADDEND_FLAG = 4,
1960 RELOCATION_GROUP_HAS_ADDEND_FLAG = 8,
1961 };
1962
1963
1964 struct Elf32_Chdr {
1965 Elf32_Word ch_type;
1966 Elf32_Word ch_size;
1967 Elf32_Word ch_addralign;
1968 };
1969
1970
1971 struct Elf64_Chdr {
1972 Elf64_Word ch_type;
1973 Elf64_Word ch_reserved;
1974 Elf64_Xword ch_size;
1975 Elf64_Xword ch_addralign;
1976 };
1977
1978
1979 struct Elf32_Nhdr {
1980 Elf32_Word n_namesz;
1981 Elf32_Word n_descsz;
1982 Elf32_Word n_type;
1983 };
1984
1985
1986 struct Elf64_Nhdr {
1987 Elf64_Word n_namesz;
1988 Elf64_Word n_descsz;
1989 Elf64_Word n_type;
1990 };
1991
1992
1993 enum {
1994 ELFCOMPRESS_ZLIB = 1,
1995 ELFCOMPRESS_ZSTD = 2,
1996 ELFCOMPRESS_LOOS = 0x60000000,
1997 ELFCOMPRESS_HIOS = 0x6fffffff,
1998 ELFCOMPRESS_LOPROC = 0x70000000,
1999 ELFCOMPRESS_HIPROC = 0x7fffffff
2000 };
2001
2002 constexpr unsigned CREL_HDR_ADDEND = 4;
2003
2004
2005 uint16_t convertArchNameToEMachine(StringRef Arch);
2006
2007
2008 StringRef convertEMachineToArchName(uint16_t EMachine);
2009
2010
2011 uint8_t convertNameToOSABI(StringRef Name);
2012
2013
2014
2015 StringRef convertOSABIToName(uint8_t OSABI);
2016
2017 }
2018 }
2019
2020 #endif