#![allow(missing_docs)]
#![allow(clippy::identity_op)]
#[cfg(feature = "names")]
use crate::constants::{ConstantNames, FlagNames};
use crate::endian::{Endian, I32, I64, U16, U32, U64};
use crate::pod::Pod;
#[cfg(feature = "names")]
#[derive(Debug)]
#[non_exhaustive]
pub struct Names {
pub et: &'static ConstantNames<FileType>,
pub ef: &'static FlagNames<FileFlags>,
pub shn: &'static ConstantNames<SymbolSection>,
pub sht: &'static ConstantNames<SectionType>,
pub shf: &'static FlagNames<SectionFlags>,
pub stb: &'static ConstantNames<SymbolBind>,
pub stt: &'static ConstantNames<SymbolType>,
pub sto: &'static FlagNames<SymbolOther>,
pub pt: &'static ConstantNames<ProgramType>,
pub pf: &'static FlagNames<ProgramFlags>,
pub dt: &'static ConstantNames<DynamicTag>,
pub r: &'static ConstantNames<RelocationType>,
}
names! {
struct Base;
consts et = NAMES_ET;
flags ef: FileFlags(u32) = {};
consts shn = NAMES_SHN;
consts sht = NAMES_SHT;
flags shf = NAMES_SHF;
consts stb = NAMES_STB;
consts stt = NAMES_STT;
flags sto = NAMES_STO;
consts pt = NAMES_PT;
flags pf = NAMES_PF;
consts dt = NAMES_DT;
consts r: RelocationType = {};
}
#[cfg(feature = "names")]
pub const fn names() -> &'static Names {
Base::names()
}
#[cfg(feature = "names")]
pub const fn machine_names(machine: Machine) -> &'static Names {
match machine {
EM_386 => I386::names(),
EM_68K => M68k::names(),
EM_AARCH64 => Aarch64::names(),
EM_ALPHA => Alpha::names(),
EM_ALTERA_NIOS2 => Nios2::names(),
EM_ARM => Arm::names(),
EM_AVR => Avr::names(),
EM_BPF => Bpf::names(),
EM_CRIS => Cris::names(),
EM_CSKY => Csky::names(),
EM_HEXAGON => Hex::names(),
EM_MCST_ELBRUS => E2k::names(),
EM_IA_64 => Ia64::names(),
EM_LOONGARCH => Larch::names(),
EM_M32R => M32r::names(),
EM_METAG => Metag::names(),
EM_MICROBLAZE => Microblaze::names(),
EM_MIPS => Mips::names(),
EM_MN10300 => Mn10300::names(),
EM_MSP430 => Msp430::names(),
EM_NDS32 => Nds32::names(),
EM_PARISC => Parisc::names(),
EM_PPC => Ppc::names(),
EM_PPC64 => Ppc64::names(),
EM_RISCV => Riscv::names(),
EM_S390 => S390::names(),
EM_SBF => Sbf::names(),
EM_SH => Sh::names(),
EM_SHARC => Sharc::names(),
EM_SPARC | EM_SPARC32PLUS => Sparc::names(),
EM_SPARCV9 => SparcV9::names(),
EM_TILEGX => Tilegx::names(),
EM_TILEPRO => Tilepro::names(),
EM_X86_64 => X86_64::names(),
EM_XTENSA => Xtensa::names(),
_ => Base::names(),
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct FileHeader32<E: Endian> {
pub e_ident: Ident,
pub e_type: U16<E, FileType>,
pub e_machine: U16<E, Machine>,
pub e_version: U32<E>,
pub e_entry: U32<E>,
pub e_phoff: U32<E>,
pub e_shoff: U32<E>,
pub e_flags: U32<E, FileFlags>,
pub e_ehsize: U16<E>,
pub e_phentsize: U16<E>,
pub e_phnum: U16<E>,
pub e_shentsize: U16<E>,
pub e_shnum: U16<E>,
pub e_shstrndx: U16<E, SymbolSection>,
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct FileHeader64<E: Endian> {
pub e_ident: Ident,
pub e_type: U16<E, FileType>,
pub e_machine: U16<E, Machine>,
pub e_version: U32<E>,
pub e_entry: U64<E>,
pub e_phoff: U64<E>,
pub e_shoff: U64<E>,
pub e_flags: U32<E, FileFlags>,
pub e_ehsize: U16<E>,
pub e_phentsize: U16<E>,
pub e_phnum: U16<E>,
pub e_shentsize: U16<E>,
pub e_shnum: U16<E>,
pub e_shstrndx: U16<E, SymbolSection>,
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Ident {
pub magic: [u8; 4],
pub class: FileClass,
pub data: DataEncoding,
pub version: FileVersion,
pub os_abi: OsAbi,
pub abi_version: u8,
pub padding: [u8; 7],
}
pub const ELFMAG: [u8; 4] = [0x7f, b'E', b'L', b'F'];
newtype!(
#[repr(transparent)]
struct FileClass(u8);
);
newtype_constant_names!(NAMES_CLASS: FileClass(u8) = {
ELFCLASSNONE = 0,
ELFCLASS32 = 1,
ELFCLASS64 = 2,
});
newtype!(
#[repr(transparent)]
struct DataEncoding(u8);
);
newtype_constant_names!(NAMES_DATA: DataEncoding(u8) = {
ELFDATANONE = 0,
ELFDATA2LSB = 1,
ELFDATA2MSB = 2,
});
newtype!(
#[repr(transparent)]
struct OsAbi(u8);
);
newtype_constant_names!(NAMES_ELFOSABI: OsAbi(u8) = {
ELFOSABI_SYSV = 0,
ELFOSABI_NONE = 0,
ELFOSABI_HPUX = 1,
ELFOSABI_NETBSD = 2,
ELFOSABI_GNU = 3,
ELFOSABI_LINUX = ELFOSABI_GNU.0,
ELFOSABI_HURD = 4,
ELFOSABI_SOLARIS = 6,
ELFOSABI_AIX = 7,
ELFOSABI_IRIX = 8,
ELFOSABI_FREEBSD = 9,
ELFOSABI_TRU64 = 10,
ELFOSABI_MODESTO = 11,
ELFOSABI_OPENBSD = 12,
ELFOSABI_OPENVMS = 13,
ELFOSABI_NSK = 14,
ELFOSABI_AROS = 15,
ELFOSABI_FENIXOS = 16,
ELFOSABI_CLOUDABI = 17,
ELFOSABI_ARM_AEABI = 64,
ELFOSABI_ARM = 97,
ELFOSABI_STANDALONE = 255,
});
newtype!(
struct FileType(u16);
);
impl FileType {
pub fn is_os(self) -> bool {
self.0 >= ET_LOOS && self.0 <= ET_HIOS
}
pub fn is_proc(self) -> bool {
debug_assert_eq!(ET_HIPROC, !0);
self.0 >= ET_LOPROC
}
}
newtype_constant_names!(NAMES_ET: FileType(u16) = {
ET_NONE = 0,
ET_REL = 1,
ET_EXEC = 2,
ET_DYN = 3,
ET_CORE = 4,
});
pub const ET_LOOS: u16 = 0xfe00;
pub const ET_HIOS: u16 = 0xfeff;
pub const ET_LOPROC: u16 = 0xff00;
pub const ET_HIPROC: u16 = 0xffff;
newtype!(
struct Machine(u16);
);
newtype_constant_names!(NAMES_EM: Machine(u16) = {
EM_NONE = 0,
EM_M32 = 1,
EM_SPARC = 2,
EM_386 = 3,
EM_68K = 4,
EM_88K = 5,
EM_IAMCU = 6,
EM_860 = 7,
EM_MIPS = 8,
EM_S370 = 9,
EM_MIPS_RS3_LE = 10,
EM_PARISC = 15,
EM_VPP500 = 17,
EM_SPARC32PLUS = 18,
EM_960 = 19,
EM_PPC = 20,
EM_PPC64 = 21,
EM_S390 = 22,
EM_SPU = 23,
EM_V800 = 36,
EM_FR20 = 37,
EM_RH32 = 38,
EM_RCE = 39,
EM_ARM = 40,
EM_FAKE_ALPHA = 41,
EM_SH = 42,
EM_SPARCV9 = 43,
EM_TRICORE = 44,
EM_ARC = 45,
EM_H8_300 = 46,
EM_H8_300H = 47,
EM_H8S = 48,
EM_H8_500 = 49,
EM_IA_64 = 50,
EM_MIPS_X = 51,
EM_COLDFIRE = 52,
EM_68HC12 = 53,
EM_MMA = 54,
EM_PCP = 55,
EM_NCPU = 56,
EM_NDR1 = 57,
EM_STARCORE = 58,
EM_ME16 = 59,
EM_ST100 = 60,
EM_TINYJ = 61,
EM_X86_64 = 62,
EM_PDSP = 63,
EM_PDP10 = 64,
EM_PDP11 = 65,
EM_FX66 = 66,
EM_ST9PLUS = 67,
EM_ST7 = 68,
EM_68HC16 = 69,
EM_68HC11 = 70,
EM_68HC08 = 71,
EM_68HC05 = 72,
EM_SVX = 73,
EM_ST19 = 74,
EM_VAX = 75,
EM_CRIS = 76,
EM_JAVELIN = 77,
EM_FIREPATH = 78,
EM_ZSP = 79,
EM_MMIX = 80,
EM_HUANY = 81,
EM_PRISM = 82,
EM_AVR = 83,
EM_FR30 = 84,
EM_D10V = 85,
EM_D30V = 86,
EM_V850 = 87,
EM_M32R = 88,
EM_MN10300 = 89,
EM_MN10200 = 90,
EM_PJ = 91,
EM_OPENRISC = 92,
EM_ARC_COMPACT = 93,
EM_XTENSA = 94,
EM_VIDEOCORE = 95,
EM_TMM_GPP = 96,
EM_NS32K = 97,
EM_TPC = 98,
EM_SNP1K = 99,
EM_ST200 = 100,
EM_IP2K = 101,
EM_MAX = 102,
EM_CR = 103,
EM_F2MC16 = 104,
EM_MSP430 = 105,
EM_BLACKFIN = 106,
EM_SE_C33 = 107,
EM_SEP = 108,
EM_ARCA = 109,
EM_UNICORE = 110,
EM_EXCESS = 111,
EM_DXP = 112,
EM_ALTERA_NIOS2 = 113,
EM_CRX = 114,
EM_XGATE = 115,
EM_C166 = 116,
EM_M16C = 117,
EM_DSPIC30F = 118,
EM_CE = 119,
EM_M32C = 120,
EM_TSK3000 = 131,
EM_RS08 = 132,
EM_SHARC = 133,
EM_ECOG2 = 134,
EM_SCORE7 = 135,
EM_DSP24 = 136,
EM_VIDEOCORE3 = 137,
EM_LATTICEMICO32 = 138,
EM_SE_C17 = 139,
EM_TI_C6000 = 140,
EM_TI_C2000 = 141,
EM_TI_C5500 = 142,
EM_TI_ARP32 = 143,
EM_TI_PRU = 144,
EM_MMDSP_PLUS = 160,
EM_CYPRESS_M8C = 161,
EM_R32C = 162,
EM_TRIMEDIA = 163,
EM_HEXAGON = 164,
EM_8051 = 165,
EM_STXP7X = 166,
EM_NDS32 = 167,
EM_ECOG1X = 168,
EM_MAXQ30 = 169,
EM_XIMO16 = 170,
EM_MANIK = 171,
EM_CRAYNV2 = 172,
EM_RX = 173,
EM_METAG = 174,
EM_MCST_ELBRUS = 175,
EM_ECOG16 = 176,
EM_CR16 = 177,
EM_ETPU = 178,
EM_SLE9X = 179,
EM_L10M = 180,
EM_K10M = 181,
EM_AARCH64 = 183,
EM_AVR32 = 185,
EM_STM8 = 186,
EM_TILE64 = 187,
EM_TILEPRO = 188,
EM_MICROBLAZE = 189,
EM_CUDA = 190,
EM_TILEGX = 191,
EM_CLOUDSHIELD = 192,
EM_COREA_1ST = 193,
EM_COREA_2ND = 194,
EM_ARC_COMPACT2 = 195,
EM_OPEN8 = 196,
EM_RL78 = 197,
EM_VIDEOCORE5 = 198,
EM_78KOR = 199,
EM_56800EX = 200,
EM_BA1 = 201,
EM_BA2 = 202,
EM_XCORE = 203,
EM_MCHP_PIC = 204,
EM_KM32 = 210,
EM_KMX32 = 211,
EM_EMX16 = 212,
EM_EMX8 = 213,
EM_KVARC = 214,
EM_CDP = 215,
EM_COGE = 216,
EM_COOL = 217,
EM_NORC = 218,
EM_CSR_KALIMBA = 219,
EM_Z80 = 220,
EM_VISIUM = 221,
EM_FT32 = 222,
EM_MOXIE = 223,
EM_AMDGPU = 224,
EM_RISCV = 243,
EM_BPF = 247,
EM_CSKY = 252,
EM_LOONGARCH = 258,
EM_SBF = 263,
EM_ALPHA = 0x9026,
});
newtype!(
#[repr(transparent)]
struct FileVersion(u8);
);
newtype_constant_names!(NAMES_VERSION: FileVersion(u8) = {
EV_NONE = 0,
EV_CURRENT = 1,
});
newtype!(
struct FileFlags(u32);
);
newtype_flag_names!(FileFlags(u32) = {});
impl FileFlags {
pub fn mips_abi(self) -> FileFlags {
FileFlags(self.0 & EF_MIPS_ABI)
}
pub fn with_mips_abi(self, abi: FileFlags) -> FileFlags {
FileFlags(self.0 & !EF_MIPS_ABI | abi.0 & EF_MIPS_ABI)
}
pub fn mips_arch(self) -> FileFlags {
FileFlags(self.0 & EF_MIPS_ARCH)
}
pub fn with_mips_arch(self, arch: FileFlags) -> FileFlags {
FileFlags(self.0 & !EF_MIPS_ARCH | arch.0 & EF_MIPS_ARCH)
}
pub fn parisc_arch(self) -> FileFlags {
FileFlags(self.0 & EF_PARISC_ARCH)
}
pub fn with_parisc_arch(self, arch: FileFlags) -> FileFlags {
FileFlags(self.0 & !EF_PARISC_ARCH | arch.0 & EF_PARISC_ARCH)
}
pub fn ppc64_abi(self) -> u32 {
self.0 & EF_PPC64_ABI
}
pub fn with_ppc64_abi(self, abi: u32) -> FileFlags {
FileFlags(self.0 & !EF_PPC64_ABI | abi & EF_PPC64_ABI)
}
pub fn arm_eabi(self) -> FileFlags {
FileFlags(self.0 & EF_ARM_EABIMASK)
}
pub fn with_arm_eabi(self, eabi: FileFlags) -> FileFlags {
FileFlags(self.0 & !EF_ARM_EABIMASK | eabi.0 & EF_ARM_EABIMASK)
}
pub fn avr_arch(self) -> FileFlags {
FileFlags(self.0 & EF_AVR_ARCH)
}
pub fn with_avr_arch(self, arch: FileFlags) -> FileFlags {
FileFlags(self.0 & !EF_AVR_ARCH | arch.0 & EF_AVR_ARCH)
}
pub fn sh_mach(self) -> FileFlags {
FileFlags(self.0 & EF_SH_MACH_MASK)
}
pub fn with_sh_mach(self, mach: FileFlags) -> FileFlags {
FileFlags(self.0 & !EF_SH_MACH_MASK | mach.0 & EF_SH_MACH_MASK)
}
pub fn riscv_float_abi(self) -> FileFlags {
FileFlags(self.0 & EF_RISCV_FLOAT_ABI)
}
pub fn with_riscv_float_abi(self, float_abi: FileFlags) -> FileFlags {
FileFlags(self.0 & !EF_RISCV_FLOAT_ABI | float_abi.0 & EF_RISCV_FLOAT_ABI)
}
pub fn larch_abi_modifier(self) -> FileFlags {
FileFlags(self.0 & EF_LARCH_ABI_MODIFIER_MASK)
}
pub fn with_larch_abi_modifier(self, modifier: FileFlags) -> FileFlags {
FileFlags(self.0 & !EF_LARCH_ABI_MODIFIER_MASK | modifier.0 & EF_LARCH_ABI_MODIFIER_MASK)
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct SectionHeader32<E: Endian> {
pub sh_name: U32<E>,
pub sh_type: U32<E, SectionType>,
pub sh_flags: U32<E, SectionFlags>,
pub sh_addr: U32<E>,
pub sh_offset: U32<E>,
pub sh_size: U32<E>,
pub sh_link: U32<E>,
pub sh_info: U32<E>,
pub sh_addralign: U32<E>,
pub sh_entsize: U32<E>,
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct SectionHeader64<E: Endian> {
pub sh_name: U32<E>,
pub sh_type: U32<E, SectionType>,
pub sh_flags: U64<E, SectionFlags>,
pub sh_addr: U64<E>,
pub sh_offset: U64<E>,
pub sh_size: U64<E>,
pub sh_link: U32<E>,
pub sh_info: U32<E>,
pub sh_addralign: U64<E>,
pub sh_entsize: U64<E>,
}
newtype!(
struct SymbolSection(u16);
);
impl SymbolSection {
pub fn new(index: u32) -> Self {
if index >= u32::from(SHN_LORESERVE) {
SHN_XINDEX
} else {
SymbolSection(index as u16)
}
}
pub fn index(self) -> Option<u16> {
if self.is_special() {
None
} else {
Some(self.0)
}
}
pub fn is_special(self) -> bool {
self == SHN_UNDEF || self.is_reserved()
}
pub fn is_reserved(self) -> bool {
debug_assert_eq!(SHN_HIRESERVE, !0);
self.0 >= SHN_LORESERVE
}
pub fn is_os(self) -> bool {
self.0 >= SHN_LOOS && self.0 <= SHN_HIOS
}
pub fn is_proc(self) -> bool {
self.0 >= SHN_LOPROC && self.0 <= SHN_HIPROC
}
}
newtype_constant_names!(NAMES_SHN: SymbolSection(u16) = {
SHN_UNDEF = 0,
SHN_ABS = 0xfff1,
SHN_COMMON = 0xfff2,
SHN_XINDEX = 0xffff,
});
pub const SHN_LORESERVE: u16 = 0xff00;
pub const SHN_LOPROC: u16 = 0xff00;
pub const SHN_HIPROC: u16 = 0xff1f;
pub const SHN_LOOS: u16 = 0xff20;
pub const SHN_HIOS: u16 = 0xff3f;
pub const SHN_HIRESERVE: u16 = 0xffff;
newtype!(
struct SectionType(u32);
);
impl SectionType {
pub fn is_os(self) -> bool {
self.0 >= SHT_LOOS && self.0 <= SHT_HIOS
}
pub fn is_sun(self) -> bool {
self.0 >= SHT_LOSUNW && self.0 <= SHT_HISUNW
}
pub fn is_proc(self) -> bool {
self.0 >= SHT_LOPROC && self.0 <= SHT_HIPROC
}
pub fn is_user(self) -> bool {
self.0 >= SHT_LOUSER && self.0 <= SHT_HIUSER
}
}
newtype_constant_names!(NAMES_SHT: SectionType(u32) = {
SHT_NULL = 0,
SHT_PROGBITS = 1,
SHT_SYMTAB = 2,
SHT_STRTAB = 3,
SHT_RELA = 4,
SHT_HASH = 5,
SHT_DYNAMIC = 6,
SHT_NOTE = 7,
SHT_NOBITS = 8,
SHT_REL = 9,
SHT_SHLIB = 10,
SHT_DYNSYM = 11,
SHT_INIT_ARRAY = 14,
SHT_FINI_ARRAY = 15,
SHT_PREINIT_ARRAY = 16,
SHT_GROUP = 17,
SHT_SYMTAB_SHNDX = 18,
SHT_RELR = 19,
SHT_CREL = 0x40000014,
SHT_ANDROID_REL = 0x60000001,
SHT_ANDROID_RELA = 0x60000002,
SHT_LLVM_DEPENDENT_LIBRARIES = 0x6fff4c04,
SHT_ANDROID_RELR = 0x6fff_ff00,
SHT_GNU_SFRAME = 0x6fff_fff4,
SHT_GNU_ATTRIBUTES = 0x6fff_fff5,
SHT_GNU_HASH = 0x6fff_fff6,
SHT_GNU_LIBLIST = 0x6fff_fff7,
SHT_CHECKSUM = 0x6fff_fff8,
#[allow(non_upper_case_globals)]
SHT_SUNW_move = 0x6fff_fffa,
SHT_SUNW_COMDAT = 0x6fff_fffb,
#[allow(non_upper_case_globals)]
SHT_SUNW_syminfo = 0x6fff_fffc,
SHT_GNU_VERDEF = 0x6fff_fffd,
SHT_GNU_VERNEED = 0x6fff_fffe,
SHT_GNU_VERSYM = 0x6fff_ffff,
});
pub const SHT_LOOS: u32 = 0x6000_0000;
pub const SHT_LOSUNW: u32 = 0x6fff_fffa;
pub const SHT_HISUNW: u32 = 0x6fff_ffff;
pub const SHT_HIOS: u32 = 0x6fff_ffff;
pub const SHT_LOPROC: u32 = 0x7000_0000;
pub const SHT_HIPROC: u32 = 0x7fff_ffff;
pub const SHT_LOUSER: u32 = 0x8000_0000;
pub const SHT_HIUSER: u32 = 0x8fff_ffff;
newtype!(
struct SectionFlags(u64);
);
impl SectionFlags {
pub fn os_bits(self) -> Self {
SectionFlags(self.0 & SHF_MASKOS)
}
pub fn proc_bits(self) -> Self {
SectionFlags(self.0 & SHF_MASKPROC)
}
}
newtype_flag_names!(NAMES_SHF: SectionFlags(u64) = {
SHF_WRITE = 1 << 0,
SHF_ALLOC = 1 << 1,
SHF_EXECINSTR = 1 << 2,
SHF_MERGE = 1 << 4,
SHF_STRINGS = 1 << 5,
SHF_INFO_LINK = 1 << 6,
SHF_LINK_ORDER = 1 << 7,
SHF_OS_NONCONFORMING = 1 << 8,
SHF_GROUP = 1 << 9,
SHF_TLS = 1 << 10,
SHF_COMPRESSED = 1 << 11,
SHF_GNU_RETAIN = 1 << 21,
SHF_GNU_MBIND = 1 << 24,
SHF_EXCLUDE = 0x8000_0000,
});
pub const SHF_MASKOS: u64 = 0x0ff0_0000;
pub const SHF_MASKPROC: u64 = 0xf000_0000;
#[derive(Debug, Default, Clone, Copy)]
#[repr(C)]
pub struct CompressionHeader32<E: Endian> {
pub ch_type: U32<E, CompressionType>,
pub ch_size: U32<E>,
pub ch_addralign: U32<E>,
}
#[derive(Debug, Default, Clone, Copy)]
#[repr(C)]
pub struct CompressionHeader64<E: Endian> {
pub ch_type: U32<E, CompressionType>,
pub ch_reserved: U32<E>,
pub ch_size: U64<E>,
pub ch_addralign: U64<E>,
}
newtype!(
struct CompressionType(u32);
);
impl CompressionType {
pub fn is_os(self) -> bool {
self.0 >= ELFCOMPRESS_LOOS && self.0 <= ELFCOMPRESS_HIOS
}
pub fn is_proc(self) -> bool {
self.0 >= ELFCOMPRESS_LOPROC && self.0 <= ELFCOMPRESS_HIPROC
}
}
newtype_constant_names!(NAMES_COMPRESS: CompressionType(u32) = {
ELFCOMPRESS_ZLIB = 1,
ELFCOMPRESS_ZSTD = 2,
});
pub const ELFCOMPRESS_LOOS: u32 = 0x6000_0000;
pub const ELFCOMPRESS_HIOS: u32 = 0x6fff_ffff;
pub const ELFCOMPRESS_LOPROC: u32 = 0x7000_0000;
pub const ELFCOMPRESS_HIPROC: u32 = 0x7fff_ffff;
newtype!(
struct GroupFlags(u32);
);
newtype_flag_names!(NAMES_GRP: GroupFlags(u32) = {
GRP_COMDAT = 1,
});
#[derive(Debug, Default, Clone, Copy)]
#[repr(C)]
pub struct Sym32<E: Endian> {
pub st_name: U32<E>,
pub st_value: U32<E>,
pub st_size: U32<E>,
pub st_info: SymbolInfo,
pub st_other: SymbolOther,
pub st_shndx: U16<E, SymbolSection>,
}
impl<E: Endian> Sym32<E> {
#[inline]
pub fn st_bind(&self) -> SymbolBind {
self.st_info.st_bind()
}
#[inline]
pub fn st_type(&self) -> SymbolType {
self.st_info.st_type()
}
#[inline]
pub fn set_st_info(&mut self, st_bind: SymbolBind, st_type: SymbolType) {
self.st_info = SymbolInfo::new(st_bind, st_type);
}
#[inline]
pub fn st_visibility(&self) -> SymbolVisibility {
self.st_other.visibility()
}
}
#[derive(Debug, Default, Clone, Copy)]
#[repr(C)]
pub struct Sym64<E: Endian> {
pub st_name: U32<E>,
pub st_info: SymbolInfo,
pub st_other: SymbolOther,
pub st_shndx: U16<E, SymbolSection>,
pub st_value: U64<E>,
pub st_size: U64<E>,
}
impl<E: Endian> Sym64<E> {
#[inline]
pub fn st_bind(&self) -> SymbolBind {
self.st_info.st_bind()
}
#[inline]
pub fn st_type(&self) -> SymbolType {
self.st_info.st_type()
}
#[inline]
pub fn set_st_info(&mut self, st_bind: SymbolBind, st_type: SymbolType) {
self.st_info = SymbolInfo::new(st_bind, st_type);
}
#[inline]
pub fn st_visibility(&self) -> SymbolVisibility {
self.st_other.visibility()
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Syminfo32<E: Endian> {
pub si_boundto: U16<E, SyminfoBoundto>,
pub si_flags: U16<E, SyminfoFlags>,
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Syminfo64<E: Endian> {
pub si_boundto: U16<E, SyminfoBoundto>,
pub si_flags: U16<E, SyminfoFlags>,
}
newtype!(
struct SyminfoBoundto(u16);
);
impl SyminfoBoundto {
pub fn is_reserved(self) -> bool {
self.0 >= SYMINFO_BT_LOWRESERVE
}
pub fn index(self) -> Option<u16> {
if self.is_reserved() {
None
} else {
Some(self.0)
}
}
#[cfg(feature = "names")]
pub fn version_names() -> &'static ConstantNames<SyminfoBoundto> {
&NAMES_SYMINFO_VERSION
}
}
newtype_constant_names!(NAMES_SYMINFO_BT: SyminfoBoundto(u16) = {
SYMINFO_BT_SELF = 0xffff,
SYMINFO_BT_PARENT = 0xfffe,
});
pub const SYMINFO_BT_LOWRESERVE: u16 = 0xff00;
newtype!(
struct SyminfoFlags(u16);
);
newtype_flag_names!(NAMES_SYMINFO_FLG: SyminfoFlags(u16) = {
SYMINFO_FLG_DIRECT = 0x0001,
SYMINFO_FLG_PASSTHRU = 0x0002,
SYMINFO_FLG_COPY = 0x0004,
SYMINFO_FLG_LAZYLOAD = 0x0008,
});
constant_names!(NAMES_SYMINFO_VERSION: SyminfoBoundto(u16) = {
SYMINFO_NONE = 0,
SYMINFO_CURRENT = 1,
SYMINFO_NUM = 2,
});
newtype!(
#[repr(transparent)]
struct SymbolInfo(u8);
);
impl core::fmt::Debug for SymbolInfo {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{:?} | {:?}", self.st_bind(), self.st_type())
}
}
impl SymbolInfo {
pub fn new(st_bind: SymbolBind, st_type: SymbolType) -> Self {
SymbolInfo((st_bind.0 << 4) | (st_type.0 & 0xf))
}
pub fn st_bind(self) -> SymbolBind {
SymbolBind(self.0 >> 4)
}
pub fn st_type(self) -> SymbolType {
SymbolType(self.0 & 0xf)
}
}
impl core::ops::BitOr<SymbolBind> for SymbolType {
type Output = SymbolInfo;
fn bitor(self, st_bind: SymbolBind) -> Self::Output {
SymbolInfo::new(st_bind, self)
}
}
impl core::ops::BitOr<SymbolType> for SymbolBind {
type Output = SymbolInfo;
fn bitor(self, st_type: SymbolType) -> Self::Output {
SymbolInfo::new(self, st_type)
}
}
newtype!(
struct SymbolBind(u8);
);
impl SymbolBind {
pub fn is_os(self) -> bool {
self.0 >= STB_LOOS && self.0 <= STB_HIOS
}
pub fn is_proc(self) -> bool {
self.0 >= STB_LOPROC && self.0 <= STB_HIPROC
}
}
newtype_constant_names!(NAMES_STB: SymbolBind(u8) = {
STB_LOCAL = 0,
STB_GLOBAL = 1,
STB_WEAK = 2,
STB_GNU_UNIQUE = 10,
});
pub const STB_LOOS: u8 = 10;
pub const STB_HIOS: u8 = 12;
pub const STB_LOPROC: u8 = 13;
pub const STB_HIPROC: u8 = 15;
newtype!(
struct SymbolType(u8);
);
impl SymbolType {
pub fn is_os(self) -> bool {
self.0 >= STT_LOOS && self.0 <= STT_HIOS
}
pub fn is_proc(self) -> bool {
self.0 >= STT_LOPROC && self.0 <= STT_HIPROC
}
}
newtype_constant_names!(NAMES_STT: SymbolType(u8) = {
STT_NOTYPE = 0,
STT_OBJECT = 1,
STT_FUNC = 2,
STT_SECTION = 3,
STT_FILE = 4,
STT_COMMON = 5,
STT_TLS = 6,
STT_GNU_IFUNC = 10,
});
pub const STT_LOOS: u8 = 10;
pub const STT_HIOS: u8 = 12;
pub const STT_LOPROC: u8 = 13;
pub const STT_HIPROC: u8 = 15;
newtype!(
#[repr(transparent)]
struct SymbolOther(u8);
);
impl SymbolOther {
pub fn visibility(self) -> SymbolVisibility {
SymbolVisibility(self.0 & STV_MASK)
}
pub fn with_visibility(self, vis: SymbolVisibility) -> Self {
SymbolOther(self.0 & !STV_MASK | vis.0 & STV_MASK)
}
pub fn ppc64_local(self) -> u8 {
(self.0 & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT
}
pub fn ppc64_with_local(self, local: u8) -> Self {
SymbolOther(
self.0 & !STO_PPC64_LOCAL_MASK | (local << STO_PPC64_LOCAL_BIT) & STO_PPC64_LOCAL_MASK,
)
}
}
newtype_flag_names!(NAMES_STO: SymbolOther(u8) = {
STV_MASK = 3 => NAMES_STV,
});
newtype!(
struct SymbolVisibility(u8);
);
impl From<SymbolVisibility> for SymbolOther {
fn from(value: SymbolVisibility) -> Self {
SymbolOther(value.0 & STV_MASK)
}
}
impl From<SymbolOther> for SymbolVisibility {
fn from(value: SymbolOther) -> Self {
value.visibility()
}
}
newtype_constant_names!(NAMES_STV: SymbolVisibility(u8) = {
STV_DEFAULT = 0,
STV_INTERNAL = 1,
STV_HIDDEN = 2,
STV_PROTECTED = 3,
});
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Rel32<E: Endian> {
pub r_offset: U32<E>,
pub r_info: U32<E>,
}
impl<E: Endian> Rel32<E> {
#[inline]
pub fn r_sym(&self, endian: E) -> u32 {
self.r_info.get(endian) >> 8
}
#[inline]
pub fn r_type(&self, endian: E) -> RelocationType {
RelocationType(self.r_info.get(endian) & 0xff)
}
pub fn r_info(endian: E, r_sym: u32, r_type: RelocationType) -> U32<E> {
U32::new(endian, (r_sym << 8) | (r_type.0 & 0xff))
}
pub fn set_r_info(&mut self, endian: E, r_sym: u32, r_type: RelocationType) {
self.r_info = Self::r_info(endian, r_sym, r_type)
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Rela32<E: Endian> {
pub r_offset: U32<E>,
pub r_info: U32<E>,
pub r_addend: I32<E>,
}
impl<E: Endian> Rela32<E> {
#[inline]
pub fn r_sym(&self, endian: E) -> u32 {
self.r_info.get(endian) >> 8
}
#[inline]
pub fn r_type(&self, endian: E) -> RelocationType {
RelocationType(self.r_info.get(endian) & 0xff)
}
pub fn r_info(endian: E, r_sym: u32, r_type: RelocationType) -> U32<E> {
U32::new(endian, (r_sym << 8) | u32::from(r_type.0 as u8))
}
pub fn set_r_info(&mut self, endian: E, r_sym: u32, r_type: RelocationType) {
self.r_info = Self::r_info(endian, r_sym, r_type)
}
}
impl<E: Endian> From<Rel32<E>> for Rela32<E> {
fn from(rel: Rel32<E>) -> Self {
Rela32 {
r_offset: rel.r_offset,
r_info: rel.r_info,
r_addend: I32::default(),
}
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Rel64<E: Endian> {
pub r_offset: U64<E>,
pub r_info: U64<E>,
}
impl<E: Endian> Rel64<E> {
#[inline]
pub fn r_sym(&self, endian: E) -> u32 {
(self.r_info.get(endian) >> 32) as u32
}
#[inline]
pub fn r_type(&self, endian: E) -> RelocationType {
RelocationType((self.r_info.get(endian) & 0xffff_ffff) as u32)
}
pub fn r_info(endian: E, r_sym: u32, r_type: RelocationType) -> U64<E> {
U64::new(endian, (u64::from(r_sym) << 32) | u64::from(r_type.0))
}
pub fn set_r_info(&mut self, endian: E, r_sym: u32, r_type: RelocationType) {
self.r_info = Self::r_info(endian, r_sym, r_type)
}
}
impl<E: Endian> From<Rel64<E>> for Rela64<E> {
fn from(rel: Rel64<E>) -> Self {
Rela64 {
r_offset: rel.r_offset,
r_info: rel.r_info,
r_addend: I64::default(),
}
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Rela64<E: Endian> {
pub r_offset: U64<E>,
pub r_info: U64<E>,
pub r_addend: I64<E>,
}
impl<E: Endian> Rela64<E> {
pub(crate) fn get_r_info(&self, endian: E, is_mips64el: bool) -> u64 {
let mut t = self.r_info.get(endian);
if is_mips64el {
t = (t << 32)
| ((t >> 8) & 0xff000000)
| ((t >> 24) & 0x00ff0000)
| ((t >> 40) & 0x0000ff00)
| ((t >> 56) & 0x000000ff);
}
t
}
#[inline]
pub fn r_sym(&self, endian: E, is_mips64el: bool) -> u32 {
(self.get_r_info(endian, is_mips64el) >> 32) as u32
}
#[inline]
pub fn r_type(&self, endian: E, is_mips64el: bool) -> RelocationType {
RelocationType((self.get_r_info(endian, is_mips64el) & 0xffff_ffff) as u32)
}
pub fn r_info(endian: E, is_mips64el: bool, r_sym: u32, r_type: RelocationType) -> U64<E> {
let mut t = (u64::from(r_sym) << 32) | u64::from(r_type.0);
if is_mips64el {
t = (t >> 32)
| ((t & 0xff000000) << 8)
| ((t & 0x00ff0000) << 24)
| ((t & 0x0000ff00) << 40)
| ((t & 0x000000ff) << 56);
}
U64::new(endian, t)
}
pub fn set_r_info(&mut self, endian: E, is_mips64el: bool, r_sym: u32, r_type: RelocationType) {
self.r_info = Self::r_info(endian, is_mips64el, r_sym, r_type);
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Relr32<E: Endian>(pub U32<E>);
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Relr64<E: Endian>(pub U64<E>);
newtype!(
struct RelocationType(u32);
);
newtype_constant_names!(RelocationType(u32) = {});
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct ProgramHeader32<E: Endian> {
pub p_type: U32<E, ProgramType>,
pub p_offset: U32<E>,
pub p_vaddr: U32<E>,
pub p_paddr: U32<E>,
pub p_filesz: U32<E>,
pub p_memsz: U32<E>,
pub p_flags: U32<E, ProgramFlags>,
pub p_align: U32<E>,
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct ProgramHeader64<E: Endian> {
pub p_type: U32<E, ProgramType>,
pub p_flags: U32<E, ProgramFlags>,
pub p_offset: U64<E>,
pub p_vaddr: U64<E>,
pub p_paddr: U64<E>,
pub p_filesz: U64<E>,
pub p_memsz: U64<E>,
pub p_align: U64<E>,
}
pub const PN_XNUM: u16 = 0xffff;
newtype!(
struct ProgramType(u32);
);
impl ProgramType {
pub fn is_os(self) -> bool {
self.0 >= PT_LOOS && self.0 <= PT_HIOS
}
pub fn is_proc(self) -> bool {
self.0 >= PT_LOPROC && self.0 <= PT_HIPROC
}
}
newtype_constant_names!(NAMES_PT: ProgramType(u32) = {
PT_NULL = 0,
PT_LOAD = 1,
PT_DYNAMIC = 2,
PT_INTERP = 3,
PT_NOTE = 4,
PT_SHLIB = 5,
PT_PHDR = 6,
PT_TLS = 7,
PT_GNU_EH_FRAME = 0x6474_e550,
PT_GNU_STACK = 0x6474_e551,
PT_GNU_RELRO = 0x6474_e552,
PT_GNU_PROPERTY = 0x6474_e553,
PT_GNU_SFRAME = 0x6474_e554,
});
pub const PT_LOOS: u32 = 0x6000_0000;
pub const PT_HIOS: u32 = 0x6fff_ffff;
pub const PT_LOPROC: u32 = 0x7000_0000;
pub const PT_HIPROC: u32 = 0x7fff_ffff;
newtype!(
struct ProgramFlags(u32);
);
newtype_flag_names!(NAMES_PF: ProgramFlags(u32) = {
PF_X = 1 << 0,
PF_W = 1 << 1,
PF_R = 1 << 2,
});
pub const PF_MASKOS: u32 = 0x0ff0_0000;
pub const PF_MASKPROC: u32 = 0xf000_0000;
pub const ELF_NOTE_CORE: &[u8] = b"CORE";
pub const ELF_NOTE_LINUX: &[u8] = b"LINUX";
constant_names!(NAMES_NT_CORE: NoteType(u32) = {
NT_PRSTATUS = 1,
NT_PRFPREG = 2,
NT_FPREGSET = 2,
NT_PRPSINFO = 3,
NT_PRXREG = 4,
NT_TASKSTRUCT = 4,
NT_PLATFORM = 5,
NT_AUXV = 6,
NT_GWINDOWS = 7,
NT_ASRS = 8,
NT_PSTATUS = 10,
NT_PSINFO = 13,
NT_PRCRED = 14,
NT_UTSNAME = 15,
NT_LWPSTATUS = 16,
NT_LWPSINFO = 17,
NT_PRFPXREG = 20,
NT_SIGINFO = 0x5349_4749,
NT_FILE = 0x4649_4c45,
NT_PRXFPREG = 0x46e6_2b7f,
NT_PPC_VMX = 0x100,
NT_PPC_SPE = 0x101,
NT_PPC_VSX = 0x102,
NT_PPC_TAR = 0x103,
NT_PPC_PPR = 0x104,
NT_PPC_DSCR = 0x105,
NT_PPC_EBB = 0x106,
NT_PPC_PMU = 0x107,
NT_PPC_TM_CGPR = 0x108,
NT_PPC_TM_CFPR = 0x109,
NT_PPC_TM_CVMX = 0x10a,
NT_PPC_TM_CVSX = 0x10b,
NT_PPC_TM_SPR = 0x10c,
NT_PPC_TM_CTAR = 0x10d,
NT_PPC_TM_CPPR = 0x10e,
NT_PPC_TM_CDSCR = 0x10f,
NT_PPC_PKEY = 0x110,
NT_386_TLS = 0x200,
NT_386_IOPERM = 0x201,
NT_X86_XSTATE = 0x202,
NT_S390_HIGH_GPRS = 0x300,
NT_S390_TIMER = 0x301,
NT_S390_TODCMP = 0x302,
NT_S390_TODPREG = 0x303,
NT_S390_CTRS = 0x304,
NT_S390_PREFIX = 0x305,
NT_S390_LAST_BREAK = 0x306,
NT_S390_SYSTEM_CALL = 0x307,
NT_S390_TDB = 0x308,
NT_S390_VXRS_LOW = 0x309,
NT_S390_VXRS_HIGH = 0x30a,
NT_S390_GS_CB = 0x30b,
NT_S390_GS_BC = 0x30c,
NT_S390_RI_CB = 0x30d,
NT_ARM_VFP = 0x400,
NT_ARM_TLS = 0x401,
NT_ARM_HW_BREAK = 0x402,
NT_ARM_HW_WATCH = 0x403,
NT_ARM_SYSTEM_CALL = 0x404,
NT_ARM_SVE = 0x405,
NT_VMCOREDD = 0x700,
NT_MIPS_DSP = 0x800,
NT_MIPS_FP_MODE = 0x801,
});
pub const NT_VERSION: u32 = 1;
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Dyn32<E: Endian> {
pub d_tag: I32<E, DynamicTag>,
pub d_val: U32<E>,
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Dyn64<E: Endian> {
pub d_tag: I64<E, DynamicTag>,
pub d_val: U64<E>,
}
newtype!(
struct DynamicTag(i64);
);
impl DynamicTag {
pub fn is_value(self) -> bool {
self.0 >= DT_VALRNGLO && self.0 <= DT_VALRNGHI
}
pub fn is_address(self) -> bool {
self.0 >= DT_ADDRRNGLO && self.0 <= DT_ADDRRNGHI
}
pub fn is_os(self) -> bool {
self.0 >= DT_LOOS && self.0 <= DT_HIOS
}
pub fn is_proc(self) -> bool {
self.0 >= DT_LOPROC && self.0 <= DT_HIPROC
}
}
newtype_constant_names!(NAMES_DT: DynamicTag(i64) = {
DT_NULL = 0,
DT_NEEDED = 1,
DT_PLTRELSZ = 2,
DT_PLTGOT = 3,
DT_HASH = 4,
DT_STRTAB = 5,
DT_SYMTAB = 6,
DT_RELA = 7,
DT_RELASZ = 8,
DT_RELAENT = 9,
DT_STRSZ = 10,
DT_SYMENT = 11,
DT_INIT = 12,
DT_FINI = 13,
DT_SONAME = 14,
DT_RPATH = 15,
DT_SYMBOLIC = 16,
DT_REL = 17,
DT_RELSZ = 18,
DT_RELENT = 19,
DT_PLTREL = 20,
DT_DEBUG = 21,
DT_TEXTREL = 22,
DT_JMPREL = 23,
DT_BIND_NOW = 24,
DT_INIT_ARRAY = 25,
DT_FINI_ARRAY = 26,
DT_INIT_ARRAYSZ = 27,
DT_FINI_ARRAYSZ = 28,
DT_RUNPATH = 29,
DT_FLAGS = 30,
DT_ENCODING = 32,
DT_PREINIT_ARRAY = 32,
DT_PREINIT_ARRAYSZ = 33,
DT_SYMTAB_SHNDX = 34,
DT_RELR = 36,
DT_RELRSZ = 35,
DT_RELRENT = 37,
DT_ANDROID_REL = 0x6000000f,
DT_ANDROID_RELSZ = 0x60000010,
DT_ANDROID_RELA = 0x60000011,
DT_ANDROID_RELASZ = 0x60000012,
DT_ANDROID_RELR = 0x6fff_e000,
DT_ANDROID_RELRSZ = 0x6fff_e001,
DT_ANDROID_RELRENT = 0x6fff_e003,
DT_GNU_PRELINKED = 0x6fff_fdf5,
DT_GNU_CONFLICTSZ = 0x6fff_fdf6,
DT_GNU_LIBLISTSZ = 0x6fff_fdf7,
DT_CHECKSUM = 0x6fff_fdf8,
DT_PLTPADSZ = 0x6fff_fdf9,
DT_MOVEENT = 0x6fff_fdfa,
DT_MOVESZ = 0x6fff_fdfb,
DT_FEATURE_1 = 0x6fff_fdfc,
DT_POSFLAG_1 = 0x6fff_fdfd,
DT_SYMINSZ = 0x6fff_fdfe,
DT_SYMINENT = 0x6fff_fdff,
DT_GNU_HASH = 0x6fff_fef5,
DT_TLSDESC_PLT = 0x6fff_fef6,
DT_TLSDESC_GOT = 0x6fff_fef7,
DT_GNU_CONFLICT = 0x6fff_fef8,
DT_GNU_LIBLIST = 0x6fff_fef9,
DT_CONFIG = 0x6fff_fefa,
DT_DEPAUDIT = 0x6fff_fefb,
DT_AUDIT = 0x6fff_fefc,
DT_PLTPAD = 0x6fff_fefd,
DT_MOVETAB = 0x6fff_fefe,
DT_SYMINFO = 0x6fff_feff,
DT_VERSYM = 0x6fff_fff0,
DT_RELACOUNT = 0x6fff_fff9,
DT_RELCOUNT = 0x6fff_fffa,
DT_FLAGS_1 = 0x6fff_fffb,
DT_VERDEF = 0x6fff_fffc,
DT_VERDEFNUM = 0x6fff_fffd,
DT_VERNEED = 0x6fff_fffe,
DT_VERNEEDNUM = 0x6fff_ffff,
DT_AUXILIARY = 0x7fff_fffd,
DT_FILTER = 0x7fff_ffff,
});
pub const DT_LOOS: i64 = 0x6000_000d;
pub const DT_HIOS: i64 = 0x6fff_f000;
pub const DT_LOPROC: i64 = 0x7000_0000;
pub const DT_HIPROC: i64 = 0x7fff_ffff;
pub const DT_VALRNGLO: i64 = 0x6fff_fd00;
pub const DT_VALRNGHI: i64 = 0x6fff_fdff;
pub const DT_ADDRRNGLO: i64 = 0x6fff_fe00;
pub const DT_ADDRRNGHI: i64 = 0x6fff_feff;
newtype!(
struct DynamicFlags(u64);
);
newtype_flag_names!(NAMES_DF: DynamicFlags(u64) = {
DF_ORIGIN = 0x0000_0001,
DF_SYMBOLIC = 0x0000_0002,
DF_TEXTREL = 0x0000_0004,
DF_BIND_NOW = 0x0000_0008,
DF_STATIC_TLS = 0x0000_0010,
});
newtype!(
struct DynamicFlags1(u64);
);
newtype_flag_names!(NAMES_DF_1: DynamicFlags1(u64) = {
DF_1_NOW = 0x0000_0001,
DF_1_GLOBAL = 0x0000_0002,
DF_1_GROUP = 0x0000_0004,
DF_1_NODELETE = 0x0000_0008,
DF_1_LOADFLTR = 0x0000_0010,
DF_1_INITFIRST = 0x0000_0020,
DF_1_NOOPEN = 0x0000_0040,
DF_1_ORIGIN = 0x0000_0080,
DF_1_DIRECT = 0x0000_0100,
DF_1_TRANS = 0x0000_0200,
DF_1_INTERPOSE = 0x0000_0400,
DF_1_NODEFLIB = 0x0000_0800,
DF_1_NODUMP = 0x0000_1000,
DF_1_CONFALT = 0x0000_2000,
DF_1_ENDFILTEE = 0x0000_4000,
DF_1_DISPRELDNE = 0x0000_8000,
DF_1_DISPRELPND = 0x0001_0000,
DF_1_NODIRECT = 0x0002_0000,
DF_1_IGNMULDEF = 0x0004_0000,
DF_1_NOKSYMS = 0x0008_0000,
DF_1_NOHDR = 0x0010_0000,
DF_1_EDITED = 0x0020_0000,
DF_1_NORELOC = 0x0040_0000,
DF_1_SYMINTPOSE = 0x0080_0000,
DF_1_GLOBAUDIT = 0x0100_0000,
DF_1_SINGLETON = 0x0200_0000,
DF_1_STUB = 0x0400_0000,
DF_1_PIE = 0x0800_0000,
});
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Versym<E: Endian>(pub U16<E, VersymIndex>);
newtype!(
struct VersymIndex(u16);
);
impl VersymIndex {
pub fn index(&self) -> VersionIndex {
VersionIndex(self.0 & VERSYM_VERSION)
}
pub fn is_local(&self) -> bool {
self.index() == VER_NDX_LOCAL
}
pub fn is_global(&self) -> bool {
self.index() == VER_NDX_GLOBAL
}
pub fn is_hidden(&self) -> bool {
self.contains(VERSYM_HIDDEN)
}
}
impl From<VersionIndex> for VersymIndex {
fn from(value: VersionIndex) -> Self {
VersymIndex(value.0)
}
}
impl From<VersymIndex> for VersionIndex {
fn from(value: VersymIndex) -> Self {
value.index()
}
}
newtype_flag_names!(NAMES_VERSYM: VersymIndex(u16) = {
VERSYM_HIDDEN = 0x8000,
VERSYM_VERSION = 0x7fff => NAMES_VER_NDX,
});
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Verdef<E: Endian> {
pub vd_version: U16<E>,
pub vd_flags: U16<E, VersionFlags>,
pub vd_ndx: U16<E, VersionIndex>,
pub vd_cnt: U16<E>,
pub vd_hash: U32<E>,
pub vd_aux: U32<E>,
pub vd_next: U32<E>,
}
pub const VER_DEF_NONE: u16 = 0;
pub const VER_DEF_CURRENT: u16 = 1;
newtype!(
struct VersionFlags(u16);
);
newtype_flag_names!(NAMES_VER_FLG: VersionFlags(u16) = {
VER_FLG_BASE = 0x1,
VER_FLG_WEAK = 0x2,
});
newtype!(
struct VersionIndex(u16);
);
impl VersionIndex {
pub fn versym(self, hidden: bool) -> VersymIndex {
if hidden {
VersymIndex(self.0).with(VERSYM_HIDDEN)
} else {
VersymIndex(self.0)
}
}
pub fn offset(self, offset: u16) -> Self {
let index = self.0 + offset;
debug_assert!(index < VERSYM_HIDDEN.0);
VersionIndex(index)
}
pub fn checked_offset(self, offset: u16) -> Option<Self> {
let index = self.0.checked_add(offset)?;
if index >= VERSYM_HIDDEN.0 {
return None;
}
Some(VersionIndex(index))
}
pub fn offset_from(self, base: VersionIndex) -> u16 {
self.0 - base.0
}
pub fn checked_offset_from(self, base: VersionIndex) -> Option<u16> {
self.0.checked_sub(base.0)
}
pub fn is_local(&self) -> bool {
*self == VER_NDX_LOCAL
}
pub fn is_global(&self) -> bool {
*self == VER_NDX_GLOBAL
}
pub fn is_special(&self) -> bool {
self.0 <= VER_NDX_GLOBAL.0
}
}
impl core::ops::Add<u16> for VersionIndex {
type Output = Self;
fn add(self, rhs: u16) -> Self::Output {
self.offset(rhs)
}
}
impl core::ops::AddAssign<u16> for VersionIndex {
fn add_assign(&mut self, rhs: u16) {
*self = self.offset(rhs);
}
}
impl core::ops::Sub for VersionIndex {
type Output = u16;
fn sub(self, rhs: VersionIndex) -> Self::Output {
self.offset_from(rhs)
}
}
impl From<VersionIndex> for usize {
fn from(value: VersionIndex) -> Self {
usize::from(value.0)
}
}
newtype_constant_names!(NAMES_VER_NDX: VersionIndex(u16) = {
VER_NDX_LOCAL = 0,
VER_NDX_GLOBAL = 1,
});
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Verdaux<E: Endian> {
pub vda_name: U32<E>,
pub vda_next: U32<E>,
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Verneed<E: Endian> {
pub vn_version: U16<E>,
pub vn_cnt: U16<E>,
pub vn_file: U32<E>,
pub vn_aux: U32<E>,
pub vn_next: U32<E>,
}
pub const VER_NEED_NONE: u16 = 0;
pub const VER_NEED_CURRENT: u16 = 1;
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Vernaux<E: Endian> {
pub vna_hash: U32<E>,
pub vna_flags: U16<E, VersionFlags>,
pub vna_other: U16<E, VersionIndex>,
pub vna_name: U32<E>,
pub vna_next: U32<E>,
}
impl<E: Endian> Vernaux<E> {
pub fn vna_other(self, endian: E) -> VersymIndex {
VersymIndex(self.vna_other.get(endian).0)
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct NoteHeader32<E: Endian> {
pub n_namesz: U32<E>,
pub n_descsz: U32<E>,
pub n_type: U32<E, NoteType>,
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct NoteHeader64<E: Endian> {
pub n_namesz: U32<E>,
pub n_descsz: U32<E>,
pub n_type: U32<E, NoteType>,
}
newtype!(
struct NoteType(u32);
);
newtype_constant_names!(NoteType(u32) = {});
#[cfg(feature = "names")]
impl NoteType {
pub fn names(name: &[u8]) -> &'static ConstantNames<NoteType> {
match name {
ELF_NOTE_CORE | ELF_NOTE_LINUX => &NAMES_NT_CORE,
ELF_NOTE_GNU => &NAMES_NT_GNU,
ELF_NOTE_SOLARIS => &NAMES_NT_SOLARIS,
ELF_NOTE_GO => &NAMES_NT_GO,
_ => {
constant_names!(EMPTY: NoteType = {});
&EMPTY
}
}
}
}
pub const ELF_NOTE_SOLARIS: &[u8] = b"SUNW Solaris";
constant_names!(NAMES_NT_SOLARIS: NoteType(u32) = {
NT_SOLARIS_PAGESIZE_HINT = 1,
});
pub const ELF_NOTE_GNU: &[u8] = b"GNU";
pub const ELF_NOTE_GO: &[u8] = b"Go";
constant_names!(NAMES_NT_GNU: NoteType(u32) = {
NT_GNU_ABI_TAG = 1,
NT_GNU_HWCAP = 2,
NT_GNU_BUILD_ID = 3,
NT_GNU_GOLD_VERSION = 4,
NT_GNU_PROPERTY_TYPE_0 = 5,
});
pub const ELF_NOTE_OS_LINUX: u32 = 0;
pub const ELF_NOTE_OS_GNU: u32 = 1;
pub const ELF_NOTE_OS_SOLARIS2: u32 = 2;
pub const ELF_NOTE_OS_FREEBSD: u32 = 3;
newtype!(
struct GnuPropertyType(u32);
);
impl GnuPropertyType {
pub fn is_uint32_and(self) -> bool {
self.0 >= GNU_PROPERTY_UINT32_AND_LO && self.0 <= GNU_PROPERTY_UINT32_AND_HI
}
pub fn is_uint32_or(self) -> bool {
self.0 >= GNU_PROPERTY_UINT32_OR_LO && self.0 <= GNU_PROPERTY_UINT32_OR_HI
}
pub fn is_proc(self) -> bool {
self.0 >= GNU_PROPERTY_LOPROC && self.0 <= GNU_PROPERTY_HIPROC
}
pub fn is_user(self) -> bool {
debug_assert_eq!(GNU_PROPERTY_HIUSER, !0);
self.0 >= GNU_PROPERTY_LOUSER
}
pub fn is_x86_uint32_and(self) -> bool {
self.0 >= GNU_PROPERTY_X86_UINT32_AND_LO && self.0 <= GNU_PROPERTY_X86_UINT32_AND_HI
}
pub fn is_x86_uint32_or(self) -> bool {
self.0 >= GNU_PROPERTY_X86_UINT32_OR_LO && self.0 <= GNU_PROPERTY_X86_UINT32_OR_HI
}
pub fn is_x86_uint32_or_and(self) -> bool {
self.0 >= GNU_PROPERTY_X86_UINT32_OR_AND_LO && self.0 <= GNU_PROPERTY_X86_UINT32_OR_AND_HI
}
#[cfg(feature = "names")]
pub fn type_names(machine: Machine) -> &'static ConstantNames<Self> {
match machine {
EM_386 | EM_X86_64 => &NAMES_GNU_PROPERTY_X86,
EM_AARCH64 => &NAMES_GNU_PROPERTY_AARCH64,
_ => &NAMES_GNU_PROPERTY,
}
}
#[cfg(feature = "names")]
pub fn u32_value_names(self, machine: Machine) -> Option<&'static FlagNames<u32>> {
match self {
GNU_PROPERTY_1_NEEDED => {
return Some(&NAMES_GNU_PROPERTY_1_NEEDED);
}
_ => {}
}
match machine {
EM_386 | EM_X86_64 => match self {
GNU_PROPERTY_X86_ISA_1_USED | GNU_PROPERTY_X86_ISA_1_NEEDED => {
return Some(&NAMES_GNU_PROPERTY_X86_ISA_1);
}
GNU_PROPERTY_X86_FEATURE_1_AND => {
return Some(&NAMES_GNU_PROPERTY_X86_FEATURE_1);
}
_ => {}
},
EM_AARCH64 => match self {
GNU_PROPERTY_AARCH64_FEATURE_1_AND => {
return Some(&NAMES_GNU_PROPERTY_AARCH64_FEATURE_1);
}
_ => {}
},
_ => {}
}
None
}
}
newtype_constant_names!(NAMES_GNU_PROPERTY: GnuPropertyType(u32) = {
GNU_PROPERTY_STACK_SIZE = 1,
GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2,
GNU_PROPERTY_1_NEEDED = GNU_PROPERTY_UINT32_OR_LO,
});
flag_names!(NAMES_GNU_PROPERTY_1_NEEDED: u32 = {
GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS = 1 << 0,
});
pub const GNU_PROPERTY_UINT32_AND_LO: u32 = 0xb0000000;
pub const GNU_PROPERTY_UINT32_AND_HI: u32 = 0xb0007fff;
pub const GNU_PROPERTY_UINT32_OR_LO: u32 = 0xb0008000;
pub const GNU_PROPERTY_UINT32_OR_HI: u32 = 0xb000ffff;
pub const GNU_PROPERTY_LOPROC: u32 = 0xc0000000;
pub const GNU_PROPERTY_HIPROC: u32 = 0xdfffffff;
pub const GNU_PROPERTY_LOUSER: u32 = 0xe0000000;
pub const GNU_PROPERTY_HIUSER: u32 = 0xffffffff;
constant_names!(NAMES_GNU_PROPERTY_AARCH64: GnuPropertyType(u32) = NAMES_GNU_PROPERTY + {
GNU_PROPERTY_AARCH64_FEATURE_1_AND = 0xc0000000,
GNU_PROPERTY_AARCH64_FEATURE_PAUTH = 0xc0000001,
});
flag_names!(NAMES_GNU_PROPERTY_AARCH64_FEATURE_1: u32 = {
GNU_PROPERTY_AARCH64_FEATURE_1_BTI = 1 << 0,
GNU_PROPERTY_AARCH64_FEATURE_1_PAC = 1 << 1,
});
pub const GNU_PROPERTY_X86_UINT32_AND_LO: u32 = 0xc0000002;
pub const GNU_PROPERTY_X86_UINT32_AND_HI: u32 = 0xc0007fff;
pub const GNU_PROPERTY_X86_UINT32_OR_LO: u32 = 0xc0008000;
pub const GNU_PROPERTY_X86_UINT32_OR_HI: u32 = 0xc000ffff;
pub const GNU_PROPERTY_X86_UINT32_OR_AND_LO: u32 = 0xc0010000;
pub const GNU_PROPERTY_X86_UINT32_OR_AND_HI: u32 = 0xc0017fff;
constant_names!(NAMES_GNU_PROPERTY_X86: GnuPropertyType(u32) = NAMES_GNU_PROPERTY + {
GNU_PROPERTY_X86_ISA_1_USED = 0xc0010002,
GNU_PROPERTY_X86_ISA_1_NEEDED = 0xc0008002,
GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002,
});
flag_names!(NAMES_GNU_PROPERTY_X86_ISA_1: u32 = {
GNU_PROPERTY_X86_ISA_1_BASELINE = 1 << 0,
GNU_PROPERTY_X86_ISA_1_V2 = 1 << 1,
GNU_PROPERTY_X86_ISA_1_V3 = 1 << 2,
GNU_PROPERTY_X86_ISA_1_V4 = 1 << 3,
});
flag_names!(NAMES_GNU_PROPERTY_X86_FEATURE_1: u32 = {
GNU_PROPERTY_X86_FEATURE_1_IBT = 1 << 0,
GNU_PROPERTY_X86_FEATURE_1_SHSTK = 1 << 1,
});
constant_names!(NAMES_NT_GO: NoteType(u32) = {
NT_GO_BUILD_ID = 4,
});
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct HashHeader<E: Endian> {
pub bucket_count: U32<E>,
pub chain_count: U32<E>,
}
pub fn hash(name: &[u8]) -> u32 {
let mut hash = 0u32;
for byte in name {
hash = hash.wrapping_mul(16).wrapping_add(u32::from(*byte));
hash ^= (hash >> 24) & 0xf0;
}
hash & 0xfff_ffff
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct GnuHashHeader<E: Endian> {
pub bucket_count: U32<E>,
pub symbol_base: U32<E>,
pub bloom_count: U32<E>,
pub bloom_shift: U32<E>,
}
pub fn gnu_hash(name: &[u8]) -> u32 {
let mut hash = 5381u32;
for byte in name {
hash = hash.wrapping_mul(33).wrapping_add(u32::from(*byte));
}
hash
}
names! {
struct M68k(Base);
consts r = pub NAMES_R_68K: RelocationType(u32) = {
R_68K_NONE = 0,
R_68K_32 = 1,
R_68K_16 = 2,
R_68K_8 = 3,
R_68K_PC32 = 4,
R_68K_PC16 = 5,
R_68K_PC8 = 6,
R_68K_GOT32 = 7,
R_68K_GOT16 = 8,
R_68K_GOT8 = 9,
R_68K_GOT32O = 10,
R_68K_GOT16O = 11,
R_68K_GOT8O = 12,
R_68K_PLT32 = 13,
R_68K_PLT16 = 14,
R_68K_PLT8 = 15,
R_68K_PLT32O = 16,
R_68K_PLT16O = 17,
R_68K_PLT8O = 18,
R_68K_COPY = 19,
R_68K_GLOB_DAT = 20,
R_68K_JMP_SLOT = 21,
R_68K_RELATIVE = 22,
R_68K_TLS_GD32 = 25,
R_68K_TLS_GD16 = 26,
R_68K_TLS_GD8 = 27,
R_68K_TLS_LDM32 = 28,
R_68K_TLS_LDM16 = 29,
R_68K_TLS_LDM8 = 30,
R_68K_TLS_LDO32 = 31,
R_68K_TLS_LDO16 = 32,
R_68K_TLS_LDO8 = 33,
R_68K_TLS_IE32 = 34,
R_68K_TLS_IE16 = 35,
R_68K_TLS_IE8 = 36,
R_68K_TLS_LE32 = 37,
R_68K_TLS_LE16 = 38,
R_68K_TLS_LE8 = 39,
R_68K_TLS_DTPMOD32 = 40,
R_68K_TLS_DTPREL32 = 41,
R_68K_TLS_TPREL32 = 42,
};
}
names! {
struct I386(Base);
consts r = pub NAMES_R_386: RelocationType(u32) = {
R_386_NONE = 0,
R_386_32 = 1,
R_386_PC32 = 2,
R_386_GOT32 = 3,
R_386_PLT32 = 4,
R_386_COPY = 5,
R_386_GLOB_DAT = 6,
R_386_JMP_SLOT = 7,
R_386_RELATIVE = 8,
R_386_GOTOFF = 9,
R_386_GOTPC = 10,
R_386_32PLT = 11,
R_386_TLS_TPOFF = 14,
R_386_TLS_IE = 15,
R_386_TLS_GOTIE = 16,
R_386_TLS_LE = 17,
R_386_TLS_GD = 18,
R_386_TLS_LDM = 19,
R_386_16 = 20,
R_386_PC16 = 21,
R_386_8 = 22,
R_386_PC8 = 23,
R_386_TLS_GD_32 = 24,
R_386_TLS_GD_PUSH = 25,
R_386_TLS_GD_CALL = 26,
R_386_TLS_GD_POP = 27,
R_386_TLS_LDM_32 = 28,
R_386_TLS_LDM_PUSH = 29,
R_386_TLS_LDM_CALL = 30,
R_386_TLS_LDM_POP = 31,
R_386_TLS_LDO_32 = 32,
R_386_TLS_IE_32 = 33,
R_386_TLS_LE_32 = 34,
R_386_TLS_DTPMOD32 = 35,
R_386_TLS_DTPOFF32 = 36,
R_386_TLS_TPOFF32 = 37,
R_386_SIZE32 = 38,
R_386_TLS_GOTDESC = 39,
R_386_TLS_DESC_CALL = 40,
R_386_TLS_DESC = 41,
R_386_IRELATIVE = 42,
R_386_GOT32X = 43,
};
}
names! {
struct Sharc(Base);
consts r = pub NAMES_R_SHARC: RelocationType(u32) = {
R_SHARC_ADDR24_V3 = 0x0b,
R_SHARC_ADDR32_V3 = 0x0c,
R_SHARC_ADDR_VAR_V3 = 0x0d,
R_SHARC_PCRSHORT_V3 = 0x0e,
R_SHARC_PCRLONG_V3 = 0x0f,
R_SHARC_DATA6_V3 = 0x10,
R_SHARC_DATA16_V3 = 0x11,
R_SHARC_DATA6_VISA_V3 = 0x12,
R_SHARC_DATA7_VISA_V3 = 0x13,
R_SHARC_DATA16_VISA_V3 = 0x14,
R_SHARC_PCR6_VISA_V3 = 0x17,
R_SHARC_ADDR_VAR16_V3 = 0x19,
R_SHARC_CALC_PUSH_ADDR = 0xe0,
R_SHARC_CALC_PUSH_ADDEND = 0xe1,
R_SHARC_CALC_ADD = 0xe2,
R_SHARC_CALC_SUB = 0xe3,
R_SHARC_CALC_MUL = 0xe4,
R_SHARC_CALC_DIV = 0xe5,
R_SHARC_CALC_MOD = 0xe6,
R_SHARC_CALC_LSHIFT = 0xe7,
R_SHARC_CALC_RSHIFT = 0xe8,
R_SHARC_CALC_AND = 0xe9,
R_SHARC_CALC_OR = 0xea,
R_SHARC_CALC_XOR = 0xeb,
R_SHARC_CALC_PUSH_LEN = 0xec,
R_SHARC_CALC_NOT = 0xf6,
};
consts sht: SectionType(u32) = {
SHT_SHARC_ADI_ATTRIBUTES = SHT_LOPROC + 0x2,
};
}
names! {
struct Sparc(Base);
consts stt: SymbolType(u8) = {
STT_SPARC_REGISTER = 13,
};
flags ef: FileFlags(u32) = {
EF_SPARC_LEDATA = 0x80_0000,
EF_SPARC_32PLUS = 0x00_0100,
EF_SPARC_SUN_US1 = 0x00_0200,
EF_SPARC_HAL_R1 = 0x00_0400,
EF_SPARC_SUN_US3 = 0x00_0800,
};
consts r = pub NAMES_R_SPARC: RelocationType(u32) = {
R_SPARC_NONE = 0,
R_SPARC_8 = 1,
R_SPARC_16 = 2,
R_SPARC_32 = 3,
R_SPARC_DISP8 = 4,
R_SPARC_DISP16 = 5,
R_SPARC_DISP32 = 6,
R_SPARC_WDISP30 = 7,
R_SPARC_WDISP22 = 8,
R_SPARC_HI22 = 9,
R_SPARC_22 = 10,
R_SPARC_13 = 11,
R_SPARC_LO10 = 12,
R_SPARC_GOT10 = 13,
R_SPARC_GOT13 = 14,
R_SPARC_GOT22 = 15,
R_SPARC_PC10 = 16,
R_SPARC_PC22 = 17,
R_SPARC_WPLT30 = 18,
R_SPARC_COPY = 19,
R_SPARC_GLOB_DAT = 20,
R_SPARC_JMP_SLOT = 21,
R_SPARC_RELATIVE = 22,
R_SPARC_UA32 = 23,
R_SPARC_PLT32 = 24,
R_SPARC_HIPLT22 = 25,
R_SPARC_LOPLT10 = 26,
R_SPARC_PCPLT32 = 27,
R_SPARC_PCPLT22 = 28,
R_SPARC_PCPLT10 = 29,
R_SPARC_10 = 30,
R_SPARC_11 = 31,
R_SPARC_64 = 32,
R_SPARC_OLO10 = 33,
R_SPARC_HH22 = 34,
R_SPARC_HM10 = 35,
R_SPARC_LM22 = 36,
R_SPARC_PC_HH22 = 37,
R_SPARC_PC_HM10 = 38,
R_SPARC_PC_LM22 = 39,
R_SPARC_WDISP16 = 40,
R_SPARC_WDISP19 = 41,
R_SPARC_GLOB_JMP = 42,
R_SPARC_7 = 43,
R_SPARC_5 = 44,
R_SPARC_6 = 45,
R_SPARC_DISP64 = 46,
R_SPARC_PLT64 = 47,
R_SPARC_HIX22 = 48,
R_SPARC_LOX10 = 49,
R_SPARC_H44 = 50,
R_SPARC_M44 = 51,
R_SPARC_L44 = 52,
R_SPARC_REGISTER = 53,
R_SPARC_UA64 = 54,
R_SPARC_UA16 = 55,
R_SPARC_TLS_GD_HI22 = 56,
R_SPARC_TLS_GD_LO10 = 57,
R_SPARC_TLS_GD_ADD = 58,
R_SPARC_TLS_GD_CALL = 59,
R_SPARC_TLS_LDM_HI22 = 60,
R_SPARC_TLS_LDM_LO10 = 61,
R_SPARC_TLS_LDM_ADD = 62,
R_SPARC_TLS_LDM_CALL = 63,
R_SPARC_TLS_LDO_HIX22 = 64,
R_SPARC_TLS_LDO_LOX10 = 65,
R_SPARC_TLS_LDO_ADD = 66,
R_SPARC_TLS_IE_HI22 = 67,
R_SPARC_TLS_IE_LO10 = 68,
R_SPARC_TLS_IE_LD = 69,
R_SPARC_TLS_IE_LDX = 70,
R_SPARC_TLS_IE_ADD = 71,
R_SPARC_TLS_LE_HIX22 = 72,
R_SPARC_TLS_LE_LOX10 = 73,
R_SPARC_TLS_DTPMOD32 = 74,
R_SPARC_TLS_DTPMOD64 = 75,
R_SPARC_TLS_DTPOFF32 = 76,
R_SPARC_TLS_DTPOFF64 = 77,
R_SPARC_TLS_TPOFF32 = 78,
R_SPARC_TLS_TPOFF64 = 79,
R_SPARC_GOTDATA_HIX22 = 80,
R_SPARC_GOTDATA_LOX10 = 81,
R_SPARC_GOTDATA_OP_HIX22 = 82,
R_SPARC_GOTDATA_OP_LOX10 = 83,
R_SPARC_GOTDATA_OP = 84,
R_SPARC_H34 = 85,
R_SPARC_SIZE32 = 86,
R_SPARC_SIZE64 = 87,
R_SPARC_WDISP10 = 88,
R_SPARC_JMP_IREL = 248,
R_SPARC_IRELATIVE = 249,
R_SPARC_GNU_VTINHERIT = 250,
R_SPARC_GNU_VTENTRY = 251,
R_SPARC_REV32 = 252,
};
consts dt: DynamicTag(i64) = {
DT_SPARC_REGISTER = 0x7000_0001,
};
}
pub const EF_SPARC_EXT_MASK: u32 = 0xFF_FF00;
names! {
struct SparcV9(Sparc);
flags ef: FileFlags(u32) = {
EF_SPARCV9_MM = 3 => NAMES_EF_SPARC_MM,
};
}
constant_names!(NAMES_EF_SPARC_MM: FileFlags(u32) = {
EF_SPARCV9_TSO = 0,
EF_SPARCV9_PSO = 1,
EF_SPARCV9_RMO = 2,
});
names! {
struct Mips(Base);
flags ef: FileFlags(u32) = {
EF_MIPS_NOREORDER = 1,
EF_MIPS_PIC = 2,
EF_MIPS_CPIC = 4,
EF_MIPS_XGOT = 8,
EF_MIPS_64BIT_WHIRL = 16,
EF_MIPS_ABI2 = 32,
EF_MIPS_ABI_ON32 = 64,
EF_MIPS_FP64 = 512,
EF_MIPS_NAN2008 = 1024,
EF_MIPS_ABI = 0x0000_f000 => NAMES_EF_MIPS_ABI,
EF_MIPS_ARCH = 0xf000_0000 => NAMES_EF_MIPS_ARCH,
};
consts shn: SymbolSection(u16) = {
SHN_MIPS_ACOMMON = 0xff00,
SHN_MIPS_TEXT = 0xff01,
SHN_MIPS_DATA = 0xff02,
SHN_MIPS_SCOMMON = 0xff03,
SHN_MIPS_SUNDEFINED = 0xff04,
};
consts sht: SectionType(u32) = {
SHT_MIPS_LIBLIST = 0x7000_0000,
SHT_MIPS_MSYM = 0x7000_0001,
SHT_MIPS_CONFLICT = 0x7000_0002,
SHT_MIPS_GPTAB = 0x7000_0003,
SHT_MIPS_UCODE = 0x7000_0004,
SHT_MIPS_DEBUG = 0x7000_0005,
SHT_MIPS_REGINFO = 0x7000_0006,
SHT_MIPS_PACKAGE = 0x7000_0007,
SHT_MIPS_PACKSYM = 0x7000_0008,
SHT_MIPS_RELD = 0x7000_0009,
SHT_MIPS_IFACE = 0x7000_000b,
SHT_MIPS_CONTENT = 0x7000_000c,
SHT_MIPS_OPTIONS = 0x7000_000d,
SHT_MIPS_SHDR = 0x7000_0010,
SHT_MIPS_FDESC = 0x7000_0011,
SHT_MIPS_EXTSYM = 0x7000_0012,
SHT_MIPS_DENSE = 0x7000_0013,
SHT_MIPS_PDESC = 0x7000_0014,
SHT_MIPS_LOCSYM = 0x7000_0015,
SHT_MIPS_AUXSYM = 0x7000_0016,
SHT_MIPS_OPTSYM = 0x7000_0017,
SHT_MIPS_LOCSTR = 0x7000_0018,
SHT_MIPS_LINE = 0x7000_0019,
SHT_MIPS_RFDESC = 0x7000_001a,
SHT_MIPS_DELTASYM = 0x7000_001b,
SHT_MIPS_DELTAINST = 0x7000_001c,
SHT_MIPS_DELTACLASS = 0x7000_001d,
SHT_MIPS_DWARF = 0x7000_001e,
SHT_MIPS_DELTADECL = 0x7000_001f,
SHT_MIPS_SYMBOL_LIB = 0x7000_0020,
SHT_MIPS_EVENTS = 0x7000_0021,
SHT_MIPS_TRANSLATE = 0x7000_0022,
SHT_MIPS_PIXIE = 0x7000_0023,
SHT_MIPS_XLATE = 0x7000_0024,
SHT_MIPS_XLATE_DEBUG = 0x7000_0025,
SHT_MIPS_WHIRL = 0x7000_0026,
SHT_MIPS_EH_REGION = 0x7000_0027,
SHT_MIPS_XLATE_OLD = 0x7000_0028,
SHT_MIPS_PDR_EXCEPTION = 0x7000_0029,
};
flags shf: SectionFlags(u64) = {
SHF_MIPS_GPREL = 0x1000_0000,
SHF_MIPS_MERGE = 0x2000_0000,
SHF_MIPS_ADDR = 0x4000_0000,
SHF_MIPS_STRINGS = 0x8000_0000,
SHF_MIPS_NOSTRIP = 0x0800_0000,
SHF_MIPS_LOCAL = 0x0400_0000,
SHF_MIPS_NAMES = 0x0200_0000,
SHF_MIPS_NODUPE = 0x0100_0000,
};
flags sto: SymbolOther(u8) = {
STO_MIPS_PLT = 0x8,
};
consts stb: SymbolBind(u8) = {
STB_MIPS_SPLIT_COMMON = 13,
};
consts r = pub NAMES_R_MIPS: RelocationType(u32) = {
R_MIPS_NONE = 0,
R_MIPS_16 = 1,
R_MIPS_32 = 2,
R_MIPS_REL32 = 3,
R_MIPS_26 = 4,
R_MIPS_HI16 = 5,
R_MIPS_LO16 = 6,
R_MIPS_GPREL16 = 7,
R_MIPS_LITERAL = 8,
R_MIPS_GOT16 = 9,
R_MIPS_PC16 = 10,
R_MIPS_CALL16 = 11,
R_MIPS_GPREL32 = 12,
R_MIPS_SHIFT5 = 16,
R_MIPS_SHIFT6 = 17,
R_MIPS_64 = 18,
R_MIPS_GOT_DISP = 19,
R_MIPS_GOT_PAGE = 20,
R_MIPS_GOT_OFST = 21,
R_MIPS_GOT_HI16 = 22,
R_MIPS_GOT_LO16 = 23,
R_MIPS_SUB = 24,
R_MIPS_INSERT_A = 25,
R_MIPS_INSERT_B = 26,
R_MIPS_DELETE = 27,
R_MIPS_HIGHER = 28,
R_MIPS_HIGHEST = 29,
R_MIPS_CALL_HI16 = 30,
R_MIPS_CALL_LO16 = 31,
R_MIPS_SCN_DISP = 32,
R_MIPS_REL16 = 33,
R_MIPS_ADD_IMMEDIATE = 34,
R_MIPS_PJUMP = 35,
R_MIPS_RELGOT = 36,
R_MIPS_JALR = 37,
R_MIPS_TLS_DTPMOD32 = 38,
R_MIPS_TLS_DTPREL32 = 39,
R_MIPS_TLS_DTPMOD64 = 40,
R_MIPS_TLS_DTPREL64 = 41,
R_MIPS_TLS_GD = 42,
R_MIPS_TLS_LDM = 43,
R_MIPS_TLS_DTPREL_HI16 = 44,
R_MIPS_TLS_DTPREL_LO16 = 45,
R_MIPS_TLS_GOTTPREL = 46,
R_MIPS_TLS_TPREL32 = 47,
R_MIPS_TLS_TPREL64 = 48,
R_MIPS_TLS_TPREL_HI16 = 49,
R_MIPS_TLS_TPREL_LO16 = 50,
R_MIPS_GLOB_DAT = 51,
R_MIPS_COPY = 126,
R_MIPS_JUMP_SLOT = 127,
};
consts pt: ProgramType(u32) = {
PT_MIPS_REGINFO = 0x7000_0000,
PT_MIPS_RTPROC = 0x7000_0001,
PT_MIPS_OPTIONS = 0x7000_0002,
PT_MIPS_ABIFLAGS = 0x7000_0003,
};
flags pf: ProgramFlags(u32) = {
PF_MIPS_LOCAL = 0x1000_0000,
};
consts dt: DynamicTag(i64) = {
DT_MIPS_RLD_VERSION = 0x7000_0001,
DT_MIPS_TIME_STAMP = 0x7000_0002,
DT_MIPS_ICHECKSUM = 0x7000_0003,
DT_MIPS_IVERSION = 0x7000_0004,
DT_MIPS_FLAGS = 0x7000_0005,
DT_MIPS_BASE_ADDRESS = 0x7000_0006,
DT_MIPS_MSYM = 0x7000_0007,
DT_MIPS_CONFLICT = 0x7000_0008,
DT_MIPS_LIBLIST = 0x7000_0009,
DT_MIPS_LOCAL_GOTNO = 0x7000_000a,
DT_MIPS_CONFLICTNO = 0x7000_000b,
DT_MIPS_LIBLISTNO = 0x7000_0010,
DT_MIPS_SYMTABNO = 0x7000_0011,
DT_MIPS_UNREFEXTNO = 0x7000_0012,
DT_MIPS_GOTSYM = 0x7000_0013,
DT_MIPS_HIPAGENO = 0x7000_0014,
DT_MIPS_RLD_MAP = 0x7000_0016,
DT_MIPS_DELTA_CLASS = 0x7000_0017,
DT_MIPS_DELTA_CLASS_NO = 0x7000_0018,
DT_MIPS_DELTA_INSTANCE = 0x7000_0019,
DT_MIPS_DELTA_INSTANCE_NO = 0x7000_001a,
DT_MIPS_DELTA_RELOC = 0x7000_001b,
DT_MIPS_DELTA_RELOC_NO = 0x7000_001c,
DT_MIPS_DELTA_SYM = 0x7000_001d,
DT_MIPS_DELTA_SYM_NO = 0x7000_001e,
DT_MIPS_DELTA_CLASSSYM = 0x7000_0020,
DT_MIPS_DELTA_CLASSSYM_NO = 0x7000_0021,
DT_MIPS_CXX_FLAGS = 0x7000_0022,
DT_MIPS_PIXIE_INIT = 0x7000_0023,
DT_MIPS_SYMBOL_LIB = 0x7000_0024,
DT_MIPS_LOCALPAGE_GOTIDX = 0x7000_0025,
DT_MIPS_LOCAL_GOTIDX = 0x7000_0026,
DT_MIPS_HIDDEN_GOTIDX = 0x7000_0027,
DT_MIPS_PROTECTED_GOTIDX = 0x7000_0028,
DT_MIPS_OPTIONS = 0x7000_0029,
DT_MIPS_INTERFACE = 0x7000_002a,
DT_MIPS_DYNSTR_ALIGN = 0x7000_002b,
DT_MIPS_INTERFACE_SIZE = 0x7000_002c,
DT_MIPS_RLD_TEXT_RESOLVE_ADDR = 0x7000_002d,
DT_MIPS_PERF_SUFFIX = 0x7000_002e,
DT_MIPS_COMPACT_SIZE = 0x7000_002f,
DT_MIPS_GP_VALUE = 0x7000_0030,
DT_MIPS_AUX_DYNAMIC = 0x7000_0031,
DT_MIPS_PLTGOT = 0x7000_0032,
DT_MIPS_RWPLT = 0x7000_0034,
DT_MIPS_RLD_MAP_REL = 0x7000_0035,
};
}
constant_names!(NAMES_EF_MIPS_ABI: FileFlags(u32) = {
EF_MIPS_ABI_O32 = 0x0000_1000,
EF_MIPS_ABI_O64 = 0x0000_2000,
EF_MIPS_ABI_EABI32 = 0x0000_3000,
EF_MIPS_ABI_EABI64 = 0x0000_4000,
});
constant_names!(NAMES_EF_MIPS_ARCH: FileFlags(u32) = {
EF_MIPS_ARCH_1 = 0x0000_0000,
EF_MIPS_ARCH_2 = 0x1000_0000,
EF_MIPS_ARCH_3 = 0x2000_0000,
EF_MIPS_ARCH_4 = 0x3000_0000,
EF_MIPS_ARCH_5 = 0x4000_0000,
EF_MIPS_ARCH_32 = 0x5000_0000,
EF_MIPS_ARCH_64 = 0x6000_0000,
EF_MIPS_ARCH_32R2 = 0x7000_0000,
EF_MIPS_ARCH_64R2 = 0x8000_0000,
EF_MIPS_ARCH_32R6 = 0x9000_0000,
EF_MIPS_ARCH_64R6 = 0xa000_0000,
});
pub const STO_MIPS_SC_ALIGN_UNUSED: u8 = 0xff;
pub const ODK_NULL: u32 = 0;
pub const ODK_REGINFO: u32 = 1;
pub const ODK_EXCEPTIONS: u32 = 2;
pub const ODK_PAD: u32 = 3;
pub const ODK_HWPATCH: u32 = 4;
pub const ODK_FILL: u32 = 5;
pub const ODK_TAGS: u32 = 6;
pub const ODK_HWAND: u32 = 7;
pub const ODK_HWOR: u32 = 8;
pub const OEX_FPU_MIN: u32 = 0x1f;
pub const OEX_FPU_MAX: u32 = 0x1f00;
pub const OEX_PAGE0: u32 = 0x10000;
pub const OEX_SMM: u32 = 0x20000;
pub const OEX_FPDBUG: u32 = 0x40000;
pub const OEX_PRECISEFP: u32 = OEX_FPDBUG;
pub const OEX_DISMISS: u32 = 0x80000;
pub const OEX_FPU_INVAL: u32 = 0x10;
pub const OEX_FPU_DIV0: u32 = 0x08;
pub const OEX_FPU_OFLO: u32 = 0x04;
pub const OEX_FPU_UFLO: u32 = 0x02;
pub const OEX_FPU_INEX: u32 = 0x01;
pub const OHW_R4KEOP: u32 = 0x1;
pub const OHW_R8KPFETCH: u32 = 0x2;
pub const OHW_R5KEOP: u32 = 0x4;
pub const OHW_R5KCVTL: u32 = 0x8;
pub const OPAD_PREFIX: u32 = 0x1;
pub const OPAD_POSTFIX: u32 = 0x2;
pub const OPAD_SYMBOL: u32 = 0x4;
pub const OHWA0_R4KEOP_CHECKED: u32 = 0x0000_0001;
pub const OHWA1_R4KEOP_CLEAN: u32 = 0x0000_0002;
pub const RHF_NONE: u32 = 0;
pub const RHF_QUICKSTART: u32 = 1 << 0;
pub const RHF_NOTPOT: u32 = 1 << 1;
pub const RHF_NO_LIBRARY_REPLACEMENT: u32 = 1 << 2;
pub const RHF_NO_MOVE: u32 = 1 << 3;
pub const RHF_SGI_ONLY: u32 = 1 << 4;
pub const RHF_GUARANTEE_INIT: u32 = 1 << 5;
pub const RHF_DELTA_C_PLUS_PLUS: u32 = 1 << 6;
pub const RHF_GUARANTEE_START_INIT: u32 = 1 << 7;
pub const RHF_PIXIE: u32 = 1 << 8;
pub const RHF_DEFAULT_DELAY_LOAD: u32 = 1 << 9;
pub const RHF_REQUICKSTART: u32 = 1 << 10;
pub const RHF_REQUICKSTARTED: u32 = 1 << 11;
pub const RHF_CORD: u32 = 1 << 12;
pub const RHF_NO_UNRES_UNDEF: u32 = 1 << 13;
pub const RHF_RLD_ORDER_SAFE: u32 = 1 << 14;
pub const LL_NONE: u32 = 0;
pub const LL_EXACT_MATCH: u32 = 1 << 0;
pub const LL_IGNORE_INT_VER: u32 = 1 << 1;
pub const LL_REQUIRE_MINOR: u32 = 1 << 2;
pub const LL_EXPORTS: u32 = 1 << 3;
pub const LL_DELAY_LOAD: u32 = 1 << 4;
pub const LL_DELTA: u32 = 1 << 5;
names! {
struct Parisc(Base);
flags ef: FileFlags(u32) = {
EF_PARISC_TRAPNIL = 0x0001_0000,
EF_PARISC_EXT = 0x0002_0000,
EF_PARISC_LSB = 0x0004_0000,
EF_PARISC_WIDE = 0x0008_0000,
EF_PARISC_NO_KABP = 0x0010_0000,
EF_PARISC_LAZYSWAP = 0x0040_0000,
EF_PARISC_ARCH = 0x0000_ffff => NAMES_EFA_PARISC,
};
consts shn: SymbolSection(u16) = {
SHN_PARISC_ANSI_COMMON = 0xff00,
SHN_PARISC_HUGE_COMMON = 0xff01,
};
consts sht: SectionType(u32) = {
SHT_PARISC_EXT = 0x7000_0000,
SHT_PARISC_UNWIND = 0x7000_0001,
SHT_PARISC_DOC = 0x7000_0002,
};
flags shf: SectionFlags(u64) = {
SHF_PARISC_SHORT = 0x2000_0000,
SHF_PARISC_HUGE = 0x4000_0000,
SHF_PARISC_SBP = 0x8000_0000,
};
consts stt: SymbolType(u8) = {
STT_PARISC_MILLICODE = 13,
STT_HP_OPAQUE = STT_LOOS + 0x1,
STT_HP_STUB = STT_LOOS + 0x2,
};
consts r = pub NAMES_R_PARISC: RelocationType(u32) = {
R_PARISC_NONE = 0,
R_PARISC_DIR32 = 1,
R_PARISC_DIR21L = 2,
R_PARISC_DIR17R = 3,
R_PARISC_DIR17F = 4,
R_PARISC_DIR14R = 6,
R_PARISC_PCREL32 = 9,
R_PARISC_PCREL21L = 10,
R_PARISC_PCREL17R = 11,
R_PARISC_PCREL17F = 12,
R_PARISC_PCREL14R = 14,
R_PARISC_DPREL21L = 18,
R_PARISC_DPREL14R = 22,
R_PARISC_GPREL21L = 26,
R_PARISC_GPREL14R = 30,
R_PARISC_LTOFF21L = 34,
R_PARISC_LTOFF14R = 38,
R_PARISC_SECREL32 = 41,
R_PARISC_SEGBASE = 48,
R_PARISC_SEGREL32 = 49,
R_PARISC_PLTOFF21L = 50,
R_PARISC_PLTOFF14R = 54,
R_PARISC_LTOFF_FPTR32 = 57,
R_PARISC_LTOFF_FPTR21L = 58,
R_PARISC_LTOFF_FPTR14R = 62,
R_PARISC_FPTR64 = 64,
R_PARISC_PLABEL32 = 65,
R_PARISC_PLABEL21L = 66,
R_PARISC_PLABEL14R = 70,
R_PARISC_PCREL64 = 72,
R_PARISC_PCREL22F = 74,
R_PARISC_PCREL14WR = 75,
R_PARISC_PCREL14DR = 76,
R_PARISC_PCREL16F = 77,
R_PARISC_PCREL16WF = 78,
R_PARISC_PCREL16DF = 79,
R_PARISC_DIR64 = 80,
R_PARISC_DIR14WR = 83,
R_PARISC_DIR14DR = 84,
R_PARISC_DIR16F = 85,
R_PARISC_DIR16WF = 86,
R_PARISC_DIR16DF = 87,
R_PARISC_GPREL64 = 88,
R_PARISC_GPREL14WR = 91,
R_PARISC_GPREL14DR = 92,
R_PARISC_GPREL16F = 93,
R_PARISC_GPREL16WF = 94,
R_PARISC_GPREL16DF = 95,
R_PARISC_LTOFF64 = 96,
R_PARISC_LTOFF14WR = 99,
R_PARISC_LTOFF14DR = 100,
R_PARISC_LTOFF16F = 101,
R_PARISC_LTOFF16WF = 102,
R_PARISC_LTOFF16DF = 103,
R_PARISC_SECREL64 = 104,
R_PARISC_SEGREL64 = 112,
R_PARISC_PLTOFF14WR = 115,
R_PARISC_PLTOFF14DR = 116,
R_PARISC_PLTOFF16F = 117,
R_PARISC_PLTOFF16WF = 118,
R_PARISC_PLTOFF16DF = 119,
R_PARISC_LTOFF_FPTR64 = 120,
R_PARISC_LTOFF_FPTR14WR = 123,
R_PARISC_LTOFF_FPTR14DR = 124,
R_PARISC_LTOFF_FPTR16F = 125,
R_PARISC_LTOFF_FPTR16WF = 126,
R_PARISC_LTOFF_FPTR16DF = 127,
R_PARISC_LORESERVE = 128,
R_PARISC_COPY = 128,
R_PARISC_IPLT = 129,
R_PARISC_EPLT = 130,
R_PARISC_TPREL32 = 153,
R_PARISC_TPREL21L = 154,
R_PARISC_TPREL14R = 158,
R_PARISC_LTOFF_TP21L = 162,
R_PARISC_LTOFF_TP14R = 166,
R_PARISC_LTOFF_TP14F = 167,
R_PARISC_TPREL64 = 216,
R_PARISC_TPREL14WR = 219,
R_PARISC_TPREL14DR = 220,
R_PARISC_TPREL16F = 221,
R_PARISC_TPREL16WF = 222,
R_PARISC_TPREL16DF = 223,
R_PARISC_LTOFF_TP64 = 224,
R_PARISC_LTOFF_TP14WR = 227,
R_PARISC_LTOFF_TP14DR = 228,
R_PARISC_LTOFF_TP16F = 229,
R_PARISC_LTOFF_TP16WF = 230,
R_PARISC_LTOFF_TP16DF = 231,
R_PARISC_GNU_VTENTRY = 232,
R_PARISC_GNU_VTINHERIT = 233,
R_PARISC_TLS_GD21L = 234,
R_PARISC_TLS_GD14R = 235,
R_PARISC_TLS_GDCALL = 236,
R_PARISC_TLS_LDM21L = 237,
R_PARISC_TLS_LDM14R = 238,
R_PARISC_TLS_LDMCALL = 239,
R_PARISC_TLS_LDO21L = 240,
R_PARISC_TLS_LDO14R = 241,
R_PARISC_TLS_DTPMOD32 = 242,
R_PARISC_TLS_DTPMOD64 = 243,
R_PARISC_TLS_DTPOFF32 = 244,
R_PARISC_TLS_DTPOFF64 = 245,
R_PARISC_TLS_LE21L = R_PARISC_TPREL21L.0,
R_PARISC_TLS_LE14R = R_PARISC_TPREL14R.0,
R_PARISC_TLS_IE21L = R_PARISC_LTOFF_TP21L.0,
R_PARISC_TLS_IE14R = R_PARISC_LTOFF_TP14R.0,
R_PARISC_TLS_TPREL32 = R_PARISC_TPREL32.0,
R_PARISC_TLS_TPREL64 = R_PARISC_TPREL64.0,
R_PARISC_HIRESERVE = 255,
};
consts pt: ProgramType(u32) = {
PT_HP_TLS = PT_LOOS + 0x0,
PT_HP_CORE_NONE = PT_LOOS + 0x1,
PT_HP_CORE_VERSION = PT_LOOS + 0x2,
PT_HP_CORE_KERNEL = PT_LOOS + 0x3,
PT_HP_CORE_COMM = PT_LOOS + 0x4,
PT_HP_CORE_PROC = PT_LOOS + 0x5,
PT_HP_CORE_LOADABLE = PT_LOOS + 0x6,
PT_HP_CORE_STACK = PT_LOOS + 0x7,
PT_HP_CORE_SHM = PT_LOOS + 0x8,
PT_HP_CORE_MMF = PT_LOOS + 0x9,
PT_HP_PARALLEL = PT_LOOS + 0x10,
PT_HP_FASTBIND = PT_LOOS + 0x11,
PT_HP_OPT_ANNOT = PT_LOOS + 0x12,
PT_HP_HSL_ANNOT = PT_LOOS + 0x13,
PT_HP_STACK = PT_LOOS + 0x14,
PT_PARISC_ARCHEXT = 0x7000_0000,
PT_PARISC_UNWIND = 0x7000_0001,
};
flags pf: ProgramFlags(u32) = {
PF_PARISC_SBP = 0x0800_0000,
PF_HP_PAGE_SIZE = 0x0010_0000,
PF_HP_FAR_SHARED = 0x0020_0000,
PF_HP_NEAR_SHARED = 0x0040_0000,
PF_HP_CODE = 0x0100_0000,
PF_HP_MODIFY = 0x0200_0000,
PF_HP_LAZYSWAP = 0x0400_0000,
PF_HP_SBP = 0x0800_0000,
};
}
constant_names!(NAMES_EFA_PARISC: FileFlags(u32) = {
EFA_PARISC_1_0 = 0x020b,
EFA_PARISC_1_1 = 0x0210,
EFA_PARISC_2_0 = 0x0214,
});
names! {
struct Alpha(Base);
flags ef: FileFlags(u32) = {
EF_ALPHA_32BIT = 1,
EF_ALPHA_CANRELAX = 2,
};
consts sht: SectionType(u32) = {
SHT_ALPHA_DEBUG = 0x7000_0001,
SHT_ALPHA_REGINFO = 0x7000_0002,
};
flags shf: SectionFlags(u64) = {
SHF_ALPHA_GPREL = 0x1000_0000,
};
flags sto: SymbolOther(u8) = {
STO_ALPHA_NOPV = 0x80,
STO_ALPHA_STD_GPLOAD = 0x88,
};
consts r = pub NAMES_R_ALPHA: RelocationType(u32) = {
R_ALPHA_NONE = 0,
R_ALPHA_REFLONG = 1,
R_ALPHA_REFQUAD = 2,
R_ALPHA_GPREL32 = 3,
R_ALPHA_LITERAL = 4,
R_ALPHA_LITUSE = 5,
R_ALPHA_GPDISP = 6,
R_ALPHA_BRADDR = 7,
R_ALPHA_HINT = 8,
R_ALPHA_SREL16 = 9,
R_ALPHA_SREL32 = 10,
R_ALPHA_SREL64 = 11,
R_ALPHA_GPRELHIGH = 17,
R_ALPHA_GPRELLOW = 18,
R_ALPHA_GPREL16 = 19,
R_ALPHA_COPY = 24,
R_ALPHA_GLOB_DAT = 25,
R_ALPHA_JMP_SLOT = 26,
R_ALPHA_RELATIVE = 27,
R_ALPHA_TLS_GD_HI = 28,
R_ALPHA_TLSGD = 29,
R_ALPHA_TLS_LDM = 30,
R_ALPHA_DTPMOD64 = 31,
R_ALPHA_GOTDTPREL = 32,
R_ALPHA_DTPREL64 = 33,
R_ALPHA_DTPRELHI = 34,
R_ALPHA_DTPRELLO = 35,
R_ALPHA_DTPREL16 = 36,
R_ALPHA_GOTTPREL = 37,
R_ALPHA_TPREL64 = 38,
R_ALPHA_TPRELHI = 39,
R_ALPHA_TPRELLO = 40,
R_ALPHA_TPREL16 = 41,
};
consts dt: DynamicTag(i64) = {
DT_ALPHA_PLTRO = DT_LOPROC + 0,
};
}
pub const LITUSE_ALPHA_ADDR: u32 = 0;
pub const LITUSE_ALPHA_BASE: u32 = 1;
pub const LITUSE_ALPHA_BYTOFF: u32 = 2;
pub const LITUSE_ALPHA_JSR: u32 = 3;
pub const LITUSE_ALPHA_TLS_GD: u32 = 4;
pub const LITUSE_ALPHA_TLS_LDM: u32 = 5;
names! {
struct Ppc(Base);
flags ef: FileFlags(u32) = {
EF_PPC_EMB = 0x8000_0000,
EF_PPC_RELOCATABLE = 0x0001_0000,
EF_PPC_RELOCATABLE_LIB = 0x0000_8000,
};
consts r = pub NAMES_R_PPC: RelocationType(u32) = {
R_PPC_NONE = 0,
R_PPC_ADDR32 = 1,
R_PPC_ADDR24 = 2,
R_PPC_ADDR16 = 3,
R_PPC_ADDR16_LO = 4,
R_PPC_ADDR16_HI = 5,
R_PPC_ADDR16_HA = 6,
R_PPC_ADDR14 = 7,
R_PPC_ADDR14_BRTAKEN = 8,
R_PPC_ADDR14_BRNTAKEN = 9,
R_PPC_REL24 = 10,
R_PPC_REL14 = 11,
R_PPC_REL14_BRTAKEN = 12,
R_PPC_REL14_BRNTAKEN = 13,
R_PPC_GOT16 = 14,
R_PPC_GOT16_LO = 15,
R_PPC_GOT16_HI = 16,
R_PPC_GOT16_HA = 17,
R_PPC_PLTREL24 = 18,
R_PPC_COPY = 19,
R_PPC_GLOB_DAT = 20,
R_PPC_JMP_SLOT = 21,
R_PPC_RELATIVE = 22,
R_PPC_LOCAL24PC = 23,
R_PPC_UADDR32 = 24,
R_PPC_UADDR16 = 25,
R_PPC_REL32 = 26,
R_PPC_PLT32 = 27,
R_PPC_PLTREL32 = 28,
R_PPC_PLT16_LO = 29,
R_PPC_PLT16_HI = 30,
R_PPC_PLT16_HA = 31,
R_PPC_SDAREL16 = 32,
R_PPC_SECTOFF = 33,
R_PPC_SECTOFF_LO = 34,
R_PPC_SECTOFF_HI = 35,
R_PPC_SECTOFF_HA = 36,
R_PPC_TLS = 67,
R_PPC_DTPMOD32 = 68,
R_PPC_TPREL16 = 69,
R_PPC_TPREL16_LO = 70,
R_PPC_TPREL16_HI = 71,
R_PPC_TPREL16_HA = 72,
R_PPC_TPREL32 = 73,
R_PPC_DTPREL16 = 74,
R_PPC_DTPREL16_LO = 75,
R_PPC_DTPREL16_HI = 76,
R_PPC_DTPREL16_HA = 77,
R_PPC_DTPREL32 = 78,
R_PPC_GOT_TLSGD16 = 79,
R_PPC_GOT_TLSGD16_LO = 80,
R_PPC_GOT_TLSGD16_HI = 81,
R_PPC_GOT_TLSGD16_HA = 82,
R_PPC_GOT_TLSLD16 = 83,
R_PPC_GOT_TLSLD16_LO = 84,
R_PPC_GOT_TLSLD16_HI = 85,
R_PPC_GOT_TLSLD16_HA = 86,
R_PPC_GOT_TPREL16 = 87,
R_PPC_GOT_TPREL16_LO = 88,
R_PPC_GOT_TPREL16_HI = 89,
R_PPC_GOT_TPREL16_HA = 90,
R_PPC_GOT_DTPREL16 = 91,
R_PPC_GOT_DTPREL16_LO = 92,
R_PPC_GOT_DTPREL16_HI = 93,
R_PPC_GOT_DTPREL16_HA = 94,
R_PPC_TLSGD = 95,
R_PPC_TLSLD = 96,
R_PPC_EMB_NADDR32 = 101,
R_PPC_EMB_NADDR16 = 102,
R_PPC_EMB_NADDR16_LO = 103,
R_PPC_EMB_NADDR16_HI = 104,
R_PPC_EMB_NADDR16_HA = 105,
R_PPC_EMB_SDAI16 = 106,
R_PPC_EMB_SDA2I16 = 107,
R_PPC_EMB_SDA2REL = 108,
R_PPC_EMB_SDA21 = 109,
R_PPC_EMB_MRKREF = 110,
R_PPC_EMB_RELSEC16 = 111,
R_PPC_EMB_RELST_LO = 112,
R_PPC_EMB_RELST_HI = 113,
R_PPC_EMB_RELST_HA = 114,
R_PPC_EMB_BIT_FLD = 115,
R_PPC_EMB_RELSDA = 116,
R_PPC_DIAB_SDA21_LO = 180,
R_PPC_DIAB_SDA21_HI = 181,
R_PPC_DIAB_SDA21_HA = 182,
R_PPC_DIAB_RELSDA_LO = 183,
R_PPC_DIAB_RELSDA_HI = 184,
R_PPC_DIAB_RELSDA_HA = 185,
R_PPC_IRELATIVE = 248,
R_PPC_REL16 = 249,
R_PPC_REL16_LO = 250,
R_PPC_REL16_HI = 251,
R_PPC_REL16_HA = 252,
R_PPC_TOC16 = 255,
};
consts dt: DynamicTag(i64) = {
DT_PPC_GOT = DT_LOPROC + 0,
DT_PPC_OPT = DT_LOPROC + 1,
};
}
pub const PPC_OPT_TLS: u32 = 1;
names! {
struct Ppc64(Base);
consts r = pub NAMES_R_PPC64: RelocationType(u32) = {
R_PPC64_NONE = R_PPC_NONE.0,
R_PPC64_ADDR32 = R_PPC_ADDR32.0,
R_PPC64_ADDR24 = R_PPC_ADDR24.0,
R_PPC64_ADDR16 = R_PPC_ADDR16.0,
R_PPC64_ADDR16_LO = R_PPC_ADDR16_LO.0,
R_PPC64_ADDR16_HI = R_PPC_ADDR16_HI.0,
R_PPC64_ADDR16_HA = R_PPC_ADDR16_HA.0,
R_PPC64_ADDR14 = R_PPC_ADDR14.0,
R_PPC64_ADDR14_BRTAKEN = R_PPC_ADDR14_BRTAKEN.0,
R_PPC64_ADDR14_BRNTAKEN = R_PPC_ADDR14_BRNTAKEN.0,
R_PPC64_REL24 = R_PPC_REL24.0,
R_PPC64_REL14 = R_PPC_REL14.0,
R_PPC64_REL14_BRTAKEN = R_PPC_REL14_BRTAKEN.0,
R_PPC64_REL14_BRNTAKEN = R_PPC_REL14_BRNTAKEN.0,
R_PPC64_GOT16 = R_PPC_GOT16.0,
R_PPC64_GOT16_LO = R_PPC_GOT16_LO.0,
R_PPC64_GOT16_HI = R_PPC_GOT16_HI.0,
R_PPC64_GOT16_HA = R_PPC_GOT16_HA.0,
R_PPC64_COPY = R_PPC_COPY.0,
R_PPC64_GLOB_DAT = R_PPC_GLOB_DAT.0,
R_PPC64_JMP_SLOT = R_PPC_JMP_SLOT.0,
R_PPC64_RELATIVE = R_PPC_RELATIVE.0,
R_PPC64_UADDR32 = R_PPC_UADDR32.0,
R_PPC64_UADDR16 = R_PPC_UADDR16.0,
R_PPC64_REL32 = R_PPC_REL32.0,
R_PPC64_PLT32 = R_PPC_PLT32.0,
R_PPC64_PLTREL32 = R_PPC_PLTREL32.0,
R_PPC64_PLT16_LO = R_PPC_PLT16_LO.0,
R_PPC64_PLT16_HI = R_PPC_PLT16_HI.0,
R_PPC64_PLT16_HA = R_PPC_PLT16_HA.0,
R_PPC64_SECTOFF = R_PPC_SECTOFF.0,
R_PPC64_SECTOFF_LO = R_PPC_SECTOFF_LO.0,
R_PPC64_SECTOFF_HI = R_PPC_SECTOFF_HI.0,
R_PPC64_SECTOFF_HA = R_PPC_SECTOFF_HA.0,
R_PPC64_ADDR30 = 37,
R_PPC64_ADDR64 = 38,
R_PPC64_ADDR16_HIGHER = 39,
R_PPC64_ADDR16_HIGHERA = 40,
R_PPC64_ADDR16_HIGHEST = 41,
R_PPC64_ADDR16_HIGHESTA = 42,
R_PPC64_UADDR64 = 43,
R_PPC64_REL64 = 44,
R_PPC64_PLT64 = 45,
R_PPC64_PLTREL64 = 46,
R_PPC64_TOC16 = 47,
R_PPC64_TOC16_LO = 48,
R_PPC64_TOC16_HI = 49,
R_PPC64_TOC16_HA = 50,
R_PPC64_TOC = 51,
R_PPC64_PLTGOT16 = 52,
R_PPC64_PLTGOT16_LO = 53,
R_PPC64_PLTGOT16_HI = 54,
R_PPC64_PLTGOT16_HA = 55,
R_PPC64_ADDR16_DS = 56,
R_PPC64_ADDR16_LO_DS = 57,
R_PPC64_GOT16_DS = 58,
R_PPC64_GOT16_LO_DS = 59,
R_PPC64_PLT16_LO_DS = 60,
R_PPC64_SECTOFF_DS = 61,
R_PPC64_SECTOFF_LO_DS = 62,
R_PPC64_TOC16_DS = 63,
R_PPC64_TOC16_LO_DS = 64,
R_PPC64_PLTGOT16_DS = 65,
R_PPC64_PLTGOT16_LO_DS = 66,
R_PPC64_TLS = 67,
R_PPC64_DTPMOD64 = 68,
R_PPC64_TPREL16 = 69,
R_PPC64_TPREL16_LO = 70,
R_PPC64_TPREL16_HI = 71,
R_PPC64_TPREL16_HA = 72,
R_PPC64_TPREL64 = 73,
R_PPC64_DTPREL16 = 74,
R_PPC64_DTPREL16_LO = 75,
R_PPC64_DTPREL16_HI = 76,
R_PPC64_DTPREL16_HA = 77,
R_PPC64_DTPREL64 = 78,
R_PPC64_GOT_TLSGD16 = 79,
R_PPC64_GOT_TLSGD16_LO = 80,
R_PPC64_GOT_TLSGD16_HI = 81,
R_PPC64_GOT_TLSGD16_HA = 82,
R_PPC64_GOT_TLSLD16 = 83,
R_PPC64_GOT_TLSLD16_LO = 84,
R_PPC64_GOT_TLSLD16_HI = 85,
R_PPC64_GOT_TLSLD16_HA = 86,
R_PPC64_GOT_TPREL16_DS = 87,
R_PPC64_GOT_TPREL16_LO_DS = 88,
R_PPC64_GOT_TPREL16_HI = 89,
R_PPC64_GOT_TPREL16_HA = 90,
R_PPC64_GOT_DTPREL16_DS = 91,
R_PPC64_GOT_DTPREL16_LO_DS = 92,
R_PPC64_GOT_DTPREL16_HI = 93,
R_PPC64_GOT_DTPREL16_HA = 94,
R_PPC64_TPREL16_DS = 95,
R_PPC64_TPREL16_LO_DS = 96,
R_PPC64_TPREL16_HIGHER = 97,
R_PPC64_TPREL16_HIGHERA = 98,
R_PPC64_TPREL16_HIGHEST = 99,
R_PPC64_TPREL16_HIGHESTA = 100,
R_PPC64_DTPREL16_DS = 101,
R_PPC64_DTPREL16_LO_DS = 102,
R_PPC64_DTPREL16_HIGHER = 103,
R_PPC64_DTPREL16_HIGHERA = 104,
R_PPC64_DTPREL16_HIGHEST = 105,
R_PPC64_DTPREL16_HIGHESTA = 106,
R_PPC64_TLSGD = 107,
R_PPC64_TLSLD = 108,
R_PPC64_TOCSAVE = 109,
R_PPC64_ADDR16_HIGH = 110,
R_PPC64_ADDR16_HIGHA = 111,
R_PPC64_TPREL16_HIGH = 112,
R_PPC64_TPREL16_HIGHA = 113,
R_PPC64_DTPREL16_HIGH = 114,
R_PPC64_DTPREL16_HIGHA = 115,
R_PPC64_JMP_IREL = 247,
R_PPC64_IRELATIVE = 248,
R_PPC64_REL16 = 249,
R_PPC64_REL16_LO = 250,
R_PPC64_REL16_HI = 251,
R_PPC64_REL16_HA = 252,
};
consts dt: DynamicTag(i64) = {
DT_PPC64_GLINK = DT_LOPROC + 0,
DT_PPC64_OPD = DT_LOPROC + 1,
DT_PPC64_OPDSZ = DT_LOPROC + 2,
DT_PPC64_OPT = DT_LOPROC + 3,
};
}
pub const EF_PPC64_ABI: u32 = 3;
pub const PPC64_OPT_TLS: u32 = 1;
pub const PPC64_OPT_MULTI_TOC: u32 = 2;
pub const PPC64_OPT_LOCALENTRY: u32 = 4;
pub const STO_PPC64_LOCAL_BIT: u8 = 5;
pub const STO_PPC64_LOCAL_MASK: u8 = 7 << STO_PPC64_LOCAL_BIT;
names! {
struct Arm(Base);
flags ef: FileFlags(u32) = {
EF_ARM_RELEXEC = 0x01,
EF_ARM_HASENTRY = 0x02,
EF_ARM_INTERWORK = 0x04,
EF_ARM_APCS_26 = 0x08,
EF_ARM_APCS_FLOAT = 0x10,
EF_ARM_PIC = 0x20,
EF_ARM_ALIGN8 = 0x40,
EF_ARM_NEW_ABI = 0x80,
EF_ARM_OLD_ABI = 0x100,
EF_ARM_SOFT_FLOAT = 0x200,
EF_ARM_VFP_FLOAT = 0x400,
EF_ARM_MAVERICK_FLOAT = 0x800,
EF_ARM_BE8 = 0x0080_0000,
EF_ARM_LE8 = 0x0040_0000,
EF_ARM_EABIMASK = 0xff00_0000 => NAMES_EF_ARM_EABI,
};
consts stt: SymbolType(u8) = {
STT_ARM_TFUNC = STT_LOPROC,
STT_ARM_16BIT = STT_HIPROC,
};
flags shf: SectionFlags(u64) = {
SHF_ARM_ENTRYSECT = 0x1000_0000,
SHF_ARM_COMDEF = 0x8000_0000,
};
flags pf: ProgramFlags(u32) = {
PF_ARM_SB = 0x1000_0000,
PF_ARM_PI = 0x2000_0000,
PF_ARM_ABS = 0x4000_0000,
};
consts pt: ProgramType(u32) = {
PT_ARM_EXIDX = PT_LOPROC + 1,
};
consts sht: SectionType(u32) = {
SHT_ARM_EXIDX = SHT_LOPROC + 1,
SHT_ARM_PREEMPTMAP = SHT_LOPROC + 2,
SHT_ARM_ATTRIBUTES = SHT_LOPROC + 3,
};
consts r = pub NAMES_R_ARM: RelocationType(u32) = {
R_ARM_NONE = 0,
R_ARM_PC24 = 1,
R_ARM_ABS32 = 2,
R_ARM_REL32 = 3,
R_ARM_PC13 = 4,
R_ARM_ABS16 = 5,
R_ARM_ABS12 = 6,
R_ARM_THM_ABS5 = 7,
R_ARM_ABS8 = 8,
R_ARM_SBREL32 = 9,
R_ARM_THM_PC22 = 10,
R_ARM_THM_PC8 = 11,
R_ARM_AMP_VCALL9 = 12,
R_ARM_SWI24 = 13,
R_ARM_TLS_DESC = 13,
R_ARM_THM_SWI8 = 14,
R_ARM_XPC25 = 15,
R_ARM_THM_XPC22 = 16,
R_ARM_TLS_DTPMOD32 = 17,
R_ARM_TLS_DTPOFF32 = 18,
R_ARM_TLS_TPOFF32 = 19,
R_ARM_COPY = 20,
R_ARM_GLOB_DAT = 21,
R_ARM_JUMP_SLOT = 22,
R_ARM_RELATIVE = 23,
R_ARM_GOTOFF = 24,
R_ARM_GOTPC = 25,
R_ARM_GOT32 = 26,
R_ARM_PLT32 = 27,
R_ARM_CALL = 28,
R_ARM_JUMP24 = 29,
R_ARM_THM_JUMP24 = 30,
R_ARM_BASE_ABS = 31,
R_ARM_ALU_PCREL_7_0 = 32,
R_ARM_ALU_PCREL_15_8 = 33,
R_ARM_ALU_PCREL_23_15 = 34,
R_ARM_LDR_SBREL_11_0 = 35,
R_ARM_ALU_SBREL_19_12 = 36,
R_ARM_ALU_SBREL_27_20 = 37,
R_ARM_TARGET1 = 38,
R_ARM_SBREL31 = 39,
R_ARM_V4BX = 40,
R_ARM_TARGET2 = 41,
R_ARM_PREL31 = 42,
R_ARM_MOVW_ABS_NC = 43,
R_ARM_MOVT_ABS = 44,
R_ARM_MOVW_PREL_NC = 45,
R_ARM_MOVT_PREL = 46,
R_ARM_THM_MOVW_ABS_NC = 47,
R_ARM_THM_MOVT_ABS = 48,
R_ARM_THM_MOVW_PREL_NC = 49,
R_ARM_THM_MOVT_PREL = 50,
R_ARM_THM_JUMP19 = 51,
R_ARM_THM_JUMP6 = 52,
R_ARM_THM_ALU_PREL_11_0 = 53,
R_ARM_THM_PC12 = 54,
R_ARM_ABS32_NOI = 55,
R_ARM_REL32_NOI = 56,
R_ARM_ALU_PC_G0_NC = 57,
R_ARM_ALU_PC_G0 = 58,
R_ARM_ALU_PC_G1_NC = 59,
R_ARM_ALU_PC_G1 = 60,
R_ARM_ALU_PC_G2 = 61,
R_ARM_LDR_PC_G1 = 62,
R_ARM_LDR_PC_G2 = 63,
R_ARM_LDRS_PC_G0 = 64,
R_ARM_LDRS_PC_G1 = 65,
R_ARM_LDRS_PC_G2 = 66,
R_ARM_LDC_PC_G0 = 67,
R_ARM_LDC_PC_G1 = 68,
R_ARM_LDC_PC_G2 = 69,
R_ARM_ALU_SB_G0_NC = 70,
R_ARM_ALU_SB_G0 = 71,
R_ARM_ALU_SB_G1_NC = 72,
R_ARM_ALU_SB_G1 = 73,
R_ARM_ALU_SB_G2 = 74,
R_ARM_LDR_SB_G0 = 75,
R_ARM_LDR_SB_G1 = 76,
R_ARM_LDR_SB_G2 = 77,
R_ARM_LDRS_SB_G0 = 78,
R_ARM_LDRS_SB_G1 = 79,
R_ARM_LDRS_SB_G2 = 80,
R_ARM_LDC_SB_G0 = 81,
R_ARM_LDC_SB_G1 = 82,
R_ARM_LDC_SB_G2 = 83,
R_ARM_MOVW_BREL_NC = 84,
R_ARM_MOVT_BREL = 85,
R_ARM_MOVW_BREL = 86,
R_ARM_THM_MOVW_BREL_NC = 87,
R_ARM_THM_MOVT_BREL = 88,
R_ARM_THM_MOVW_BREL = 89,
R_ARM_TLS_GOTDESC = 90,
R_ARM_TLS_CALL = 91,
R_ARM_TLS_DESCSEQ = 92,
R_ARM_THM_TLS_CALL = 93,
R_ARM_PLT32_ABS = 94,
R_ARM_GOT_ABS = 95,
R_ARM_GOT_PREL = 96,
R_ARM_GOT_BREL12 = 97,
R_ARM_GOTOFF12 = 98,
R_ARM_GOTRELAX = 99,
R_ARM_GNU_VTENTRY = 100,
R_ARM_GNU_VTINHERIT = 101,
R_ARM_THM_PC11 = 102,
R_ARM_THM_PC9 = 103,
R_ARM_TLS_GD32 = 104,
R_ARM_TLS_LDM32 = 105,
R_ARM_TLS_LDO32 = 106,
R_ARM_TLS_IE32 = 107,
R_ARM_TLS_LE32 = 108,
R_ARM_TLS_LDO12 = 109,
R_ARM_TLS_LE12 = 110,
R_ARM_TLS_IE12GP = 111,
R_ARM_ME_TOO = 128,
R_ARM_THM_TLS_DESCSEQ = 129,
R_ARM_THM_TLS_DESCSEQ16 = 129,
R_ARM_THM_TLS_DESCSEQ32 = 130,
R_ARM_THM_GOT_BREL12 = 131,
R_ARM_IRELATIVE = 160,
R_ARM_RXPC25 = 249,
R_ARM_RSBREL32 = 250,
R_ARM_THM_RPC22 = 251,
R_ARM_RREL32 = 252,
R_ARM_RABS22 = 253,
R_ARM_RPC24 = 254,
R_ARM_RBASE = 255,
};
}
constant_names!(NAMES_EF_ARM_EABI: FileFlags(u32) = {
EF_ARM_EABI_UNKNOWN = 0x0000_0000,
EF_ARM_EABI_VER1 = 0x0100_0000,
EF_ARM_EABI_VER2 = 0x0200_0000,
EF_ARM_EABI_VER3 = 0x0300_0000,
EF_ARM_EABI_VER4 = 0x0400_0000,
EF_ARM_EABI_VER5 = 0x0500_0000,
});
pub const EF_ARM_ABI_FLOAT_SOFT: u32 = 0x200;
pub const EF_ARM_ABI_FLOAT_HARD: u32 = 0x400;
pub const EF_ARM_SYMSARESORTED: u32 = 0x04;
pub const EF_ARM_DYNSYMSUSESEGIDX: u32 = 0x08;
pub const EF_ARM_MAPSYMSFIRST: u32 = 0x10;
names! {
struct Aarch64(Base);
consts sht: SectionType(u32) = {
SHT_AARCH64_ATTRIBUTES = SHT_LOPROC + 3,
};
flags sto: SymbolOther(u8) = {
STO_AARCH64_VARIANT_PCS = 0x80,
};
consts dt: DynamicTag(i64) = {
DT_AARCH64_BTI_PLT = DT_LOPROC + 1,
DT_AARCH64_PAC_PLT = DT_LOPROC + 3,
DT_AARCH64_VARIANT_PCS = DT_LOPROC + 5,
};
consts r = pub NAMES_R_AARCH64: RelocationType(u32) = {
R_AARCH64_NONE = 0,
R_AARCH64_P32_ABS32 = 1,
R_AARCH64_P32_COPY = 180,
R_AARCH64_P32_GLOB_DAT = 181,
R_AARCH64_P32_JUMP_SLOT = 182,
R_AARCH64_P32_RELATIVE = 183,
R_AARCH64_P32_TLS_DTPMOD = 184,
R_AARCH64_P32_TLS_DTPREL = 185,
R_AARCH64_P32_TLS_TPREL = 186,
R_AARCH64_P32_TLSDESC = 187,
R_AARCH64_P32_IRELATIVE = 188,
R_AARCH64_ABS64 = 257,
R_AARCH64_ABS32 = 258,
R_AARCH64_ABS16 = 259,
R_AARCH64_PREL64 = 260,
R_AARCH64_PREL32 = 261,
R_AARCH64_PREL16 = 262,
R_AARCH64_MOVW_UABS_G0 = 263,
R_AARCH64_MOVW_UABS_G0_NC = 264,
R_AARCH64_MOVW_UABS_G1 = 265,
R_AARCH64_MOVW_UABS_G1_NC = 266,
R_AARCH64_MOVW_UABS_G2 = 267,
R_AARCH64_MOVW_UABS_G2_NC = 268,
R_AARCH64_MOVW_UABS_G3 = 269,
R_AARCH64_MOVW_SABS_G0 = 270,
R_AARCH64_MOVW_SABS_G1 = 271,
R_AARCH64_MOVW_SABS_G2 = 272,
R_AARCH64_LD_PREL_LO19 = 273,
R_AARCH64_ADR_PREL_LO21 = 274,
R_AARCH64_ADR_PREL_PG_HI21 = 275,
R_AARCH64_ADR_PREL_PG_HI21_NC = 276,
R_AARCH64_ADD_ABS_LO12_NC = 277,
R_AARCH64_LDST8_ABS_LO12_NC = 278,
R_AARCH64_TSTBR14 = 279,
R_AARCH64_CONDBR19 = 280,
R_AARCH64_JUMP26 = 282,
R_AARCH64_CALL26 = 283,
R_AARCH64_LDST16_ABS_LO12_NC = 284,
R_AARCH64_LDST32_ABS_LO12_NC = 285,
R_AARCH64_LDST64_ABS_LO12_NC = 286,
R_AARCH64_MOVW_PREL_G0 = 287,
R_AARCH64_MOVW_PREL_G0_NC = 288,
R_AARCH64_MOVW_PREL_G1 = 289,
R_AARCH64_MOVW_PREL_G1_NC = 290,
R_AARCH64_MOVW_PREL_G2 = 291,
R_AARCH64_MOVW_PREL_G2_NC = 292,
R_AARCH64_MOVW_PREL_G3 = 293,
R_AARCH64_LDST128_ABS_LO12_NC = 299,
R_AARCH64_MOVW_GOTOFF_G0 = 300,
R_AARCH64_MOVW_GOTOFF_G0_NC = 301,
R_AARCH64_MOVW_GOTOFF_G1 = 302,
R_AARCH64_MOVW_GOTOFF_G1_NC = 303,
R_AARCH64_MOVW_GOTOFF_G2 = 304,
R_AARCH64_MOVW_GOTOFF_G2_NC = 305,
R_AARCH64_MOVW_GOTOFF_G3 = 306,
R_AARCH64_GOTREL64 = 307,
R_AARCH64_GOTREL32 = 308,
R_AARCH64_GOT_LD_PREL19 = 309,
R_AARCH64_LD64_GOTOFF_LO15 = 310,
R_AARCH64_ADR_GOT_PAGE = 311,
R_AARCH64_LD64_GOT_LO12_NC = 312,
R_AARCH64_LD64_GOTPAGE_LO15 = 313,
R_AARCH64_PLT32 = 314,
R_AARCH64_GOTPCREL32 = 315,
R_AARCH64_TLSGD_ADR_PREL21 = 512,
R_AARCH64_TLSGD_ADR_PAGE21 = 513,
R_AARCH64_TLSGD_ADD_LO12_NC = 514,
R_AARCH64_TLSGD_MOVW_G1 = 515,
R_AARCH64_TLSGD_MOVW_G0_NC = 516,
R_AARCH64_TLSLD_ADR_PREL21 = 517,
R_AARCH64_TLSLD_ADR_PAGE21 = 518,
R_AARCH64_TLSLD_ADD_LO12_NC = 519,
R_AARCH64_TLSLD_MOVW_G1 = 520,
R_AARCH64_TLSLD_MOVW_G0_NC = 521,
R_AARCH64_TLSLD_LD_PREL19 = 522,
R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 523,
R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 524,
R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 525,
R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 526,
R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 527,
R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 528,
R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 529,
R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 530,
R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 531,
R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 532,
R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 533,
R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 534,
R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 535,
R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 536,
R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 537,
R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 538,
R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 539,
R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 540,
R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 541,
R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 542,
R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 543,
R_AARCH64_TLSLE_MOVW_TPREL_G2 = 544,
R_AARCH64_TLSLE_MOVW_TPREL_G1 = 545,
R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 546,
R_AARCH64_TLSLE_MOVW_TPREL_G0 = 547,
R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 548,
R_AARCH64_TLSLE_ADD_TPREL_HI12 = 549,
R_AARCH64_TLSLE_ADD_TPREL_LO12 = 550,
R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 551,
R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 552,
R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 553,
R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 554,
R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 555,
R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 556,
R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 557,
R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 558,
R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 559,
R_AARCH64_TLSDESC_LD_PREL19 = 560,
R_AARCH64_TLSDESC_ADR_PREL21 = 561,
R_AARCH64_TLSDESC_ADR_PAGE21 = 562,
R_AARCH64_TLSDESC_LD64_LO12 = 563,
R_AARCH64_TLSDESC_ADD_LO12 = 564,
R_AARCH64_TLSDESC_OFF_G1 = 565,
R_AARCH64_TLSDESC_OFF_G0_NC = 566,
R_AARCH64_TLSDESC_LDR = 567,
R_AARCH64_TLSDESC_ADD = 568,
R_AARCH64_TLSDESC_CALL = 569,
R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570,
R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571,
R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572,
R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573,
R_AARCH64_COPY = 1024,
R_AARCH64_GLOB_DAT = 1025,
R_AARCH64_JUMP_SLOT = 1026,
R_AARCH64_RELATIVE = 1027,
R_AARCH64_TLS_DTPMOD = 1028,
R_AARCH64_TLS_DTPREL = 1029,
R_AARCH64_TLS_TPREL = 1030,
R_AARCH64_TLSDESC = 1031,
R_AARCH64_IRELATIVE = 1032,
};
}
pub const DT_AARCH64_NUM: i64 = 6;
names! {
struct Avr(Base);
flags ef: FileFlags(u32) = {
EF_AVR_LINKRELAX_PREPARED = 0x80,
EF_AVR_ARCH = 0x7F => NAMES_EF_AVR_ARCH,
};
consts r = pub NAMES_R_AVR: RelocationType(u32) = {
R_AVR_NONE = 0,
R_AVR_32 = 1,
R_AVR_7_PCREL = 2,
R_AVR_13_PCREL = 3,
R_AVR_16 = 4,
R_AVR_16_PM = 5,
R_AVR_LO8_LDI = 6,
R_AVR_HI8_LDI = 7,
R_AVR_HH8_LDI = 8,
R_AVR_LO8_LDI_NEG = 9,
R_AVR_HI8_LDI_NEG = 10,
R_AVR_HH8_LDI_NEG = 11,
R_AVR_LO8_LDI_PM = 12,
R_AVR_HI8_LDI_PM = 13,
R_AVR_HH8_LDI_PM = 14,
R_AVR_LO8_LDI_PM_NEG = 15,
R_AVR_HI8_LDI_PM_NEG = 16,
R_AVR_HH8_LDI_PM_NEG = 17,
R_AVR_CALL = 18,
R_AVR_LDI = 19,
R_AVR_6 = 20,
R_AVR_6_ADIW = 21,
R_AVR_MS8_LDI = 22,
R_AVR_MS8_LDI_NEG = 23,
R_AVR_LO8_LDI_GS = 24,
R_AVR_HI8_LDI_GS = 25,
R_AVR_8 = 26,
R_AVR_8_LO8 = 27,
R_AVR_8_HI8 = 28,
R_AVR_8_HLO8 = 29,
R_AVR_DIFF8 = 30,
R_AVR_DIFF16 = 31,
R_AVR_DIFF32 = 32,
R_AVR_LDS_STS_16 = 33,
R_AVR_PORT6 = 34,
R_AVR_PORT5 = 35,
R_AVR_32_PCREL = 36,
};
}
constant_names!(NAMES_EF_AVR_ARCH: FileFlags(u32) = {
EF_AVR_ARCH_AVR1 = 1,
EF_AVR_ARCH_AVR2 = 2,
EF_AVR_ARCH_AVR25 = 25,
EF_AVR_ARCH_AVR3 = 3,
EF_AVR_ARCH_AVR31 = 31,
EF_AVR_ARCH_AVR35 = 35,
EF_AVR_ARCH_AVR4 = 4,
EF_AVR_ARCH_AVR5 = 5,
EF_AVR_ARCH_AVR51 = 51,
EF_AVR_ARCH_AVR6 = 6,
EF_AVR_ARCH_AVRTINY = 100,
EF_AVR_ARCH_XMEGA1 = 101,
EF_AVR_ARCH_XMEGA2 = 102,
EF_AVR_ARCH_XMEGA3 = 103,
EF_AVR_ARCH_XMEGA4 = 104,
EF_AVR_ARCH_XMEGA5 = 105,
EF_AVR_ARCH_XMEGA6 = 106,
EF_AVR_ARCH_XMEGA7 = 107,
});
names! {
struct Msp430(Base);
consts r = pub NAMES_R_MSP430: RelocationType(u32) = {
R_MSP430_NONE = 0,
R_MSP430_32 = 1,
R_MSP430_16_BYTE = 5,
};
}
names! {
struct Hex(Base);
consts r = pub NAMES_R_HEX: RelocationType(u32) = {
R_HEX_NONE = 0,
R_HEX_32 = 6,
};
}
names! {
struct Csky(Base);
consts r = pub NAMES_R_CKCORE: RelocationType(u32) = {
R_CKCORE_NONE = 0,
R_CKCORE_ADDR32 = 1,
R_CKCORE_PCRELIMM8BY4 = 2,
R_CKCORE_PCRELIMM11BY2 = 3,
R_CKCORE_PCREL32 = 5,
R_CKCORE_PCRELJSR_IMM11BY2 = 6,
R_CKCORE_RELATIVE = 9,
R_CKCORE_COPY = 10,
R_CKCORE_GLOB_DAT = 11,
R_CKCORE_JUMP_SLOT = 12,
R_CKCORE_GOTOFF = 13,
R_CKCORE_GOTPC = 14,
R_CKCORE_GOT32 = 15,
R_CKCORE_PLT32 = 16,
R_CKCORE_ADDRGOT = 17,
R_CKCORE_ADDRPLT = 18,
R_CKCORE_PCREL_IMM26BY2 = 19,
R_CKCORE_PCREL_IMM16BY2 = 20,
R_CKCORE_PCREL_IMM16BY4 = 21,
R_CKCORE_PCREL_IMM10BY2 = 22,
R_CKCORE_PCREL_IMM10BY4 = 23,
R_CKCORE_ADDR_HI16 = 24,
R_CKCORE_ADDR_LO16 = 25,
R_CKCORE_GOTPC_HI16 = 26,
R_CKCORE_GOTPC_LO16 = 27,
R_CKCORE_GOTOFF_HI16 = 28,
R_CKCORE_GOTOFF_LO16 = 29,
R_CKCORE_GOT12 = 30,
R_CKCORE_GOT_HI16 = 31,
R_CKCORE_GOT_LO16 = 32,
R_CKCORE_PLT12 = 33,
R_CKCORE_PLT_HI16 = 34,
R_CKCORE_PLT_LO16 = 35,
R_CKCORE_ADDRGOT_HI16 = 36,
R_CKCORE_ADDRGOT_LO16 = 37,
R_CKCORE_ADDRPLT_HI16 = 38,
R_CKCORE_ADDRPLT_LO16 = 39,
R_CKCORE_PCREL_JSR_IMM26BY2 = 40,
R_CKCORE_TOFFSET_LO16 = 41,
R_CKCORE_DOFFSET_LO16 = 42,
R_CKCORE_PCREL_IMM18BY2 = 43,
R_CKCORE_DOFFSET_IMM18 = 44,
R_CKCORE_DOFFSET_IMM18BY2 = 45,
R_CKCORE_DOFFSET_IMM18BY4 = 46,
R_CKCORE_GOT_IMM18BY4 = 48,
R_CKCORE_PLT_IMM18BY4 = 49,
R_CKCORE_PCREL_IMM7BY4 = 50,
R_CKCORE_TLS_LE32 = 51,
R_CKCORE_TLS_IE32 = 52,
R_CKCORE_TLS_GD32 = 53,
R_CKCORE_TLS_LDM32 = 54,
R_CKCORE_TLS_LDO32 = 55,
R_CKCORE_TLS_DTPMOD32 = 56,
R_CKCORE_TLS_DTPOFF32 = 57,
R_CKCORE_TLS_TPOFF32 = 58,
};
flags ef: FileFlags(u32) = {
_ = EF_CSKY_ABIMASK => NAMES_EF_CSKY_ABI,
};
consts sht: SectionType(u32) = {
SHT_CSKY_ATTRIBUTES = SHT_LOPROC + 1,
};
}
pub const EF_CSKY_ABIMASK: u32 = 0xF000_0000;
pub const EF_CSKY_OTHER: u32 = 0x0FFF_0000;
pub const EF_CSKY_PROCESSOR: u32 = 0x0000_FFFF;
constant_names!(NAMES_EF_CSKY_ABI: FileFlags(u32) = {
EF_CSKY_ABIV1 = 0x1000_0000,
EF_CSKY_ABIV2 = 0x2000_0000,
});
names! {
struct Ia64(Base);
flags ef: FileFlags(u32) = {
EF_IA_64_ABI64 = 0x0000_0010,
};
consts pt: ProgramType(u32) = {
PT_IA_64_ARCHEXT = PT_LOPROC + 0,
PT_IA_64_UNWIND = PT_LOPROC + 1,
PT_IA_64_HP_OPT_ANOT = PT_LOOS + 0x12,
PT_IA_64_HP_HSL_ANOT = PT_LOOS + 0x13,
PT_IA_64_HP_STACK = PT_LOOS + 0x14,
};
flags pf: ProgramFlags(u32) = {
PF_IA_64_NORECOV = 0x8000_0000,
};
consts sht: SectionType(u32) = {
SHT_IA_64_EXT = SHT_LOPROC + 0,
SHT_IA_64_UNWIND = SHT_LOPROC + 1,
};
flags shf: SectionFlags(u64) = {
SHF_IA_64_SHORT = 0x1000_0000,
SHF_IA_64_NORECOV = 0x2000_0000,
};
consts dt: DynamicTag(i64) = {
DT_IA_64_PLT_RESERVE = DT_LOPROC + 0,
};
consts r = pub NAMES_R_IA64: RelocationType(u32) = {
R_IA64_NONE = 0x00,
R_IA64_IMM14 = 0x21,
R_IA64_IMM22 = 0x22,
R_IA64_IMM64 = 0x23,
R_IA64_DIR32MSB = 0x24,
R_IA64_DIR32LSB = 0x25,
R_IA64_DIR64MSB = 0x26,
R_IA64_DIR64LSB = 0x27,
R_IA64_GPREL22 = 0x2a,
R_IA64_GPREL64I = 0x2b,
R_IA64_GPREL32MSB = 0x2c,
R_IA64_GPREL32LSB = 0x2d,
R_IA64_GPREL64MSB = 0x2e,
R_IA64_GPREL64LSB = 0x2f,
R_IA64_LTOFF22 = 0x32,
R_IA64_LTOFF64I = 0x33,
R_IA64_PLTOFF22 = 0x3a,
R_IA64_PLTOFF64I = 0x3b,
R_IA64_PLTOFF64MSB = 0x3e,
R_IA64_PLTOFF64LSB = 0x3f,
R_IA64_FPTR64I = 0x43,
R_IA64_FPTR32MSB = 0x44,
R_IA64_FPTR32LSB = 0x45,
R_IA64_FPTR64MSB = 0x46,
R_IA64_FPTR64LSB = 0x47,
R_IA64_PCREL60B = 0x48,
R_IA64_PCREL21B = 0x49,
R_IA64_PCREL21M = 0x4a,
R_IA64_PCREL21F = 0x4b,
R_IA64_PCREL32MSB = 0x4c,
R_IA64_PCREL32LSB = 0x4d,
R_IA64_PCREL64MSB = 0x4e,
R_IA64_PCREL64LSB = 0x4f,
R_IA64_LTOFF_FPTR22 = 0x52,
R_IA64_LTOFF_FPTR64I = 0x53,
R_IA64_LTOFF_FPTR32MSB = 0x54,
R_IA64_LTOFF_FPTR32LSB = 0x55,
R_IA64_LTOFF_FPTR64MSB = 0x56,
R_IA64_LTOFF_FPTR64LSB = 0x57,
R_IA64_SEGREL32MSB = 0x5c,
R_IA64_SEGREL32LSB = 0x5d,
R_IA64_SEGREL64MSB = 0x5e,
R_IA64_SEGREL64LSB = 0x5f,
R_IA64_SECREL32MSB = 0x64,
R_IA64_SECREL32LSB = 0x65,
R_IA64_SECREL64MSB = 0x66,
R_IA64_SECREL64LSB = 0x67,
R_IA64_REL32MSB = 0x6c,
R_IA64_REL32LSB = 0x6d,
R_IA64_REL64MSB = 0x6e,
R_IA64_REL64LSB = 0x6f,
R_IA64_LTV32MSB = 0x74,
R_IA64_LTV32LSB = 0x75,
R_IA64_LTV64MSB = 0x76,
R_IA64_LTV64LSB = 0x77,
R_IA64_PCREL21BI = 0x79,
R_IA64_PCREL22 = 0x7a,
R_IA64_PCREL64I = 0x7b,
R_IA64_IPLTMSB = 0x80,
R_IA64_IPLTLSB = 0x81,
R_IA64_COPY = 0x84,
R_IA64_SUB = 0x85,
R_IA64_LTOFF22X = 0x86,
R_IA64_LDXMOV = 0x87,
R_IA64_TPREL14 = 0x91,
R_IA64_TPREL22 = 0x92,
R_IA64_TPREL64I = 0x93,
R_IA64_TPREL64MSB = 0x96,
R_IA64_TPREL64LSB = 0x97,
R_IA64_LTOFF_TPREL22 = 0x9a,
R_IA64_DTPMOD64MSB = 0xa6,
R_IA64_DTPMOD64LSB = 0xa7,
R_IA64_LTOFF_DTPMOD22 = 0xaa,
R_IA64_DTPREL14 = 0xb1,
R_IA64_DTPREL22 = 0xb2,
R_IA64_DTPREL64I = 0xb3,
R_IA64_DTPREL32MSB = 0xb4,
R_IA64_DTPREL32LSB = 0xb5,
R_IA64_DTPREL64MSB = 0xb6,
R_IA64_DTPREL64LSB = 0xb7,
R_IA64_LTOFF_DTPREL22 = 0xba,
};
}
pub const EF_IA_64_MASKOS: u32 = 0x0000_000f;
pub const EF_IA_64_ARCH: u32 = 0xff00_0000;
names! {
struct Sh(Base);
flags ef: FileFlags(u32) = {
EF_SH_MACH_MASK = 0x1f => NAMES_EF_SH_MACH,
};
consts r = pub NAMES_R_SH: RelocationType(u32) = {
R_SH_NONE = 0,
R_SH_DIR32 = 1,
R_SH_REL32 = 2,
R_SH_DIR8WPN = 3,
R_SH_IND12W = 4,
R_SH_DIR8WPL = 5,
R_SH_DIR8WPZ = 6,
R_SH_DIR8BP = 7,
R_SH_DIR8W = 8,
R_SH_DIR8L = 9,
R_SH_SWITCH16 = 25,
R_SH_SWITCH32 = 26,
R_SH_USES = 27,
R_SH_COUNT = 28,
R_SH_ALIGN = 29,
R_SH_CODE = 30,
R_SH_DATA = 31,
R_SH_LABEL = 32,
R_SH_SWITCH8 = 33,
R_SH_GNU_VTINHERIT = 34,
R_SH_GNU_VTENTRY = 35,
R_SH_TLS_GD_32 = 144,
R_SH_TLS_LD_32 = 145,
R_SH_TLS_LDO_32 = 146,
R_SH_TLS_IE_32 = 147,
R_SH_TLS_LE_32 = 148,
R_SH_TLS_DTPMOD32 = 149,
R_SH_TLS_DTPOFF32 = 150,
R_SH_TLS_TPOFF32 = 151,
R_SH_GOT32 = 160,
R_SH_PLT32 = 161,
R_SH_COPY = 162,
R_SH_GLOB_DAT = 163,
R_SH_JMP_SLOT = 164,
R_SH_RELATIVE = 165,
R_SH_GOTOFF = 166,
R_SH_GOTPC = 167,
};
}
names! {
struct S390(Base);
flags ef: FileFlags(u32) = {
EF_S390_HIGH_GPRS = 0x0000_0001,
};
consts r = pub NAMES_R_390: RelocationType(u32) = {
R_390_NONE = 0,
R_390_8 = 1,
R_390_12 = 2,
R_390_16 = 3,
R_390_32 = 4,
R_390_PC32 = 5,
R_390_GOT12 = 6,
R_390_GOT32 = 7,
R_390_PLT32 = 8,
R_390_COPY = 9,
R_390_GLOB_DAT = 10,
R_390_JMP_SLOT = 11,
R_390_RELATIVE = 12,
R_390_GOTOFF32 = 13,
R_390_GOTPC = 14,
R_390_GOT16 = 15,
R_390_PC16 = 16,
R_390_PC16DBL = 17,
R_390_PLT16DBL = 18,
R_390_PC32DBL = 19,
R_390_PLT32DBL = 20,
R_390_GOTPCDBL = 21,
R_390_64 = 22,
R_390_PC64 = 23,
R_390_GOT64 = 24,
R_390_PLT64 = 25,
R_390_GOTENT = 26,
R_390_GOTOFF16 = 27,
R_390_GOTOFF64 = 28,
R_390_GOTPLT12 = 29,
R_390_GOTPLT16 = 30,
R_390_GOTPLT32 = 31,
R_390_GOTPLT64 = 32,
R_390_GOTPLTENT = 33,
R_390_PLTOFF16 = 34,
R_390_PLTOFF32 = 35,
R_390_PLTOFF64 = 36,
R_390_TLS_LOAD = 37,
R_390_TLS_GDCALL = 38,
R_390_TLS_LDCALL = 39,
R_390_TLS_GD32 = 40,
R_390_TLS_GD64 = 41,
R_390_TLS_GOTIE12 = 42,
R_390_TLS_GOTIE32 = 43,
R_390_TLS_GOTIE64 = 44,
R_390_TLS_LDM32 = 45,
R_390_TLS_LDM64 = 46,
R_390_TLS_IE32 = 47,
R_390_TLS_IE64 = 48,
R_390_TLS_IEENT = 49,
R_390_TLS_LE32 = 50,
R_390_TLS_LE64 = 51,
R_390_TLS_LDO32 = 52,
R_390_TLS_LDO64 = 53,
R_390_TLS_DTPMOD = 54,
R_390_TLS_DTPOFF = 55,
R_390_TLS_TPOFF = 56,
R_390_20 = 57,
R_390_GOT20 = 58,
R_390_GOTPLT20 = 59,
R_390_TLS_GOTIE20 = 60,
R_390_IRELATIVE = 61,
};
}
constant_names!(NAMES_EF_SH_MACH: FileFlags(u32) = {
EF_SH_UNKNOWN = 0x0,
EF_SH1 = 0x1,
EF_SH2 = 0x2,
EF_SH3 = 0x3,
EF_SH_DSP = 0x4,
EF_SH3_DSP = 0x5,
EF_SH4AL_DSP = 0x6,
EF_SH3E = 0x8,
EF_SH4 = 0x9,
EF_SH2E = 0xb,
EF_SH4A = 0xc,
EF_SH2A = 0xd,
EF_SH4_NOFPU = 0x10,
EF_SH4A_NOFPU = 0x11,
EF_SH4_NOMMU_NOFPU = 0x12,
EF_SH2A_NOFPU = 0x13,
EF_SH3_NOMMU = 0x14,
EF_SH2A_SH4_NOFPU = 0x15,
EF_SH2A_SH3_NOFPU = 0x16,
EF_SH2A_SH4 = 0x17,
EF_SH2A_SH3E = 0x18,
});
names! {
struct Cris(Base);
consts r = pub NAMES_R_CRIS: RelocationType(u32) = {
R_CRIS_NONE = 0,
R_CRIS_8 = 1,
R_CRIS_16 = 2,
R_CRIS_32 = 3,
R_CRIS_8_PCREL = 4,
R_CRIS_16_PCREL = 5,
R_CRIS_32_PCREL = 6,
R_CRIS_GNU_VTINHERIT = 7,
R_CRIS_GNU_VTENTRY = 8,
R_CRIS_COPY = 9,
R_CRIS_GLOB_DAT = 10,
R_CRIS_JUMP_SLOT = 11,
R_CRIS_RELATIVE = 12,
R_CRIS_16_GOT = 13,
R_CRIS_32_GOT = 14,
R_CRIS_16_GOTPLT = 15,
R_CRIS_32_GOTPLT = 16,
R_CRIS_32_GOTREL = 17,
R_CRIS_32_PLT_GOTREL = 18,
R_CRIS_32_PLT_PCREL = 19,
};
}
names! {
struct X86_64(Base);
consts r = pub NAMES_R_X86_64: RelocationType(u32) = {
R_X86_64_NONE = 0,
R_X86_64_64 = 1,
R_X86_64_PC32 = 2,
R_X86_64_GOT32 = 3,
R_X86_64_PLT32 = 4,
R_X86_64_COPY = 5,
R_X86_64_GLOB_DAT = 6,
R_X86_64_JUMP_SLOT = 7,
R_X86_64_RELATIVE = 8,
R_X86_64_GOTPCREL = 9,
R_X86_64_32 = 10,
R_X86_64_32S = 11,
R_X86_64_16 = 12,
R_X86_64_PC16 = 13,
R_X86_64_8 = 14,
R_X86_64_PC8 = 15,
R_X86_64_DTPMOD64 = 16,
R_X86_64_DTPOFF64 = 17,
R_X86_64_TPOFF64 = 18,
R_X86_64_TLSGD = 19,
R_X86_64_TLSLD = 20,
R_X86_64_DTPOFF32 = 21,
R_X86_64_GOTTPOFF = 22,
R_X86_64_TPOFF32 = 23,
R_X86_64_PC64 = 24,
R_X86_64_GOTOFF64 = 25,
R_X86_64_GOTPC32 = 26,
R_X86_64_GOT64 = 27,
R_X86_64_GOTPCREL64 = 28,
R_X86_64_GOTPC64 = 29,
R_X86_64_GOTPLT64 = 30,
R_X86_64_PLTOFF64 = 31,
R_X86_64_SIZE32 = 32,
R_X86_64_SIZE64 = 33,
R_X86_64_GOTPC32_TLSDESC = 34,
R_X86_64_TLSDESC_CALL = 35,
R_X86_64_TLSDESC = 36,
R_X86_64_IRELATIVE = 37,
R_X86_64_RELATIVE64 = 38,
R_X86_64_GOTPCRELX = 41,
R_X86_64_REX_GOTPCRELX = 42,
R_X86_64_CODE_4_GOTPCRELX = 43,
R_X86_64_CODE_4_GOTTPOFF = 44,
R_X86_64_CODE_4_GOTPC32_TLSDESC = 45,
R_X86_64_CODE_5_GOTPCRELX = 46,
R_X86_64_CODE_5_GOTTPOFF = 47,
R_X86_64_CODE_5_GOTPC32_TLSDESC = 48,
R_X86_64_CODE_6_GOTPCRELX = 49,
R_X86_64_CODE_6_GOTTPOFF = 50,
R_X86_64_CODE_6_GOTPC32_TLSDESC = 51,
};
consts sht: SectionType(u32) = {
SHT_X86_64_UNWIND = 0x7000_0001,
};
}
names! {
struct Mn10300(Base);
consts r = pub NAMES_R_MN10300: RelocationType(u32) = {
R_MN10300_NONE = 0,
R_MN10300_32 = 1,
R_MN10300_16 = 2,
R_MN10300_8 = 3,
R_MN10300_PCREL32 = 4,
R_MN10300_PCREL16 = 5,
R_MN10300_PCREL8 = 6,
R_MN10300_GNU_VTINHERIT = 7,
R_MN10300_GNU_VTENTRY = 8,
R_MN10300_24 = 9,
R_MN10300_GOTPC32 = 10,
R_MN10300_GOTPC16 = 11,
R_MN10300_GOTOFF32 = 12,
R_MN10300_GOTOFF24 = 13,
R_MN10300_GOTOFF16 = 14,
R_MN10300_PLT32 = 15,
R_MN10300_PLT16 = 16,
R_MN10300_GOT32 = 17,
R_MN10300_GOT24 = 18,
R_MN10300_GOT16 = 19,
R_MN10300_COPY = 20,
R_MN10300_GLOB_DAT = 21,
R_MN10300_JMP_SLOT = 22,
R_MN10300_RELATIVE = 23,
R_MN10300_TLS_GD = 24,
R_MN10300_TLS_LD = 25,
R_MN10300_TLS_LDO = 26,
R_MN10300_TLS_GOTIE = 27,
R_MN10300_TLS_IE = 28,
R_MN10300_TLS_LE = 29,
R_MN10300_TLS_DTPMOD = 30,
R_MN10300_TLS_DTPOFF = 31,
R_MN10300_TLS_TPOFF = 32,
R_MN10300_SYM_DIFF = 33,
R_MN10300_ALIGN = 34,
};
}
names! {
struct M32r(Base);
consts r = pub NAMES_R_M32R: RelocationType(u32) = {
R_M32R_NONE = 0,
R_M32R_16 = 1,
R_M32R_32 = 2,
R_M32R_24 = 3,
R_M32R_10_PCREL = 4,
R_M32R_18_PCREL = 5,
R_M32R_26_PCREL = 6,
R_M32R_HI16_ULO = 7,
R_M32R_HI16_SLO = 8,
R_M32R_LO16 = 9,
R_M32R_SDA16 = 10,
R_M32R_GNU_VTINHERIT = 11,
R_M32R_GNU_VTENTRY = 12,
R_M32R_16_RELA = 33,
R_M32R_32_RELA = 34,
R_M32R_24_RELA = 35,
R_M32R_10_PCREL_RELA = 36,
R_M32R_18_PCREL_RELA = 37,
R_M32R_26_PCREL_RELA = 38,
R_M32R_HI16_ULO_RELA = 39,
R_M32R_HI16_SLO_RELA = 40,
R_M32R_LO16_RELA = 41,
R_M32R_SDA16_RELA = 42,
R_M32R_RELA_GNU_VTINHERIT = 43,
R_M32R_RELA_GNU_VTENTRY = 44,
R_M32R_REL32 = 45,
R_M32R_GOT24 = 48,
R_M32R_26_PLTREL = 49,
R_M32R_COPY = 50,
R_M32R_GLOB_DAT = 51,
R_M32R_JMP_SLOT = 52,
R_M32R_RELATIVE = 53,
R_M32R_GOTOFF = 54,
R_M32R_GOTPC24 = 55,
R_M32R_GOT16_HI_ULO = 56,
R_M32R_GOT16_HI_SLO = 57,
R_M32R_GOT16_LO = 58,
R_M32R_GOTPC_HI_ULO = 59,
R_M32R_GOTPC_HI_SLO = 60,
R_M32R_GOTPC_LO = 61,
R_M32R_GOTOFF_HI_ULO = 62,
R_M32R_GOTOFF_HI_SLO = 63,
R_M32R_GOTOFF_LO = 64,
R_M32R_NUM = 256,
};
}
names! {
struct Microblaze(Base);
consts r = pub NAMES_R_MICROBLAZE: RelocationType(u32) = {
R_MICROBLAZE_NONE = 0,
R_MICROBLAZE_32 = 1,
R_MICROBLAZE_32_PCREL = 2,
R_MICROBLAZE_64_PCREL = 3,
R_MICROBLAZE_32_PCREL_LO = 4,
R_MICROBLAZE_64 = 5,
R_MICROBLAZE_32_LO = 6,
R_MICROBLAZE_SRO32 = 7,
R_MICROBLAZE_SRW32 = 8,
R_MICROBLAZE_64_NONE = 9,
R_MICROBLAZE_32_SYM_OP_SYM = 10,
R_MICROBLAZE_GNU_VTINHERIT = 11,
R_MICROBLAZE_GNU_VTENTRY = 12,
R_MICROBLAZE_GOTPC_64 = 13,
R_MICROBLAZE_GOT_64 = 14,
R_MICROBLAZE_PLT_64 = 15,
R_MICROBLAZE_REL = 16,
R_MICROBLAZE_JUMP_SLOT = 17,
R_MICROBLAZE_GLOB_DAT = 18,
R_MICROBLAZE_GOTOFF_64 = 19,
R_MICROBLAZE_GOTOFF_32 = 20,
R_MICROBLAZE_COPY = 21,
R_MICROBLAZE_TLS = 22,
R_MICROBLAZE_TLSGD = 23,
R_MICROBLAZE_TLSLD = 24,
R_MICROBLAZE_TLSDTPMOD32 = 25,
R_MICROBLAZE_TLSDTPREL32 = 26,
R_MICROBLAZE_TLSDTPREL64 = 27,
R_MICROBLAZE_TLSGOTTPREL32 = 28,
R_MICROBLAZE_TLSTPREL32 = 29,
};
}
names! {
struct Nios2(Base);
consts dt: DynamicTag(i64) = {
DT_NIOS2_GP = 0x7000_0002,
};
consts r = pub NAMES_R_NIOS2: RelocationType(u32) = {
R_NIOS2_NONE = 0,
R_NIOS2_S16 = 1,
R_NIOS2_U16 = 2,
R_NIOS2_PCREL16 = 3,
R_NIOS2_CALL26 = 4,
R_NIOS2_IMM5 = 5,
R_NIOS2_CACHE_OPX = 6,
R_NIOS2_IMM6 = 7,
R_NIOS2_IMM8 = 8,
R_NIOS2_HI16 = 9,
R_NIOS2_LO16 = 10,
R_NIOS2_HIADJ16 = 11,
R_NIOS2_BFD_RELOC_32 = 12,
R_NIOS2_BFD_RELOC_16 = 13,
R_NIOS2_BFD_RELOC_8 = 14,
R_NIOS2_GPREL = 15,
R_NIOS2_GNU_VTINHERIT = 16,
R_NIOS2_GNU_VTENTRY = 17,
R_NIOS2_UJMP = 18,
R_NIOS2_CJMP = 19,
R_NIOS2_CALLR = 20,
R_NIOS2_ALIGN = 21,
R_NIOS2_GOT16 = 22,
R_NIOS2_CALL16 = 23,
R_NIOS2_GOTOFF_LO = 24,
R_NIOS2_GOTOFF_HA = 25,
R_NIOS2_PCREL_LO = 26,
R_NIOS2_PCREL_HA = 27,
R_NIOS2_TLS_GD16 = 28,
R_NIOS2_TLS_LDM16 = 29,
R_NIOS2_TLS_LDO16 = 30,
R_NIOS2_TLS_IE16 = 31,
R_NIOS2_TLS_LE16 = 32,
R_NIOS2_TLS_DTPMOD = 33,
R_NIOS2_TLS_DTPREL = 34,
R_NIOS2_TLS_TPREL = 35,
R_NIOS2_COPY = 36,
R_NIOS2_GLOB_DAT = 37,
R_NIOS2_JUMP_SLOT = 38,
R_NIOS2_RELATIVE = 39,
R_NIOS2_GOTOFF = 40,
R_NIOS2_CALL26_NOAT = 41,
R_NIOS2_GOT_LO = 42,
R_NIOS2_GOT_HA = 43,
R_NIOS2_CALL_LO = 44,
R_NIOS2_CALL_HA = 45,
};
}
names! {
struct Tilepro(Base);
consts r = pub NAMES_R_TILEPRO: RelocationType(u32) = {
R_TILEPRO_NONE = 0,
R_TILEPRO_32 = 1,
R_TILEPRO_16 = 2,
R_TILEPRO_8 = 3,
R_TILEPRO_32_PCREL = 4,
R_TILEPRO_16_PCREL = 5,
R_TILEPRO_8_PCREL = 6,
R_TILEPRO_LO16 = 7,
R_TILEPRO_HI16 = 8,
R_TILEPRO_HA16 = 9,
R_TILEPRO_COPY = 10,
R_TILEPRO_GLOB_DAT = 11,
R_TILEPRO_JMP_SLOT = 12,
R_TILEPRO_RELATIVE = 13,
R_TILEPRO_BROFF_X1 = 14,
R_TILEPRO_JOFFLONG_X1 = 15,
R_TILEPRO_JOFFLONG_X1_PLT = 16,
R_TILEPRO_IMM8_X0 = 17,
R_TILEPRO_IMM8_Y0 = 18,
R_TILEPRO_IMM8_X1 = 19,
R_TILEPRO_IMM8_Y1 = 20,
R_TILEPRO_MT_IMM15_X1 = 21,
R_TILEPRO_MF_IMM15_X1 = 22,
R_TILEPRO_IMM16_X0 = 23,
R_TILEPRO_IMM16_X1 = 24,
R_TILEPRO_IMM16_X0_LO = 25,
R_TILEPRO_IMM16_X1_LO = 26,
R_TILEPRO_IMM16_X0_HI = 27,
R_TILEPRO_IMM16_X1_HI = 28,
R_TILEPRO_IMM16_X0_HA = 29,
R_TILEPRO_IMM16_X1_HA = 30,
R_TILEPRO_IMM16_X0_PCREL = 31,
R_TILEPRO_IMM16_X1_PCREL = 32,
R_TILEPRO_IMM16_X0_LO_PCREL = 33,
R_TILEPRO_IMM16_X1_LO_PCREL = 34,
R_TILEPRO_IMM16_X0_HI_PCREL = 35,
R_TILEPRO_IMM16_X1_HI_PCREL = 36,
R_TILEPRO_IMM16_X0_HA_PCREL = 37,
R_TILEPRO_IMM16_X1_HA_PCREL = 38,
R_TILEPRO_IMM16_X0_GOT = 39,
R_TILEPRO_IMM16_X1_GOT = 40,
R_TILEPRO_IMM16_X0_GOT_LO = 41,
R_TILEPRO_IMM16_X1_GOT_LO = 42,
R_TILEPRO_IMM16_X0_GOT_HI = 43,
R_TILEPRO_IMM16_X1_GOT_HI = 44,
R_TILEPRO_IMM16_X0_GOT_HA = 45,
R_TILEPRO_IMM16_X1_GOT_HA = 46,
R_TILEPRO_MMSTART_X0 = 47,
R_TILEPRO_MMEND_X0 = 48,
R_TILEPRO_MMSTART_X1 = 49,
R_TILEPRO_MMEND_X1 = 50,
R_TILEPRO_SHAMT_X0 = 51,
R_TILEPRO_SHAMT_X1 = 52,
R_TILEPRO_SHAMT_Y0 = 53,
R_TILEPRO_SHAMT_Y1 = 54,
R_TILEPRO_DEST_IMM8_X1 = 55,
R_TILEPRO_TLS_GD_CALL = 60,
R_TILEPRO_IMM8_X0_TLS_GD_ADD = 61,
R_TILEPRO_IMM8_X1_TLS_GD_ADD = 62,
R_TILEPRO_IMM8_Y0_TLS_GD_ADD = 63,
R_TILEPRO_IMM8_Y1_TLS_GD_ADD = 64,
R_TILEPRO_TLS_IE_LOAD = 65,
R_TILEPRO_IMM16_X0_TLS_GD = 66,
R_TILEPRO_IMM16_X1_TLS_GD = 67,
R_TILEPRO_IMM16_X0_TLS_GD_LO = 68,
R_TILEPRO_IMM16_X1_TLS_GD_LO = 69,
R_TILEPRO_IMM16_X0_TLS_GD_HI = 70,
R_TILEPRO_IMM16_X1_TLS_GD_HI = 71,
R_TILEPRO_IMM16_X0_TLS_GD_HA = 72,
R_TILEPRO_IMM16_X1_TLS_GD_HA = 73,
R_TILEPRO_IMM16_X0_TLS_IE = 74,
R_TILEPRO_IMM16_X1_TLS_IE = 75,
R_TILEPRO_IMM16_X0_TLS_IE_LO = 76,
R_TILEPRO_IMM16_X1_TLS_IE_LO = 77,
R_TILEPRO_IMM16_X0_TLS_IE_HI = 78,
R_TILEPRO_IMM16_X1_TLS_IE_HI = 79,
R_TILEPRO_IMM16_X0_TLS_IE_HA = 80,
R_TILEPRO_IMM16_X1_TLS_IE_HA = 81,
R_TILEPRO_TLS_DTPMOD32 = 82,
R_TILEPRO_TLS_DTPOFF32 = 83,
R_TILEPRO_TLS_TPOFF32 = 84,
R_TILEPRO_IMM16_X0_TLS_LE = 85,
R_TILEPRO_IMM16_X1_TLS_LE = 86,
R_TILEPRO_IMM16_X0_TLS_LE_LO = 87,
R_TILEPRO_IMM16_X1_TLS_LE_LO = 88,
R_TILEPRO_IMM16_X0_TLS_LE_HI = 89,
R_TILEPRO_IMM16_X1_TLS_LE_HI = 90,
R_TILEPRO_IMM16_X0_TLS_LE_HA = 91,
R_TILEPRO_IMM16_X1_TLS_LE_HA = 92,
R_TILEPRO_GNU_VTINHERIT = 128,
R_TILEPRO_GNU_VTENTRY = 129,
};
}
names! {
struct Tilegx(Base);
consts r = pub NAMES_R_TILEGX: RelocationType(u32) = {
R_TILEGX_NONE = 0,
R_TILEGX_64 = 1,
R_TILEGX_32 = 2,
R_TILEGX_16 = 3,
R_TILEGX_8 = 4,
R_TILEGX_64_PCREL = 5,
R_TILEGX_32_PCREL = 6,
R_TILEGX_16_PCREL = 7,
R_TILEGX_8_PCREL = 8,
R_TILEGX_HW0 = 9,
R_TILEGX_HW1 = 10,
R_TILEGX_HW2 = 11,
R_TILEGX_HW3 = 12,
R_TILEGX_HW0_LAST = 13,
R_TILEGX_HW1_LAST = 14,
R_TILEGX_HW2_LAST = 15,
R_TILEGX_COPY = 16,
R_TILEGX_GLOB_DAT = 17,
R_TILEGX_JMP_SLOT = 18,
R_TILEGX_RELATIVE = 19,
R_TILEGX_BROFF_X1 = 20,
R_TILEGX_JUMPOFF_X1 = 21,
R_TILEGX_JUMPOFF_X1_PLT = 22,
R_TILEGX_IMM8_X0 = 23,
R_TILEGX_IMM8_Y0 = 24,
R_TILEGX_IMM8_X1 = 25,
R_TILEGX_IMM8_Y1 = 26,
R_TILEGX_DEST_IMM8_X1 = 27,
R_TILEGX_MT_IMM14_X1 = 28,
R_TILEGX_MF_IMM14_X1 = 29,
R_TILEGX_MMSTART_X0 = 30,
R_TILEGX_MMEND_X0 = 31,
R_TILEGX_SHAMT_X0 = 32,
R_TILEGX_SHAMT_X1 = 33,
R_TILEGX_SHAMT_Y0 = 34,
R_TILEGX_SHAMT_Y1 = 35,
R_TILEGX_IMM16_X0_HW0 = 36,
R_TILEGX_IMM16_X1_HW0 = 37,
R_TILEGX_IMM16_X0_HW1 = 38,
R_TILEGX_IMM16_X1_HW1 = 39,
R_TILEGX_IMM16_X0_HW2 = 40,
R_TILEGX_IMM16_X1_HW2 = 41,
R_TILEGX_IMM16_X0_HW3 = 42,
R_TILEGX_IMM16_X1_HW3 = 43,
R_TILEGX_IMM16_X0_HW0_LAST = 44,
R_TILEGX_IMM16_X1_HW0_LAST = 45,
R_TILEGX_IMM16_X0_HW1_LAST = 46,
R_TILEGX_IMM16_X1_HW1_LAST = 47,
R_TILEGX_IMM16_X0_HW2_LAST = 48,
R_TILEGX_IMM16_X1_HW2_LAST = 49,
R_TILEGX_IMM16_X0_HW0_PCREL = 50,
R_TILEGX_IMM16_X1_HW0_PCREL = 51,
R_TILEGX_IMM16_X0_HW1_PCREL = 52,
R_TILEGX_IMM16_X1_HW1_PCREL = 53,
R_TILEGX_IMM16_X0_HW2_PCREL = 54,
R_TILEGX_IMM16_X1_HW2_PCREL = 55,
R_TILEGX_IMM16_X0_HW3_PCREL = 56,
R_TILEGX_IMM16_X1_HW3_PCREL = 57,
R_TILEGX_IMM16_X0_HW0_LAST_PCREL = 58,
R_TILEGX_IMM16_X1_HW0_LAST_PCREL = 59,
R_TILEGX_IMM16_X0_HW1_LAST_PCREL = 60,
R_TILEGX_IMM16_X1_HW1_LAST_PCREL = 61,
R_TILEGX_IMM16_X0_HW2_LAST_PCREL = 62,
R_TILEGX_IMM16_X1_HW2_LAST_PCREL = 63,
R_TILEGX_IMM16_X0_HW0_GOT = 64,
R_TILEGX_IMM16_X1_HW0_GOT = 65,
R_TILEGX_IMM16_X0_HW0_PLT_PCREL = 66,
R_TILEGX_IMM16_X1_HW0_PLT_PCREL = 67,
R_TILEGX_IMM16_X0_HW1_PLT_PCREL = 68,
R_TILEGX_IMM16_X1_HW1_PLT_PCREL = 69,
R_TILEGX_IMM16_X0_HW2_PLT_PCREL = 70,
R_TILEGX_IMM16_X1_HW2_PLT_PCREL = 71,
R_TILEGX_IMM16_X0_HW0_LAST_GOT = 72,
R_TILEGX_IMM16_X1_HW0_LAST_GOT = 73,
R_TILEGX_IMM16_X0_HW1_LAST_GOT = 74,
R_TILEGX_IMM16_X1_HW1_LAST_GOT = 75,
R_TILEGX_IMM16_X0_HW3_PLT_PCREL = 76,
R_TILEGX_IMM16_X1_HW3_PLT_PCREL = 77,
R_TILEGX_IMM16_X0_HW0_TLS_GD = 78,
R_TILEGX_IMM16_X1_HW0_TLS_GD = 79,
R_TILEGX_IMM16_X0_HW0_TLS_LE = 80,
R_TILEGX_IMM16_X1_HW0_TLS_LE = 81,
R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE = 82,
R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE = 83,
R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE = 84,
R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE = 85,
R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD = 86,
R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD = 87,
R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD = 88,
R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD = 89,
R_TILEGX_IMM16_X0_HW0_TLS_IE = 92,
R_TILEGX_IMM16_X1_HW0_TLS_IE = 93,
R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL = 94,
R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL = 95,
R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL = 96,
R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL = 97,
R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL = 98,
R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL = 99,
R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE = 100,
R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE = 101,
R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE = 102,
R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE = 103,
R_TILEGX_TLS_DTPMOD64 = 106,
R_TILEGX_TLS_DTPOFF64 = 107,
R_TILEGX_TLS_TPOFF64 = 108,
R_TILEGX_TLS_DTPMOD32 = 109,
R_TILEGX_TLS_DTPOFF32 = 110,
R_TILEGX_TLS_TPOFF32 = 111,
R_TILEGX_TLS_GD_CALL = 112,
R_TILEGX_IMM8_X0_TLS_GD_ADD = 113,
R_TILEGX_IMM8_X1_TLS_GD_ADD = 114,
R_TILEGX_IMM8_Y0_TLS_GD_ADD = 115,
R_TILEGX_IMM8_Y1_TLS_GD_ADD = 116,
R_TILEGX_TLS_IE_LOAD = 117,
R_TILEGX_IMM8_X0_TLS_ADD = 118,
R_TILEGX_IMM8_X1_TLS_ADD = 119,
R_TILEGX_IMM8_Y0_TLS_ADD = 120,
R_TILEGX_IMM8_Y1_TLS_ADD = 121,
R_TILEGX_GNU_VTINHERIT = 128,
R_TILEGX_GNU_VTENTRY = 129,
};
}
names! {
struct Riscv(Base);
flags ef: FileFlags(u32) = {
EF_RISCV_RVC = 0x0001,
EF_RISCV_FLOAT_ABI = 0x0006 => NAMES_EF_RISCV_FLOAT_ABI,
EF_RISCV_RVE = 0x0008,
EF_RISCV_TSO = 0x0010,
EF_RISCV_RV64ILP32 = 0x0020,
};
flags sto: SymbolOther(u8) = {
STO_RISCV_VARIANT_CC = 0x80,
};
consts sht: SectionType(u32) = {
SHT_RISCV_ATTRIBUTES = SHT_LOPROC + 3,
};
consts pt: ProgramType(u32) = {
PT_RISCV_ATTRIBUTES = PT_LOPROC + 3,
};
consts dt: DynamicTag(i64) = {
DT_RISCV_VARIANT_CC = DT_LOPROC + 1,
};
consts r = pub NAMES_R_RISCV: RelocationType(u32) = {
R_RISCV_NONE = 0,
R_RISCV_32 = 1,
R_RISCV_64 = 2,
R_RISCV_RELATIVE = 3,
R_RISCV_COPY = 4,
R_RISCV_JUMP_SLOT = 5,
R_RISCV_TLS_DTPMOD32 = 6,
R_RISCV_TLS_DTPMOD64 = 7,
R_RISCV_TLS_DTPREL32 = 8,
R_RISCV_TLS_DTPREL64 = 9,
R_RISCV_TLS_TPREL32 = 10,
R_RISCV_TLS_TPREL64 = 11,
R_RISCV_TLSDESC = 12,
R_RISCV_BRANCH = 16,
R_RISCV_JAL = 17,
R_RISCV_CALL = 18,
R_RISCV_CALL_PLT = 19,
R_RISCV_GOT_HI20 = 20,
R_RISCV_TLS_GOT_HI20 = 21,
R_RISCV_TLS_GD_HI20 = 22,
R_RISCV_PCREL_HI20 = 23,
R_RISCV_PCREL_LO12_I = 24,
R_RISCV_PCREL_LO12_S = 25,
R_RISCV_HI20 = 26,
R_RISCV_LO12_I = 27,
R_RISCV_LO12_S = 28,
R_RISCV_TPREL_HI20 = 29,
R_RISCV_TPREL_LO12_I = 30,
R_RISCV_TPREL_LO12_S = 31,
R_RISCV_TPREL_ADD = 32,
R_RISCV_ADD8 = 33,
R_RISCV_ADD16 = 34,
R_RISCV_ADD32 = 35,
R_RISCV_ADD64 = 36,
R_RISCV_SUB8 = 37,
R_RISCV_SUB16 = 38,
R_RISCV_SUB32 = 39,
R_RISCV_SUB64 = 40,
R_RISCV_GOT32_PCREL = 41,
R_RISCV_ALIGN = 43,
R_RISCV_RVC_BRANCH = 44,
R_RISCV_RVC_JUMP = 45,
R_RISCV_RVC_LUI = 46,
R_RISCV_GPREL_I = 47,
R_RISCV_GPREL_S = 48,
R_RISCV_TPREL_I = 49,
R_RISCV_TPREL_S = 50,
R_RISCV_RELAX = 51,
R_RISCV_SUB6 = 52,
R_RISCV_SET6 = 53,
R_RISCV_SET8 = 54,
R_RISCV_SET16 = 55,
R_RISCV_SET32 = 56,
R_RISCV_32_PCREL = 57,
R_RISCV_IRELATIVE = 58,
R_RISCV_PLT32 = 59,
R_RISCV_SET_ULEB128 = 60,
R_RISCV_SUB_ULEB128 = 61,
R_RISCV_TLSDESC_HI20 = 62,
R_RISCV_TLSDESC_LOAD_LO12 = 63,
R_RISCV_TLSDESC_ADD_LO12 = 64,
R_RISCV_TLSDESC_CALL = 65,
};
}
constant_names!(NAMES_EF_RISCV_FLOAT_ABI: FileFlags(u32) = {
EF_RISCV_FLOAT_ABI_SOFT = 0x0000,
EF_RISCV_FLOAT_ABI_SINGLE = 0x0002,
EF_RISCV_FLOAT_ABI_DOUBLE = 0x0004,
EF_RISCV_FLOAT_ABI_QUAD = 0x0006,
});
names! {
struct Bpf(Base);
consts r = pub NAMES_R_BPF: RelocationType(u32) = {
R_BPF_NONE = 0,
R_BPF_64_64 = 1,
R_BPF_64_32 = 10,
};
}
names! {
struct Sbf(Base);
consts r = pub NAMES_R_SBF: RelocationType(u32) = {
R_SBF_NONE = 0,
R_SBF_64_64 = 1,
R_SBF_64_32 = 10,
};
}
names! {
struct Metag(Base);
consts r = pub NAMES_R_METAG: RelocationType(u32) = {
R_METAG_HIADDR16 = 0,
R_METAG_LOADDR16 = 1,
R_METAG_ADDR32 = 2,
R_METAG_NONE = 3,
R_METAG_RELBRANCH = 4,
R_METAG_GETSETOFF = 5,
R_METAG_REG32OP1 = 6,
R_METAG_REG32OP2 = 7,
R_METAG_REG32OP3 = 8,
R_METAG_REG16OP1 = 9,
R_METAG_REG16OP2 = 10,
R_METAG_REG16OP3 = 11,
R_METAG_REG32OP4 = 12,
R_METAG_HIOG = 13,
R_METAG_LOOG = 14,
R_METAG_REL8 = 15,
R_METAG_REL16 = 16,
R_METAG_GNU_VTINHERIT = 30,
R_METAG_GNU_VTENTRY = 31,
R_METAG_HI16_GOTOFF = 32,
R_METAG_LO16_GOTOFF = 33,
R_METAG_GETSET_GOTOFF = 34,
R_METAG_GETSET_GOT = 35,
R_METAG_HI16_GOTPC = 36,
R_METAG_LO16_GOTPC = 37,
R_METAG_HI16_PLT = 38,
R_METAG_LO16_PLT = 39,
R_METAG_RELBRANCH_PLT = 40,
R_METAG_GOTOFF = 41,
R_METAG_PLT = 42,
R_METAG_COPY = 43,
R_METAG_JMP_SLOT = 44,
R_METAG_RELATIVE = 45,
R_METAG_GLOB_DAT = 46,
R_METAG_TLS_GD = 47,
R_METAG_TLS_LDM = 48,
R_METAG_TLS_LDO_HI16 = 49,
R_METAG_TLS_LDO_LO16 = 50,
R_METAG_TLS_LDO = 51,
R_METAG_TLS_IE = 52,
R_METAG_TLS_IENONPIC = 53,
R_METAG_TLS_IENONPIC_HI16 = 54,
R_METAG_TLS_IENONPIC_LO16 = 55,
R_METAG_TLS_TPOFF = 56,
R_METAG_TLS_DTPMOD = 57,
R_METAG_TLS_DTPOFF = 58,
R_METAG_TLS_LE = 59,
R_METAG_TLS_LE_HI16 = 60,
R_METAG_TLS_LE_LO16 = 61,
};
}
names! {
struct Nds32(Base);
consts r = pub NAMES_R_NDS32: RelocationType(u32) = {
R_NDS32_NONE = 0,
R_NDS32_32_RELA = 20,
R_NDS32_COPY = 39,
R_NDS32_GLOB_DAT = 40,
R_NDS32_JMP_SLOT = 41,
R_NDS32_RELATIVE = 42,
R_NDS32_TLS_TPOFF = 102,
R_NDS32_TLS_DESC = 119,
};
}
names! {
struct Larch(Base);
flags ef: FileFlags(u32) = {
EF_LARCH_ABI_MODIFIER_MASK = 0x7 => NAMES_EF_LARCH_ABI,
EF_LARCH_OBJABI_V1 = 0x40,
};
consts r = pub NAMES_R_LARCH: RelocationType(u32) = {
R_LARCH_NONE = 0,
R_LARCH_32 = 1,
R_LARCH_64 = 2,
R_LARCH_RELATIVE = 3,
R_LARCH_COPY = 4,
R_LARCH_JUMP_SLOT = 5,
R_LARCH_TLS_DTPMOD32 = 6,
R_LARCH_TLS_DTPMOD64 = 7,
R_LARCH_TLS_DTPREL32 = 8,
R_LARCH_TLS_DTPREL64 = 9,
R_LARCH_TLS_TPREL32 = 10,
R_LARCH_TLS_TPREL64 = 11,
R_LARCH_IRELATIVE = 12,
R_LARCH_TLS_DESC32 = 13,
R_LARCH_TLS_DESC64 = 14,
R_LARCH_MARK_LA = 20,
R_LARCH_MARK_PCREL = 21,
R_LARCH_SOP_PUSH_PCREL = 22,
R_LARCH_SOP_PUSH_ABSOLUTE = 23,
R_LARCH_SOP_PUSH_DUP = 24,
R_LARCH_SOP_PUSH_GPREL = 25,
R_LARCH_SOP_PUSH_TLS_TPREL = 26,
R_LARCH_SOP_PUSH_TLS_GOT = 27,
R_LARCH_SOP_PUSH_TLS_GD = 28,
R_LARCH_SOP_PUSH_PLT_PCREL = 29,
R_LARCH_SOP_ASSERT = 30,
R_LARCH_SOP_NOT = 31,
R_LARCH_SOP_SUB = 32,
R_LARCH_SOP_SL = 33,
R_LARCH_SOP_SR = 34,
R_LARCH_SOP_ADD = 35,
R_LARCH_SOP_AND = 36,
R_LARCH_SOP_IF_ELSE = 37,
R_LARCH_SOP_POP_32_S_10_5 = 38,
R_LARCH_SOP_POP_32_U_10_12 = 39,
R_LARCH_SOP_POP_32_S_10_12 = 40,
R_LARCH_SOP_POP_32_S_10_16 = 41,
R_LARCH_SOP_POP_32_S_10_16_S2 = 42,
R_LARCH_SOP_POP_32_S_5_20 = 43,
R_LARCH_SOP_POP_32_S_0_5_10_16_S2 = 44,
R_LARCH_SOP_POP_32_S_0_10_10_16_S2 = 45,
R_LARCH_SOP_POP_32_U = 46,
R_LARCH_ADD8 = 47,
R_LARCH_ADD16 = 48,
R_LARCH_ADD24 = 49,
R_LARCH_ADD32 = 50,
R_LARCH_ADD64 = 51,
R_LARCH_SUB8 = 52,
R_LARCH_SUB16 = 53,
R_LARCH_SUB24 = 54,
R_LARCH_SUB32 = 55,
R_LARCH_SUB64 = 56,
R_LARCH_GNU_VTINHERIT = 57,
R_LARCH_GNU_VTENTRY = 58,
R_LARCH_B16 = 64,
R_LARCH_B21 = 65,
R_LARCH_B26 = 66,
R_LARCH_ABS_HI20 = 67,
R_LARCH_ABS_LO12 = 68,
R_LARCH_ABS64_LO20 = 69,
R_LARCH_ABS64_HI12 = 70,
R_LARCH_PCALA_HI20 = 71,
R_LARCH_PCALA_LO12 = 72,
R_LARCH_PCALA64_LO20 = 73,
R_LARCH_PCALA64_HI12 = 74,
R_LARCH_GOT_PC_HI20 = 75,
R_LARCH_GOT_PC_LO12 = 76,
R_LARCH_GOT64_PC_LO20 = 77,
R_LARCH_GOT64_PC_HI12 = 78,
R_LARCH_GOT_HI20 = 79,
R_LARCH_GOT_LO12 = 80,
R_LARCH_GOT64_LO20 = 81,
R_LARCH_GOT64_HI12 = 82,
R_LARCH_TLS_LE_HI20 = 83,
R_LARCH_TLS_LE_LO12 = 84,
R_LARCH_TLS_LE64_LO20 = 85,
R_LARCH_TLS_LE64_HI12 = 86,
R_LARCH_TLS_IE_PC_HI20 = 87,
R_LARCH_TLS_IE_PC_LO12 = 88,
R_LARCH_TLS_IE64_PC_LO20 = 89,
R_LARCH_TLS_IE64_PC_HI12 = 90,
R_LARCH_TLS_IE_HI20 = 91,
R_LARCH_TLS_IE_LO12 = 92,
R_LARCH_TLS_IE64_LO20 = 93,
R_LARCH_TLS_IE64_HI12 = 94,
R_LARCH_TLS_LD_PC_HI20 = 95,
R_LARCH_TLS_LD_HI20 = 96,
R_LARCH_TLS_GD_PC_HI20 = 97,
R_LARCH_TLS_GD_HI20 = 98,
R_LARCH_32_PCREL = 99,
R_LARCH_RELAX = 100,
R_LARCH_DELETE = 101,
R_LARCH_ALIGN = 102,
R_LARCH_PCREL20_S2 = 103,
R_LARCH_CFA = 104,
R_LARCH_ADD6 = 105,
R_LARCH_SUB6 = 106,
R_LARCH_ADD_ULEB128 = 107,
R_LARCH_SUB_ULEB128 = 108,
R_LARCH_64_PCREL = 109,
R_LARCH_CALL36 = 110,
R_LARCH_TLS_DESC_PC_HI20 = 111,
R_LARCH_TLS_DESC_PC_LO12 = 112,
R_LARCH_TLS_DESC64_PC_LO20 = 113,
R_LARCH_TLS_DESC64_PC_HI12 = 114,
R_LARCH_TLS_DESC_HI20 = 115,
R_LARCH_TLS_DESC_LO12 = 116,
R_LARCH_TLS_DESC64_LO20 = 117,
R_LARCH_TLS_DESC64_HI12 = 118,
R_LARCH_TLS_DESC_LD = 119,
R_LARCH_TLS_DESC_CALL = 120,
R_LARCH_TLS_LE_HI20_R = 121,
R_LARCH_TLS_LE_ADD_R = 122,
R_LARCH_TLS_LE_LO12_R = 123,
R_LARCH_TLS_LD_PCREL20_S2 = 124,
R_LARCH_TLS_GD_PCREL20_S2 = 125,
R_LARCH_TLS_DESC_PCREL20_S2 = 126,
R_LARCH_CALL30 = 127,
R_LARCH_PCADD_HI20 = 128,
R_LARCH_PCADD_LO12 = 129,
R_LARCH_GOT_PCADD_HI20 = 130,
R_LARCH_GOT_PCADD_LO12 = 131,
R_LARCH_TLS_IE_PCADD_HI20 = 132,
R_LARCH_TLS_IE_PCADD_LO12 = 133,
R_LARCH_TLS_LD_PCADD_HI20 = 134,
R_LARCH_TLS_LD_PCADD_LO12 = 135,
R_LARCH_TLS_GD_PCADD_HI20 = 136,
R_LARCH_TLS_GD_PCADD_LO12 = 137,
R_LARCH_TLS_DESC_PCADD_HI20 = 138,
R_LARCH_TLS_DESC_PCADD_LO12 = 139,
};
}
constant_names!(NAMES_EF_LARCH_ABI: FileFlags(u32) = {
EF_LARCH_ABI_SOFT_FLOAT = 0x1,
EF_LARCH_ABI_SINGLE_FLOAT = 0x2,
EF_LARCH_ABI_DOUBLE_FLOAT = 0x3,
});
names! {
struct Xtensa(Base);
consts r = pub NAMES_R_XTENSA: RelocationType(u32) = {
R_XTENSA_NONE = 0,
R_XTENSA_32 = 1,
R_XTENSA_RTLD = 2,
R_XTENSA_GLOB_DAT = 3,
R_XTENSA_JMP_SLOT = 4,
R_XTENSA_RELATIVE = 5,
R_XTENSA_PLT = 6,
R_XTENSA_OP0 = 8,
R_XTENSA_OP1 = 9,
R_XTENSA_OP2 = 10,
R_XTENSA_ASM_EXPAND = 11,
R_XTENSA_ASM_SIMPLIFY = 12,
R_XTENSA_32_PCREL = 14,
R_XTENSA_GNU_VTINHERIT = 15,
R_XTENSA_GNU_VTENTRY = 16,
R_XTENSA_DIFF8 = 17,
R_XTENSA_DIFF16 = 18,
R_XTENSA_DIFF32 = 19,
R_XTENSA_SLOT0_OP = 20,
R_XTENSA_SLOT1_OP = 21,
R_XTENSA_SLOT2_OP = 22,
R_XTENSA_SLOT3_OP = 23,
R_XTENSA_SLOT4_OP = 24,
R_XTENSA_SLOT5_OP = 25,
R_XTENSA_SLOT6_OP = 26,
R_XTENSA_SLOT7_OP = 27,
R_XTENSA_SLOT8_OP = 28,
R_XTENSA_SLOT9_OP = 29,
R_XTENSA_SLOT10_OP = 30,
R_XTENSA_SLOT11_OP = 31,
R_XTENSA_SLOT12_OP = 32,
R_XTENSA_SLOT13_OP = 33,
R_XTENSA_SLOT14_OP = 34,
R_XTENSA_SLOT0_ALT = 35,
R_XTENSA_SLOT1_ALT = 36,
R_XTENSA_SLOT2_ALT = 37,
R_XTENSA_SLOT3_ALT = 38,
R_XTENSA_SLOT4_ALT = 39,
R_XTENSA_SLOT5_ALT = 40,
R_XTENSA_SLOT6_ALT = 41,
R_XTENSA_SLOT7_ALT = 42,
R_XTENSA_SLOT8_ALT = 43,
R_XTENSA_SLOT9_ALT = 44,
R_XTENSA_SLOT10_ALT = 45,
R_XTENSA_SLOT11_ALT = 46,
R_XTENSA_SLOT12_ALT = 47,
R_XTENSA_SLOT13_ALT = 48,
R_XTENSA_SLOT14_ALT = 49,
R_XTENSA_TLSDESC_FN = 50,
R_XTENSA_TLSDESC_ARG = 51,
R_XTENSA_TLS_DTPOFF = 52,
R_XTENSA_TLS_TPOFF = 53,
R_XTENSA_TLS_FUNC = 54,
R_XTENSA_TLS_ARG = 55,
R_XTENSA_TLS_CALL = 56,
R_XTENSA_PDIFF8 = 57,
R_XTENSA_PDIFF16 = 58,
R_XTENSA_PDIFF32 = 59,
R_XTENSA_NDIFF8 = 60,
R_XTENSA_NDIFF16 = 61,
R_XTENSA_NDIFF32 = 62,
};
}
pub const fn ef_e2k_mach_to_flag(e_flags: u32, x: u32) -> u32 {
(e_flags & 0xffffff) | (x << 24)
}
pub const fn ef_e2k_flag_to_mach(e_flags: u32) -> u32 {
e_flags >> 24
}
pub const E_E2K_MACH_BASE: u32 = 0;
pub const E_E2K_MACH_EV1: u32 = 1;
pub const E_E2K_MACH_EV2: u32 = 2;
pub const E_E2K_MACH_EV3: u32 = 3;
pub const E_E2K_MACH_EV4: u32 = 4;
pub const E_E2K_MACH_EV5: u32 = 5;
pub const E_E2K_MACH_EV6: u32 = 6;
pub const E_E2K_MACH_EV7: u32 = 7;
pub const E_E2K_MACH_8C: u32 = 19;
pub const E_E2K_MACH_1CPLUS: u32 = 20;
pub const E_E2K_MACH_12C: u32 = 21;
pub const E_E2K_MACH_16C: u32 = 22;
pub const E_E2K_MACH_2C3: u32 = 23;
pub const E_E2K_MACH_48C: u32 = 24;
pub const E_E2K_MACH_8V7: u32 = 25;
names! {
struct E2k(Base);
flags ef: FileFlags(u32) = {
EF_E2K_IPD = 3,
EF_E2K_X86APP = 4,
EF_E2K_4MB_PAGES = 8,
EF_E2K_INCOMPAT = 16,
EF_E2K_PM = 32,
EF_E2K_PACK_SEGMENTS = 64,
};
consts r = pub NAMES_R_E2K: RelocationType(u32) = {
R_E2K_32_ABS = 0,
R_E2K_32_PC = 2,
R_E2K_AP_GOT = 3,
R_E2K_PL_GOT = 4,
R_E2K_32_JMP_SLOT = 8,
R_E2K_32_COPY = 9,
R_E2K_32_RELATIVE = 10,
R_E2K_32_IRELATIVE = 11,
R_E2K_32_SIZE = 12,
R_E2K_32_DYNOPT = 13,
R_E2K_64_ABS = 50,
R_E2K_64_ABS_LIT = 51,
R_E2K_64_PC_LIT = 54,
R_E2K_64_JMP_SLOT = 63,
R_E2K_64_COPY = 64,
R_E2K_64_RELATIVE = 65,
R_E2K_64_RELATIVE_LIT = 66,
R_E2K_64_IRELATIVE = 67,
R_E2K_64_SIZE = 68,
R_E2K_64_GOTOFF = 69,
R_E2K_TLS_GDMOD = 70,
R_E2K_TLS_GDREL = 71,
R_E2K_TLS_IE = 74,
R_E2K_32_TLS_LE = 75,
R_E2K_64_TLS_LE = 76,
R_E2K_TLS_32_DTPMOD = 80,
R_E2K_TLS_32_DTPREL = 81,
R_E2K_TLS_64_DTPMOD = 82,
R_E2K_TLS_64_DTPREL = 83,
R_E2K_TLS_32_TPREL = 84,
R_E2K_TLS_64_TPREL = 85,
R_E2K_AP = 100,
R_E2K_PL = 101,
R_E2K_GOT = 108,
R_E2K_GOTOFF = 109,
R_E2K_DISP = 110,
R_E2K_PREF = 111,
R_E2K_NONE = 112,
R_E2K_GOTPLT = 114,
R_E2K_ISLOCAL = 115,
R_E2K_ISLOCAL32 = 118,
R_E2K_64_GOTOFF_LIT = 256,
R_E2K_64_DYNOPT = 257,
R_E2K_64_PC = 258,
};
consts dt: DynamicTag(i64) = {
DT_E2K_LAZY = DT_LOPROC + 1,
DT_E2K_LAZY_GOT = DT_LOPROC + 3,
DT_E2K_INIT_GOT = DT_LOPROC + 0x101c,
DT_E2K_EXPORT_PL = DT_LOPROC + 0x101d,
DT_E2K_EXPORT_PLSZ = DT_LOPROC + 0x101e,
DT_E2K_REAL_PLTGOT = DT_LOPROC + 0x101f,
DT_E2K_NO_SELFINIT = DT_LOPROC + 0x1020,
};
}
pub const DT_E2K_NUM: i64 = 0x1021;
newtype!(
struct AttributeTag(u8);
);
newtype_constant_names!(NAMES_TAG: AttributeTag(u8) = {
#[allow(non_upper_case_globals)]
Tag_File = 1,
#[allow(non_upper_case_globals)]
Tag_Section = 2,
#[allow(non_upper_case_globals)]
Tag_Symbol = 3,
});
unsafe_impl_endian_pod!(
FileHeader32,
FileHeader64,
SectionHeader32,
SectionHeader64,
CompressionHeader32,
CompressionHeader64,
Sym32,
Sym64,
Syminfo32,
Syminfo64,
Rel32,
Rel64,
Rela32,
Rela64,
Relr32,
Relr64,
ProgramHeader32,
ProgramHeader64,
Dyn32,
Dyn64,
Versym,
Verdef,
Verdaux,
Verneed,
Vernaux,
NoteHeader32,
NoteHeader64,
HashHeader,
GnuHashHeader,
);