1 1.4 dsl /* $NetBSD: exec_elf.h,v 1.4 2014/01/03 16:50:54 dsl Exp $ */ 2 1.1 jmc 3 1.1 jmc /*- 4 1.1 jmc * Copyright (c) 1994 The NetBSD Foundation, Inc. 5 1.1 jmc * All rights reserved. 6 1.1 jmc * 7 1.1 jmc * This code is derived from software contributed to The NetBSD Foundation 8 1.1 jmc * by Christos Zoulas. 9 1.1 jmc * 10 1.1 jmc * Redistribution and use in source and binary forms, with or without 11 1.1 jmc * modification, are permitted provided that the following conditions 12 1.1 jmc * are met: 13 1.1 jmc * 1. Redistributions of source code must retain the above copyright 14 1.1 jmc * notice, this list of conditions and the following disclaimer. 15 1.1 jmc * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 jmc * notice, this list of conditions and the following disclaimer in the 17 1.1 jmc * documentation and/or other materials provided with the distribution. 18 1.1 jmc * 19 1.1 jmc * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 jmc * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 jmc * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 jmc * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 jmc * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 jmc * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 jmc * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 jmc * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 jmc * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 jmc * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 jmc * POSSIBILITY OF SUCH DAMAGE. 30 1.1 jmc */ 31 1.1 jmc 32 1.1 jmc #ifndef _SYS_EXEC_ELF_H_ 33 1.1 jmc #define _SYS_EXEC_ELF_H_ 34 1.1 jmc 35 1.1 jmc /* 36 1.1 jmc * The current ELF ABI specification is available at: 37 1.1 jmc * http://www.sco.com/developers/gabi/ 38 1.1 jmc * 39 1.1 jmc * Current header definitions are in: 40 1.1 jmc * http://www.sco.com/developers/gabi/latest/ch4.eheader.html 41 1.1 jmc */ 42 1.1 jmc 43 1.1 jmc #if defined(_KERNEL) || defined(_STANDALONE) 44 1.1 jmc #include <sys/types.h> 45 1.1 jmc #else 46 1.1 jmc #include <inttypes.h> 47 1.1 jmc #endif /* _KERNEL || _STANDALONE */ 48 1.1 jmc 49 1.1 jmc typedef uint8_t Elf_Byte; 50 1.1 jmc 51 1.1 jmc typedef uint32_t Elf32_Addr; 52 1.1 jmc #define ELF32_FSZ_ADDR 4 53 1.1 jmc typedef uint32_t Elf32_Off; 54 1.1 jmc #define ELF32_FSZ_OFF 4 55 1.1 jmc typedef int32_t Elf32_Sword; 56 1.1 jmc #define ELF32_FSZ_SWORD 4 57 1.1 jmc typedef uint32_t Elf32_Word; 58 1.1 jmc #define ELF32_FSZ_WORD 4 59 1.1 jmc typedef uint16_t Elf32_Half; 60 1.1 jmc #define ELF32_FSZ_HALF 2 61 1.1 jmc 62 1.1 jmc typedef uint64_t Elf64_Addr; 63 1.1 jmc #define ELF64_FSZ_ADDR 8 64 1.1 jmc typedef uint64_t Elf64_Off; 65 1.1 jmc #define ELF64_FSZ_OFF 8 66 1.1 jmc 67 1.1 jmc #ifndef ELF64_FSZ_SWORD 68 1.1 jmc typedef int32_t Elf64_Sword; 69 1.1 jmc #define ELF64_FSZ_SWORD 4 70 1.1 jmc #endif /* ELF64_FSZ_SWORD */ 71 1.1 jmc #ifndef ELF64_FSZ_WORD 72 1.1 jmc typedef uint32_t Elf64_Word; 73 1.1 jmc #define ELF64_FSZ_WORD 4 74 1.1 jmc #endif /* ELF64_FSZ_WORD */ 75 1.1 jmc 76 1.1 jmc typedef int64_t Elf64_Sxword; 77 1.1 jmc #define ELF64_FSZ_XWORD 8 78 1.1 jmc typedef uint64_t Elf64_Xword; 79 1.1 jmc #define ELF64_FSZ_XWORD 8 80 1.3 joerg typedef uint16_t Elf64_Half; 81 1.3 joerg #define ELF64_FSZ_HALF 2 82 1.1 jmc 83 1.1 jmc /* 84 1.1 jmc * ELF Header 85 1.1 jmc */ 86 1.1 jmc #define ELF_NIDENT 16 87 1.1 jmc 88 1.1 jmc typedef struct { 89 1.1 jmc unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ 90 1.1 jmc Elf32_Half e_type; /* file type */ 91 1.1 jmc Elf32_Half e_machine; /* machine type */ 92 1.1 jmc Elf32_Word e_version; /* version number */ 93 1.1 jmc Elf32_Addr e_entry; /* entry point */ 94 1.1 jmc Elf32_Off e_phoff; /* Program hdr offset */ 95 1.1 jmc Elf32_Off e_shoff; /* Section hdr offset */ 96 1.1 jmc Elf32_Word e_flags; /* Processor flags */ 97 1.1 jmc Elf32_Half e_ehsize; /* sizeof ehdr */ 98 1.1 jmc Elf32_Half e_phentsize; /* Program header entry size */ 99 1.1 jmc Elf32_Half e_phnum; /* Number of program headers */ 100 1.1 jmc Elf32_Half e_shentsize; /* Section header entry size */ 101 1.1 jmc Elf32_Half e_shnum; /* Number of section headers */ 102 1.1 jmc Elf32_Half e_shstrndx; /* String table index */ 103 1.1 jmc } Elf32_Ehdr; 104 1.1 jmc 105 1.1 jmc typedef struct { 106 1.1 jmc unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ 107 1.3 joerg Elf64_Half e_type; /* file type */ 108 1.3 joerg Elf64_Half e_machine; /* machine type */ 109 1.3 joerg Elf64_Word e_version; /* version number */ 110 1.1 jmc Elf64_Addr e_entry; /* entry point */ 111 1.1 jmc Elf64_Off e_phoff; /* Program hdr offset */ 112 1.1 jmc Elf64_Off e_shoff; /* Section hdr offset */ 113 1.3 joerg Elf64_Word e_flags; /* Processor flags */ 114 1.3 joerg Elf64_Half e_ehsize; /* sizeof ehdr */ 115 1.3 joerg Elf64_Half e_phentsize; /* Program header entry size */ 116 1.3 joerg Elf64_Half e_phnum; /* Number of program headers */ 117 1.3 joerg Elf64_Half e_shentsize; /* Section header entry size */ 118 1.3 joerg Elf64_Half e_shnum; /* Number of section headers */ 119 1.3 joerg Elf64_Half e_shstrndx; /* String table index */ 120 1.1 jmc } Elf64_Ehdr; 121 1.1 jmc 122 1.1 jmc /* e_ident offsets */ 123 1.1 jmc #define EI_MAG0 0 /* '\177' */ 124 1.1 jmc #define EI_MAG1 1 /* 'E' */ 125 1.1 jmc #define EI_MAG2 2 /* 'L' */ 126 1.1 jmc #define EI_MAG3 3 /* 'F' */ 127 1.1 jmc #define EI_CLASS 4 /* File class */ 128 1.1 jmc #define EI_DATA 5 /* Data encoding */ 129 1.1 jmc #define EI_VERSION 6 /* File version */ 130 1.1 jmc #define EI_OSABI 7 /* Operating system/ABI identification */ 131 1.1 jmc #define EI_ABIVERSION 8 /* ABI version */ 132 1.1 jmc #define EI_PAD 9 /* Start of padding bytes up to EI_NIDENT*/ 133 1.1 jmc #define EI_NIDENT 16 /* First non-ident header byte */ 134 1.1 jmc 135 1.1 jmc /* e_ident[EI_MAG0,EI_MAG3] */ 136 1.1 jmc #define ELFMAG0 0x7f 137 1.1 jmc #define ELFMAG1 'E' 138 1.1 jmc #define ELFMAG2 'L' 139 1.1 jmc #define ELFMAG3 'F' 140 1.1 jmc #define ELFMAG "\177ELF" 141 1.1 jmc #define SELFMAG 4 142 1.1 jmc 143 1.1 jmc /* e_ident[EI_CLASS] */ 144 1.1 jmc #define ELFCLASSNONE 0 /* Invalid class */ 145 1.1 jmc #define ELFCLASS32 1 /* 32-bit objects */ 146 1.1 jmc #define ELFCLASS64 2 /* 64-bit objects */ 147 1.1 jmc #define ELFCLASSNUM 3 148 1.1 jmc 149 1.1 jmc /* e_ident[EI_DATA] */ 150 1.1 jmc #define ELFDATANONE 0 /* Invalid data encoding */ 151 1.1 jmc #define ELFDATA2LSB 1 /* 2's complement values, LSB first */ 152 1.1 jmc #define ELFDATA2MSB 2 /* 2's complement values, MSB first */ 153 1.1 jmc 154 1.1 jmc /* e_ident[EI_VERSION] */ 155 1.1 jmc #define EV_NONE 0 /* Invalid version */ 156 1.1 jmc #define EV_CURRENT 1 /* Current version */ 157 1.1 jmc #define EV_NUM 2 158 1.1 jmc 159 1.1 jmc /* e_ident[EI_OSABI] */ 160 1.1 jmc #define ELFOSABI_SYSV 0 /* UNIX System V ABI */ 161 1.1 jmc #define ELFOSABI_HPUX 1 /* HP-UX operating system */ 162 1.1 jmc #define ELFOSABI_NETBSD 2 /* NetBSD */ 163 1.1 jmc #define ELFOSABI_LINUX 3 /* GNU/Linux */ 164 1.1 jmc #define ELFOSABI_HURD 4 /* GNU/Hurd */ 165 1.1 jmc #define ELFOSABI_86OPEN 5 /* 86Open */ 166 1.1 jmc #define ELFOSABI_SOLARIS 6 /* Solaris */ 167 1.1 jmc #define ELFOSABI_MONTEREY 7 /* Monterey */ 168 1.1 jmc #define ELFOSABI_IRIX 8 /* IRIX */ 169 1.1 jmc #define ELFOSABI_FREEBSD 9 /* FreeBSD */ 170 1.1 jmc #define ELFOSABI_TRU64 10 /* TRU64 UNIX */ 171 1.1 jmc #define ELFOSABI_MODESTO 11 /* Novell Modesto */ 172 1.1 jmc #define ELFOSABI_OPENBSD 12 /* OpenBSD */ 173 1.1 jmc /* Unofficial OSABIs follow */ 174 1.1 jmc #define ELFOSABI_ARM 97 /* ARM */ 175 1.1 jmc #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ 176 1.1 jmc 177 1.1 jmc /* e_type */ 178 1.1 jmc #define ET_NONE 0 /* No file type */ 179 1.1 jmc #define ET_REL 1 /* Relocatable file */ 180 1.1 jmc #define ET_EXEC 2 /* Executable file */ 181 1.1 jmc #define ET_DYN 3 /* Shared object file */ 182 1.1 jmc #define ET_CORE 4 /* Core file */ 183 1.1 jmc #define ET_NUM 5 184 1.1 jmc 185 1.1 jmc #define ET_LOOS 0xfe00 /* Operating system specific range */ 186 1.1 jmc #define ET_HIOS 0xfeff 187 1.1 jmc #define ET_LOPROC 0xff00 /* Processor-specific range */ 188 1.1 jmc #define ET_HIPROC 0xffff 189 1.1 jmc 190 1.1 jmc /* e_machine */ 191 1.1 jmc #define EM_NONE 0 /* No machine */ 192 1.1 jmc #define EM_M32 1 /* AT&T WE 32100 */ 193 1.1 jmc #define EM_SPARC 2 /* SPARC */ 194 1.1 jmc #define EM_386 3 /* Intel 80386 */ 195 1.1 jmc #define EM_68K 4 /* Motorola 68000 */ 196 1.1 jmc #define EM_88K 5 /* Motorola 88000 */ 197 1.1 jmc #define EM_486 6 /* Intel 80486 */ 198 1.1 jmc #define EM_860 7 /* Intel 80860 */ 199 1.1 jmc #define EM_MIPS 8 /* MIPS I Architecture */ 200 1.1 jmc #define EM_S370 9 /* Amdahl UTS on System/370 */ 201 1.1 jmc #define EM_MIPS_RS3_LE 10 /* MIPS RS3000 Little-endian */ 202 1.1 jmc /* 11-14 - Reserved */ 203 1.1 jmc #define EM_RS6000 11 /* IBM RS/6000 XXX reserved */ 204 1.1 jmc #define EM_PARISC 15 /* Hewlett-Packard PA-RISC */ 205 1.1 jmc #define EM_NCUBE 16 /* NCube XXX reserved */ 206 1.1 jmc #define EM_VPP500 17 /* Fujitsu VPP500 */ 207 1.1 jmc #define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ 208 1.1 jmc #define EM_960 19 /* Intel 80960 */ 209 1.1 jmc #define EM_PPC 20 /* PowerPC */ 210 1.1 jmc #define EM_PPC64 21 /* 64-bit PowerPC */ 211 1.1 jmc /* 22-35 - Reserved */ 212 1.1 jmc #define EM_V800 36 /* NEC V800 */ 213 1.1 jmc #define EM_FR20 37 /* Fujitsu FR20 */ 214 1.1 jmc #define EM_RH32 38 /* TRW RH-32 */ 215 1.1 jmc #define EM_RCE 39 /* Motorola RCE */ 216 1.1 jmc #define EM_ARM 40 /* Advanced RISC Machines ARM */ 217 1.1 jmc #define EM_ALPHA 41 /* DIGITAL Alpha */ 218 1.1 jmc #define EM_SH 42 /* Hitachi Super-H */ 219 1.1 jmc #define EM_SPARCV9 43 /* SPARC Version 9 */ 220 1.1 jmc #define EM_TRICORE 44 /* Siemens Tricore */ 221 1.1 jmc #define EM_ARC 45 /* Argonaut RISC Core */ 222 1.1 jmc #define EM_H8_300 46 /* Hitachi H8/300 */ 223 1.1 jmc #define EM_H8_300H 47 /* Hitachi H8/300H */ 224 1.1 jmc #define EM_H8S 48 /* Hitachi H8S */ 225 1.1 jmc #define EM_H8_500 49 /* Hitachi H8/500 */ 226 1.1 jmc #define EM_IA_64 50 /* Intel Merced Processor */ 227 1.1 jmc #define EM_MIPS_X 51 /* Stanford MIPS-X */ 228 1.1 jmc #define EM_COLDFIRE 52 /* Motorola Coldfire */ 229 1.1 jmc #define EM_68HC12 53 /* Motorola MC68HC12 */ 230 1.1 jmc #define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */ 231 1.1 jmc #define EM_PCP 55 /* Siemens PCP */ 232 1.1 jmc #define EM_NCPU 56 /* Sony nCPU embedded RISC processor */ 233 1.1 jmc #define EM_NDR1 57 /* Denso NDR1 microprocessor */ 234 1.1 jmc #define EM_STARCORE 58 /* Motorola Star*Core processor */ 235 1.1 jmc #define EM_ME16 59 /* Toyota ME16 processor */ 236 1.1 jmc #define EM_ST100 60 /* STMicroelectronics ST100 processor */ 237 1.1 jmc #define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded family processor */ 238 1.1 jmc #define EM_X86_64 62 /* AMD x86-64 architecture */ 239 1.1 jmc #define EM_PDSP 63 /* Sony DSP Processor */ 240 1.1 jmc #define EM_PDP10 64 /* Digital Equipment Corp. PDP-10 */ 241 1.1 jmc #define EM_PDP11 65 /* Digital Equipment Corp. PDP-11 */ 242 1.1 jmc #define EM_FX66 66 /* Siemens FX66 microcontroller */ 243 1.1 jmc #define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 bit microcontroller */ 244 1.1 jmc #define EM_ST7 68 /* STMicroelectronics ST7 8-bit microcontroller */ 245 1.1 jmc #define EM_68HC16 69 /* Motorola MC68HC16 Microcontroller */ 246 1.1 jmc #define EM_68HC11 70 /* Motorola MC68HC11 Microcontroller */ 247 1.1 jmc #define EM_68HC08 71 /* Motorola MC68HC08 Microcontroller */ 248 1.1 jmc #define EM_68HC05 72 /* Motorola MC68HC05 Microcontroller */ 249 1.1 jmc #define EM_SVX 73 /* Silicon Graphics SVx */ 250 1.1 jmc #define EM_ST19 74 /* STMicroelectronics ST19 8-bit CPU */ 251 1.1 jmc #define EM_VAX 75 /* Digital VAX */ 252 1.1 jmc #define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ 253 1.1 jmc #define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded CPU */ 254 1.1 jmc #define EM_FIREPATH 78 /* Element 14 64-bit DSP processor */ 255 1.1 jmc #define EM_ZSP 79 /* LSI Logic's 16-bit DSP processor */ 256 1.1 jmc #define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ 257 1.1 jmc #define EM_HUANY 81 /* Harvard's machine-independent format */ 258 1.1 jmc #define EM_PRISM 82 /* SiTera Prism */ 259 1.1 jmc #define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ 260 1.1 jmc #define EM_FR30 84 /* Fujitsu FR30 */ 261 1.1 jmc #define EM_D10V 85 /* Mitsubishi D10V */ 262 1.1 jmc #define EM_D30V 86 /* Mitsubishi D30V */ 263 1.1 jmc #define EM_V850 87 /* NEC v850 */ 264 1.1 jmc #define EM_M32R 88 /* Mitsubishi M32R */ 265 1.1 jmc #define EM_MN10300 89 /* Matsushita MN10300 */ 266 1.1 jmc #define EM_MN10200 90 /* Matsushita MN10200 */ 267 1.1 jmc #define EM_PJ 91 /* picoJava */ 268 1.1 jmc #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ 269 1.1 jmc #define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ 270 1.1 jmc #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ 271 1.1 jmc #define EM_NS32K 97 /* National Semiconductor 32000 series */ 272 1.1 jmc 273 1.1 jmc /* Unofficial machine types follow */ 274 1.1 jmc #define EM_ALPHA_EXP 36902 /* used by NetBSD/alpha; obsolete */ 275 1.1 jmc #define EM_NUM 36903 276 1.1 jmc 277 1.1 jmc /* 278 1.1 jmc * Program Header 279 1.1 jmc */ 280 1.1 jmc typedef struct { 281 1.1 jmc Elf32_Word p_type; /* entry type */ 282 1.1 jmc Elf32_Off p_offset; /* offset */ 283 1.1 jmc Elf32_Addr p_vaddr; /* virtual address */ 284 1.1 jmc Elf32_Addr p_paddr; /* physical address */ 285 1.1 jmc Elf32_Word p_filesz; /* file size */ 286 1.1 jmc Elf32_Word p_memsz; /* memory size */ 287 1.1 jmc Elf32_Word p_flags; /* flags */ 288 1.1 jmc Elf32_Word p_align; /* memory & file alignment */ 289 1.1 jmc } Elf32_Phdr; 290 1.1 jmc 291 1.1 jmc typedef struct { 292 1.3 joerg Elf64_Word p_type; /* entry type */ 293 1.3 joerg Elf64_Word p_flags; /* flags */ 294 1.1 jmc Elf64_Off p_offset; /* offset */ 295 1.1 jmc Elf64_Addr p_vaddr; /* virtual address */ 296 1.1 jmc Elf64_Addr p_paddr; /* physical address */ 297 1.1 jmc Elf64_Xword p_filesz; /* file size */ 298 1.1 jmc Elf64_Xword p_memsz; /* memory size */ 299 1.1 jmc Elf64_Xword p_align; /* memory & file alignment */ 300 1.1 jmc } Elf64_Phdr; 301 1.1 jmc 302 1.1 jmc /* p_type */ 303 1.1 jmc #define PT_NULL 0 /* Program header table entry unused */ 304 1.1 jmc #define PT_LOAD 1 /* Loadable program segment */ 305 1.1 jmc #define PT_DYNAMIC 2 /* Dynamic linking information */ 306 1.1 jmc #define PT_INTERP 3 /* Program interpreter */ 307 1.1 jmc #define PT_NOTE 4 /* Auxiliary information */ 308 1.1 jmc #define PT_SHLIB 5 /* Reserved, unspecified semantics */ 309 1.1 jmc #define PT_PHDR 6 /* Entry for header table itself */ 310 1.1 jmc #define PT_NUM 7 311 1.1 jmc 312 1.1 jmc #define PT_LOOS 0x60000000 /* OS-specific range */ 313 1.1 jmc #define PT_HIOS 0x6fffffff 314 1.1 jmc #define PT_LOPROC 0x70000000 /* Processor-specific range */ 315 1.1 jmc #define PT_HIPROC 0x7fffffff 316 1.1 jmc 317 1.1 jmc #define PT_MIPS_REGINFO 0x70000000 318 1.1 jmc 319 1.1 jmc /* p_flags */ 320 1.1 jmc #define PF_R 0x4 /* Segment is readable */ 321 1.1 jmc #define PF_W 0x2 /* Segment is writable */ 322 1.1 jmc #define PF_X 0x1 /* Segment is executable */ 323 1.1 jmc 324 1.1 jmc #define PF_MASKOS 0x0ff00000 /* Operating system specific values */ 325 1.1 jmc #define PF_MASKPROC 0xf0000000 /* Processor-specific values */ 326 1.1 jmc 327 1.1 jmc /* 328 1.1 jmc * Section Headers 329 1.1 jmc */ 330 1.1 jmc typedef struct { 331 1.1 jmc Elf32_Word sh_name; /* section name (.shstrtab index) */ 332 1.1 jmc Elf32_Word sh_type; /* section type */ 333 1.1 jmc Elf32_Word sh_flags; /* section flags */ 334 1.1 jmc Elf32_Addr sh_addr; /* virtual address */ 335 1.1 jmc Elf32_Off sh_offset; /* file offset */ 336 1.1 jmc Elf32_Word sh_size; /* section size */ 337 1.1 jmc Elf32_Word sh_link; /* link to another */ 338 1.1 jmc Elf32_Word sh_info; /* misc info */ 339 1.1 jmc Elf32_Word sh_addralign; /* memory alignment */ 340 1.1 jmc Elf32_Word sh_entsize; /* table entry size */ 341 1.1 jmc } Elf32_Shdr; 342 1.1 jmc 343 1.1 jmc typedef struct { 344 1.3 joerg Elf64_Word sh_name; /* section name (.shstrtab index) */ 345 1.3 joerg Elf64_Word sh_type; /* section type */ 346 1.1 jmc Elf64_Xword sh_flags; /* section flags */ 347 1.1 jmc Elf64_Addr sh_addr; /* virtual address */ 348 1.1 jmc Elf64_Off sh_offset; /* file offset */ 349 1.1 jmc Elf64_Xword sh_size; /* section size */ 350 1.3 joerg Elf64_Word sh_link; /* link to another */ 351 1.3 joerg Elf64_Word sh_info; /* misc info */ 352 1.1 jmc Elf64_Xword sh_addralign; /* memory alignment */ 353 1.1 jmc Elf64_Xword sh_entsize; /* table entry size */ 354 1.1 jmc } Elf64_Shdr; 355 1.1 jmc 356 1.1 jmc /* sh_type */ 357 1.1 jmc #define SHT_NULL 0 /* Section header table entry unused */ 358 1.1 jmc #define SHT_PROGBITS 1 /* Program information */ 359 1.1 jmc #define SHT_SYMTAB 2 /* Symbol table */ 360 1.1 jmc #define SHT_STRTAB 3 /* String table */ 361 1.1 jmc #define SHT_RELA 4 /* Relocation information w/ addend */ 362 1.1 jmc #define SHT_HASH 5 /* Symbol hash table */ 363 1.1 jmc #define SHT_DYNAMIC 6 /* Dynamic linking information */ 364 1.1 jmc #define SHT_NOTE 7 /* Auxiliary information */ 365 1.1 jmc #define SHT_NOBITS 8 /* No space allocated in file image */ 366 1.1 jmc #define SHT_REL 9 /* Relocation information w/o addend */ 367 1.1 jmc #define SHT_SHLIB 10 /* Reserved, unspecified semantics */ 368 1.1 jmc #define SHT_DYNSYM 11 /* Symbol table for dynamic linker */ 369 1.1 jmc #define SHT_NUM 12 370 1.1 jmc 371 1.1 jmc #define SHT_LOOS 0x60000000 /* Operating system specific range */ 372 1.1 jmc #define SHT_HIOS 0x6fffffff 373 1.1 jmc #define SHT_LOPROC 0x70000000 /* Processor-specific range */ 374 1.1 jmc #define SHT_HIPROC 0x7fffffff 375 1.1 jmc #define SHT_LOUSER 0x80000000 /* Application-specific range */ 376 1.1 jmc #define SHT_HIUSER 0xffffffff 377 1.1 jmc 378 1.1 jmc /* sh_flags */ 379 1.1 jmc #define SHF_WRITE 0x1 /* Section contains writable data */ 380 1.1 jmc #define SHF_ALLOC 0x2 /* Section occupies memory */ 381 1.1 jmc #define SHF_EXECINSTR 0x4 /* Section contains executable insns */ 382 1.1 jmc 383 1.1 jmc #define SHF_MASKOS 0x0f000000 /* Operating system specific values */ 384 1.1 jmc #define SHF_MASKPROC 0xf0000000 /* Processor-specific values */ 385 1.1 jmc 386 1.1 jmc /* 387 1.1 jmc * Symbol Table 388 1.1 jmc */ 389 1.1 jmc typedef struct { 390 1.1 jmc Elf32_Word st_name; /* Symbol name (.symtab index) */ 391 1.1 jmc Elf32_Word st_value; /* value of symbol */ 392 1.1 jmc Elf32_Word st_size; /* size of symbol */ 393 1.1 jmc Elf_Byte st_info; /* type / binding attrs */ 394 1.1 jmc Elf_Byte st_other; /* unused */ 395 1.1 jmc Elf32_Half st_shndx; /* section index of symbol */ 396 1.1 jmc } Elf32_Sym; 397 1.1 jmc 398 1.1 jmc typedef struct { 399 1.3 joerg Elf64_Word st_name; /* Symbol name (.symtab index) */ 400 1.1 jmc Elf_Byte st_info; /* type / binding attrs */ 401 1.1 jmc Elf_Byte st_other; /* unused */ 402 1.3 joerg Elf64_Half st_shndx; /* section index of symbol */ 403 1.1 jmc Elf64_Addr st_value; /* value of symbol */ 404 1.1 jmc Elf64_Xword st_size; /* size of symbol */ 405 1.1 jmc } Elf64_Sym; 406 1.1 jmc 407 1.1 jmc /* Symbol Table index of the undefined symbol */ 408 1.1 jmc #define ELF_SYM_UNDEFINED 0 409 1.1 jmc 410 1.1 jmc /* st_info: Symbol Bindings */ 411 1.1 jmc #define STB_LOCAL 0 /* local symbol */ 412 1.1 jmc #define STB_GLOBAL 1 /* global symbol */ 413 1.1 jmc #define STB_WEAK 2 /* weakly defined global symbol */ 414 1.1 jmc #define STB_NUM 3 415 1.1 jmc 416 1.1 jmc #define STB_LOOS 10 /* Operating system specific range */ 417 1.1 jmc #define STB_HIOS 12 418 1.1 jmc #define STB_LOPROC 13 /* Processor-specific range */ 419 1.1 jmc #define STB_HIPROC 15 420 1.1 jmc 421 1.1 jmc /* st_info: Symbol Types */ 422 1.1 jmc #define STT_NOTYPE 0 /* Type not specified */ 423 1.1 jmc #define STT_OBJECT 1 /* Associated with a data object */ 424 1.1 jmc #define STT_FUNC 2 /* Associated with a function */ 425 1.1 jmc #define STT_SECTION 3 /* Associated with a section */ 426 1.1 jmc #define STT_FILE 4 /* Associated with a file name */ 427 1.1 jmc #define STT_NUM 5 428 1.1 jmc 429 1.1 jmc #define STT_LOOS 10 /* Operating system specific range */ 430 1.1 jmc #define STT_HIOS 12 431 1.1 jmc #define STT_LOPROC 13 /* Processor-specific range */ 432 1.1 jmc #define STT_HIPROC 15 433 1.1 jmc 434 1.1 jmc /* st_info utility macros */ 435 1.1 jmc #define ELF32_ST_BIND(info) ((Elf32_Word)(info) >> 4) 436 1.1 jmc #define ELF32_ST_TYPE(info) ((Elf32_Word)(info) & 0xf) 437 1.1 jmc #define ELF32_ST_INFO(bind,type) ((Elf_Byte)(((bind) << 4) | ((type) & 0xf))) 438 1.1 jmc 439 1.1 jmc #define ELF64_ST_BIND(info) ((Elf64_Xword)(info) >> 4) 440 1.1 jmc #define ELF64_ST_TYPE(info) ((Elf64_Xword)(info) & 0xf) 441 1.1 jmc #define ELF64_ST_INFO(bind,type) ((Elf_Byte)(((bind) << 4) | ((type) & 0xf))) 442 1.1 jmc 443 1.1 jmc /* 444 1.1 jmc * Special section indexes 445 1.1 jmc */ 446 1.1 jmc #define SHN_UNDEF 0 /* Undefined section */ 447 1.1 jmc 448 1.1 jmc #define SHN_LORESERVE 0xff00 /* Reserved range */ 449 1.1 jmc #define SHN_ABS 0xfff1 /* Absolute symbols */ 450 1.1 jmc #define SHN_COMMON 0xfff2 /* Common symbols */ 451 1.1 jmc #define SHN_HIRESERVE 0xffff 452 1.1 jmc 453 1.1 jmc #define SHN_LOPROC 0xff00 /* Processor-specific range */ 454 1.1 jmc #define SHN_HIPROC 0xff1f 455 1.1 jmc #define SHN_LOOS 0xff20 /* Operating system specific range */ 456 1.1 jmc #define SHN_HIOS 0xff3f 457 1.1 jmc 458 1.1 jmc #define SHN_MIPS_ACOMMON 0xff00 459 1.1 jmc #define SHN_MIPS_TEXT 0xff01 460 1.1 jmc #define SHN_MIPS_DATA 0xff02 461 1.1 jmc #define SHN_MIPS_SCOMMON 0xff03 462 1.1 jmc 463 1.1 jmc /* 464 1.1 jmc * Relocation Entries 465 1.1 jmc */ 466 1.1 jmc typedef struct { 467 1.1 jmc Elf32_Word r_offset; /* where to do it */ 468 1.1 jmc Elf32_Word r_info; /* index & type of relocation */ 469 1.1 jmc } Elf32_Rel; 470 1.1 jmc 471 1.1 jmc typedef struct { 472 1.1 jmc Elf32_Word r_offset; /* where to do it */ 473 1.1 jmc Elf32_Word r_info; /* index & type of relocation */ 474 1.1 jmc Elf32_Sword r_addend; /* adjustment value */ 475 1.1 jmc } Elf32_Rela; 476 1.1 jmc 477 1.1 jmc /* r_info utility macros */ 478 1.1 jmc #define ELF32_R_SYM(info) ((info) >> 8) 479 1.1 jmc #define ELF32_R_TYPE(info) ((info) & 0xff) 480 1.1 jmc #define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type)) 481 1.1 jmc 482 1.1 jmc typedef struct { 483 1.1 jmc Elf64_Addr r_offset; /* where to do it */ 484 1.1 jmc Elf64_Xword r_info; /* index & type of relocation */ 485 1.1 jmc } Elf64_Rel; 486 1.1 jmc 487 1.1 jmc typedef struct { 488 1.1 jmc Elf64_Addr r_offset; /* where to do it */ 489 1.1 jmc Elf64_Xword r_info; /* index & type of relocation */ 490 1.1 jmc Elf64_Sxword r_addend; /* adjustment value */ 491 1.1 jmc } Elf64_Rela; 492 1.1 jmc 493 1.1 jmc /* r_info utility macros */ 494 1.1 jmc #define ELF64_R_SYM(info) ((info) >> 32) 495 1.1 jmc #define ELF64_R_TYPE(info) ((info) & 0xffffffff) 496 1.1 jmc #define ELF64_R_INFO(sym,type) (((sym) << 32) + (type)) 497 1.1 jmc 498 1.1 jmc /* 499 1.1 jmc * Dynamic Section structure array 500 1.1 jmc */ 501 1.1 jmc typedef struct { 502 1.1 jmc Elf32_Word d_tag; /* entry tag value */ 503 1.1 jmc union { 504 1.1 jmc Elf32_Addr d_ptr; 505 1.1 jmc Elf32_Word d_val; 506 1.1 jmc } d_un; 507 1.1 jmc } Elf32_Dyn; 508 1.1 jmc 509 1.1 jmc typedef struct { 510 1.1 jmc Elf64_Xword d_tag; /* entry tag value */ 511 1.1 jmc union { 512 1.1 jmc Elf64_Addr d_ptr; 513 1.1 jmc Elf64_Xword d_val; 514 1.1 jmc } d_un; 515 1.1 jmc } Elf64_Dyn; 516 1.1 jmc 517 1.1 jmc /* d_tag */ 518 1.1 jmc #define DT_NULL 0 /* Marks end of dynamic array */ 519 1.1 jmc #define DT_NEEDED 1 /* Name of needed library (DT_STRTAB offset) */ 520 1.1 jmc #define DT_PLTRELSZ 2 /* Size, in bytes, of relocations in PLT */ 521 1.1 jmc #define DT_PLTGOT 3 /* Address of PLT and/or GOT */ 522 1.1 jmc #define DT_HASH 4 /* Address of symbol hash table */ 523 1.1 jmc #define DT_STRTAB 5 /* Address of string table */ 524 1.1 jmc #define DT_SYMTAB 6 /* Address of symbol table */ 525 1.1 jmc #define DT_RELA 7 /* Address of Rela relocation table */ 526 1.1 jmc #define DT_RELASZ 8 /* Size, in bytes, of DT_RELA table */ 527 1.1 jmc #define DT_RELAENT 9 /* Size, in bytes, of one DT_RELA entry */ 528 1.1 jmc #define DT_STRSZ 10 /* Size, in bytes, of DT_STRTAB table */ 529 1.1 jmc #define DT_SYMENT 11 /* Size, in bytes, of one DT_SYMTAB entry */ 530 1.1 jmc #define DT_INIT 12 /* Address of initialization function */ 531 1.1 jmc #define DT_FINI 13 /* Address of termination function */ 532 1.1 jmc #define DT_SONAME 14 /* Shared object name (DT_STRTAB offset) */ 533 1.1 jmc #define DT_RPATH 15 /* Library search path (DT_STRTAB offset) */ 534 1.1 jmc #define DT_SYMBOLIC 16 /* Start symbol search within local object */ 535 1.1 jmc #define DT_REL 17 /* Address of Rel relocation table */ 536 1.1 jmc #define DT_RELSZ 18 /* Size, in bytes, of DT_REL table */ 537 1.1 jmc #define DT_RELENT 19 /* Size, in bytes, of one DT_REL entry */ 538 1.1 jmc #define DT_PLTREL 20 /* Type of PLT relocation entries */ 539 1.1 jmc #define DT_DEBUG 21 /* Used for debugging; unspecified */ 540 1.1 jmc #define DT_TEXTREL 22 /* Relocations might modify non-writable seg */ 541 1.1 jmc #define DT_JMPREL 23 /* Address of relocations associated with PLT */ 542 1.1 jmc #define DT_BIND_NOW 24 /* Process all relocations at load-time */ 543 1.1 jmc #define DT_INIT_ARRAY 25 /* Address of initialization function array */ 544 1.1 jmc #define DT_FINI_ARRAY 26 /* Size, in bytes, of DT_INIT_ARRAY array */ 545 1.1 jmc #define DT_INIT_ARRAYSZ 27 /* Address of termination function array */ 546 1.1 jmc #define DT_FINI_ARRAYSZ 28 /* Size, in bytes, of DT_FINI_ARRAY array*/ 547 1.1 jmc #define DT_NUM 29 548 1.1 jmc 549 1.1 jmc #define DT_LOOS 0x60000000 /* Operating system specific range */ 550 1.1 jmc #define DT_HIOS 0x6fffffff 551 1.1 jmc #define DT_LOPROC 0x70000000 /* Processor-specific range */ 552 1.1 jmc #define DT_HIPROC 0x7fffffff 553 1.1 jmc 554 1.1 jmc /* 555 1.1 jmc * Auxiliary Vectors 556 1.1 jmc */ 557 1.1 jmc typedef struct { 558 1.1 jmc Elf32_Word a_type; /* 32-bit id */ 559 1.1 jmc Elf32_Word a_v; /* 32-bit id */ 560 1.1 jmc } Aux32Info; 561 1.1 jmc 562 1.1 jmc typedef struct { 563 1.3 joerg Elf64_Word a_type; /* 32-bit id */ 564 1.1 jmc Elf64_Xword a_v; /* 64-bit id */ 565 1.1 jmc } Aux64Info; 566 1.1 jmc 567 1.1 jmc /* a_type */ 568 1.1 jmc #define AT_NULL 0 /* Marks end of array */ 569 1.1 jmc #define AT_IGNORE 1 /* No meaning, a_un is undefined */ 570 1.1 jmc #define AT_EXECFD 2 /* Open file descriptor of object file */ 571 1.1 jmc #define AT_PHDR 3 /* &phdr[0] */ 572 1.1 jmc #define AT_PHENT 4 /* sizeof(phdr[0]) */ 573 1.1 jmc #define AT_PHNUM 5 /* # phdr entries */ 574 1.1 jmc #define AT_PAGESZ 6 /* PAGESIZE */ 575 1.1 jmc #define AT_BASE 7 /* Interpreter base addr */ 576 1.1 jmc #define AT_FLAGS 8 /* Processor flags */ 577 1.1 jmc #define AT_ENTRY 9 /* Entry address of executable */ 578 1.1 jmc #define AT_DCACHEBSIZE 10 /* Data cache block size */ 579 1.1 jmc #define AT_ICACHEBSIZE 11 /* Instruction cache block size */ 580 1.1 jmc #define AT_UCACHEBSIZE 12 /* Unified cache block size */ 581 1.1 jmc 582 1.1 jmc /* Vendor specific */ 583 1.1 jmc #define AT_MIPS_NOTELF 10 /* XXX a_val != 0 -> MIPS XCOFF executable */ 584 1.1 jmc 585 1.1 jmc #define AT_EUID 2000 /* euid (solaris compatible numbers) */ 586 1.1 jmc #define AT_RUID 2001 /* ruid (solaris compatible numbers) */ 587 1.1 jmc #define AT_EGID 2002 /* egid (solaris compatible numbers) */ 588 1.1 jmc #define AT_RGID 2003 /* rgid (solaris compatible numbers) */ 589 1.1 jmc 590 1.1 jmc /* Solaris kernel specific */ 591 1.1 jmc #define AT_SUN_LDELF 2004 /* dynamic linker's ELF header */ 592 1.1 jmc #define AT_SUN_LDSHDR 2005 /* dynamic linker's section header */ 593 1.1 jmc #define AT_SUN_LDNAME 2006 /* dynamic linker's name */ 594 1.1 jmc #define AT_SUN_LPGSIZE 2007 /* large pagesize */ 595 1.1 jmc 596 1.1 jmc /* Other information */ 597 1.1 jmc #define AT_SUN_PLATFORM 2008 /* sysinfo(SI_PLATFORM) */ 598 1.1 jmc #define AT_SUN_HWCAP 2009 /* process hardware capabilities */ 599 1.1 jmc #define AT_SUN_IFLUSH 2010 /* do we need to flush the instruction cache? */ 600 1.1 jmc #define AT_SUN_CPU 2011 /* CPU name */ 601 1.1 jmc /* ibcs2 emulation band aid */ 602 1.1 jmc #define AT_SUN_EMUL_ENTRY 2012 /* coff entry point */ 603 1.1 jmc #define AT_SUN_EMUL_EXECFD 2013 /* coff file descriptor */ 604 1.1 jmc /* Executable's fully resolved name */ 605 1.1 jmc #define AT_SUN_EXECNAME 2014 606 1.1 jmc 607 1.1 jmc /* 608 1.1 jmc * Note Headers 609 1.1 jmc */ 610 1.1 jmc typedef struct { 611 1.1 jmc Elf32_Word n_namesz; 612 1.1 jmc Elf32_Word n_descsz; 613 1.1 jmc Elf32_Word n_type; 614 1.1 jmc } Elf32_Nhdr; 615 1.1 jmc 616 1.1 jmc typedef struct { 617 1.3 joerg Elf64_Word n_namesz; 618 1.3 joerg Elf64_Word n_descsz; 619 1.3 joerg Elf64_Word n_type; 620 1.1 jmc } Elf64_Nhdr; 621 1.1 jmc 622 1.1 jmc #define ELF_NOTE_TYPE_ABI_TAG 1 623 1.1 jmc 624 1.1 jmc /* GNU-specific note name and description sizes */ 625 1.1 jmc #define ELF_NOTE_ABI_NAMESZ 4 626 1.1 jmc #define ELF_NOTE_ABI_DESCSZ 16 627 1.1 jmc /* GNU-specific note name */ 628 1.1 jmc #define ELF_NOTE_ABI_NAME "GNU\0" 629 1.1 jmc 630 1.1 jmc /* GNU-specific OS/version value stuff */ 631 1.1 jmc #define ELF_NOTE_ABI_OS_LINUX 0 632 1.1 jmc #define ELF_NOTE_ABI_OS_HURD 1 633 1.1 jmc #define ELF_NOTE_ABI_OS_SOLARIS 2 634 1.1 jmc 635 1.1 jmc /* NetBSD-specific note type: Emulation name. desc is emul name string. */ 636 1.1 jmc #define ELF_NOTE_TYPE_NETBSD_TAG 1 637 1.1 jmc 638 1.1 jmc /* NetBSD-specific note name and description sizes */ 639 1.1 jmc #define ELF_NOTE_NETBSD_NAMESZ 7 640 1.1 jmc #define ELF_NOTE_NETBSD_DESCSZ 4 641 1.1 jmc /* NetBSD-specific note name */ 642 1.1 jmc #define ELF_NOTE_NETBSD_NAME "NetBSD\0\0" 643 1.1 jmc 644 1.1 jmc /* 645 1.1 jmc * NetBSD-specific core file information. 646 1.1 jmc * 647 1.1 jmc * NetBSD ELF core files use notes to provide information about 648 1.1 jmc * the process's state. The note name is "NetBSD-CORE" for 649 1.1 jmc * information that is global to the process, and "NetBSD-CORE@nn", 650 1.1 jmc * where "nn" is the lwpid of the LWP that the information belongs 651 1.1 jmc * to (such as register state). 652 1.1 jmc * 653 1.1 jmc * We use the following note identifiers: 654 1.1 jmc * 655 1.1 jmc * ELF_NOTE_NETBSD_CORE_PROCINFO 656 1.1 jmc * Note is a "netbsd_elfcore_procinfo" structure. 657 1.1 jmc * 658 1.1 jmc * We also use ptrace(2) request numbers (the ones that exist in 659 1.1 jmc * machine-dependent space) to identify register info notes. The 660 1.1 jmc * info in such notes is in the same format that ptrace(2) would 661 1.1 jmc * export that information. 662 1.1 jmc * 663 1.1 jmc * Please try to keep the members of this structure nicely aligned, 664 1.1 jmc * and if you add elements, add them to the end and bump the version. 665 1.1 jmc */ 666 1.1 jmc 667 1.1 jmc #define ELF_NOTE_NETBSD_CORE_NAME "NetBSD-CORE" 668 1.1 jmc 669 1.1 jmc #define ELF_NOTE_NETBSD_CORE_PROCINFO 1 670 1.1 jmc 671 1.1 jmc #define NETBSD_ELFCORE_PROCINFO_VERSION 1 672 1.1 jmc 673 1.1 jmc struct netbsd_elfcore_procinfo { 674 1.1 jmc /* Version 1 fields start here. */ 675 1.1 jmc uint32_t cpi_version; /* netbsd_elfcore_procinfo version */ 676 1.1 jmc uint32_t cpi_cpisize; /* sizeof(netbsd_elfcore_procinfo) */ 677 1.1 jmc uint32_t cpi_signo; /* killing signal */ 678 1.1 jmc uint32_t cpi_sigcode; /* signal code */ 679 1.1 jmc uint32_t cpi_sigpend[4]; /* pending signals */ 680 1.1 jmc uint32_t cpi_sigmask[4]; /* blocked signals */ 681 1.1 jmc uint32_t cpi_sigignore[4];/* blocked signals */ 682 1.1 jmc uint32_t cpi_sigcatch[4];/* blocked signals */ 683 1.1 jmc int32_t cpi_pid; /* process ID */ 684 1.1 jmc int32_t cpi_ppid; /* parent process ID */ 685 1.1 jmc int32_t cpi_pgrp; /* process group ID */ 686 1.1 jmc int32_t cpi_sid; /* session ID */ 687 1.1 jmc uint32_t cpi_ruid; /* real user ID */ 688 1.1 jmc uint32_t cpi_euid; /* effective user ID */ 689 1.1 jmc uint32_t cpi_svuid; /* saved user ID */ 690 1.1 jmc uint32_t cpi_rgid; /* real group ID */ 691 1.1 jmc uint32_t cpi_egid; /* effective group ID */ 692 1.1 jmc uint32_t cpi_svgid; /* saved group ID */ 693 1.1 jmc uint32_t cpi_nlwps; /* number of LWPs */ 694 1.1 jmc int8_t cpi_name[32]; /* copy of p->p_comm */ 695 1.1 jmc /* Add version 2 fields below here. */ 696 1.1 jmc int32_t cpi_siglwp; /* LWP target of killing signal */ 697 1.1 jmc }; 698 1.1 jmc 699 1.1 jmc #if defined(ELFSIZE) 700 1.1 jmc #define CONCAT(x,y) __CONCAT(x,y) 701 1.1 jmc #define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x))) 702 1.1 jmc #define ELFNAME2(x,y) CONCAT(x,CONCAT(_elf,CONCAT(ELFSIZE,CONCAT(_,y)))) 703 1.1 jmc #define ELFNAMEEND(x) CONCAT(x,CONCAT(_elf,ELFSIZE)) 704 1.1 jmc #define ELFDEFNNAME(x) CONCAT(ELF,CONCAT(ELFSIZE,CONCAT(_,x))) 705 1.1 jmc #endif 706 1.1 jmc 707 1.1 jmc #if defined(ELFSIZE) && (ELFSIZE == 32) 708 1.1 jmc #define Elf_Ehdr Elf32_Ehdr 709 1.1 jmc #define Elf_Phdr Elf32_Phdr 710 1.1 jmc #define Elf_Shdr Elf32_Shdr 711 1.1 jmc #define Elf_Sym Elf32_Sym 712 1.1 jmc #define Elf_Rel Elf32_Rel 713 1.1 jmc #define Elf_Rela Elf32_Rela 714 1.1 jmc #define Elf_Dyn Elf32_Dyn 715 1.1 jmc #define Elf_Word Elf32_Word 716 1.1 jmc #define Elf_Sword Elf32_Sword 717 1.1 jmc #define Elf_Addr Elf32_Addr 718 1.1 jmc #define Elf_Off Elf32_Off 719 1.1 jmc #define Elf_Nhdr Elf32_Nhdr 720 1.1 jmc 721 1.1 jmc #define ELF_R_SYM ELF32_R_SYM 722 1.1 jmc #define ELF_R_TYPE ELF32_R_TYPE 723 1.1 jmc #define ELFCLASS ELFCLASS32 724 1.1 jmc 725 1.1 jmc #define ELF_ST_BIND ELF32_ST_BIND 726 1.1 jmc #define ELF_ST_TYPE ELF32_ST_TYPE 727 1.1 jmc #define ELF_ST_INFO ELF32_ST_INFO 728 1.1 jmc 729 1.1 jmc #define AuxInfo Aux32Info 730 1.1 jmc #elif defined(ELFSIZE) && (ELFSIZE == 64) 731 1.1 jmc #define Elf_Ehdr Elf64_Ehdr 732 1.1 jmc #define Elf_Phdr Elf64_Phdr 733 1.1 jmc #define Elf_Shdr Elf64_Shdr 734 1.1 jmc #define Elf_Sym Elf64_Sym 735 1.1 jmc #define Elf_Rel Elf64_Rel 736 1.1 jmc #define Elf_Rela Elf64_Rela 737 1.1 jmc #define Elf_Dyn Elf64_Dyn 738 1.1 jmc #define Elf_Word Elf64_Word 739 1.1 jmc #define Elf_Sword Elf64_Sword 740 1.1 jmc #define Elf_Addr Elf64_Addr 741 1.1 jmc #define Elf_Off Elf64_Off 742 1.1 jmc #define Elf_Nhdr Elf64_Nhdr 743 1.1 jmc 744 1.1 jmc #define ELF_R_SYM ELF64_R_SYM 745 1.1 jmc #define ELF_R_TYPE ELF64_R_TYPE 746 1.1 jmc #define ELFCLASS ELFCLASS64 747 1.1 jmc 748 1.1 jmc #define ELF_ST_BIND ELF64_ST_BIND 749 1.1 jmc #define ELF_ST_TYPE ELF64_ST_TYPE 750 1.1 jmc #define ELF_ST_INFO ELF64_ST_INFO 751 1.1 jmc 752 1.1 jmc #define AuxInfo Aux64Info 753 1.1 jmc #endif 754 1.1 jmc 755 1.1 jmc #endif /* !_SYS_EXEC_ELF_H_ */ 756