16#ifndef LIEF_ELF_PROCESSOR_FLAGS_H
17#define LIEF_ELF_PROCESSOR_FLAGS_H
19#include "LIEF/visibility.h"
24static constexpr uint64_t PFLAGS_BIT = 43;
25static constexpr uint64_t PFLAGS_MASK = (1LLU << PFLAGS_BIT) - 1;
26static constexpr uint64_t PF_ARM_ID = 1;
27static constexpr uint64_t PF_HEX_ID = 2;
28static constexpr uint64_t PF_LOONGARCH_ID = 3;
29static constexpr uint64_t PF_MIPS_ID = 4;
31enum class PROCESSOR_FLAGS : uint64_t {
32 ARM_EABI_UNKNOWN = 0x00000000 | (PF_ARM_ID << PFLAGS_BIT),
33 ARM_SOFT_FLOAT = 0x00000200 | (PF_ARM_ID << PFLAGS_BIT),
34 ARM_VFP_FLOAT = 0x00000400 | (PF_ARM_ID << PFLAGS_BIT),
35 ARM_EABI_VER1 = 0x01000000 | (PF_ARM_ID << PFLAGS_BIT),
36 ARM_EABI_VER2 = 0x02000000 | (PF_ARM_ID << PFLAGS_BIT),
37 ARM_EABI_VER3 = 0x03000000 | (PF_ARM_ID << PFLAGS_BIT),
38 ARM_EABI_VER4 = 0x04000000 | (PF_ARM_ID << PFLAGS_BIT),
39 ARM_EABI_VER5 = 0x05000000 | (PF_ARM_ID << PFLAGS_BIT),
41 HEXAGON_MACH_V2 = 0x00000001 | (PF_HEX_ID << PFLAGS_BIT),
42 HEXAGON_MACH_V3 = 0x00000002 | (PF_HEX_ID << PFLAGS_BIT),
43 HEXAGON_MACH_V4 = 0x00000003 | (PF_HEX_ID << PFLAGS_BIT),
44 HEXAGON_MACH_V5 = 0x00000004 | (PF_HEX_ID << PFLAGS_BIT),
46 HEXAGON_ISA_V2 = 0x00000010 | (PF_HEX_ID << PFLAGS_BIT),
47 HEXAGON_ISA_V3 = 0x00000020 | (PF_HEX_ID << PFLAGS_BIT),
48 HEXAGON_ISA_V4 = 0x00000030 | (PF_HEX_ID << PFLAGS_BIT),
49 HEXAGON_ISA_V5 = 0x00000040 | (PF_HEX_ID << PFLAGS_BIT),
51 LOONGARCH_ABI_SOFT_FLOAT = 0x1 | (PF_LOONGARCH_ID << PFLAGS_BIT),
52 LOONGARCH_ABI_SINGLE_FLOAT = 0x2 | (PF_LOONGARCH_ID << PFLAGS_BIT),
53 LOONGARCH_ABI_DOUBLE_FLOAT = 0x3 | (PF_LOONGARCH_ID << PFLAGS_BIT),
55 MIPS_NOREORDER = 0x00000001 | (PF_MIPS_ID << PFLAGS_BIT),
56 MIPS_PIC = 0x00000002 | (PF_MIPS_ID << PFLAGS_BIT),
57 MIPS_CPIC = 0x00000004 | (PF_MIPS_ID << PFLAGS_BIT),
58 MIPS_ABI2 = 0x00000020 | (PF_MIPS_ID << PFLAGS_BIT),
59 MIPS_32BITMODE = 0x00000100 | (PF_MIPS_ID << PFLAGS_BIT),
61 MIPS_FP64 = 0x00000200 | (PF_MIPS_ID << PFLAGS_BIT),
63 MIPS_NAN2008 = 0x00000400 | (PF_MIPS_ID << PFLAGS_BIT),
66 MIPS_ABI_O32 = 0x00001000 | (PF_MIPS_ID << PFLAGS_BIT),
67 MIPS_ABI_O64 = 0x00002000 | (PF_MIPS_ID << PFLAGS_BIT),
68 MIPS_ABI_EABI32 = 0x00003000 | (PF_MIPS_ID << PFLAGS_BIT),
69 MIPS_ABI_EABI64 = 0x00004000 | (PF_MIPS_ID << PFLAGS_BIT),
72 MIPS_MACH_3900 = 0x00810000 | (PF_MIPS_ID << PFLAGS_BIT),
73 MIPS_MACH_4010 = 0x00820000 | (PF_MIPS_ID << PFLAGS_BIT),
74 MIPS_MACH_4100 = 0x00830000 | (PF_MIPS_ID << PFLAGS_BIT),
75 MIPS_MACH_4650 = 0x00850000 | (PF_MIPS_ID << PFLAGS_BIT),
76 MIPS_MACH_4120 = 0x00870000 | (PF_MIPS_ID << PFLAGS_BIT),
77 MIPS_MACH_4111 = 0x00880000 | (PF_MIPS_ID << PFLAGS_BIT),
78 MIPS_MACH_SB1 = 0x008a0000 | (PF_MIPS_ID << PFLAGS_BIT),
79 MIPS_MACH_OCTEON = 0x008b0000 | (PF_MIPS_ID << PFLAGS_BIT),
80 MIPS_MACH_XLR = 0x008c0000 | (PF_MIPS_ID << PFLAGS_BIT),
81 MIPS_MACH_OCTEON2 = 0x008d0000 | (PF_MIPS_ID << PFLAGS_BIT),
82 MIPS_MACH_OCTEON3 = 0x008e0000 | (PF_MIPS_ID << PFLAGS_BIT),
83 MIPS_MACH_5400 = 0x00910000 | (PF_MIPS_ID << PFLAGS_BIT),
84 MIPS_MACH_5900 = 0x00920000 | (PF_MIPS_ID << PFLAGS_BIT),
85 MIPS_MACH_5500 = 0x00980000 | (PF_MIPS_ID << PFLAGS_BIT),
86 MIPS_MACH_9000 = 0x00990000 | (PF_MIPS_ID << PFLAGS_BIT),
87 MIPS_MACH_LS2E = 0x00a00000 | (PF_MIPS_ID << PFLAGS_BIT),
88 MIPS_MACH_LS2F = 0x00a10000 | (PF_MIPS_ID << PFLAGS_BIT),
89 MIPS_MACH_LS3A = 0x00a20000 | (PF_MIPS_ID << PFLAGS_BIT),
92 MIPS_MICROMIPS = 0x02000000 | (PF_MIPS_ID << PFLAGS_BIT),
93 MIPS_ARCH_ASE_M16 = 0x04000000 | (PF_MIPS_ID << PFLAGS_BIT),
94 MIPS_ARCH_ASE_MDMX = 0x08000000 | (PF_MIPS_ID << PFLAGS_BIT),
97 MIPS_ARCH_1 = 0x00000000 | (PF_MIPS_ID << PFLAGS_BIT),
98 MIPS_ARCH_2 = 0x10000000 | (PF_MIPS_ID << PFLAGS_BIT),
99 MIPS_ARCH_3 = 0x20000000 | (PF_MIPS_ID << PFLAGS_BIT),
100 MIPS_ARCH_4 = 0x30000000 | (PF_MIPS_ID << PFLAGS_BIT),
101 MIPS_ARCH_5 = 0x40000000 | (PF_MIPS_ID << PFLAGS_BIT),
102 MIPS_ARCH_32 = 0x50000000 | (PF_MIPS_ID << PFLAGS_BIT),
103 MIPS_ARCH_64 = 0x60000000 | (PF_MIPS_ID << PFLAGS_BIT),
104 MIPS_ARCH_32R2 = 0x70000000 | (PF_MIPS_ID << PFLAGS_BIT),
105 MIPS_ARCH_64R2 = 0x80000000 | (PF_MIPS_ID << PFLAGS_BIT),
106 MIPS_ARCH_32R6 = 0x90000000 | (PF_MIPS_ID << PFLAGS_BIT),
107 MIPS_ARCH_64R6 = 0xa0000000 | (PF_MIPS_ID << PFLAGS_BIT),
110LIEF_API
const char* to_string(PROCESSOR_FLAGS flag);
LIEF namespace.
Definition Abstract/Binary.hpp:32