Files
mikpe.pdp10-tools/erlang/apps/lib/include/pdp10_elf36.hrl

1426 lines
67 KiB
Erlang

%%% -*- erlang-indent-level: 2 -*-
%%%
%%% pdp10_elf36.hrl -- ELF definitions for PDP10
%%% Copyright (C) 2013-2019 Mikael Pettersson
%%%
%%% This file is part of pdp10-tools.
%%%
%%% pdp10-tools is free software: you can redistribute it and/or modify
%%% it under the terms of the GNU General Public License as published by
%%% the Free Software Foundation, either version 3 of the License, or
%%% (at your option) any later version.
%%%
%%% pdp10-tools is distributed in the hope that it will be useful,
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%%% GNU General Public License for more details.
%%%
%%% You should have received a copy of the GNU General Public License
%%% along with pdp10-tools. If not, see <http://www.gnu.org/licenses/>.
%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
%%% This is essentially the standard Elf32 declarations with 8/16/32-bit
%%% primitive types replaced by 9/18/36-bit primitive types, and Elf32
%%% replaced by elf36.
-ifndef(PDP10_ELF36_HRL).
-define(PDP10_ELF36_HRL, 1).
-include("pdp10_stdint.hrl").
-type elf36_Addr() :: uint36_t().
-type elf36_Half() :: uint18_t().
-type elf36_Off() :: uint36_t().
-type elf36_Sword() :: int36_t().
-type elf36_Uchar() :: uint9_t().
-type elf36_Word() :: uint36_t().
%% ELF Header
-define(EI_NIDENT, 16).
-record(elf36_Ehdr,
{ e_ident :: [elf36_Uchar()] % ELF magic, ?EI_NIDENT elements
, e_type :: elf36_Half() % Identifies object file type
, e_machine :: elf36_Half() % Specifies required architecture
, e_version :: elf36_Word() % Identifies object file version
, e_entry :: elf36_Addr() % Entry point virtual address
, e_phoff :: elf36_Off() % Program header table file offset
, e_shoff :: elf36_Off() % Section header table file offset
, e_flags :: elf36_Word() % Processor-specific flags
, e_ehsize :: elf36_Half() % ELF header size in bytes
, e_phentsize :: elf36_Half() % Program header table entry size
, e_phnum :: elf36_Half() % Program header table entry count
, e_shentsize :: elf36_Half() % Section header table entry size
, e_shnum :: elf36_Half() % Section header table entry count
, e_shstrndx :: elf36_Half() % Section header string table index
}).
-define(ELF36_EHDR_SIZEOF, (8 * 2 + 5 * 4 + ?EI_NIDENT)).
%% e_ident[] identification indexes
-define(EI_MAG0, 0). % File identification byte 0 index
-define(EI_MAG1, 1). % File identification byte 1 index
-define(EI_MAG2, 2). % File identification byte 2 index
-define(EI_MAG3, 3). % File identification byte 3 index
-define(EI_CLASS, 4). % File class
-define(EI_DATA, 5). % Data encoding
-define(EI_VERSION, 6). % File version
-define(EI_OSABI, 7). % Operating System/ABI indication
-define(EI_ABIVERSION, 8). % ABI version
-define(EI_PAD, 9). % Start of padding bytes
-define(ELFMAG0, 16#7F). % Magic number byte 0
-define(ELFMAG1, $E). % Magic number byte 1
-define(ELFMAG2, $L). % Magic number byte 2
-define(ELFMAG3, $F). % Magic number byte 3
-define(ELFCLASSNONE, 0). % Invalid class
-define(ELFCLASS32, 1). % 32-bit objects
-define(ELFCLASS64, 2). % 64-bit objects
-define(ELFCLASS36, 36). % 36-bit objects (Elf36 extension)
-define(ELFDATANONE, 0). % Invalid data encoding
-define(ELFDATA2LSB, 1). % 2's complement, little endian
-define(ELFDATA2MSB, 2). % 2's complement, big endian
-define(ELFOSABI_NONE, 0). % UNIX System V ABI
-define(ELFOSABI_HPUX, 1). % HP-UX operating system
-define(ELFOSABI_NETBSD, 2). % NetBSD
-define(ELFOSABI_GNU, 3). % GNU
-define(ELFOSABI_LINUX, 3). % Alias for ELFOSABI_GNU
-define(ELFOSABI_SOLARIS, 6). % Solaris
-define(ELFOSABI_AIX, 7). % AIX
-define(ELFOSABI_IRIX, 8). % IRIX
-define(ELFOSABI_FREEBSD, 9). % FreeBSD
-define(ELFOSABI_TRU64, 10). % TRU64 UNIX
-define(ELFOSABI_MODESTO, 11). % Novell Modesto
-define(ELFOSABI_OPENBSD, 12). % OpenBSD
-define(ELFOSABI_OPENVMS, 13). % OpenVMS
-define(ELFOSABI_NSK, 14). % Hewlett-Packard Non-Stop Kernel
-define(ELFOSABI_AROS, 15). % AROS
-define(ELFOSABI_FENIXOS, 16). % FenixOS
-define(ELFOSABI_CLOUDABI, 17). % Nuxi CloudABI
-define(ELFOSABI_OPENVOS, 18). % Stratus Technologies OpenVOS
-define(ELFOSABI_C6000_ELFABI, 64). % Bare-metal TMS320C6000
-define(ELFOSABI_C6000_LINUX, 65). % Linux TMS320C6000
-define(ELFOSABI_ARM_FDPIC, 65). % ARM FDPIC
-define(ELFOSABI_ARM, 97). % ARM
-define(ELFOSABI_STANDALONE, 255). % Standalone (embedded) application
%% Values for e_type, which identifies the object file type.
-define(ET_NONE, 0). % No file type
-define(ET_REL, 1). % Relocatable file
-define(ET_EXEC, 2). % Executable file
-define(ET_DYN, 3). % Shared object file
-define(ET_CORE, 4). % Core file
-define(ET_LOOS, 16#FE00). % Operating system-specific
-define(ET_HIOS, 16#FEFF). % Operating system-specific
-define(ET_LOPROC, 16#FF00). % Processor-specific
-define(ET_HIPROC, 16#FFFF). % Processor-specific
%% Values for e_machine, which identifies the architecture. These numbers
%% are officially assigned by registry@sco.com. See below for a list of
%% ad-hoc numbers used during initial development.
-define(EM_NONE, 0). % No machine
-define(EM_M32, 1). % AT&T WE 32100
-define(EM_SPARC, 2). % SUN SPARC
-define(EM_386, 3). % Intel 80386
-define(EM_68K, 4). % Motorola m68k family
-define(EM_88K, 5). % Motorola m88k family
-define(EM_IAMCU, 6). % Intel MCU (was: Intel 80486)
-define(EM_860, 7). % Intel 80860
-define(EM_MIPS, 8). % MIPS R3000 (officially, big-endian only)
-define(EM_S370, 9). % IBM System/370
-define(EM_MIPS_RS3_LE, 10). % MIPS R3000 little-endian (Oct 4 1999 Draft). Deprecated.
-define(EM_OLD_SPARCV9, 11). % Old version of Sparc v9, from before the ABI. Deprecated.
-define(EM_res011, 11). % Reserved
-define(EM_res012, 12). % Reserved
-define(EM_res013, 13). % Reserved
-define(EM_res014, 14). % Reserved
-define(EM_PARISC, 15). % HPPA
-define(EM_res016, 16). % Reserved
-define(EM_PPC_OLD, 17). % Old version of PowerPC. Deprecated.
-define(EM_VPP550, 17). % Fujitsu VPP500
-define(EM_SPARC32PLUS, 18). % Sun's "v8plus"
-define(EM_960, 19). % Intel 80960
-define(EM_PPC, 20). % PowerPC
-define(EM_PPC64, 21). % 64-bit PowerPC
-define(EM_S390, 22). % IBM S/390
-define(EM_SPU, 23). % Sony/Toshiba/IBM SPU
-define(EM_res024, 24). % Reserved
-define(EM_res025, 25). % Reserved
-define(EM_res026, 26). % Reserved
-define(EM_res027, 27). % Reserved
-define(EM_res028, 28). % Reserved
-define(EM_res029, 29). % Reserved
-define(EM_res030, 30). % Reserved
-define(EM_res031, 31). % Reserved
-define(EM_res032, 32). % Reserved
-define(EM_res033, 33). % Reserved
-define(EM_res034, 34). % Reserved
-define(EM_res035, 35). % Reserved
-define(EM_V800, 36). % NEC V800 series
-define(EM_FR20, 37). % Fujitsu FR20
-define(EM_RH32, 38). % TRW RH32
-define(EM_MCORE, 39). % Motorola M*Core (May also be taken by Fujitsu MMA)
-define(EM_RCE, 39). % Old name for MCore
-define(EM_ARM, 40). % ARM
-define(EM_OLD_ALPHA, 41). % Digital Alpha
-define(EM_SH, 42). % Renesas (formerly Hitachi) / SuperH SH
-define(EM_SPARCV9, 43). % SPARC v9 64-bit
-define(EM_TRICORE, 44). % Siemens Tricore embedded processor
-define(EM_ARC, 45). % ARC Cores
-define(EM_H8_300, 46). % Renesas (formerly Hitachi) H8/300
-define(EM_H8_300H, 47). % Renesas (formerly Hitachi) H8/300H
-define(EM_H8S, 48). % Renesas (formerly Hitachi) H8S
-define(EM_H8_500, 49). % Renesas (formerly Hitachi) H8/500
-define(EM_IA_64, 50). % Intel IA-64 Processor
-define(EM_MIPS_X, 51). % Stanford MIPS-X
-define(EM_COLDFIRE, 52). % Motorola Coldfire
-define(EM_68HC12, 53). % Motorola M68HC12
-define(EM_MMA, 54). % Fujitsu Multimedia Accelerator
-define(EM_PCP, 55). % Siemens PCP
-define(EM_NCPU, 56). % Sony nCPU embedded RISC processor
-define(EM_NDR1, 57). % Denso NDR1 microprocessor
-define(EM_STARCORE, 58). % Motorola Star*Core processor
-define(EM_ME16, 59). % Toyota ME16 processor
-define(EM_ST100, 60). % STMicroelectronics ST100 processor
-define(EM_TINYJ, 61). % Advanced Logic Corp. TinyJ embedded processor
-define(EM_X86_64, 62). % Advanced Micro Devices X86-64 processor
-define(EM_PDSP, 63). % Sony DSP Processor
-define(EM_PDP10, 64). % Digital Equipment Corp. PDP-10
-define(EM_PDP11, 65). % Digital Equipment Corp. PDP-11
-define(EM_FX66, 66). % Siemens FX66 microcontroller
-define(EM_ST9PLUS, 67). % STMicroelectronics ST9+ 8/16 bit microcontroller
-define(EM_ST7, 68). % STMicroelectronics ST7 8-bit microcontroller
-define(EM_68HC16, 69). % Motorola MC68HC16 Microcontroller
-define(EM_68HC11, 70). % Motorola MC68HC11 Microcontroller
-define(EM_68HC08, 71). % Motorola MC68HC08 Microcontroller
-define(EM_68HC05, 72). % Motorola MC68HC05 Microcontroller
-define(EM_SVX, 73). % Silicon Graphics SVx
-define(EM_ST19, 74). % STMicroelectronics ST19 8-bit cpu
-define(EM_VAX, 75). % Digital VAX
-define(EM_CRIS, 76). % Axis Communications 32-bit embedded processor
-define(EM_JAVELIN, 77). % Infineon Technologies 32-bit embedded cpu
-define(EM_FIREPATH, 78). % Element 14 64-bit DSP processor
-define(EM_ZSP, 79). % LSI Logic's 16-bit DSP processor
-define(EM_MMIX, 80). % Donald Knuth's educational 64-bit processor
-define(EM_HUANY, 81). % Harvard's machine-independent format
-define(EM_PRISM, 82). % SiTera Prism
-define(EM_AVR, 83). % Atmel AVR 8-bit microcontroller
-define(EM_FR30, 84). % Fujitsu FR30
-define(EM_D10V, 85). % Mitsubishi D10V
-define(EM_D30V, 86). % Mitsubishi D30V
-define(EM_V850, 87). % Renesas V850 (formerly NEC V850)
-define(EM_M32R, 88). % Renesas M32R (formerly Mitsubishi M32R)
-define(EM_MN10300, 89). % Matsushita MN10300
-define(EM_MN10200, 90). % Matsushita MN10200
-define(EM_PJ, 91). % picoJava
-define(EM_OR1K, 92). % OpenRISC 1000 32-bit embedded processor
-define(EM_ARC_COMPACT, 93). % ARC International ARCompact processor
-define(EM_XTENSA, 94). % Tensilica Xtensa Architecture
-define(EM_SCORE_OLD, 95). % Old Sunplus S+core7 backend magic number. Written in the absence of an ABI.
-define(EM_VIDEOCORE, 95). % Alphamosaic VideoCore processor
-define(EM_TMM_GPP, 96). % Thompson Multimedia General Purpose Processor
-define(EM_NS32K, 97). % National Semiconductor 32000 series
-define(EM_TPC, 98). % Tenor Network TPC processor
-define(EM_PJ_OLD, 99). % Old value for picoJava. Deprecated.
-define(EM_SNP1K, 99). % Trebia SNP 1000 processor
-define(EM_ST200, 100). % STMicroelectronics ST200 microcontroller
-define(EM_IP2K, 101). % Ubicom IP2022 micro controller
-define(EM_MAX, 102). % MAX Processor
-define(EM_CR, 103). % National Semiconductor CompactRISC
-define(EM_F2MC16, 104). % Fujitsu F2MC16
-define(EM_MSP430, 105). % TI msp430 micro controller
-define(EM_BLACKFIN, 106). % ADI Blackfin
-define(EM_SE_C33, 107). % S1C33 Family of Seiko Epson processors
-define(EM_SEP, 108). % Sharp embedded microprocessor
-define(EM_ARCA, 109). % Arca RISC Microprocessor
-define(EM_UNICORE, 110). % Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University
-define(EM_EXCESS, 111). % eXcess: 16/32/64-bit configurable embedded CPU
-define(EM_DXP, 112). % Icera Semiconductor Inc. Deep Execution Processor
-define(EM_ALTERA_NIOS2,113). % Altera Nios II soft-core processor
-define(EM_CRX, 114). % National Semiconductor CRX
-define(EM_CR16_OLD, 115). % Old, value for National Semiconductor CompactRISC. Deprecated.
-define(EM_XGATE, 115). % Motorola XGATE embedded processor
-define(EM_C166, 116). % Infineon C16x/XC16x processor
-define(EM_M16C, 117). % Renesas M16C series microprocessors
-define(EM_DSPIC30F, 118). % Microchip Technology dsPIC30F Digital Signal Controller
-define(EM_CE, 119). % Freescale Communication Engine RISC core
-define(EM_M32C, 120). % Renesas M32C series microprocessors
-define(EM_res121, 121). % Reserved
-define(EM_res122, 122). % Reserved
-define(EM_res123, 123). % Reserved
-define(EM_res124, 124). % Reserved
-define(EM_res125, 125). % Reserved
-define(EM_res126, 126). % Reserved
-define(EM_res127, 127). % Reserved
-define(EM_res128, 128). % Reserved
-define(EM_res129, 129). % Reserved
-define(EM_res130, 130). % Reserved
-define(EM_TSK3000, 131). % Altium TSK3000 core
-define(EM_RS08, 132). % Freescale RS08 embedded processor
-define(EM_SHARC, 133). % Analog Devices SHARC family of 32-bit DSP processors
-define(EM_ECOG2, 134). % Cyan Technology eCOG2 microprocessor
-define(EM_SCORE, 135). % Sunplus Score
-define(EM_SCORE7, 135). % Sunplus S+core7 RISC processor
-define(EM_DSP24, 136). % New Japan Radio (NJR) 24-bit DSP Processor
-define(EM_VIDEOCORE3, 137). % Broadcom VideoCore III processor
-define(EM_LATTICEMICO32,138). % RISC processor for Lattice FPGA architecture
-define(EM_SE_C17, 139). % Seiko Epson C17 family
-define(EM_TI_C6000, 140). % Texas Instruments TMS320C6000 DSP family
-define(EM_TI_C2000, 141). % Texas Instruments TMS320C2000 DSP family
-define(EM_TI_C5500, 142). % Texas Instruments TMS320C55x DSP family
-define(EM_TI_ARP32, 143). % Texas Instruments Application Specific RISC Processor, 32bit fetch
-define(EM_TI_PRU, 144). % Texas Instruments Programmable Realtime Unit
-define(EM_res145, 145). % Reserved
-define(EM_res146, 146). % Reserved
-define(EM_res147, 147). % Reserved
-define(EM_res148, 148). % Reserved
-define(EM_res149, 149). % Reserved
-define(EM_res150, 150). % Reserved
-define(EM_res151, 151). % Reserved
-define(EM_res152, 152). % Reserved
-define(EM_res153, 153). % Reserved
-define(EM_res154, 154). % Reserved
-define(EM_res155, 155). % Reserved
-define(EM_res156, 156). % Reserved
-define(EM_res157, 157). % Reserved
-define(EM_res158, 158). % Reserved
-define(EM_res159, 159). % Reserved
-define(EM_MMDSP_PLUS, 160). % STMicroelectronics 64bit VLIW Data Signal Processor
-define(EM_CYPRESS_M8C, 161). % Cypress M8C microprocessor
-define(EM_R32C, 162). % Renesas R32C series microprocessors
-define(EM_TRIMEDIA, 163). % NXP Semiconductors TriMedia architecture family
-define(EM_QDSP6, 164). % QUALCOMM DSP6 Processor
-define(EM_8051, 165). % Intel 8051 and variants
-define(EM_STXP7X, 166). % STMicroelectronics STxP7x family
-define(EM_NDS32, 167). % Andes Technology compact code size embedded RISC processor family
-define(EM_ECOG1, 168). % Cyan Technology eCOG1X family
-define(EM_ECOG1X, 168). % Cyan Technology eCOG1X family
-define(EM_MAXQ30, 169). % Dallas Semiconductor MAXQ30 Core Micro-controllers
-define(EM_XIMO16, 170). % New Japan Radio (NJR) 16-bit DSP Processor
-define(EM_MANIK, 171). % M2000 Reconfigurable RISC Microprocessor
-define(EM_CRAYNV2, 172). % Cray Inc. NV2 vector architecture
-define(EM_RX, 173). % Renesas RX family
-define(EM_METAG, 174). % Imagination Technologies Meta processor architecture
-define(EM_MCST_ELBRUS, 175). % MCST Elbrus general purpose hardware architecture
-define(EM_ECOG16, 176). % Cyan Technology eCOG16 family
-define(EM_CR16, 177). % National Semiconductor CompactRISC 16-bit processor
-define(EM_ETPU, 178). % Freescale Extended Time Processing Unit
-define(EM_SLE9X, 179). % Infineon Technologies SLE9X core
-define(EM_L1OM, 180). % Intel L1OM
-define(EM_K1OM, 181). % Intel K1OM
-define(EM_INTEL182, 182). % Reserved by Intel
-define(EM_AARCH64, 183). % ARM 64-bit architecture
-define(EM_ARM184, 184). % Reserved by ARM
-define(EM_AVR32, 185). % Atmel Corporation 32-bit microprocessor family
-define(EM_STM8, 186). % STMicroeletronics STM8 8-bit microcontroller
-define(EM_TILE64, 187). % Tilera TILE64 multicore architecture family
-define(EM_TILEPRO, 188). % Tilera TILEPro multicore architecture family
-define(EM_MICROBLAZE, 189). % Xilinx MicroBlaze 32-bit RISC soft processor core
-define(EM_CUDA, 190). % NVIDIA CUDA architecture
-define(EM_TILEGX, 191). % Tilera TILE-Gx multicore architecture family
-define(EM_CLOUDSHIELD, 192). % CloudShield architecture family
-define(EM_COREA_1ST, 193). % KIPO-KAIST Core-A 1st generation processor family
-define(EM_COREA_2ND, 194). % KIPO-KAIST Core-A 2nd generation processor family
-define(EM_ARC_COMPACT2,195). % Synopsys ARCompact V2
-define(EM_OPEN8, 196). % Open8 8-bit RISC soft processor core
-define(EM_RL78, 197). % Renesas RL78 family.
-define(EM_VIDEOCORE5, 198). % Broadcom VideoCore V processor
-define(EM_78K0R, 199). % Renesas 78K0R.
-define(EM_56800EX, 200). % Freescale 56800EX Digital Signal Controller (DSC)
-define(EM_BA1, 201). % Beyond BA1 CPU architecture
-define(EM_BA2, 202). % Beyond BA2 CPU architecture
-define(EM_XCORE, 203). % XMOS xCORE processor family
-define(EM_MCHP_PIC, 204). % Microchip 8-bit PIC(r) family
-define(EM_INTEL205, 205). % Reserved by Intel
-define(EM_INTEL206, 206). % Reserved by Intel
-define(EM_INTEL207, 207). % Reserved by Intel
-define(EM_INTEL208, 208). % Reserved by Intel
-define(EM_INTEL209, 209). % Reserved by Intel
-define(EM_KM32, 210). % KM211 KM32 32-bit processor
-define(EM_KMX32, 211). % KM211 KMX32 32-bit processor
-define(EM_KMX16, 212). % KM211 KMX16 16-bit processor
-define(EM_KMX8, 213). % KM211 KMX8 8-bit processor
-define(EM_KVARC, 214). % KM211 KVARC processor
-define(EM_CDP, 215). % Paneve CDP architecture family
-define(EM_COGE, 216). % Cognitive Smart Memory Processor
-define(EM_COOL, 217). % Bluechip Systems CoolEngine
-define(EM_NORC, 218). % Nanoradio Optimized RISC
-define(EM_CSR_KALIMBA, 219). % CSR Kalimba architecture family
-define(EM_Z80, 220). % Zilog Z80
-define(EM_VISIUM, 221). % Controls and Data Services VISIUMcore processor
-define(EM_FT32, 222). % FTDI Chip FT32 high performance 32-bit RISC architecture
-define(EM_MOXIE, 223). % Moxie processor family
-define(EM_AMDGPU, 224). % AMD GPU architecture
%% 225-242: reserved
-define(EM_RISCV, 243). % RISC-V
-define(EM_LANAI, 244). % Lanai 32-bit processor.
-define(EM_BPF, 247). % Linux BPF - in-kernel virtual machine.
-define(EM_NFP, 250). % Netronome Flow Processor.
-define(EM_CSKY, 252). % C-SKY processor family.
%% If it is necessary to assign new unofficial EM_* values, please pick large
%% random numbers (16#8523, 16#a7f2, etc.) to minimize the chances of collision
%% with official or non-GNU unofficial values.
%%
%% NOTE: Do not just increment the most recent number by one.
%% Somebody else somewhere will do exactly the same thing, and you
%% will have a collision. Instead, pick a random number.
%%
%% Normally, each entity or maintainer responsible for a machine with an
%% unofficial e_machine number should eventually ask registry@sco.com for
%% an officially blessed number to be added to the list above.
%% AVR magic number. Written in the absense of an ABI.
-define(EM_AVR_OLD, 16#1057).
%% MSP430 magic number. Written in the absense of everything.
-define(EM_MSP430_OLD, 16#1059).
%% Morpho MT. Written in the absense of an ABI.
-define(EM_MT, 16#2530).
%% FR30 magic number - no EABI available.
-define(EM_CYGNUS_FR30, 16#3330).
%% Unofficial value for Web Assembly binaries, as used by LLVM.
-define(EM_WEBASSEMBLY, 16#4157).
%% Freescale S12Z. The Freescale toolchain generates elf files with this value.
-define(EM_S12Z, 16#4DEF).
%% DLX magic number. Written in the absense of an ABI.
-define(EM_DLX, 16#5aa5).
%% FRV magic number - no EABI available??.
-define(EM_CYGNUS_FRV, 16#5441).
%% Infineon Technologies 16-bit microcontroller with C166-V2 core.
-define(EM_XC16X, 16#4688).
%% D10V backend magic number. Written in the absence of an ABI.
-define(EM_CYGNUS_D10V, 16#7650).
%% D30V backend magic number. Written in the absence of an ABI.
-define(EM_CYGNUS_D30V, 16#7676).
%% Ubicom IP2xxx; Written in the absense of an ABI.
-define(EM_IP2K_OLD, 16#8217).
%% Cygnus PowerPC ELF backend. Written in the absence of an ABI.
-define(EM_CYGNUS_POWERPC, 16#9025).
%% Alpha backend magic number. Written in the absence of an ABI.
-define(EM_ALPHA, 16#9026).
%% Cygnus M32R ELF backend. Written in the absence of an ABI.
-define(EM_CYGNUS_M32R, 16#9041).
%% V850 backend magic number. Written in the absense of an ABI.
-define(EM_CYGNUS_V850, 16#9080).
%% old S/390 backend magic number. Written in the absence of an ABI.
-define(EM_S390_OLD, 16#a390).
%% Old, unofficial value for Xtensa.
-define(EM_XTENSA_OLD, 16#abc7).
-define(EM_XSTORMY16, 16#ad45).
%% mn10200 and mn10300 backend magic numbers.
%% Written in the absense of an ABI.
-define(EM_CYGNUS_MN10300, 16#beef).
-define(EM_CYGNUS_MN10200, 16#dead).
%% Renesas M32C and M16C.
-define(EM_M32C_OLD, 16#FEB0).
%% Vitesse IQ2000.
-define(EM_IQ2000, 16#FEBA).
%% NIOS magic number - no EABI available.
-define(EM_NIOS32, 16#FEBB).
-define(EM_CYGNUS_MEP, 16#F00D). % Toshiba MeP
%% Old, unofficial value for Moxie.
-define(EM_MOXIE_OLD, 16#FEED).
-define(EM_MICROBLAZE_OLD, 16#baab). % Old MicroBlaze
-define(EM_ADAPTEVA_EPIPHANY, 16#1223). % Adapteva's Epiphany architecture.
%% Old constant that might be in use by some software.
-define(EM_OPENRISC, ?EM_OR1K).
%% C-SKY historically used 39, the same value as MCORE, from which the
%% architecture was derived.
-define(EM_CSKY_OLD, ?EM_MCORE).
%% See the above comment before you add a new EM_* value here.
%% Values for e_version.
-define(EV_NONE, 0). % Invalid ELF version
-define(EV_CURRENT, 1). % Current version
%% Value for e_phnum.
-define(PN_XNUM, 16#ffff). % Extended numbering
%% Section header
-record(elf36_Shdr,
{ sh_name :: elf36_Word() % Section name, index in string tbl
| string() % Name (in-core only)
, sh_type :: elf36_Word() % Type of section
, sh_flags :: elf36_Word() % Miscellaneous section attributes
, sh_addr :: elf36_Addr() % Section virtual addr at execution
, sh_offset :: elf36_Off() % Section file offset
, sh_size :: elf36_Word() % Size of section in bytes
, sh_link :: elf36_Word() % Index of another section
, sh_info :: elf36_Word() % Additional section information
, sh_addralign :: elf36_Word() % Section alignment
, sh_entsize :: elf36_Word() % Entry size if section holds table
}).
-define(ELF36_SHDR_SIZEOF, (10 * 4)).
%% Special section indices, which may show up in st_shndx fields, among
%% other places.
-define(SHN_UNDEF, 16#0000). % Undefined, missing, irrelevant, or meaningless
-define(SHN_LORESERVE, 16#FF00). % Begin range of reserved indices
-define(SHN_LOPROC, 16#FF00). % Begin range of appl-specific
-define(SHN_HIPROC, 16#FF1F). % End range of appl-specific
-define(SHN_LOOS, 16#FF20). % OS specific semantics, lo
-define(SHN_HIOS, 16#FF3F). % OS specific semantics, hi
-define(SHN_ABS, 16#FFF1). % Associated symbol is absolute
-define(SHN_COMMON, 16#FFF2). % Associated symbol is in common
-define(SHN_XINDEX, 16#FFFF). % Section index is held elsewhere
-define(SHN_HIRESERVE, 16#FFFF). % End range of reserved indices
%% Values for section header, sh_type field.
-define(SHT_NULL, 0). % Section header table entry unused
-define(SHT_PROGBITS, 1). % Program specific (private) data
-define(SHT_SYMTAB, 2). % Link editing symbol table
-define(SHT_STRTAB, 3). % A string table
-define(SHT_RELA, 4). % Relocation entries with addends
-define(SHT_HASH, 5). % A symbol hash table
-define(SHT_DYNAMIC, 6). % Information for dynamic linking
-define(SHT_NOTE, 7). % Information that marks file
-define(SHT_NOBITS, 8). % Section occupies no space in file
-define(SHT_REL, 9). % Relocation entries, no addends
-define(SHT_SHLIB, 10). % Reserved, unspecified semantics
-define(SHT_DYNSYM, 11). % Dynamic linking symbol table
-define(SHT_INIT_ARRAY, 14). % Array of ptrs to init functions
-define(SHT_FINI_ARRAY, 15). % Array of ptrs to finish functions
-define(SHT_PREINIT_ARRAY,16). % Array of ptrs to pre-init funcs
-define(SHT_GROUP, 17). % Section contains a section group
-define(SHT_SYMTAB_SHNDX, 18). % Indices for SHN_XINDEX entries
-define(SHT_LOOS, 16#60000000). % First of OS specific semantics
-define(SHT_HIOS, 16#6fffffff). % Last of OS specific semantics
-define(SHT_GNU_INCREMENTAL_INPUTS, 16#6fff4700). % incremental build data
-define(SHT_GNU_ATTRIBUTES, 16#6ffffff5). % Object attributes
-define(SHT_GNU_HASH, 16#6ffffff6). % GNU style symbol hash table
-define(SHT_GNU_LIBLIST, 16#6ffffff7). % List of prelink dependencies
%% The next three section types are defined by Solaris, and are named
%% SHT_SUNW*. We use them in GNU code, so we also define SHT_GNU*
%% versions.
-define(SHT_SUNW_verdef, 16#6ffffffd). % Versions defined by file
-define(SHT_SUNW_verneed, 16#6ffffffe). % Versions needed by file
-define(SHT_SUNW_versym, 16#6fffffff). % Symbol versions
-define(SHT_GNU_verdef, ?SHT_SUNW_verdef).
-define(SHT_GNU_verneed, ?SHT_SUNW_verneed).
-define(SHT_GNU_versym, ?SHT_SUNW_versym).
-define(SHT_LOPROC, 16#70000000). % Processor-specific semantics, lo
-define(SHT_HIPROC, 16#7FFFFFFF). % Processor-specific semantics, hi
-define(SHT_LOUSER, 16#80000000). % Application-specific semantics
%%-define(SHT_HIUSER, 16#8FFFFFFF). % Application-specific semantics
-define(SHT_HIUSER, 16#FFFFFFFF). % New value, defined in Oct 4, 1999 Draft
%% Values for section header, sh_flags field.
-define(SHF_WRITE, (1 bsl 0)). % Writable data during execution
-define(SHF_ALLOC, (1 bsl 1)). % Occupies memory during execution
-define(SHF_EXECINSTR, (1 bsl 2)). % Executable machine instructions
-define(SHF_MERGE, (1 bsl 4)). % Data in this section can be merged
-define(SHF_STRINGS, (1 bsl 5)). % Contains null terminated character strings
-define(SHF_INFO_LINK, (1 bsl 6)). % sh_info holds section header table index
-define(SHF_LINK_ORDER, (1 bsl 7)). % Preserve section ordering when linking
-define(SHF_OS_NONCONFORMING, (1 bsl 8)). % OS specific processing required
-define(SHF_GROUP, (1 bsl 9)). % Member of a section group
-define(SHF_TLS, (1 bsl 10)). % Thread local storage section
-define(SHF_COMPRESSED, (1 bsl 11)). % Data in this section is compressed
%%-define(SHF_MASKOS, 16#0F000000). % OS-specific semantics
-define(SHF_MASKOS, 16#0FF00000). % New value, Oct 4, 1999 Draft
-define(SHF_GNU_BUILD_NOTE, (1 bsl 20)).% Section contains GNU BUILD ATTRIBUTE notes.
-define(SHF_MASKPROC, 16#F0000000). % Processor-specific semantics
%% This used to be implemented as a processor specific section flag.
%% We just make it generic.
-define(SHF_EXCLUDE, 16#80000000). % Link editor is to exclude
% this section from executable
% and shared library that it
% builds when those objects
% are not to be further
% relocated.
-define(SHF_GNU_MBIND, 16#01000000). % Mbind section.
%% Size of SHT_GROUP section entry.
-define(GRP_ENTRY_SIZE, 4).
%% Section Group Flags.
-define(GRP_COMDAT, 16#1). % A COMDAT group
-define(GRP_MASKOS, 16#0ff00000). % Reserved for OS-specific semantics
-define(GRP_MASKPROC, 16#f0000000). % Reserved for processor-specific semantics
%% Compression Header
-record(elf36_Chdr,
{ ch_type :: elf36_Word() % Type of compression
, ch_size :: elf36_Word() % Size of uncompressed data in bytes
, ch_addralign :: elf36_Word() % Alignment of uncompressed data
}).
%% Compression types.
-define(ELFCOMPRESS_ZLIB, 1). % Compressed with zlib.
-define(ELFCOMPRESS_LOOS, 16#60000000). % OS-specific semantics, lo
-define(ELFCOMPRESS_HIOS, 16#6FFFFFFF). % OS-specific semantics, hi
-define(ELFCOMPRESS_LOPROC, 16#70000000). % Processor-specific semantics, lo
-define(ELFCOMPRESS_HIPROC, 16#7FFFFFFF). % Processor-specific semantics, hi
%% Symbol table entry
-record(elf36_Sym,
{ st_name :: elf36_Word() % Symbol name, index in string tbl
| string() % Name (in-core only)
, st_value :: elf36_Addr() % Value of the symbol
, st_size :: elf36_Word() % Associated symbol size
, st_info :: elf36_Uchar() % Type and binding attributes
, st_other :: elf36_Uchar() % No defined meaning, 0
, st_shndx :: elf36_Half() % Associated section index
}).
-define(ELF36_SYM_SIZEOF, (3 * 4 + 2 + 1 + 1)).
-ifdef(notdef).
-record(elf_External_Sym_Shndx,
{ est_shndx :: [uint9_t()] % Section index, 4 elements
}).
-endif.
-define(STN_UNDEF, 0). % Undefined symbol index
%% These three macros disassemble and assemble a symbol table st_info field,
%% which contains the symbol binding and symbol type. The STB_ and STT_
%% defines identify the binding and type.
-define(ELF_ST_BIND(Val), (((Val) band ?PDP10_UINT9_MAX) bsr 4)).
-define(ELF_ST_TYPE(Val), ((Val) band 16#F)).
-define(ELF_ST_INFO(Bind, Type), (((Bind) bsl 4) + ((Type) band 16#F))).
%% The 64bit, 36bit, and 32bit versions of these macros are identical, but
%% the ELF spec defines them, so here they are.
-define(ELF36_ST_BIND(Val), ?ELF_ST_BIND((Val))).
-define(ELF36_ST_TYPE(Val), ?ELF_ST_TYPE((Val))).
-define(ELF36_ST_INFO(Bind, Type), ?ELF_ST_INFO((Bind), (Type))).
-define(STB_LOCAL, 0). % Symbol not visible outside obj
-define(STB_GLOBAL, 1). % Symbol visible outside obj
-define(STB_WEAK, 2). % Like globals, lower precedence
-define(STB_LOOS, 10). % OS-specific semantics
-define(STB_GNU_UNIQUE, 10). % Symbol is unique in namespace
-define(STB_HIOS, 12). % OS-specific semantics
-define(STB_LOPROC, 13). % Processor-specific semantics
-define(STB_HIPROC, 15). % Processor-specific semantics
-define(STT_NOTYPE, 0). % Symbol type is unspecified
-define(STT_OBJECT, 1). % Symbol is a data object
-define(STT_FUNC, 2). % Symbol is a code object
-define(STT_SECTION, 3). % Symbol associated with a section
-define(STT_FILE, 4). % Symbol gives a file name
-define(STT_COMMON, 5). % An uninitialised common block
-define(STT_TLS, 6). % Thread local data object
-define(STT_RELC, 8). % Complex relocation expression
-define(STT_SRELC, 9). % Signed Complex relocation expression
-define(STT_LOOS, 10). % OS-specific semantics
-define(STT_GNU_IFUNC, 10). % Symbol is an indirect code object
-define(STT_HIOS, 12). % OS-specific semantics
-define(STT_LOPROC, 13). % Processor-specific semantics
-define(STT_HIPROC, 15). % Processor-specific semantics
%% This macro disassembles and assembles a symbol's visibility into
%% the st_other field. The STV_ defines specify the actual visibility.
-define(ELF_ST_VISIBILITY(V), ((V) band 16#3)).
%% The remaining bits in the st_other field are not currently used.
%% They should be set to zero.
-define(ELF36_ST_VISIBILITY(V), ?ELF_ST_VISIBILITY((V))).
%% The following constants control how a symbol may be accessed once it has
%% become part of an executable or shared library.
-define(STV_DEFAULT, 0). % Visibility is specified by binding type
-define(STV_INTERNAL, 1). % OS specific version of STV_HIDDEN
-define(STV_HIDDEN, 2). % Can only be seen inside currect component
-define(STV_PROTECTED, 3). % Treat as STB_LOCAL inside current component
%% Relocation Entries
-record(elf36_Rel,
{ r_offset :: elf36_Addr() % Location at which to apply the action
, r_info :: elf36_Word() % index and type of relocation
}).
-record(elf36_Rela,
{ r_offset :: elf36_Addr() % Location at which to apply the action
, r_info :: elf36_Word() % index and type of relocation
, r_addend :: elf36_Sword() % Constant addend used to compute value
}).
%% Relocation info handling macros.
-define(ELF36_R_SYM(I), ((I) bsr 8)).
-define(ELF36_R_TYPE(I), ((I) band 16#ff)).
-define(ELF36_R_INFO(S,T), (((S) bsl 8) + ((T) band 16#ff))).
%% Note segments
-record(elf36_Note,
{ n_namesz :: elf36_Word() % Size of entry's owner string
, n_descsz :: elf36_Word() % Size of the note descriptor
, n_type :: elf36_Word() % Interpretation of the descriptor
, n_name :: [elf36_Uchar()] % Start of the name+desc data
}).
%% Values of note segment descriptor types for core files.
-define(NT_PRSTATUS, 1). % Contains copy of prstatus struct
-define(NT_FPREGSET, 2). % Contains copy of fpregset struct
-define(NT_PRPSINFO, 3). % Contains copy of prpsinfo struct
-define(NT_TASKSTRUCT, 4). % Contains copy of task struct
-define(NT_AUXV, 6). % Contains copy of Elfxx_auxv_t
-define(NT_PRXFPREG, 16#46e62b7f). % Contains a user_xfpregs_struct;
% note name must be "LINUX".
-define(NT_PPC_VMX, 16#100). % PowerPC Altivec/VMX registers
% note name must be "LINUX".
-define(NT_PPC_VSX, 16#102). % PowerPC VSX registers
% note name must be "LINUX".
-define(NT_PPC_TAR, 16#103). % PowerPC Target Address Register
% note name must be "LINUX".
-define(NT_PPC_PPR, 16#104). % PowerPC Program Priority Register
% note name must be "LINUX".
-define(NT_PPC_DSCR, 16#105). % PowerPC Data Stream Control Register
% note name must be "LINUX".
-define(NT_PPC_EBB, 16#106). % PowerPC Event Based Branch Registers
% note name must be "LINUX".
-define(NT_PPC_PMU, 16#107). % PowerPC Performance Monitor Registers
% note name must be "LINUX".
-define(NT_PPC_TM_CGPR, 16#108). % PowerPC TM checkpointed GPR Registers
% note name must be "LINUX".
-define(NT_PPC_TM_CFPR, 16#109). % PowerPC TM checkpointed FPR Registers
% note name must be "LINUX".
-define(NT_PPC_TM_CVMX, 16#10a). % PowerPC TM checkpointed VMX Registers
% note name must be "LINUX".
-define(NT_PPC_TM_CVSX, 16#10b). % PowerPC TM checkpointed VSX Registers
% note name must be "LINUX".
-define(NT_PPC_TM_SPR, 16#10c). % PowerPC TM Special Purpose Registers
% note name must be "LINUX".
-define(NT_PPC_TM_CTAR, 16#10d). % PowerPC TM checkpointed TAR
% note name must be "LINUX".
-define(NT_PPC_TM_CPPR, 16#10e). % PowerPC TM checkpointed PPR
% note name must be "LINUX".
-define(NT_PPC_TM_CDSCR, 16#10f). % PowerPC TM checkpointed Data SCR
% note name must be "LINUX".
-define(NT_386_TLS, 16#200). % x86 TLS information
% note name must be "LINUX".
-define(NT_386_IOPERM, 16#201). % x86 io permissions
% note name must be "LINUX".
-define(NT_X86_XSTATE, 16#202). % x86 XSAVE extended state
% note name must be "LINUX".
-define(NT_S390_HIGH_GPRS, 16#300). % S/390 upper halves of GPRs
% note name must be "LINUX".
-define(NT_S390_TIMER, 16#301). % S390 timer
% note name must be "LINUX".
-define(NT_S390_TODCMP, 16#302). % S390 TOD clock comparator
% note name must be "LINUX".
-define(NT_S390_TODPREG, 16#303). % S390 TOD programmable register
% note name must be "LINUX".
-define(NT_S390_CTRS, 16#304). % S390 control registers
% note name must be "LINUX".
-define(NT_S390_PREFIX, 16#305). % S390 prefix register
% note name must be "LINUX".
-define(NT_S390_LAST_BREAK, 16#306). % S390 breaking event address
% note name must be "LINUX".
-define(NT_S390_SYSTEM_CALL, 16#307). % S390 system call restart data
% note name must be "LINUX".
-define(NT_S390_TDB, 16#308). % S390 transaction diagnostic block
% note name must be "LINUX".
-define(NT_S390_VXRS_LOW, 16#309). % S390 vector registers 0-15 upper half
% note name must be "LINUX".
-define(NT_S390_VXRS_HIGH, 16#30a). % S390 vector registers 16-31
% note name must be "LINUX".
-define(NT_S390_GS_CB, 16#30b). % s390 guarded storage registers
% note name must be "LINUX".
-define(NT_S390_GS_BC, 16#30c). % s390 guarded storage broadcast control block
% note name must be "LINUX".
-define(NT_ARM_VFP, 16#400). % ARM VFP registers
%% The following definitions should really use NT_AARCH_..., but defined
%% this way for compatibility with Linux.
-define(NT_ARM_TLS, 16#401). % AArch TLS registers
% note name must be "LINUX".
-define(NT_ARM_HW_BREAK, 16#402). % AArch hardware breakpoint registers
% note name must be "LINUX".
-define(NT_ARM_HW_WATCH, 16#403). % AArch hardware watchpoint registers
% note name must be "LINUX".
-define(NT_ARM_SVE, 16#405). % AArch SVE registers.
% note name must be "LINUX".
-define(NT_SIGINFO, 16#53494749). % Fields of siginfo_t.
-define(NT_FILE, 16#46494c45). % Description of mapped files.
%% Note segments for core files on dir-style procfs systems.
-define(NT_PSTATUS, 10). % Has a struct pstatus
-define(NT_FPREGS, 12). % Has a struct fpregset
-define(NT_PSINFO, 13). % Has a struct psinfo
-define(NT_LWPSTATUS, 16). % Has a struct lwpstatus_t
-define(NT_LWPSINFO, 17). % Has a struct lwpsinfo_t
-define(NT_WIN32PSTATUS, 18). % Has a struct win32_pstatus
%% Note segment for SystemTap probes.
-define(NT_STAPSDT, 3).
%% Note segments for core files on FreeBSD systems. Note name is
%% "FreeBSD".
-define(NT_FREEBSD_THRMISC, 7). % Thread miscellaneous info.
-define(NT_FREEBSD_PROCSTAT_PROC, 8). % Procstat proc data.
-define(NT_FREEBSD_PROCSTAT_FILES, 9). % Procstat files data.
-define(NT_FREEBSD_PROCSTAT_VMMAP, 10). % Procstat vmmap data.
-define(NT_FREEBSD_PROCSTAT_GROUPS, 11). % Procstat groups data.
-define(NT_FREEBSD_PROCSTAT_UMASK, 12). % Procstat umask data.
-define(NT_FREEBSD_PROCSTAT_RLIMIT, 13). % Procstat rlimit data.
-define(NT_FREEBSD_PROCSTAT_OSREL, 14). % Procstat osreldate data.
-define(NT_FREEBSD_PROCSTAT_PSSTRINGS, 15). % Procstat ps_strings data.
-define(NT_FREEBSD_PROCSTAT_AUXV, 16). % Procstat auxv data.
-define(NT_FREEBSD_PTLWPINFO, 17). % Thread ptrace miscellaneous info.
%% Note segments for core files on NetBSD systems. Note name
%% must start with "NetBSD-CORE".
-define(NT_NETBSDCORE_PROCINFO, 1). % Has a struct procinfo
-define(NT_NETBSDCORE_FIRSTMACH,32). % start of machdep note types
%% Note segments for core files on OpenBSD systems. Note name is
%% "OpenBSD".
-define(NT_OPENBSD_PROCINFO, 10).
-define(NT_OPENBSD_AUXV, 11).
-define(NT_OPENBSD_REGS, 20).
-define(NT_OPENBSD_FPREGS, 21).
-define(NT_OPENBSD_XFPREGS, 22).
-define(NT_OPENBSD_WCOOKIE, 23).
%% Note segments for core files on SPU systems. Note name
%% must start with "SPU/".
-define(NT_SPU, 1).
%% Values of note segment descriptor types for object files.
-define(NT_VERSION, 1). % Contains a version string.
-define(NT_ARCH, 2). % Contains an architecture string.
%% Values for notes in non-core files using name "GNU".
-define(NT_GNU_ABI_TAG, 1).
-define(NT_GNU_HWCAP, 2). % Used by ld.so and kernel vDSO.
-define(NT_GNU_BUILD_ID, 3). % Generated by ld --build-id.
-define(NT_GNU_GOLD_VERSION, 4). % Generated by gold.
-define(NT_GNU_PROPERTY_TYPE_0, 5). % Generated by gcc.
-define(NT_GNU_BUILD_ATTRIBUTE_OPEN, 16#100).
-define(NT_GNU_BUILD_ATTRIBUTE_FUNC, 16#101).
-define(GNU_BUILD_ATTRIBUTE_TYPE_NUMERIC, $*).
-define(GNU_BUILD_ATTRIBUTE_TYPE_STRING, $$).
-define(GNU_BUILD_ATTRIBUTE_TYPE_BOOL_TRUE, $+).
-define(GNU_BUILD_ATTRIBUTE_TYPE_BOOL_FALSE, $!).
-define(GNU_BUILD_ATTRIBUTE_VERSION, 1).
-define(GNU_BUILD_ATTRIBUTE_STACK_PROT, 2).
-define(GNU_BUILD_ATTRIBUTE_RELRO, 3).
-define(GNU_BUILD_ATTRIBUTE_STACK_SIZE, 4).
-define(GNU_BUILD_ATTRIBUTE_TOOL, 5).
-define(GNU_BUILD_ATTRIBUTE_ABI, 6).
-define(GNU_BUILD_ATTRIBUTE_PIC, 7).
-define(GNU_BUILD_ATTRIBUTE_SHORT_ENUM, 8).
-define(NOTE_GNU_PROPERTY_SECTION_NAME, ".note.gnu.property").
-define(GNU_BUILD_ATTRS_SECTION_NAME, ".gnu.build.attributes").
%% Values used in GNU .note.gnu.property notes (NT_GNU_PROPERTY_TYPE_0).
-define(GNU_PROPERTY_STACK_SIZE, 1).
-define(GNU_PROPERTY_NO_COPY_ON_PROTECTED, 2).
%% Processor-specific semantics, lo
-define(GNU_PROPERTY_LOPROC, 16#c0000000).
%% Processor-specific semantics, hi
-define(GNU_PROPERTY_HIPROC, 16#dfffffff).
%% Application-specific semantics, lo
-define(GNU_PROPERTY_LOUSER, 16#e0000000).
%% Application-specific semantics, hi
-define(GNU_PROPERTY_HIUSER, 16#ffffffff).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_USED, 16#c0000000).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED, 16#c0000001).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_486, (1 bsl 0)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_586, (1 bsl 1)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_686, (1 bsl 2)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_SSE, (1 bsl 3)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_SSE2, (1 bsl 4)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_SSE3, (1 bsl 5)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_SSSE3, (1 bsl 6)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_1, (1 bsl 7)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_2, (1 bsl 8)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX, (1 bsl 9)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX2, (1 bsl 10)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512F, (1 bsl 11)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512CD, (1 bsl 12)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512ER, (1 bsl 13)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512PF, (1 bsl 14)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512VL, (1 bsl 15)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512DQ, (1 bsl 16)).
-define(GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512BW, (1 bsl 17)).
%% A 4-byte unsigned integer property: A bit is set if it is set in all
%% relocatable inputs.
-define(GNU_PROPERTY_X86_UINT32_AND_LO, 16#c0000002).
-define(GNU_PROPERTY_X86_UINT32_AND_HI, 16#c0007fff).
%% A 4-byte unsigned integer property: A bit is set if it is set in any
%% relocatable inputs.
-define(GNU_PROPERTY_X86_UINT32_OR_LO, 16#c0008000).
-define(GNU_PROPERTY_X86_UINT32_OR_HI, 16#c000ffff).
%% A 4-byte unsigned integer property: A bit is set if it is set in any
%% relocatable inputs and the property is present in all relocatable
%% inputs.
-define(GNU_PROPERTY_X86_UINT32_OR_AND_LO, 16#c0010000).
-define(GNU_PROPERTY_X86_UINT32_OR_AND_HI, 16#c0017fff).
-define(GNU_PROPERTY_X86_FEATURE_1_AND, (?GNU_PROPERTY_X86_UINT32_AND_LO + 0)).
-define(GNU_PROPERTY_X86_ISA_1_NEEDED, (?GNU_PROPERTY_X86_UINT32_OR_LO + 0)).
-define(GNU_PROPERTY_X86_FEATURE_2_NEEDED, (?GNU_PROPERTY_X86_UINT32_OR_LO + 1)).
-define(GNU_PROPERTY_X86_ISA_1_USED, (?GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0)).
-define(GNU_PROPERTY_X86_FEATURE_2_USED, (?GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1)).
-define(GNU_PROPERTY_X86_FEATURE_1_IBT, (1 bsl 0)).
-define(GNU_PROPERTY_X86_FEATURE_1_SHSTK, (1 bsl 1)).
-define(GNU_PROPERTY_X86_ISA_1_CMOV, (1 bsl 0)).
-define(GNU_PROPERTY_X86_ISA_1_SSE, (1 bsl 1)).
-define(GNU_PROPERTY_X86_ISA_1_SSE2, (1 bsl 2)).
-define(GNU_PROPERTY_X86_ISA_1_SSE3, (1 bsl 3)).
-define(GNU_PROPERTY_X86_ISA_1_SSSE3, (1 bsl 4)).
-define(GNU_PROPERTY_X86_ISA_1_SSE4_1, (1 bsl 5)).
-define(GNU_PROPERTY_X86_ISA_1_SSE4_2, (1 bsl 6)).
-define(GNU_PROPERTY_X86_ISA_1_AVX, (1 bsl 7)).
-define(GNU_PROPERTY_X86_ISA_1_AVX2, (1 bsl 8)).
-define(GNU_PROPERTY_X86_ISA_1_FMA, (1 bsl 9)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512F, (1 bsl 10)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512CD, (1 bsl 11)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512ER, (1 bsl 12)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512PF, (1 bsl 13)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512VL, (1 bsl 14)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512DQ, (1 bsl 15)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512BW, (1 bsl 16)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS, (1 bsl 17)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW, (1 bsl 18)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512_BITALG, (1 bsl 19)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512_IFMA, (1 bsl 20)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512_VBMI, (1 bsl 21)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2, (1 bsl 22)).
-define(GNU_PROPERTY_X86_ISA_1_AVX512_VNNI, (1 bsl 23)).
-define(GNU_PROPERTY_X86_FEATURE_2_X86, (1 bsl 0)).
-define(GNU_PROPERTY_X86_FEATURE_2_X87, (1 bsl 1)).
-define(GNU_PROPERTY_X86_FEATURE_2_MMX, (1 bsl 2)).
-define(GNU_PROPERTY_X86_FEATURE_2_XMM, (1 bsl 3)).
-define(GNU_PROPERTY_X86_FEATURE_2_YMM, (1 bsl 4)).
-define(GNU_PROPERTY_X86_FEATURE_2_ZMM, (1 bsl 5)).
-define(GNU_PROPERTY_X86_FEATURE_2_FXSR, (1 bsl 6)).
-define(GNU_PROPERTY_X86_FEATURE_2_XSAVE, (1 bsl 7)).
-define(GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT, (1 bsl 8)).
-define(GNU_PROPERTY_X86_FEATURE_2_XSAVEC, (1 bsl 9)).
%% Values used in GNU .note.ABI-tag notes (NT_GNU_ABI_TAG).
-define(GNU_ABI_TAG_LINUX, 0).
-define(GNU_ABI_TAG_HURD, 1).
-define(GNU_ABI_TAG_SOLARIS, 2).
-define(GNU_ABI_TAG_FREEBSD, 3).
-define(GNU_ABI_TAG_NETBSD, 4).
-define(GNU_ABI_TAG_SYLLABLE, 5).
-define(GNU_ABI_TAG_NACL, 6).
%% Values for NetBSD .note.netbsd.ident notes. Note name is "NetBSD".
-define(NT_NETBSD_IDENT, 1).
-define(NT_NETBSD_MARCH, 5).
%% Values for OpenBSD .note.openbsd.ident notes. Note name is "OpenBSD".
-define(NT_OPENBSD_IDENT, 1).
%% Values for FreeBSD .note.ABI-tag notes. Note name is "FreeBSD".
-define(NT_FREEBSD_ABI_TAG, 1).
%% Program header
-record(elf36_Phdr,
{ p_type :: elf36_Word() % Identifies program segment type
, p_offset :: elf36_Off() % Segment file offset
, p_vaddr :: elf36_Addr() % Segment virtual address
, p_paddr :: elf36_Addr() % Segment physical address
, p_filesz :: elf36_Word() % Segment size in file
, p_memsz :: elf36_Word() % Segment size in memory
, p_flags :: elf36_Word() % Segment flags
, p_align :: elf36_Word() % Segment alignment, file & memory
}).
%% Values for program header, p_type field.
-define(PT_NULL, 0). % Program header table entry unused
-define(PT_LOAD, 1). % Loadable program segment
-define(PT_DYNAMIC, 2). % Dynamic linking information
-define(PT_INTERP, 3). % Program interpreter
-define(PT_NOTE, 4). % Auxiliary information
-define(PT_SHLIB, 5). % Reserved, unspecified semantics
-define(PT_PHDR, 6). % Entry for header table itself
-define(PT_TLS, 7). % Thread local storage segment
-define(PT_LOOS, 16#60000000). % OS-specific
-define(PT_HIOS, 16#6fffffff). % OS-specific
-define(PT_LOPROC, 16#70000000). % Processor-specific
-define(PT_HIPROC, 16#7FFFFFFF). % Processor-specific
-define(PT_GNU_EH_FRAME, (?PT_LOOS + 16#474e550)). % Frame unwind information
-define(PT_SUNW_EH_FRAME, ?PT_GNU_EH_FRAME). % Solaris uses the same value
-define(PT_GNU_STACK, (?PT_LOOS + 16#474e551)). % Stack flags
-define(PT_GNU_RELRO, (?PT_LOOS + 16#474e552)). % Read-only after relocation
-define(PT_GNU_PROPERTY, (?PT_LOOS + 16#474e553)). % GNU property
%% Mbind segments
-define(PT_GNU_MBIND_NUM, 4096).
-define(PT_GNU_MBIND_LO, (?PT_LOOS + 16#474e555)).
-define(PT_GNU_MBIND_HI, (?PT_GNU_MBIND_LO + ?PT_GNU_MBIND_NUM - 1)).
%% Program segment permissions, in program header p_flags field.
-define(PF_X, (1 bsl 0)). % Segment is executable
-define(PF_W, (1 bsl 1)). % Segment is writable
-define(PF_R, (1 bsl 2)). % Segment is readable
%%-define(PF_MASKOS, 16#0F000000). % OS-specific reserved bits
-define(PF_MASKOS, 16#0FF00000). % New value, Oct 4, 1999 Draft
-define(PF_MASKPROC, 16#F0000000). % Processor-specific reserved bits
%% dynamic section structure
-record(elf36_Dyn,
{ d_tag :: elf36_Sword() % entry tag value
, d_valOrPtr :: elf36_Word() % val (Addr) or ptr (Addr)
}).
%% Dynamic section tags.
-define(DT_NULL, 0).
-define(DT_NEEDED, 1).
-define(DT_PLTRELSZ, 2).
-define(DT_PLTGOT, 3).
-define(DT_HASH, 4).
-define(DT_STRTAB, 5).
-define(DT_SYMTAB, 6).
-define(DT_RELA, 7).
-define(DT_RELASZ, 8).
-define(DT_RELAENT, 9).
-define(DT_STRSZ, 10).
-define(DT_SYMENT, 11).
-define(DT_INIT, 12).
-define(DT_FINI, 13).
-define(DT_SONAME, 14).
-define(DT_RPATH, 15).
-define(DT_SYMBOLIC, 16).
-define(DT_REL, 17).
-define(DT_RELSZ, 18).
-define(DT_RELENT, 19).
-define(DT_PLTREL, 20).
-define(DT_DEBUG, 21).
-define(DT_TEXTREL, 22).
-define(DT_JMPREL, 23).
-define(DT_BIND_NOW, 24).
-define(DT_INIT_ARRAY, 25).
-define(DT_FINI_ARRAY, 26).
-define(DT_INIT_ARRAYSZ, 27).
-define(DT_FINI_ARRAYSZ, 28).
-define(DT_RUNPATH, 29).
-define(DT_FLAGS, 30).
-define(DT_ENCODING, 32). % odd/even encoding rule starts here
-define(DT_PREINIT_ARRAY, 32).
-define(DT_PREINIT_ARRAYSZ, 33).
-define(DT_SYMTAB_SHNDX, 34).
%% Note, the Oct 4, 1999 draft of the ELF ABI changed the values
%% for DT_LOOS and DT_HIOS. Some implementations however, use
%% values outside of the new range (see below).
-define(OLD_DT_LOOS, 16#60000000).
-define(DT_LOOS, 16#6000000d).
-define(DT_HIOS, 16#6ffff000).
-define(OLD_DT_HIOS, 16#6fffffff).
-define(DT_LOPROC, 16#70000000).
-define(DT_HIPROC, 16#7fffffff).
%% The next 2 dynamic tag ranges, integer value range (DT_VALRNGLO to
%% DT_VALRNGHI) and virtual address range (DT_ADDRRNGLO to DT_ADDRRNGHI),
%% are used on Solaris. We support them everywhere. Note these values
%% lie outside of the (new) range for OS specific values. This is a
%% deliberate special case and we maintain it for backwards compatability.
-define(DT_VALRNGLO, 16#6ffffd00).
-define(DT_GNU_PRELINKED,16#6ffffdf5).
-define(DT_GNU_CONFLICTSZ,16#6ffffdf6).
-define(DT_GNU_LIBLISTSZ,16#6ffffdf7).
-define(DT_CHECKSUM, 16#6ffffdf8).
-define(DT_PLTPADSZ, 16#6ffffdf9).
-define(DT_MOVEENT, 16#6ffffdfa).
-define(DT_MOVESZ, 16#6ffffdfb).
-define(DT_FEATURE, 16#6ffffdfc).
-define(DT_POSFLAG_1, 16#6ffffdfd).
-define(DT_SYMINSZ, 16#6ffffdfe).
-define(DT_SYMINENT, 16#6ffffdff).
-define(DT_VALRNGHI, 16#6ffffdff).
-define(DT_ADDRRNGLO, 16#6ffffe00).
-define(DT_GNU_HASH, 16#6ffffef5).
-define(DT_TLSDESC_PLT, 16#6ffffef6).
-define(DT_TLSDESC_GOT, 16#6ffffef7).
-define(DT_GNU_CONFLICT,16#6ffffef8).
-define(DT_GNU_LIBLIST, 16#6ffffef9).
-define(DT_CONFIG, 16#6ffffefa).
-define(DT_DEPAUDIT, 16#6ffffefb).
-define(DT_AUDIT, 16#6ffffefc).
-define(DT_PLTPAD, 16#6ffffefd).
-define(DT_MOVETAB, 16#6ffffefe).
-define(DT_SYMINFO, 16#6ffffeff).
-define(DT_ADDRRNGHI, 16#6ffffeff).
-define(DT_RELACOUNT, 16#6ffffff9).
-define(DT_RELCOUNT, 16#6ffffffa).
-define(DT_FLAGS_1, 16#6ffffffb).
-define(DT_VERDEF, 16#6ffffffc).
-define(DT_VERDEFNUM, 16#6ffffffd).
-define(DT_VERNEED, 16#6ffffffe).
-define(DT_VERNEEDNUM, 16#6fffffff).
%% This tag is a GNU extension to the Solaris version scheme.
-define(DT_VERSYM, 16#6ffffff0).
%% These section tags are used on Solaris. We support them
%% everywhere, and hope they do not conflict.
-define(DT_AUXILIARY, 16#7ffffffd).
-define(DT_USED , 16#7ffffffe).
-define(DT_FILTER, 16#7fffffff).
%% Values used in DT_FEATURE .dynamic entry.
-define(DTF_1_PARINIT, 16#00000001).
%% From
%%
%% http://docs.sun.com:80/ab2/coll.45.13/LLM/@Ab2PageView/21165?Ab2Lang=C&Ab2Enc=iso-8859-1
%%
%% DTF_1_CONFEXP is the same as DTF_1_PARINIT. It is a typo. The value
%% defined here is the same as the one in <sys/link.h> on Solaris 8.
-define(DTF_1_CONFEXP, 16#00000002).
%% Flag values used in the DT_POSFLAG_1 .dynamic entry.
-define(DF_P1_LAZYLOAD, 16#00000001).
-define(DF_P1_GROUPPERM,16#00000002).
%% Flag value in in the DT_FLAGS_1 .dynamic entry.
-define(DF_1_NOW, 16#00000001).
-define(DF_1_GLOBAL, 16#00000002).
-define(DF_1_GROUP, 16#00000004).
-define(DF_1_NODELETE, 16#00000008).
-define(DF_1_LOADFLTR, 16#00000010).
-define(DF_1_INITFIRST, 16#00000020).
-define(DF_1_NOOPEN, 16#00000040).
-define(DF_1_ORIGIN, 16#00000080).
-define(DF_1_DIRECT, 16#00000100).
-define(DF_1_TRANS, 16#00000200).
-define(DF_1_INTERPOSE, 16#00000400).
-define(DF_1_NODEFLIB, 16#00000800).
-define(DF_1_NODUMP, 16#00001000).
-define(DF_1_CONLFAT, 16#00002000).
-define(DF_1_ENDFILTEE, 16#00004000).
-define(DF_1_DISPRELDNE,16#00008000).
-define(DF_1_DISPRELPND,16#00010000).
-define(DF_1_NODIRECT, 16#00020000).
-define(DF_1_IGNMULDEF, 16#00040000).
-define(DF_1_NOKSYMS, 16#00080000).
-define(DF_1_NOHDR, 16#00100000).
-define(DF_1_EDITED, 16#00200000).
-define(DF_1_NORELOC, 16#00400000).
-define(DF_1_SYMINTPOSE,16#00800000).
-define(DF_1_GLOBAUDIT, 16#01000000).
-define(DF_1_SINGLETON, 16#02000000).
-define(DF_1_STUB, 16#04000000).
-define(DF_1_PIE, 16#08000000).
-define(DF_1_KMOD, 16#10000000).
-define(DF_1_WEAKFILTER,16#20000000).
-define(DF_1_NOCOMMON, 16#40000000).
%% Flag values for the DT_FLAGS entry.
-define(DF_ORIGIN, (1 bsl 0)).
-define(DF_SYMBOLIC, (1 bsl 1)).
-define(DF_TEXTREL, (1 bsl 2)).
-define(DF_BIND_NOW, (1 bsl 3)).
-define(DF_STATIC_TLS, (1 bsl 4)).
%% This structure appears in a SHT_GNU_verdef section.
-record(elf36_Verdef,
{ vd_version :: elf36_Half()
, vd_flags :: elf36_Half()
, vd_ndx :: elf36_Half()
, vd_cnt :: elf36_Half()
, vd_hash :: elf36_Word()
, vd_aud :: elf36_Word()
, vd_next :: elf36_Word()
}).
%% These constants are used for the version number of a Elf36_Verdef
%% structure.
-define(VER_DEF_NONE, 0).
-define(VER_DEF_CURRENT, 1).
%% These constants appear in the vd_flags field of a Elf36_Verdef
%% structure.
%%
%% Cf. the Solaris Linker and Libraries Guide, Ch. 7, Object File Format,
%% Versioning Sections, for a description:
%%
%% http://docs.sun.com/app/docs/doc/819-0690/chapter6-93046?l=en&a=view
-define(VER_FLG_BASE, 16#1).
-define(VER_FLG_WEAK, 16#2).
-define(VER_FLG_INFO, 16#4).
%% This structure appears in a SHT_GNU_verdef section.
-record(elf36_Verdaux,
{ vda_name :: elf36_Word()
, vda_next :: elf36_Word()
}).
%% This structure appears in a SHT_GNU_verneed section.
-record(elf36_Verneed,
{ vn_version :: elf36_Half()
, vn_cnt :: elf36_Half()
, vn_file :: elf36_Word()
, vn_aux :: elf36_Word()
, vn_next :: elf36_Word()
}).
%% These constants are used for the version number of a Elf36_Verneed
%% structure.
-define(VER_NEED_NONE, 0).
-define(VER_NEED_CURRENT, 1).
%% This structure appears in a SHT_GNU_verneed section.
-record(elf36_Vernaux,
{ vna_hash :: elf36_Word()
, vna_flags :: elf36_Half()
, vna_other :: elf36_Half()
, vna_name :: elf36_Word()
, vna_next :: elf36_Word()
}).
%% This structure appears in a SHT_GNU_versym section. This is not a
%% standard ELF structure; ELF just uses Elf36_Half.
-record(elf36_Versym,
{ vs_vers :: elf36_Half()
}).
%% These special constants can be found in an Elf36_Versym field.
-define(VER_NDX_LOCAL, 0).
-define(VER_NDX_GLOBAL, 1).
%% This flag appears in a Versym structure. It means that the symbol
%% is hidden, and is only visible with an explicit version number.
%% This is a GNU extension.
-define(VERSYM_HIDDEN, 16#8000).
%% This is the mask for the rest of the Versym information.
-define(VERSYM_VERSION, 16#7fff).
%% This is a special token which appears as part of a symbol name. It
%% indicates that the rest of the name is actually the name of a
%% version node, and is not part of the actual name. This is a GNU
%% extension. For example, the symbol name `stat@ver2' is taken to
%% mean the symbol `stat' in version `ver2'.
-define(ELF_VER_CHR, $@).
%% Structure for syminfo section.
-record(elf36_Syminfo,
{ si_boundto :: elf36_Half()
, si_flags :: elf36_Half()
}).
%% Possible values for si_boundto.
-define(SYMINFO_BT_SELF, 16#ffff). % Symbol bound to self
-define(SYMINFO_BT_PARENT, 16#fffe). % Symbol bound to parent
-define(SYMINFO_BT_LOWRESERVE, 16#ff00). % Beginning of reserved entries
%% Possible bitmasks for si_flags.
-define(SYMINFO_FLG_DIRECT, 16#0001). % Direct bound symbol
-define(SYMINFO_FLG_PASSTHRU, 16#0002). % Pass-thru symbol for translator
-define(SYMINFO_FLG_COPY, 16#0004). % Symbol is a copy-reloc
-define(SYMINFO_FLG_LAZYLOAD, 16#0008). % Symbol bound to object to be lazy loaded
%% Syminfo version values.
-define(SYMINFO_NONE, 0).
-define(SYMINFO_CURRENT, 1).
-define(SYMINFO_NUM, 2).
%% This structure appears on the stack and in NT_AUXV core file notes.
-record(elf36_Auxv,
{ a_type :: elf36_Word()
, a_val :: elf36_Addr()
}).
%% Auxv a_type values.
-define(AT_NULL, 0). % End of vector
-define(AT_IGNORE, 1). % Entry should be ignored
-define(AT_EXECFD, 2). % File descriptor of program
-define(AT_PHDR, 3). % Program headers for program
-define(AT_PHENT, 4). % Size of program header entry
-define(AT_PHNUM, 5). % Number of program headers
-define(AT_PAGESZ, 6). % System page size
-define(AT_BASE, 7). % Base address of interpreter
-define(AT_FLAGS, 8). % Flags
-define(AT_ENTRY, 9). % Entry point of program
-define(AT_NOTELF, 10). % Program is not ELF
-define(AT_UID, 11). % Real uid
-define(AT_EUID, 12). % Effective uid
-define(AT_GID, 13). % Real gid
-define(AT_EGID, 14). % Effective gid
-define(AT_CLKTCK, 17). % Frequency of times()
-define(AT_PLATFORM, 15). % String identifying platform.
-define(AT_HWCAP, 16). % Machine dependent hints about
% processor capabilities.
-define(AT_FPUCW, 18). % Used FPU control word.
-define(AT_DCACHEBSIZE, 19). % Data cache block size.
-define(AT_ICACHEBSIZE, 20). % Instruction cache block size.
-define(AT_UCACHEBSIZE, 21). % Unified cache block size.
-define(AT_IGNOREPPC, 22). % Entry should be ignored
-define(AT_SECURE, 23). % Boolean, was exec setuid-like?
-define(AT_BASE_PLATFORM, 24). % String identifying real platform,
% may differ from AT_PLATFORM.
-define(AT_RANDOM, 25). % Address of 16 random bytes.
-define(AT_EXECFN, 31). % Filename of executable.
%% Pointer to the global system page used for system calls and other
%% nice things.
-define(AT_SYSINFO, 32).
-define(AT_SYSINFO_EHDR,33). % Pointer to ELF header of system-supplied DSO.
%% More complete cache descriptions than AT_[DIU]CACHEBSIZE. If the
%% value is -1, then the cache doesn't exist. Otherwise:
%%
%% bit 0-3: Cache set-associativity; 0 means fully associative.
%% bit 4-7: Log2 of cacheline size.
%% bit 8-31: Size of the entire cache >> 8.
-define(AT_L1I_CACHESHAPE, 34).
-define(AT_L1D_CACHESHAPE, 35).
-define(AT_L2_CACHESHAPE, 36).
-define(AT_L3_CACHESHAPE, 37).
-define(AT_FREEBSD_EXECPATH, 15). % Path to the executable.
-define(AT_FREEBSD_CANARY, 16). % Canary for SSP.
-define(AT_FREEBSD_CANARYLEN, 17). % Length of the canary.
-define(AT_FREEBSD_OSRELDATE, 18). % OSRELDATE.
-define(AT_FREEBSD_NCPUS, 19). % Number of CPUs.
-define(AT_FREEBSD_PAGESIZES, 20). % Pagesizes.
-define(AT_FREEBSD_PAGESIZESLEN,21). % Number of pagesizes.
-define(AT_FREEBSD_TIMEKEEP, 22). % Pointer to timehands.
-define(AT_FREEBSD_STACKPROT, 23). % Initial stack protection.
-define(AT_FREEBSD_EHDRFLAGS, 24). % e_flags field from ELF header.
-define(AT_FREEBSD_HWCAP, 25). % CPU feature flags.
-define(AT_FREEBSD_HWCAP2, 26). % CPU feature flags 2.
-define(AT_SUN_UID, 2000). % Effective user ID.
-define(AT_SUN_RUID, 2001). % Real user ID.
-define(AT_SUN_GID, 2002). % Effective group ID.
-define(AT_SUN_RGID, 2003). % Real group ID.
-define(AT_SUN_LDELF, 2004). % Dynamic linker's ELF header.
-define(AT_SUN_LDSHDR, 2005). % Dynamic linker's section headers.
-define(AT_SUN_LDNAME, 2006). % String giving name of dynamic linker.
-define(AT_SUN_LPAGESZ, 2007). % Large pagesize.
-define(AT_SUN_PLATFORM, 2008). % Platform name string.
-define(AT_SUN_CAP_HW1, 2009). % Machine dependent hints about
% processor capabilities.
-define(AT_SUN_HWCAP, ?AT_SUN_CAP_HW1). % For backward compat only.
-define(AT_SUN_IFLUSH, 2010). % Should flush icache?
-define(AT_SUN_CPU, 2011). % CPU name string.
-define(AT_SUN_EMUL_ENTRY, 2012). % COFF entry point address.
-define(AT_SUN_EMUL_EXECFD, 2013). % COFF executable file descriptor.
-define(AT_SUN_EXECNAME, 2014). % Canonicalized file name given to execve.
-define(AT_SUN_MMU, 2015). % String for name of MMU module.
-define(AT_SUN_LDDATA, 2016). % Dynamic linker's data segment address.
-define(AT_SUN_AUXFLAGS, 2017). % AF_SUN_ flags passed from the kernel.
-define(AT_SUN_EMULATOR, 2018). % Name of emulation binary for runtime
% linker.
-define(AT_SUN_BRANDNAME, 2019). % Name of brand library.
-define(AT_SUN_BRAND_AUX1, 2020). % Aux vectors for brand modules.
-define(AT_SUN_BRAND_AUX2, 2021).
-define(AT_SUN_BRAND_AUX3, 2022).
-define(AT_SUN_CAP_HW2, 2023). % Extension of AT_SUN_CAP_HW1.
-endif. % PDP10_ELF36_HRL