mirror of
https://github.com/mikpe/pdp10-tools.git
synced 2026-01-25 11:47:25 +00:00
1426 lines
67 KiB
Erlang
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
|