1ea14e5c3SBrian Feldman.\" Copyright (c) 1999 Jeroen Ruigrok van der Werven 2ea14e5c3SBrian Feldman.\" All rights reserved. 3ea14e5c3SBrian Feldman.\" 4ea14e5c3SBrian Feldman.\" Redistribution and use in source and binary forms, with or without 5ea14e5c3SBrian Feldman.\" modification, are permitted provided that the following conditions 6ea14e5c3SBrian Feldman.\" are met: 7ea14e5c3SBrian Feldman.\" 1. Redistributions of source code must retain the above copyright 8ea14e5c3SBrian Feldman.\" notice, this list of conditions and the following disclaimer. 9ea14e5c3SBrian Feldman.\" 2. Redistributions in binary form must reproduce the above copyright 10ea14e5c3SBrian Feldman.\" notice, this list of conditions and the following disclaimer in the 11ea14e5c3SBrian Feldman.\" documentation and/or other materials provided with the distribution. 12ea14e5c3SBrian Feldman.\" 13ea14e5c3SBrian Feldman.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14ea14e5c3SBrian Feldman.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15ea14e5c3SBrian Feldman.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16ea14e5c3SBrian Feldman.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17ea14e5c3SBrian Feldman.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18ea14e5c3SBrian Feldman.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19ea14e5c3SBrian Feldman.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20ea14e5c3SBrian Feldman.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21ea14e5c3SBrian Feldman.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22ea14e5c3SBrian Feldman.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23ea14e5c3SBrian Feldman.\" SUCH DAMAGE. 24ea14e5c3SBrian Feldman.\" 25ea14e5c3SBrian Feldman.\" $FreeBSD$ 26ea14e5c3SBrian Feldman.\" 275bc7a730SMarcel Moolenaar.Dd December 18, 2005 28ea14e5c3SBrian Feldman.Dt ELF 5 293d45e180SRuslan Ermilov.Os 30ea14e5c3SBrian Feldman.Sh NAME 31ea14e5c3SBrian Feldman.Nm elf 32ea14e5c3SBrian Feldman.Nd format of ELF executable binary files 33ea14e5c3SBrian Feldman.Sh SYNOPSIS 3432eef9aeSRuslan Ermilov.In elf.h 35ea14e5c3SBrian Feldman.Sh DESCRIPTION 36ea14e5c3SBrian FeldmanThe header file 37fe08efe6SRuslan Ermilov.In elf.h 384e86fcacSSheldon Hearndefines the format of ELF executable binary files. 394e86fcacSSheldon HearnAmongst these files are 40ea14e5c3SBrian Feldmannormal executable files, relocatable object files, core files and shared 41ea14e5c3SBrian Feldmanlibraries. 42ea14e5c3SBrian Feldman.Pp 43ea14e5c3SBrian FeldmanAn executable file using the ELF file format consists of an ELF header, 44ea14e5c3SBrian Feldmanfollowed by a program header table or a section header table, or both. 454e86fcacSSheldon HearnThe ELF header is always at offset zero of the file. 464e86fcacSSheldon HearnThe program header 47ea14e5c3SBrian Feldmantable and the section header table's offset in the file are defined in the 484e86fcacSSheldon HearnELF header. 494e86fcacSSheldon HearnThe two tables describe the rest of the particularities of 50ea14e5c3SBrian Feldmanthe file. 51ea14e5c3SBrian Feldman.Pp 52ea14e5c3SBrian FeldmanApplications which wish to process ELF binary files for their native 53ea14e5c3SBrian Feldmanarchitecture only should include 54743d5d51SRuslan Ermilov.In elf.h 554e86fcacSSheldon Hearnin their source code. 564e86fcacSSheldon HearnThese applications should need to refer to 57ea14e5c3SBrian Feldmanall the types and structures by their generic names 58ea14e5c3SBrian Feldman.Dq Elf_xxx 59ea14e5c3SBrian Feldmanand to the macros by 60ea14e5c3SBrian Feldman.Dq ELF_xxx . 61ea14e5c3SBrian FeldmanApplications written this way can be compiled on any architecture, 62ea14e5c3SBrian Feldmanregardless whether the host is 32-bit or 64-bit. 63ea14e5c3SBrian Feldman.Pp 64ea14e5c3SBrian FeldmanShould an application need to process ELF files of an unknown 65ea14e5c3SBrian Feldmanarchitecture then the application needs to include both 66743d5d51SRuslan Ermilov.In sys/elf32.h 67ea14e5c3SBrian Feldmanand 68743d5d51SRuslan Ermilov.In sys/elf64.h 69ea14e5c3SBrian Feldmaninstead of 70743d5d51SRuslan Ermilov.In elf.h . 71ea14e5c3SBrian FeldmanFurthermore, all types and structures need to be identified by either 72ea14e5c3SBrian Feldman.Dq Elf32_xxx 73ea14e5c3SBrian Feldmanor 74ea14e5c3SBrian Feldman.Dq Elf64_xxx . 75ea14e5c3SBrian FeldmanThe macros need to be identified by 76ea14e5c3SBrian Feldman.Dq ELF32_xxx 77ea14e5c3SBrian Feldmanor 78ea14e5c3SBrian Feldman.Dq ELF64_xxx . 79ea14e5c3SBrian Feldman.Pp 80ea14e5c3SBrian FeldmanWhatever the system's architecture is, it will always include 81743d5d51SRuslan Ermilov.In sys/elf_common.h 82ea14e5c3SBrian Feldmanas well as 83743d5d51SRuslan Ermilov.In sys/elf_generic.h . 84ea14e5c3SBrian Feldman.Pp 85ea14e5c3SBrian FeldmanThese header files describe the above mentioned headers as C structures 86ea14e5c3SBrian Feldmanand also include structures for dynamic sections, relocation sections and 87ea14e5c3SBrian Feldmansymbol tables. 88ea14e5c3SBrian Feldman.Pp 89ea14e5c3SBrian FeldmanThe following types are being used for 32-bit architectures: 90ea14e5c3SBrian Feldman.Bd -literal -offset indent 91757686b1SMarcel MoolenaarElf32_Addr Unsigned 32-bit program address 92757686b1SMarcel MoolenaarElf32_Half Unsigned 16-bit field 93fb59cdf6SJoseph KoshyElf32_Lword Unsigned 64-bit field 94757686b1SMarcel MoolenaarElf32_Off Unsigned 32-bit file offset 95757686b1SMarcel MoolenaarElf32_Sword Signed 32-bit field or integer 96757686b1SMarcel MoolenaarElf32_Word Unsigned 32-bit field or integer 97ea14e5c3SBrian Feldman.Ed 98ea14e5c3SBrian Feldman.Pp 99ea14e5c3SBrian FeldmanFor 64-bit architectures we have the following types: 100ea14e5c3SBrian Feldman.Bd -literal -offset indent 101757686b1SMarcel MoolenaarElf64_Addr Unsigned 64-bit program address 102757686b1SMarcel MoolenaarElf64_Half Unsigned 16-bit field 103fb59cdf6SJoseph KoshyElf64_Lword Unsigned 64-bit field 104757686b1SMarcel MoolenaarElf64_Off Unsigned 64-bit file offset 105757686b1SMarcel MoolenaarElf64_Sword Signed 32-bit field 106757686b1SMarcel MoolenaarElf64_Sxword Signed 64-bit field or integer 107fb59cdf6SJoseph KoshyElf64_Word Unsigned 32-bit field 108757686b1SMarcel MoolenaarElf64_Xword Unsigned 64-bit field or integer 109ea14e5c3SBrian Feldman.Ed 110ea14e5c3SBrian Feldman.Pp 111ea14e5c3SBrian FeldmanAll data structures that the file format defines follow the 112ea14e5c3SBrian Feldman.Dq natural 1134e86fcacSSheldon Hearnsize and alignment guidelines for the relevant class. 1144e86fcacSSheldon HearnIf necessary, 115ea14e5c3SBrian Feldmandata structures contain explicit padding to ensure 4-byte alignment 116ea14e5c3SBrian Feldmanfor 4-byte objects, to force structure sizes to a multiple of 4, etc. 117ea14e5c3SBrian Feldman.Pp 118ea14e5c3SBrian FeldmanThe ELF header is described by the type Elf32_Ehdr or Elf64_Ehdr: 119ea14e5c3SBrian Feldman.Bd -literal -offset indent 120ea14e5c3SBrian Feldmantypedef struct { 121ea14e5c3SBrian Feldman unsigned char e_ident[EI_NIDENT]; 122ea14e5c3SBrian Feldman Elf32_Half e_type; 123ea14e5c3SBrian Feldman Elf32_Half e_machine; 124ea14e5c3SBrian Feldman Elf32_Word e_version; 125ea14e5c3SBrian Feldman Elf32_Addr e_entry; 126ea14e5c3SBrian Feldman Elf32_Off e_phoff; 127ea14e5c3SBrian Feldman Elf32_Off e_shoff; 128ea14e5c3SBrian Feldman Elf32_Word e_flags; 129ea14e5c3SBrian Feldman Elf32_Half e_ehsize; 130ea14e5c3SBrian Feldman Elf32_Half e_phentsize; 131ea14e5c3SBrian Feldman Elf32_Half e_phnum; 132ea14e5c3SBrian Feldman Elf32_Half e_shentsize; 133ea14e5c3SBrian Feldman Elf32_Half e_shnum; 134ea14e5c3SBrian Feldman Elf32_Half e_shstrndx; 135ea14e5c3SBrian Feldman} Elf32_Ehdr; 136ea14e5c3SBrian Feldman.Ed 137ea14e5c3SBrian Feldman.Pp 138ea14e5c3SBrian Feldman.Bd -literal -offset indent 139ea14e5c3SBrian Feldmantypedef struct { 140ea14e5c3SBrian Feldman unsigned char e_ident[EI_NIDENT]; 141757686b1SMarcel Moolenaar Elf64_Half e_type; 142757686b1SMarcel Moolenaar Elf64_Half e_machine; 143757686b1SMarcel Moolenaar Elf64_Word e_version; 144ea14e5c3SBrian Feldman Elf64_Addr e_entry; 145ea14e5c3SBrian Feldman Elf64_Off e_phoff; 146ea14e5c3SBrian Feldman Elf64_Off e_shoff; 147757686b1SMarcel Moolenaar Elf64_Word e_flags; 148757686b1SMarcel Moolenaar Elf64_Half e_ehsize; 149757686b1SMarcel Moolenaar Elf64_Half e_phentsize; 150757686b1SMarcel Moolenaar Elf64_Half e_phnum; 151757686b1SMarcel Moolenaar Elf64_Half e_shentsize; 152757686b1SMarcel Moolenaar Elf64_Half e_shnum; 153757686b1SMarcel Moolenaar Elf64_Half e_shstrndx; 154ea14e5c3SBrian Feldman} Elf64_Ehdr; 155ea14e5c3SBrian Feldman.Ed 156ea14e5c3SBrian Feldman.Pp 157ea14e5c3SBrian FeldmanThe fields have the following meanings: 158ea14e5c3SBrian Feldman.Pp 159ea14e5c3SBrian Feldman.Bl -tag -width "e_phentsize" -compact -offset indent 160ea14e5c3SBrian Feldman.It Dv e_ident 161ea14e5c3SBrian FeldmanThis array of bytes specifies to interpret the file, 162ea14e5c3SBrian Feldmanindependent of the processor or the file's remaining contents. 163ea14e5c3SBrian FeldmanWithin this array everything is named by macros, which start with 164ea14e5c3SBrian Feldmanthe prefix 165ea14e5c3SBrian Feldman.Sy EI_ 166ea14e5c3SBrian Feldmanand may contain values which start with the prefix 167ea14e5c3SBrian Feldman.Sy ELF . 168ea14e5c3SBrian FeldmanThe following macros are defined: 169ea14e5c3SBrian Feldman.Pp 1700d59faf6SJeroen Ruigrok van der Werven.Bl -tag -width "EI_ABIVERSION" -compact 171ea14e5c3SBrian Feldman.It Dv EI_MAG0 1724e86fcacSSheldon HearnThe first byte of the magic number. 1734e86fcacSSheldon HearnIt must be filled with 174ea14e5c3SBrian Feldman.Sy ELFMAG0 . 175ea14e5c3SBrian Feldman.It Dv EI_MAG1 1764e86fcacSSheldon HearnThe second byte of the magic number. 1774e86fcacSSheldon HearnIt must be filled with 178ea14e5c3SBrian Feldman.Sy ELFMAG1 . 179ea14e5c3SBrian Feldman.It Dv EI_MAG2 1804e86fcacSSheldon HearnThe third byte of the magic number. 1814e86fcacSSheldon HearnIt must be filled with 182ea14e5c3SBrian Feldman.Sy ELFMAG2 . 183ea14e5c3SBrian Feldman.It Dv EI_MAG3 1844e86fcacSSheldon HearnThe fourth byte of the magic number. 1854e86fcacSSheldon HearnIt must be filled with 186ea14e5c3SBrian Feldman.Sy ELFMAG3 . 187ea14e5c3SBrian Feldman.It Dv EI_CLASS 188ea14e5c3SBrian FeldmanThe fifth byte identifies the architecture for this binary: 189ea14e5c3SBrian Feldman.Pp 190ea14e5c3SBrian Feldman.Bl -tag -width "ELFCLASSNONE" -compact 191ea14e5c3SBrian Feldman.It Dv ELFCLASSNONE 192ea14e5c3SBrian FeldmanThis class is invalid. 193ea14e5c3SBrian Feldman.It Dv ELFCLASS32 1944e86fcacSSheldon HearnThis defines the 32-bit architecture. 1954e86fcacSSheldon HearnIt supports machines with files 196ea14e5c3SBrian Feldmanand virtual address spaces up to 4 Gigabytes. 197ea14e5c3SBrian Feldman.It Dv ELFCLASS64 198ea14e5c3SBrian FeldmanThis defines the 64-bit architecture. 199ea14e5c3SBrian Feldman.El 200ea14e5c3SBrian Feldman.It Dv EI_DATA 201ea14e5c3SBrian FeldmanThe sixth byte specifies the data encoding of the processor-specific 2024e86fcacSSheldon Hearndata in the file. 2034e86fcacSSheldon HearnCurrently these encodings are supported: 204ea14e5c3SBrian Feldman.Pp 205ea14e5c3SBrian Feldman.Bl -tag -width "ELFDATA2LSB" -compact 206ea14e5c3SBrian Feldman.It Dv ELFDATANONE 207ea14e5c3SBrian FeldmanUnknown data format. 208ea14e5c3SBrian Feldman.It Dv ELFDATA2LSB 209ea14e5c3SBrian FeldmanTwo's complement, little-endian. 210ea14e5c3SBrian Feldman.It Dv ELFDATA2MSB 211ea14e5c3SBrian FeldmanTwo's complement, big-endian. 212ea14e5c3SBrian Feldman.El 213ea14e5c3SBrian Feldman.It Dv EI_VERSION 214ea14e5c3SBrian FeldmanThe version number of the ELF specification: 215ea14e5c3SBrian Feldman.Pp 216ea14e5c3SBrian Feldman.Bl -tag -width "EV_CURRENT" -compact 217ea14e5c3SBrian Feldman.It Dv EV_NONE 218ea14e5c3SBrian FeldmanInvalid version. 219ea14e5c3SBrian Feldman.It Dv EV_CURRENT 220ea14e5c3SBrian FeldmanCurrent version. 221ea14e5c3SBrian Feldman.El 2220d59faf6SJeroen Ruigrok van der Werven.It Dv EI_OSABI 2230d59faf6SJeroen Ruigrok van der WervenThis byte identifies the operating system 2240d59faf6SJeroen Ruigrok van der Wervenand ABI to which the object is targeted. 2250d59faf6SJeroen Ruigrok van der WervenSome fields in other ELF structures have flags 2260d59faf6SJeroen Ruigrok van der Wervenand values that have platform specific meanings; 2270d59faf6SJeroen Ruigrok van der Werventhe interpretation of those fields is determined by the value of this byte. 2280d59faf6SJeroen Ruigrok van der WervenThe following values are currently defined: 2290d59faf6SJeroen Ruigrok van der Werven.Pp 2300d59faf6SJeroen Ruigrok van der Werven.Bl -tag -width "ELFOSABI_STANDALONE" -compact 2310d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_SYSV 2320d59faf6SJeroen Ruigrok van der WervenUNIX System V ABI. 2330d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_HPUX 2340d59faf6SJeroen Ruigrok van der WervenHP-UX operating system ABI. 2350d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_NETBSD 236d013e3f5SRuslan Ermilov.Nx 237d013e3f5SRuslan Ermilovoperating system ABI. 2380d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_LINUX 2390d59faf6SJeroen Ruigrok van der WervenGNU/Linux operating system ABI. 2400d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_HURD 2410d59faf6SJeroen Ruigrok van der WervenGNU/Hurd operating system ABI. 2420d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_86OPEN 2430d59faf6SJeroen Ruigrok van der Werven86Open Common IA32 ABI. 2440d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_SOLARIS 2450d59faf6SJeroen Ruigrok van der WervenSolaris operating system ABI. 2460d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_MONTEREY 2470d59faf6SJeroen Ruigrok van der WervenMonterey project ABI. 2480d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_IRIX 2490d59faf6SJeroen Ruigrok van der WervenIRIX operating system ABI. 2500d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_FREEBSD 251c5e7e03aSRuslan Ermilov.Fx 252c5e7e03aSRuslan Ermilovoperating system ABI. 2530d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_TRU64 2540d59faf6SJeroen Ruigrok van der WervenTRU64 UNIX operating system ABI. 2550d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_ARM 2560d59faf6SJeroen Ruigrok van der WervenARM architecture ABI. 2570d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_STANDALONE 2580d59faf6SJeroen Ruigrok van der WervenStandalone (embedded) ABI. 2590d59faf6SJeroen Ruigrok van der Werven.El 2600d59faf6SJeroen Ruigrok van der Werven.It Dv EI_ABIVERSION 2610d59faf6SJeroen Ruigrok van der WervenThis byte identifies the version of the ABI 2620d59faf6SJeroen Ruigrok van der Wervento which the object is targeted. 2630d59faf6SJeroen Ruigrok van der WervenThis field is used to distinguish among incompatible versions of an ABI. 2640d59faf6SJeroen Ruigrok van der WervenThe interpretation of this version number 2650d59faf6SJeroen Ruigrok van der Wervenis dependent on the ABI identified by the EI_OSABI field. 2660d59faf6SJeroen Ruigrok van der WervenApplications conforming to this specification use the value 0. 267ea14e5c3SBrian Feldman.It Dv EI_PAD 2684e86fcacSSheldon HearnStart of padding. 2694e86fcacSSheldon HearnThese bytes are reserved and set to zero. 2704e86fcacSSheldon HearnPrograms 2714e86fcacSSheldon Hearnwhich read them should ignore them. 2724e86fcacSSheldon HearnThe value for EI_PAD will change in 273ea14e5c3SBrian Feldmanthe future if currently unused bytes are given meanings. 274ea14e5c3SBrian Feldman.It Dv EI_BRAND 275ea14e5c3SBrian FeldmanStart of architecture identification. 276ea14e5c3SBrian Feldman.It Dv EI_NIDENT 277ea14e5c3SBrian FeldmanThe size of the e_ident array. 278ea14e5c3SBrian Feldman.El 279ea14e5c3SBrian Feldman.Pp 280ea14e5c3SBrian Feldman.It Dv e_type 281ea14e5c3SBrian FeldmanThis member of the structure identifies the object file type: 282ea14e5c3SBrian Feldman.Pp 283ea14e5c3SBrian Feldman.Bl -tag -width "ET_NONE" -compact 284ea14e5c3SBrian Feldman.It Dv ET_NONE 285ea14e5c3SBrian FeldmanAn unknown type. 286ea14e5c3SBrian Feldman.It Dv ET_REL 287ea14e5c3SBrian FeldmanA relocatable file. 288ea14e5c3SBrian Feldman.It Dv ET_EXEC 289ea14e5c3SBrian FeldmanAn executable file. 290ea14e5c3SBrian Feldman.It Dv ET_DYN 291ea14e5c3SBrian FeldmanA shared object. 292ea14e5c3SBrian Feldman.It Dv ET_CORE 293ea14e5c3SBrian FeldmanA core file. 294ea14e5c3SBrian Feldman.El 295ea14e5c3SBrian Feldman.Pp 296ea14e5c3SBrian Feldman.It Dv e_machine 297ea14e5c3SBrian FeldmanThis member specifies the required architecture for an individual file: 298ea14e5c3SBrian Feldman.Pp 299ea14e5c3SBrian Feldman.Bl -tag -width "EM_MIPS_RS4_BE" -compact 300ea14e5c3SBrian Feldman.It Dv EM_NONE 301ea14e5c3SBrian FeldmanAn unknown machine. 302ea14e5c3SBrian Feldman.It Dv EM_M32 303ea14e5c3SBrian FeldmanAT&T WE 32100. 304ea14e5c3SBrian Feldman.It Dv EM_SPARC 305ea14e5c3SBrian FeldmanSun Microsystems SPARC. 306ea14e5c3SBrian Feldman.It Dv EM_386 307ea14e5c3SBrian FeldmanIntel 80386. 308ea14e5c3SBrian Feldman.It Dv EM_68K 309ea14e5c3SBrian FeldmanMotorola 68000. 310ea14e5c3SBrian Feldman.It Dv EM_88K 311ea14e5c3SBrian FeldmanMotorola 88000. 312ea14e5c3SBrian Feldman.It Dv EM_486 313ea14e5c3SBrian FeldmanIntel 80486. 314ea14e5c3SBrian Feldman.It Dv EM_860 315ea14e5c3SBrian FeldmanIntel 80860. 316ea14e5c3SBrian Feldman.It Dv EM_MIPS 317ea14e5c3SBrian FeldmanMIPS RS3000 (big-endian only). 318ea14e5c3SBrian Feldman.It Dv EM_MIPS_RS4_BE 319ea14e5c3SBrian FeldmanMIPS RS4000 (big-endian only). 320ea14e5c3SBrian Feldman.It Dv EM_SPARC64 321ea14e5c3SBrian FeldmanSPARC v9 64-bit unofficial. 322ea14e5c3SBrian Feldman.It Dv EM_PARISC 323ea14e5c3SBrian FeldmanHPPA. 324ea14e5c3SBrian Feldman.It Dv EM_PPC 325ea14e5c3SBrian FeldmanPowerPC. 326ea14e5c3SBrian Feldman.It Dv EM_ALPHA 327ea14e5c3SBrian FeldmanCompaq [DEC] Alpha. 328ea14e5c3SBrian Feldman.El 329ea14e5c3SBrian Feldman.Pp 330ea14e5c3SBrian Feldman.It Dv e_version 331ea14e5c3SBrian FeldmanThis member identifies the file version: 332ea14e5c3SBrian Feldman.Pp 333ea14e5c3SBrian Feldman.Bl -tag -width "EV_CURRENT" -compact 334ea14e5c3SBrian Feldman.It Dv EV_NONE 335ea14e5c3SBrian FeldmanInvalid version 336ea14e5c3SBrian Feldman.It Dv EV_CURRENT 337ea14e5c3SBrian FeldmanCurrent version 338ea14e5c3SBrian Feldman.El 339ea14e5c3SBrian Feldman.It Dv e_entry 340ea14e5c3SBrian FeldmanThis member gives the virtual address to which the system first transfers 3414e86fcacSSheldon Hearncontrol, thus starting the process. 3424e86fcacSSheldon HearnIf the file has no associated entry 343ea14e5c3SBrian Feldmanpoint, this member holds zero. 344ea14e5c3SBrian Feldman.It Dv e_phoff 3454e86fcacSSheldon HearnThis member holds the program header table's file offset in bytes. 3464e86fcacSSheldon HearnIf 347ea14e5c3SBrian Feldmanthe file has no program header table, this member holds zero. 348ea14e5c3SBrian Feldman.It Dv e_shoff 3494e86fcacSSheldon HearnThis member holds the section header table's file offset in bytes. 3504e86fcacSSheldon HearnIf the 351ea14e5c3SBrian Feldmanfile has no section header table this member holds zero. 352ea14e5c3SBrian Feldman.It Dv e_flags 3534e86fcacSSheldon HearnThis member holds processor-specific flags associated with the file. 3544e86fcacSSheldon HearnFlag 3555203edcdSRuslan Ermilovnames take the form EF_`machine_flag'. 3565203edcdSRuslan ErmilovCurrently no flags have been defined. 357ea14e5c3SBrian Feldman.It Dv e_ehsize 358ea14e5c3SBrian FeldmanThis member holds the ELF header's size in bytes. 359ea14e5c3SBrian Feldman.It Dv e_phentsize 360ea14e5c3SBrian FeldmanThis member holds the size in bytes of one entry in the file's program header 361ea14e5c3SBrian Feldmantable; all entries are the same size. 362ea14e5c3SBrian Feldman.It Dv e_phnum 363f3a2511aSChris CostelloThis member holds the number of entries in the program header 3644e86fcacSSheldon Hearntable. 3654e86fcacSSheldon HearnThus the product of 366ea14e5c3SBrian Feldman.Sy e_phentsize 367ea14e5c3SBrian Feldmanand 368ea14e5c3SBrian Feldman.Sy e_phnum 369ea14e5c3SBrian Feldmangives the table's size 3704e86fcacSSheldon Hearnin bytes. 3714e86fcacSSheldon HearnIf a file has no program header, 372ea14e5c3SBrian Feldman.Sy e_phnum 373ea14e5c3SBrian Feldmanholds the value zero. 374ea14e5c3SBrian Feldman.It Dv e_shentsize 3754e86fcacSSheldon HearnThis member holds a sections header's size in bytes. 3764e86fcacSSheldon HearnA section header is one 377ea14e5c3SBrian Feldmanentry in the section header table; all entries are the same size. 378ea14e5c3SBrian Feldman.It Dv e_shnum 3794e86fcacSSheldon HearnThis member holds the number of entries in the section header table. 380fb59cdf6SJoseph KoshyIf the file is using extended section numbering, then the 381fb59cdf6SJoseph Koshy.Sy e_shnum 382fb59cdf6SJoseph Koshyfield will be zero and the actual section number will be stored in the 383fb59cdf6SJoseph Koshy.Sy sh_size 384fb59cdf6SJoseph Koshymember of the section header at index 385fb59cdf6SJoseph Koshy.Dv SHN_UNDEF . 386fb59cdf6SJoseph KoshyIf a file has no section header table, both the 387fb59cdf6SJoseph Koshy.Sy e_shnum 388fb59cdf6SJoseph Koshyand the 389fb59cdf6SJoseph Koshy.Sy e_shoff 390fb59cdf6SJoseph Koshyfields of the ELF header will be zero. 391fb59cdf6SJoseph KoshyThe product of 392ea14e5c3SBrian Feldman.Sy e_shentsize 393fb59cdf6SJoseph Koshyand the number of sections in the file gives the section header 394fb59cdf6SJoseph Koshytable's size in bytes. 395ea14e5c3SBrian Feldman.It Dv e_shstrndx 396ea14e5c3SBrian FeldmanThis member holds the section header table index of the entry associated 3974e86fcacSSheldon Hearnwith the section name string table. 398fb59cdf6SJoseph KoshyIf extended section numbering is being used, this field will hold the 399fb59cdf6SJoseph Koshyvalue 400fb59cdf6SJoseph Koshy.Sy SHN_XINDEX , 401fb59cdf6SJoseph Koshyand the actual section header table index will be present in the 402fb59cdf6SJoseph Koshy.Sy sh_link 403fb59cdf6SJoseph Koshyfield of the section header entry at index 404fb59cdf6SJoseph Koshy.Dv SHN_UNDEF . 4054e86fcacSSheldon HearnIf the file has no section name string 406ea14e5c3SBrian Feldmantable, this member holds the value 407ea14e5c3SBrian Feldman.Sy SHN_UNDEF . 408ea14e5c3SBrian Feldman.El 409ea14e5c3SBrian Feldman.Pp 410ea14e5c3SBrian FeldmanAn executable or shared object file's program header table is an array of 411ea14e5c3SBrian Feldmanstructures, each describing a segment or other information the system needs 4124e86fcacSSheldon Hearnto prepare the program for execution. 4134e86fcacSSheldon HearnAn object file 414ea14e5c3SBrian Feldman.Em segment 415ea14e5c3SBrian Feldmancontains one or more 416ea14e5c3SBrian Feldman.Em sections . 417ea14e5c3SBrian FeldmanProgram headers are meaningful only for executable and shared object files. 418ea14e5c3SBrian FeldmanA file specifies its own program header size with the ELF header's 419ea14e5c3SBrian Feldman.Sy e_phentsize 420ea14e5c3SBrian Feldmanand 421ea14e5c3SBrian Feldman.Sy e_phnum 4224e86fcacSSheldon Hearnmembers. 4234e86fcacSSheldon HearnAs with the Elf executable header, the program header 424ea14e5c3SBrian Feldmanalso has different versions depending on the architecture: 425ea14e5c3SBrian Feldman.Pp 426ea14e5c3SBrian Feldman.Bd -literal -offset indent 427ea14e5c3SBrian Feldmantypedef struct { 428ea14e5c3SBrian Feldman Elf32_Word p_type; 429ea14e5c3SBrian Feldman Elf32_Off p_offset; 430ea14e5c3SBrian Feldman Elf32_Addr p_vaddr; 431ea14e5c3SBrian Feldman Elf32_Addr p_paddr; 432757686b1SMarcel Moolenaar Elf32_Word p_filesz; 433757686b1SMarcel Moolenaar Elf32_Word p_memsz; 434ea14e5c3SBrian Feldman Elf32_Word p_flags; 435757686b1SMarcel Moolenaar Elf32_Word p_align; 436ea14e5c3SBrian Feldman} Elf32_Phdr; 437ea14e5c3SBrian Feldman.Ed 438ea14e5c3SBrian Feldman.Pp 439ea14e5c3SBrian Feldman.Bd -literal -offset indent 440ea14e5c3SBrian Feldmantypedef struct { 441757686b1SMarcel Moolenaar Elf64_Word p_type; 442757686b1SMarcel Moolenaar Elf64_Word p_flags; 443ea14e5c3SBrian Feldman Elf64_Off p_offset; 444ea14e5c3SBrian Feldman Elf64_Addr p_vaddr; 445ea14e5c3SBrian Feldman Elf64_Addr p_paddr; 446757686b1SMarcel Moolenaar Elf64_Xword p_filesz; 447757686b1SMarcel Moolenaar Elf64_Xword p_memsz; 448757686b1SMarcel Moolenaar Elf64_Xword p_align; 449ea14e5c3SBrian Feldman} Elf64_Phdr; 450ea14e5c3SBrian Feldman.Ed 451ea14e5c3SBrian Feldman.Pp 452ea14e5c3SBrian FeldmanThe main difference between the 32-bit and the 64-bit program header lies 453ea14e5c3SBrian Feldmanonly in the location of a 454ea14e5c3SBrian Feldman.Sy p_flags 455ea14e5c3SBrian Feldmanmember in the total struct. 456ea14e5c3SBrian Feldman.Pp 457ea14e5c3SBrian Feldman.Bl -tag -width "p_offset" -compact -offset indent 458ea14e5c3SBrian Feldman.It Dv p_type 459ea14e5c3SBrian FeldmanThis member of the Phdr struct tells what kind of segment this array 460ea14e5c3SBrian Feldmanelement describes or how to interpret the array element's information. 461ea14e5c3SBrian Feldman.Bl -tag -width "PT_DYNAMIC" -compact 462ea14e5c3SBrian Feldman.Pp 463ea14e5c3SBrian Feldman.It Dv PT_NULL 464ea14e5c3SBrian FeldmanThe array element is unused and the other members' values are undefined. 465ea14e5c3SBrian FeldmanThis lets the program header have ignored entries. 466ea14e5c3SBrian Feldman.It Dv PT_LOAD 467ea14e5c3SBrian FeldmanThe array element specifies a loadable segment, described by 468ea14e5c3SBrian Feldman.Sy p_filesz 469ea14e5c3SBrian Feldmanand 470ea14e5c3SBrian Feldman.Sy p_memsz . 471ea14e5c3SBrian FeldmanThe bytes from the file are mapped to the beginning of the memory 4724e86fcacSSheldon Hearnsegment. 4739232968eSDima DorfmanIf the segment's memory size 4749232968eSDima Dorfman.Pq Sy p_memsz 4759232968eSDima Dorfmanis larger than the file size 4769232968eSDima Dorfman.Pq Sy p_filesz , 4779232968eSDima Dorfmanthe 478ea14e5c3SBrian Feldman.Dq extra 479ea14e5c3SBrian Feldmanbytes are defined to hold the value 0 and to follow the segment's 4804e86fcacSSheldon Hearninitialized area. 4814e86fcacSSheldon HearnThe file size may not be larger than the memory size. 482ea14e5c3SBrian FeldmanLoadable segment entries in the program header table appear in ascending 483ea14e5c3SBrian Feldmanorder, sorted on the 484ea14e5c3SBrian Feldman.Sy p_vaddr 485ea14e5c3SBrian Feldmanmember. 486ea14e5c3SBrian Feldman.It Dv PT_DYNAMIC 487ea14e5c3SBrian FeldmanThe array element specifies dynamic linking information. 488ea14e5c3SBrian Feldman.It Dv PT_INTERP 489ea14e5c3SBrian FeldmanThe array element specifies the location and size of a null-terminated 4904e86fcacSSheldon Hearnpath name to invoke as an interpreter. 4914e86fcacSSheldon HearnThis segment type is meaningful 4925203edcdSRuslan Ermilovonly for executable files (though it may occur for shared objects). 4935203edcdSRuslan ErmilovHowever 4944e86fcacSSheldon Hearnit may not occur more than once in a file. 4954e86fcacSSheldon HearnIf it is present it must precede 496ea14e5c3SBrian Feldmanany loadable segment entry. 497ea14e5c3SBrian Feldman.It Dv PT_NOTE 498ea14e5c3SBrian FeldmanThe array element specifies the location and size for auxiliary information. 499ea14e5c3SBrian Feldman.It Dv PT_SHLIB 5004e86fcacSSheldon HearnThis segment type is reserved but has unspecified semantics. 5014e86fcacSSheldon HearnPrograms that 502ea14e5c3SBrian Feldmancontain an array element of this type do not conform to the ABI. 503ea14e5c3SBrian Feldman.It Dv PT_PHDR 504ea14e5c3SBrian FeldmanThe array element, if present, specifies the location and size of the program 505ea14e5c3SBrian Feldmanheader table itself, both in the file and in the memory image of the program. 5064e86fcacSSheldon HearnThis segment type may not occur more than once in a file. 5074e86fcacSSheldon HearnMoreover, it may 508ea14e5c3SBrian Feldmanonly occur if the program header table is part of the memory image of the 5094e86fcacSSheldon Hearnprogram. 5104e86fcacSSheldon HearnIf it is present it must precede any loadable segment entry. 511ea14e5c3SBrian Feldman.It Dv PT_LOPROC 512ea14e5c3SBrian FeldmanThis value up to and including 513ea14e5c3SBrian Feldman.Sy PT_HIPROC 514ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 515ea14e5c3SBrian Feldman.It Dv PT_HIPROC 516ea14e5c3SBrian FeldmanThis value down to and including 517ea14e5c3SBrian Feldman.Sy PT_LOPROC 518ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 519ea14e5c3SBrian Feldman.El 520ea14e5c3SBrian Feldman.Pp 521ea14e5c3SBrian Feldman.It Dv p_offset 522ea14e5c3SBrian FeldmanThis member holds the offset from the beginning of the file at which 523f4c311e6SPeter Pentchevthe first byte of the segment resides. 524ea14e5c3SBrian Feldman.It Dv p_vaddr 525ea14e5c3SBrian FeldmanThis member holds the virtual address at which the first byte of the 526ea14e5c3SBrian Feldmansegment resides in memory. 527ea14e5c3SBrian Feldman.It Dv p_paddr 528ea14e5c3SBrian FeldmanOn systems for which physical addressing is relevant, this member is 5294e86fcacSSheldon Hearnreserved for the segment's physical address. 530753d686dSRuslan ErmilovUnder 531753d686dSRuslan Ermilov.Bx 532753d686dSRuslan Ermilovthis member is 533ea14e5c3SBrian Feldmannot used and must be zero. 534ea14e5c3SBrian Feldman.It Dv p_filesz 535ea14e5c3SBrian FeldmanThis member holds the number of bytes in the file image of the segment. 536ea14e5c3SBrian FeldmanIt may be zero. 537ea14e5c3SBrian Feldman.It Dv p_memsz 538ea14e5c3SBrian FeldmanThis member holds the number of bytes in the memory image of the segment. 539ea14e5c3SBrian FeldmanIt may be zero. 540ea14e5c3SBrian Feldman.It Dv p_flags 541ea14e5c3SBrian FeldmanThis member holds flags relevant to the segment: 542ea14e5c3SBrian Feldman.Pp 543ea14e5c3SBrian Feldman.Bl -tag -width "PF_X" -compact 544ea14e5c3SBrian Feldman.It Dv PF_X 545ea14e5c3SBrian FeldmanAn executable segment. 546ea14e5c3SBrian Feldman.It Dv PF_W 547ea14e5c3SBrian FeldmanA writable segment. 548ea14e5c3SBrian Feldman.It Dv PF_R 549ea14e5c3SBrian FeldmanA readable segment. 550ea14e5c3SBrian Feldman.El 551ea14e5c3SBrian Feldman.Pp 552ea14e5c3SBrian FeldmanA text segment commonly has the flags 553ea14e5c3SBrian Feldman.Sy PF_X 554ea14e5c3SBrian Feldmanand 555672300f7SRuslan Ermilov.Sy PF_R . 556ea14e5c3SBrian FeldmanA data segment commonly has 557ea14e5c3SBrian Feldman.Sy PF_X , 558ea14e5c3SBrian Feldman.Sy PF_W 559ea14e5c3SBrian Feldmanand 560ea14e5c3SBrian Feldman.Sy PF_R . 561ea14e5c3SBrian Feldman.It Dv p_align 562ea14e5c3SBrian FeldmanThis member holds the value to which the segments are aligned in memory 5634e86fcacSSheldon Hearnand in the file. 5644e86fcacSSheldon HearnLoadable process segments must have congruent values for 565ea14e5c3SBrian Feldman.Sy p_vaddr 566ea14e5c3SBrian Feldmanand 567ea14e5c3SBrian Feldman.Sy p_offset , 5684e86fcacSSheldon Hearnmodulo the page size. 5694e86fcacSSheldon HearnValues of zero and one mean no alignment is required. 570ea14e5c3SBrian FeldmanOtherwise, 571ea14e5c3SBrian Feldman.Sy p_align 572ea14e5c3SBrian Feldmanshould be a positive, integral power of two, and 573ea14e5c3SBrian Feldman.Sy p_vaddr 574ea14e5c3SBrian Feldmanshould equal 575ea14e5c3SBrian Feldman.Sy p_offset , 576ea14e5c3SBrian Feldmanmodulo 577ea14e5c3SBrian Feldman.Sy p_align . 578ea14e5c3SBrian Feldman.El 579ea14e5c3SBrian Feldman.Pp 5804e86fcacSSheldon HearnAn file's section header table lets one locate all the file's sections. 5814e86fcacSSheldon HearnThe 5824e86fcacSSheldon Hearnsection header table is an array of Elf32_Shdr or Elf64_Shdr structures. 5834e86fcacSSheldon HearnThe 584ea14e5c3SBrian FeldmanELF header's 585ea14e5c3SBrian Feldman.Sy e_shoff 586ea14e5c3SBrian Feldmanmember gives the byte offset from the beginning of the file to the section 587ea14e5c3SBrian Feldmanheader table. 588ea14e5c3SBrian Feldman.Sy e_shnum 589ea14e5c3SBrian Feldmanholds the number of entries the section header table contains. 590ea14e5c3SBrian Feldman.Sy e_shentsize 591ea14e5c3SBrian Feldmanholds the size in bytes of each entry. 592ea14e5c3SBrian Feldman.Pp 5934e86fcacSSheldon HearnA section header table index is a subscript into this array. 5944e86fcacSSheldon HearnSome section 5954e86fcacSSheldon Hearnheader table indices are reserved. 5964e86fcacSSheldon HearnAn object file does not have sections for 597ea14e5c3SBrian Feldmanthese special indices: 598ea14e5c3SBrian Feldman.Pp 599ea14e5c3SBrian Feldman.Bl -tag -width "SHN_LORESERVE" -compact 600ea14e5c3SBrian Feldman.It Dv SHN_UNDEF 6017e1b2808SHiten PandyaThis value marks an undefined, missing, irrelevant, or otherwise meaningless 602ea14e5c3SBrian Feldmansection reference. 6037e1b2808SHiten PandyaFor example, a symbol 6047e1b2808SHiten Pandya.Dq defined 6057e1b2808SHiten Pandyarelative to section number 6067e1b2808SHiten Pandya.Sy SHN_UNDEF 6077e1b2808SHiten Pandyais an undefined symbol. 608ea14e5c3SBrian Feldman.It Dv SHN_LORESERVE 609ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of reserved indices. 610ea14e5c3SBrian Feldman.It Dv SHN_LOPROC 611ea14e5c3SBrian FeldmanThis value up to and including 612ea14e5c3SBrian Feldman.Sy SHN_HIPROC 613ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 614ea14e5c3SBrian Feldman.It Dv SHN_HIPROC 615ea14e5c3SBrian FeldmanThis value down to and including 616ea14e5c3SBrian Feldman.Sy SHN_LOPROC 617ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 618ea14e5c3SBrian Feldman.It Dv SHN_ABS 6194e86fcacSSheldon HearnThis value specifies absolute values for the corresponding reference. 6204e86fcacSSheldon HearnFor 621ea14e5c3SBrian Feldmanexample, symbols defined relative to section number 622ea14e5c3SBrian Feldman.Sy SHN_ABS 623ea14e5c3SBrian Feldmanhave absolute values and are not affected by relocation. 624ea14e5c3SBrian Feldman.It Dv SHN_COMMON 625ea14e5c3SBrian FeldmanSymbols defined relative to this section are common symbols, such as FORTRAN 626ea14e5c3SBrian FeldmanCOMMON or unallocated C external variables. 627ea14e5c3SBrian Feldman.It Dv SHN_HIRESERVE 6284e86fcacSSheldon HearnThis value specifies the upper bound of the range of reserved indices. 6294e86fcacSSheldon HearnThe 630ea14e5c3SBrian Feldmansystem reserves indices between 631ea14e5c3SBrian Feldman.Sy SHN_LORESERVE 632ea14e5c3SBrian Feldmanand 633ea14e5c3SBrian Feldman.Sy SHN_HIRESERVE , 6344e86fcacSSheldon Hearninclusive. 6354e86fcacSSheldon HearnThe section header table does not contain entries for the 636ea14e5c3SBrian Feldmanreserved indices. 637ea14e5c3SBrian Feldman.El 638ea14e5c3SBrian Feldman.Pp 639ea14e5c3SBrian FeldmanThe section header has the following structure: 640ea14e5c3SBrian Feldman.Bd -literal -offset indent 641ea14e5c3SBrian Feldmantypedef struct { 642ea14e5c3SBrian Feldman Elf32_Word sh_name; 643ea14e5c3SBrian Feldman Elf32_Word sh_type; 644ea14e5c3SBrian Feldman Elf32_Word sh_flags; 645ea14e5c3SBrian Feldman Elf32_Addr sh_addr; 646ea14e5c3SBrian Feldman Elf32_Off sh_offset; 647757686b1SMarcel Moolenaar Elf32_Word sh_size; 648ea14e5c3SBrian Feldman Elf32_Word sh_link; 649ea14e5c3SBrian Feldman Elf32_Word sh_info; 650757686b1SMarcel Moolenaar Elf32_Word sh_addralign; 651757686b1SMarcel Moolenaar Elf32_Word sh_entsize; 652ea14e5c3SBrian Feldman} Elf32_Shdr; 653ea14e5c3SBrian Feldman.Ed 654ea14e5c3SBrian Feldman.Pp 655ea14e5c3SBrian Feldman.Bd -literal -offset indent 656ea14e5c3SBrian Feldmantypedef struct { 657757686b1SMarcel Moolenaar Elf64_Word sh_name; 658757686b1SMarcel Moolenaar Elf64_Word sh_type; 659757686b1SMarcel Moolenaar Elf64_Xword sh_flags; 660ea14e5c3SBrian Feldman Elf64_Addr sh_addr; 661ea14e5c3SBrian Feldman Elf64_Off sh_offset; 662757686b1SMarcel Moolenaar Elf64_Xword sh_size; 663757686b1SMarcel Moolenaar Elf64_Word sh_link; 664757686b1SMarcel Moolenaar Elf64_Word sh_info; 665757686b1SMarcel Moolenaar Elf64_Xword sh_addralign; 666757686b1SMarcel Moolenaar Elf64_Xword sh_entsize; 667ea14e5c3SBrian Feldman} Elf64_Shdr; 668ea14e5c3SBrian Feldman.Ed 669ea14e5c3SBrian Feldman.Pp 670ea14e5c3SBrian Feldman.Bl -tag -width "sh_addralign" -compact 671ea14e5c3SBrian Feldman.It Dv sh_name 6724e86fcacSSheldon HearnThis member specifies the name of the section. 6734e86fcacSSheldon HearnIts value is an index 674ea14e5c3SBrian Feldmaninto the section header string table section, giving the location of 675ea14e5c3SBrian Feldmana null-terminated string. 676ea14e5c3SBrian Feldman.It Dv sh_type 6770757c960SBrian FeldmanThis member categorizes the section's contents and semantics. 678ea14e5c3SBrian Feldman.Pp 679ea14e5c3SBrian Feldman.Bl -tag -width "SHT_PROGBITS" -compact 680ea14e5c3SBrian Feldman.It Dv SHT_NULL 6814e86fcacSSheldon HearnThis value marks the section header as inactive. 6824e86fcacSSheldon HearnIt does not 6834e86fcacSSheldon Hearnhave an associated section. 6844e86fcacSSheldon HearnOther members of the section header 685ea14e5c3SBrian Feldmanhave undefined values. 686ea14e5c3SBrian Feldman.It Dv SHT_PROGBITS 687ea14e5c3SBrian FeldmanThe section holds information defined by the program, whose 688ea14e5c3SBrian Feldmanformat and meaning are determined solely by the program. 689ea14e5c3SBrian Feldman.It Dv SHT_SYMTAB 6904e86fcacSSheldon HearnThis section holds a symbol table. 6914e86fcacSSheldon HearnTypically, 692ea14e5c3SBrian Feldman.Sy SHT_SYMTAB 693ea14e5c3SBrian Feldmanprovides symbols for link editing, though it may also be used 6944e86fcacSSheldon Hearnfor dynamic linking. 6954e86fcacSSheldon HearnAs a complete symbol table, it may contain 6964e86fcacSSheldon Hearnmany symbols unnecessary for dynamic linking. 6974e86fcacSSheldon HearnAn object file can 698ea14e5c3SBrian Feldmanalso contain a 699ea14e5c3SBrian Feldman.Sy SHN_DYNSYM 700ea14e5c3SBrian Feldmansection. 701ea14e5c3SBrian Feldman.It Dv SHT_STRTAB 7024e86fcacSSheldon HearnThis section holds a string table. 7034e86fcacSSheldon HearnAn object file may have multiple 704ea14e5c3SBrian Feldmanstring table sections. 705ea14e5c3SBrian Feldman.It Dv SHT_RELA 706ea14e5c3SBrian FeldmanThis section holds relocation entries with explicit addends, such 707ea14e5c3SBrian Feldmanas type 708ea14e5c3SBrian Feldman.Sy Elf32_Rela 7094e86fcacSSheldon Hearnfor the 32-bit class of object files. 7104e86fcacSSheldon HearnAn object may have multiple 711ea14e5c3SBrian Feldmanrelocation sections. 712ea14e5c3SBrian Feldman.It Dv SHT_HASH 7134e86fcacSSheldon HearnThis section holds a symbol hash table. 7144e86fcacSSheldon HearnAll object participating in 7154e86fcacSSheldon Hearndynamic linking must contain a symbol hash table. 7164e86fcacSSheldon HearnAn object file may 717ea14e5c3SBrian Feldmanhave only one hash table. 718ea14e5c3SBrian Feldman.It Dv SHT_DYNAMIC 7194e86fcacSSheldon HearnThis section holds information for dynamic linking. 7204e86fcacSSheldon HearnAn object file may 721ea14e5c3SBrian Feldmanhave only one dynamic section. 722ea14e5c3SBrian Feldman.It Dv SHT_NOTE 723ea14e5c3SBrian FeldmanThis section holds information that marks the file in some way. 724ea14e5c3SBrian Feldman.It Dv SHT_NOBITS 725ea14e5c3SBrian FeldmanA section of this type occupies no space in the file but otherwise 726ea14e5c3SBrian Feldmanresembles 727ea14e5c3SBrian Feldman.Sy SHN_PROGBITS . 728ea14e5c3SBrian FeldmanAlthough this section contains no bytes, the 729ea14e5c3SBrian Feldman.Sy sh_offset 730ea14e5c3SBrian Feldmanmember contains the conceptual file offset. 731ea14e5c3SBrian Feldman.It Dv SHT_REL 732ea14e5c3SBrian FeldmanThis section holds relocation offsets without explicit addends, such 733ea14e5c3SBrian Feldmanas type 734ea14e5c3SBrian Feldman.Sy Elf32_Rel 7354e86fcacSSheldon Hearnfor the 32-bit class of object files. 7364e86fcacSSheldon HearnAn object file may have multiple 737ea14e5c3SBrian Feldmanrelocation sections. 738ea14e5c3SBrian Feldman.It Dv SHT_SHLIB 739ea14e5c3SBrian FeldmanThis section is reserved but has unspecified semantics. 740ea14e5c3SBrian Feldman.It Dv SHT_DYNSYM 7414e86fcacSSheldon HearnThis section holds a minimal set of dynamic linking symbols. 7424e86fcacSSheldon HearnAn 743ea14e5c3SBrian Feldmanobject file can also contain a 744ea14e5c3SBrian Feldman.Sy SHN_SYMTAB 745ea14e5c3SBrian Feldmansection. 746ea14e5c3SBrian Feldman.It Dv SHT_LOPROC 747ea14e5c3SBrian FeldmanThis value up to and including 748ea14e5c3SBrian Feldman.Sy SHT_HIPROC 749ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 750ea14e5c3SBrian Feldman.It Dv SHT_HIPROC 751ea14e5c3SBrian FeldmanThis value down to and including 752ea14e5c3SBrian Feldman.Sy SHT_LOPROC 753ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 754ea14e5c3SBrian Feldman.It Dv SHT_LOUSER 755ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of indices reserved for 756ea14e5c3SBrian Feldmanapplication programs. 757ea14e5c3SBrian Feldman.It Dv SHT_HIUSER 758ea14e5c3SBrian FeldmanThis value specifies the upper bound of the range of indices reserved for 7594e86fcacSSheldon Hearnapplication programs. 7604e86fcacSSheldon HearnSection types between 761ea14e5c3SBrian Feldman.Sy SHT_LOUSER 762ea14e5c3SBrian Feldmanand 763ea14e5c3SBrian Feldman.Sy SHT_HIUSER 764ea14e5c3SBrian Feldmanmay be used by the application, without conflicting with current or future 765ea14e5c3SBrian Feldmansystem-defined section types. 766ea14e5c3SBrian Feldman.El 767ea14e5c3SBrian Feldman.Pp 768ea14e5c3SBrian Feldman.It Dv sh_flags 769ea14e5c3SBrian FeldmanSections support one-bit flags that describe miscellaneous attributes. 770ea14e5c3SBrian FeldmanIf a flag bit is set in 771ea14e5c3SBrian Feldman.Sy sh_flags , 772ea14e5c3SBrian Feldmanthe attribute is 773ea14e5c3SBrian Feldman.Dq on 7744e86fcacSSheldon Hearnfor the section. 7754e86fcacSSheldon HearnOtherwise, the attribute is 776ea14e5c3SBrian Feldman.Dq off 7774e86fcacSSheldon Hearnor does not apply. 7784e86fcacSSheldon HearnUndefined attributes are set to zero. 779ea14e5c3SBrian Feldman.Pp 780ea14e5c3SBrian Feldman.Bl -tag -width "SHF_EXECINSTR" -compact 781ea14e5c3SBrian Feldman.It Dv SHF_WRITE 782ea14e5c3SBrian FeldmanThis section contains data that should be writable during process 783ea14e5c3SBrian Feldmanexecution. 784ea14e5c3SBrian Feldman.It Dv SHF_ALLOC 7854e86fcacSSheldon HearnThe section occupies memory during process execution. 7864e86fcacSSheldon HearnSome control 7874e86fcacSSheldon Hearnsections do not reside in the memory image of an object file. 7884e86fcacSSheldon HearnThis 789ea14e5c3SBrian Feldmanattribute is off for those sections. 790ea14e5c3SBrian Feldman.It Dv SHF_EXECINSTR 791ea14e5c3SBrian FeldmanThe section contains executable machine instructions. 792ea14e5c3SBrian Feldman.It Dv SHF_MASKPROC 793ea14e5c3SBrian FeldmanAll bits included in this mask are reserved for processor-specific 794ea14e5c3SBrian Feldmansemantics. 795ea14e5c3SBrian Feldman.El 796ea14e5c3SBrian Feldman.Pp 797ea14e5c3SBrian Feldman.It Dv sh_addr 798ea14e5c3SBrian FeldmanIf the section will appear in the memory image of a process, this member 799ea14e5c3SBrian Feldmanholds the address at which the section's first byte should reside. 800ea14e5c3SBrian FeldmanOtherwise, the member contains zero. 801ea14e5c3SBrian Feldman.It Dv sh_offset 802ea14e5c3SBrian FeldmanThis member's value holds the byte offset from the beginning of the file 8034e86fcacSSheldon Hearnto the first byte in the section. 8044e86fcacSSheldon HearnOne section type, 805ea14e5c3SBrian Feldman.Sy SHT_NOBITS , 806ea14e5c3SBrian Feldmanoccupies no space in the file, and its 807ea14e5c3SBrian Feldman.Sy sh_offset 808ea14e5c3SBrian Feldmanmember locates the conceptual placement in the file. 809ea14e5c3SBrian Feldman.It Dv sh_size 8104e86fcacSSheldon HearnThis member holds the section's size in bytes. 8114e86fcacSSheldon HearnUnless the section type 812ea14e5c3SBrian Feldmanis 813ea14e5c3SBrian Feldman.Sy SHT_NOBITS , 814ea14e5c3SBrian Feldmanthe section occupies 815ea14e5c3SBrian Feldman.Sy sh_size 8164e86fcacSSheldon Hearnbytes in the file. 8174e86fcacSSheldon HearnA section of type 818ea14e5c3SBrian Feldman.Sy SHT_NOBITS 819ea14e5c3SBrian Feldmanmay have a non-zero size, but it occupies no space in the file. 820ea14e5c3SBrian Feldman.It Dv sh_link 821ea14e5c3SBrian FeldmanThis member holds a section header table index link, whose interpretation 822ea14e5c3SBrian Feldmandepends on the section type. 823ea14e5c3SBrian Feldman.It Dv sh_info 824ea14e5c3SBrian FeldmanThis member holds extra information, whose interpretation depends on the 825ea14e5c3SBrian Feldmansection type. 826ea14e5c3SBrian Feldman.It Dv sh_addralign 8274e86fcacSSheldon HearnSome sections have address alignment constraints. 8284e86fcacSSheldon HearnIf a section holds a 829ea14e5c3SBrian Feldmandoubleword, the system must ensure doubleword alignment for the entire 8304e86fcacSSheldon Hearnsection. 8314e86fcacSSheldon HearnThat is, the value of 832ea14e5c3SBrian Feldman.Sy sh_addr 833ea14e5c3SBrian Feldmanmust be congruent to zero, modulo the value of 834ea14e5c3SBrian Feldman.Sy sh_addralign . 8354e86fcacSSheldon HearnOnly zero and positive integral powers of two are allowed. 8364e86fcacSSheldon HearnValues of zero 837ea14e5c3SBrian Feldmanor one mean the section has no alignment constraints. 838ea14e5c3SBrian Feldman.It Dv sh_entsize 839ea14e5c3SBrian FeldmanSome sections hold a table of fixed-sized entries, such as a symbol table. 840ea14e5c3SBrian FeldmanFor such a section, this member gives the size in bytes for each entry. 841ea14e5c3SBrian FeldmanThis member contains zero if the section does not hold a table of 842ea14e5c3SBrian Feldmanfixed-size entries. 843ea14e5c3SBrian Feldman.El 844ea14e5c3SBrian Feldman.Pp 845ea14e5c3SBrian FeldmanVarious sections hold program and control information: 846ea14e5c3SBrian Feldman.Bl -tag -width ".shstrtab" -compact 847ea14e5c3SBrian Feldman.It .bss 8484f068961SRuslan Ermilov(Block Started by Symbol) 8490757c960SBrian FeldmanThis section holds uninitialized data that contributes to the program's 8504e86fcacSSheldon Hearnmemory image. 8514e86fcacSSheldon HearnBy definition, the system initializes the data with zeros 8524e86fcacSSheldon Hearnwhen the program begins to run. 8534e86fcacSSheldon HearnThis section is of type 854ea14e5c3SBrian Feldman.Sy SHT_NOBITS . 855ea14e5c3SBrian FeldmanThe attributes types are 856ea14e5c3SBrian Feldman.Sy SHF_ALLOC 857ea14e5c3SBrian Feldmanand 858ea14e5c3SBrian Feldman.Sy SHF_WRITE . 859ea14e5c3SBrian Feldman.It .comment 8604e86fcacSSheldon HearnThis section holds version control information. 8614e86fcacSSheldon HearnThis section is of type 862ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 863ea14e5c3SBrian FeldmanNo attribute types are used. 864ea14e5c3SBrian Feldman.It .data 8650757c960SBrian FeldmanThis section holds initialized data that contribute to the program's 8664e86fcacSSheldon Hearnmemory image. 8674e86fcacSSheldon HearnThis section is of type 868ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 869ea14e5c3SBrian FeldmanThe attribute types are 870ea14e5c3SBrian Feldman.Sy SHF_ALLOC 871ea14e5c3SBrian Feldmanand 872ea14e5c3SBrian Feldman.Sy SHF_WRITE . 873ea14e5c3SBrian Feldman.It .data1 8740757c960SBrian FeldmanThis section holds initialized data that contribute to the program's 8754e86fcacSSheldon Hearnmemory image. 8764e86fcacSSheldon HearnThis section is of type 877ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 878ea14e5c3SBrian FeldmanThe attribute types are 879ea14e5c3SBrian Feldman.Sy SHF_ALLOC 880ea14e5c3SBrian Feldmanand 881ea14e5c3SBrian Feldman.Sy SHF_WRITE . 882ea14e5c3SBrian Feldman.It .debug 8834e86fcacSSheldon HearnThis section holds information for symbolic debugging. 8844e86fcacSSheldon HearnThe contents 8854e86fcacSSheldon Hearnare unspecified. 8864e86fcacSSheldon HearnThis section is of type 887ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 888ea14e5c3SBrian FeldmanNo attribute types are used. 889ea14e5c3SBrian Feldman.It .dynamic 8904e86fcacSSheldon HearnThis section holds dynamic linking information. 8914e86fcacSSheldon HearnThe section's attributes 892ea14e5c3SBrian Feldmanwill include the 893ea14e5c3SBrian Feldman.Sy SHF_ALLOC 8944e86fcacSSheldon Hearnbit. 8954e86fcacSSheldon HearnWhether the 896ea14e5c3SBrian Feldman.Sy SHF_WRITE 8974e86fcacSSheldon Hearnbit is set is processor-specific. 8984e86fcacSSheldon HearnThis section is of type 899ea14e5c3SBrian Feldman.Sy SHT_DYNAMIC . 900ea14e5c3SBrian FeldmanSee the attributes above. 901ea14e5c3SBrian Feldman.It .dynstr 902ea14e5c3SBrian FeldmanThis section holds strings needed for dynamic linking, most commonly 903ea14e5c3SBrian Feldmanthe strings that represent the names associated with symbol table entries. 904ea14e5c3SBrian FeldmanThis section is of type 905ea14e5c3SBrian Feldman.Sy SHT_STRTAB . 906ea14e5c3SBrian FeldmanThe attribute type used is 907ea14e5c3SBrian Feldman.Sy SHF_ALLOC . 908ea14e5c3SBrian Feldman.It .dynsym 9094e86fcacSSheldon HearnThis section holds the dynamic linking symbol table. 9104e86fcacSSheldon HearnThis section is of type 911ea14e5c3SBrian Feldman.Sy SHT_DYNSYM . 912ea14e5c3SBrian FeldmanThe attribute used is 913ea14e5c3SBrian Feldman.Sy SHF_ALLOC . 914ea14e5c3SBrian Feldman.It .fini 915ea14e5c3SBrian FeldmanThis section holds executable instructions that contribute to the process 9164e86fcacSSheldon Hearntermination code. 9174e86fcacSSheldon HearnWhen a program exits normally the system arranges to 9184e86fcacSSheldon Hearnexecute the code in this section. 9194e86fcacSSheldon HearnThis section is of type 920ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 921ea14e5c3SBrian FeldmanThe attributes used are 922ea14e5c3SBrian Feldman.Sy SHF_ALLOC 923ea14e5c3SBrian Feldmanand 924ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR . 925ea14e5c3SBrian Feldman.It .got 9264e86fcacSSheldon HearnThis section holds the global offset table. 9274e86fcacSSheldon HearnThis section is of type 928ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 929ea14e5c3SBrian FeldmanThe attributes are processor-specific. 930ea14e5c3SBrian Feldman.It .hash 9314e86fcacSSheldon HearnThis section holds a symbol hash table. 9324e86fcacSSheldon HearnThis section is of type 933ea14e5c3SBrian Feldman.Sy SHT_HASH . 934ea14e5c3SBrian FeldmanThe attribute used is 935ea14e5c3SBrian Feldman.Sy SHF_ALLOC . 936ea14e5c3SBrian Feldman.It .init 937ea14e5c3SBrian FeldmanThis section holds executable instructions that contribute to the process 9384e86fcacSSheldon Hearninitialization code. 9394e86fcacSSheldon HearnWhen a program starts to run the system arranges to 940ea14e5c3SBrian Feldmanexecute the code in this section before calling the main program entry point. 941ea14e5c3SBrian FeldmanThis section is of type 942ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 943ea14e5c3SBrian FeldmanThe attributes used are 944ea14e5c3SBrian Feldman.Sy SHF_ALLOC 945ea14e5c3SBrian Feldmanand 946ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR . 947ea14e5c3SBrian Feldman.It .interp 9484e86fcacSSheldon HearnThis section holds the pathname of a program interpreter. 9494e86fcacSSheldon HearnIf the file has 950ea14e5c3SBrian Feldmana loadable segment that includes the section, the section's attributes will 951ea14e5c3SBrian Feldmaninclude the 952ea14e5c3SBrian Feldman.Sy SHF_ALLOC 9534e86fcacSSheldon Hearnbit. 9544e86fcacSSheldon HearnOtherwise, that bit will be off. 9554e86fcacSSheldon HearnThis section is of type 956ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 957ea14e5c3SBrian Feldman.It .line 958ea14e5c3SBrian FeldmanThis section holds line number information for symbolic debugging, which 959ea14e5c3SBrian Feldmandescribes the correspondence between the program source and the machine code. 9604e86fcacSSheldon HearnThe contents are unspecified. 9614e86fcacSSheldon HearnThis section is of type 962ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 963ea14e5c3SBrian FeldmanNo attribute types are used. 964ea14e5c3SBrian Feldman.It .note 965ea14e5c3SBrian FeldmanThis section holds information in the 966ea14e5c3SBrian Feldman.Dq Note Section 9674e86fcacSSheldon Hearnformat described below. 9684e86fcacSSheldon HearnThis section is of type 969ea14e5c3SBrian Feldman.Sy SHT_NOTE . 970ea14e5c3SBrian FeldmanNo attribute types are used. 971ea14e5c3SBrian Feldman.It .plt 9724e86fcacSSheldon HearnThis section holds the procedure linkage table. 9734e86fcacSSheldon HearnThis section is of type 974ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 975ea14e5c3SBrian FeldmanThe attributes are processor-specific. 976ea14e5c3SBrian Feldman.It .relNAME 9774e86fcacSSheldon HearnThis section holds relocation information as described below. 9784e86fcacSSheldon HearnIf the file 979ea14e5c3SBrian Feldmanhas a loadable segment that includes relocation, the section's attributes 980ea14e5c3SBrian Feldmanwill include the 981ea14e5c3SBrian Feldman.Sy SHF_ALLOC 9824e86fcacSSheldon Hearnbit. 9834e86fcacSSheldon HearnOtherwise the bit will be off. 9844e86fcacSSheldon HearnBy convention, 985ea14e5c3SBrian Feldman.Dq NAME 9864e86fcacSSheldon Hearnis supplied by the section to which the relocations apply. 9874e86fcacSSheldon HearnThus a relocation 988ea14e5c3SBrian Feldmansection for 989ea14e5c3SBrian Feldman.Sy .text 990ea14e5c3SBrian Feldmannormally would have the name 991ea14e5c3SBrian Feldman.Sy .rel.text . 992ea14e5c3SBrian FeldmanThis section is of type 993ea14e5c3SBrian Feldman.Sy SHT_REL . 994ea14e5c3SBrian Feldman.It .relaNAME 9954e86fcacSSheldon HearnThis section holds relocation information as described below. 9964e86fcacSSheldon HearnIf the file 997ea14e5c3SBrian Feldmanhas a loadable segment that includes relocation, the section's attributes 998ea14e5c3SBrian Feldmanwill include the 999ea14e5c3SBrian Feldman.Sy SHF_ALLOC 10004e86fcacSSheldon Hearnbit. 10014e86fcacSSheldon HearnOtherwise the bit will be off. 10024e86fcacSSheldon HearnBy convention, 1003ea14e5c3SBrian Feldman.Dq NAME 10044e86fcacSSheldon Hearnis supplied by the section to which the relocations apply. 10054e86fcacSSheldon HearnThus a relocation 1006ea14e5c3SBrian Feldmansection for 1007ea14e5c3SBrian Feldman.Sy .text 1008ea14e5c3SBrian Feldmannormally would have the name 1009ea14e5c3SBrian Feldman.Sy .rela.text . 1010ea14e5c3SBrian FeldmanThis section is of type 1011ea14e5c3SBrian Feldman.Sy SHT_RELA . 1012ea14e5c3SBrian Feldman.It .rodata 1013f3a2511aSChris CostelloThis section holds read-only data that typically contributes to a 10144e86fcacSSheldon Hearnnon-writable segment in the process image. 10154e86fcacSSheldon HearnThis section is of type 1016ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 1017ea14e5c3SBrian FeldmanThe attribute used is 1018ea14e5c3SBrian Feldman.Sy SHF_ALLOC . 1019ea14e5c3SBrian Feldman.It .rodata1 1020ea14e5c3SBrian FeldmanThis section hold read-only data that typically contributes to a 10214e86fcacSSheldon Hearnnon-writable segment in the process image. 10224e86fcacSSheldon HearnThis section is of type 1023ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 1024ea14e5c3SBrian FeldmanThe attribute used is 1025ea14e5c3SBrian Feldman.Sy SHF_ALLOC . 1026ea14e5c3SBrian Feldman.It .shstrtab 10274e86fcacSSheldon HearnThis section holds section names. 10284e86fcacSSheldon HearnThis section is of type 1029ea14e5c3SBrian Feldman.Sy SHT_STRTAB . 1030ea14e5c3SBrian FeldmanNo attribute types are used. 1031ea14e5c3SBrian Feldman.It .strtab 1032ea14e5c3SBrian FeldmanThis section holds strings, most commonly the strings that represent the 10334e86fcacSSheldon Hearnnames associated with symbol table entries. 10344e86fcacSSheldon HearnIf the file has a loadable 1035ea14e5c3SBrian Feldmansegment that includes the symbol string table, the section's attributes 1036ea14e5c3SBrian Feldmanwill include the 1037ea14e5c3SBrian Feldman.Sy SHF_ALLOC 10384e86fcacSSheldon Hearnbit. 10394e86fcacSSheldon HearnOtherwise the bit will be off. 10404e86fcacSSheldon HearnThis section is of type 1041ea14e5c3SBrian Feldman.Sy SHT_STRTAB . 1042ea14e5c3SBrian Feldman.It .symtab 10434e86fcacSSheldon HearnThis section holds a symbol table. 10444e86fcacSSheldon HearnIf the file has a loadable segment 1045ea14e5c3SBrian Feldmanthat includes the symbol table, the section's attributes will include 1046ea14e5c3SBrian Feldmanthe 1047ea14e5c3SBrian Feldman.Sy SHF_ALLOC 10484e86fcacSSheldon Hearnbit. 10494e86fcacSSheldon HearnOtherwise the bit will be off. 10504e86fcacSSheldon HearnThis section is of type 1051ea14e5c3SBrian Feldman.Sy SHT_SYMTAB . 1052ea14e5c3SBrian Feldman.It .text 1053ea14e5c3SBrian FeldmanThis section holds the 1054ea14e5c3SBrian Feldman.Dq text , 10554e86fcacSSheldon Hearnor executable instructions, of a program. 10564e86fcacSSheldon HearnThis section is of type 1057ea14e5c3SBrian Feldman.Sy SHT_PROGBITS . 1058ea14e5c3SBrian FeldmanThe attributes used are 1059ea14e5c3SBrian Feldman.Sy SHF_ALLOC 1060ea14e5c3SBrian Feldmanand 1061ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR . 1062dc1cbf89STom Rhodes.It .jcr 1063dc1cbf89STom RhodesThis section holds information about Java classes that must 1064dc1cbf89STom Rhodesbe registered. 1065dc1cbf89STom Rhodes.It .eh_frame 1066dc1cbf89STom RhodesThis section holds information used for C++ exception-handling. 1067ea14e5c3SBrian Feldman.El 1068ea14e5c3SBrian Feldman.Pp 1069ea14e5c3SBrian FeldmanString table sections hold null-terminated character sequences, commonly 10704e86fcacSSheldon Hearncalled strings. 10714e86fcacSSheldon HearnThe object file uses these strings to represent symbol 10724e86fcacSSheldon Hearnand section names. 10734e86fcacSSheldon HearnOne references a string as an index into the string 10744e86fcacSSheldon Hearntable section. 10754e86fcacSSheldon HearnThe first byte, which is index zero, is defined to hold 10764e86fcacSSheldon Hearna null character. 10774e86fcacSSheldon HearnSimilarly, a string table's last byte is defined to 1078ea14e5c3SBrian Feldmanhold a null character, ensuring null termination for all strings. 1079ea14e5c3SBrian Feldman.Pp 1080ea14e5c3SBrian FeldmanAn object file's symbol table holds information needed to locate and 10814e86fcacSSheldon Hearnrelocate a program's symbolic definitions and references. 10824e86fcacSSheldon HearnA symbol table 1083ea14e5c3SBrian Feldmanindex is a subscript into this array. 1084ea14e5c3SBrian Feldman.Pp 1085ea14e5c3SBrian Feldman.Bd -literal -offset indent 1086ea14e5c3SBrian Feldmantypedef struct { 1087ea14e5c3SBrian Feldman Elf32_Word st_name; 1088ea14e5c3SBrian Feldman Elf32_Addr st_value; 1089757686b1SMarcel Moolenaar Elf32_Word st_size; 1090ea14e5c3SBrian Feldman unsigned char st_info; 1091ea14e5c3SBrian Feldman unsigned char st_other; 1092ea14e5c3SBrian Feldman Elf32_Half st_shndx; 1093ea14e5c3SBrian Feldman} Elf32_Sym; 1094ea14e5c3SBrian Feldman.Ed 1095ea14e5c3SBrian Feldman.Pp 1096ea14e5c3SBrian Feldman.Bd -literal -offset indent 1097ea14e5c3SBrian Feldmantypedef struct { 1098757686b1SMarcel Moolenaar Elf64_Word st_name; 1099ea14e5c3SBrian Feldman unsigned char st_info; 1100ea14e5c3SBrian Feldman unsigned char st_other; 1101757686b1SMarcel Moolenaar Elf64_Half st_shndx; 1102ea14e5c3SBrian Feldman Elf64_Addr st_value; 1103757686b1SMarcel Moolenaar Elf64_Xword st_size; 1104ea14e5c3SBrian Feldman} Elf64_Sym; 1105ea14e5c3SBrian Feldman.Ed 1106ea14e5c3SBrian Feldman.Pp 1107ea14e5c3SBrian Feldman.Bl -tag -width "st_value" -compact 1108ea14e5c3SBrian Feldman.It Dv st_name 1109ea14e5c3SBrian FeldmanThis member holds an index into the object file's symbol string table, 11104e86fcacSSheldon Hearnwhich holds character representations of the symbol names. 11114e86fcacSSheldon HearnIf the value 1112ea14e5c3SBrian Feldmanis non-zero, it represents a string table index that gives the symbol 11134e86fcacSSheldon Hearnname. 11144e86fcacSSheldon HearnOtherwise, the symbol table has no name. 1115ea14e5c3SBrian Feldman.It Dv st_value 1116ea14e5c3SBrian FeldmanThis member gives the value of the associated symbol. 1117ea14e5c3SBrian Feldman.It Dv st_size 11184e86fcacSSheldon HearnMany symbols have associated sizes. 11194e86fcacSSheldon HearnThis member holds zero if the symbol 1120ea14e5c3SBrian Feldmanhas no size or an unknown size. 1121ea14e5c3SBrian Feldman.It Dv st_info 1122ea14e5c3SBrian FeldmanThis member specifies the symbol's type and binding attributes: 1123ea14e5c3SBrian Feldman.Pp 1124ea14e5c3SBrian Feldman.Bl -tag -width "STT_SECTION" -compact 1125ea14e5c3SBrian Feldman.It Dv STT_NOTYPE 1126ea14e5c3SBrian FeldmanThe symbol's type is not defined. 1127ea14e5c3SBrian Feldman.It Dv STT_OBJECT 1128ea14e5c3SBrian FeldmanThe symbol is associated with a data object. 1129ea14e5c3SBrian Feldman.It Dv STT_FUNC 1130ea14e5c3SBrian FeldmanThe symbol is associated with a function or other executable code. 1131ea14e5c3SBrian Feldman.It Dv STT_SECTION 11324e86fcacSSheldon HearnThe symbol is associated with a section. 11334e86fcacSSheldon HearnSymbol table entries of 1134ea14e5c3SBrian Feldmanthis type exist primarily for relocation and normally have 1135ea14e5c3SBrian Feldman.Sy STB_LOCAL 1136ea14e5c3SBrian Feldmanbindings. 1137ea14e5c3SBrian Feldman.It Dv STT_FILE 1138ea14e5c3SBrian FeldmanBy convention the symbol's name gives the name of the source file 11394e86fcacSSheldon Hearnassociated with the object file. 11404e86fcacSSheldon HearnA file symbol has 1141ea14e5c3SBrian Feldman.Sy STB_LOCAL 1142ea14e5c3SBrian Feldmanbindings, its section index is 1143ea14e5c3SBrian Feldman.Sy SHN_ABS , 1144ea14e5c3SBrian Feldmanand it precedes the other 1145ea14e5c3SBrian Feldman.Sy STB_LOCAL 1146ea14e5c3SBrian Feldmansymbols of the file, if it is present. 1147ea14e5c3SBrian Feldman.It Dv STT_LOPROC 1148ea14e5c3SBrian FeldmanThis value up to and including 1149ea14e5c3SBrian Feldman.Sy STT_HIPROC 1150ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 1151ea14e5c3SBrian Feldman.It Dv STT_HIPROC 1152ea14e5c3SBrian FeldmanThis value down to and including 1153ea14e5c3SBrian Feldman.Sy STT_LOPROC 1154ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 1155ea14e5c3SBrian Feldman.El 1156ea14e5c3SBrian Feldman.Pp 1157ea14e5c3SBrian Feldman.Bl -tag -width "STB_GLOBAL" -compact 1158ea14e5c3SBrian Feldman.It Dv STB_LOCAL 1159ea14e5c3SBrian FeldmanLocal symbols are not visible outside the object file containing their 11604e86fcacSSheldon Hearndefinition. 11614e86fcacSSheldon HearnLocal symbols of the same name may exist in multiple file 1162ea14e5c3SBrian Feldmanwithout interfering with each other. 1163ea14e5c3SBrian Feldman.It Dv STB_GLOBAL 11644e86fcacSSheldon HearnGlobal symbols are visible to all object files being combined. 11654e86fcacSSheldon HearnOne file's 1166ea14e5c3SBrian Feldmandefinition of a global symbol will satisfy another file's undefined 1167ea14e5c3SBrian Feldmanreference to the same symbol. 1168ea14e5c3SBrian Feldman.It Dv STB_WEAK 1169ea14e5c3SBrian FeldmanWeak symbols resemble global symbols, but their definitions have lower 1170ea14e5c3SBrian Feldmanprecedence. 1171ea14e5c3SBrian Feldman.It Dv STB_LOPROC 1172ea14e5c3SBrian FeldmanThis value up to and including 1173ea14e5c3SBrian Feldman.Sy STB_HIPROC 1174ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 1175ea14e5c3SBrian Feldman.It Dv STB_HIPROC 1176ea14e5c3SBrian FeldmanThis value down to and including 1177ea14e5c3SBrian Feldman.Sy STB_LOPROC 1178ea14e5c3SBrian Feldmanare reserved for processor-specific semantics. 1179ea14e5c3SBrian Feldman.Pp 1180ea14e5c3SBrian FeldmanThere are macros for packing and unpacking the binding and type fields: 1181d0353b83SRuslan Ermilov.Pp 1182ea14e5c3SBrian Feldman.Bl -tag -width "ELF32_ST_INFO(bind, type)" -compact 1183d0353b83SRuslan Ermilov.It Xo 1184d0353b83SRuslan Ermilov.Fn ELF32_ST_BIND info 1185d0353b83SRuslan Ermilov.Xc 1186ea14e5c3SBrian Feldmanor 1187d0353b83SRuslan Ermilov.Fn ELF64_ST_BIND info 1188f3a2511aSChris Costelloextract a binding from an st_info value. 1189d0353b83SRuslan Ermilov.It Xo 1190d0353b83SRuslan Ermilov.Fn ELF64_ST_TYPE info 1191d0353b83SRuslan Ermilov.Xc 1192ea14e5c3SBrian Feldmanor 1193d0353b83SRuslan Ermilov.Fn ELF32_ST_TYPE info 1194f3a2511aSChris Costelloextract a type from an st_info value. 1195d0353b83SRuslan Ermilov.It Xo 1196d0353b83SRuslan Ermilov.Fn ELF32_ST_INFO bind type 1197d0353b83SRuslan Ermilov.Xc 1198ea14e5c3SBrian Feldmanor 1199d0353b83SRuslan Ermilov.Fn ELF64_ST_INFO bind type 1200f3a2511aSChris Costelloconvert a binding and a type into an st_info value. 1201ea14e5c3SBrian Feldman.El 1202ea14e5c3SBrian Feldman.El 1203ea14e5c3SBrian Feldman.Pp 1204ea14e5c3SBrian Feldman.It Dv st_other 1205ea14e5c3SBrian FeldmanThis member currently holds zero and has no defined meaning. 1206ea14e5c3SBrian Feldman.It Dv st_shndx 1207ea14e5c3SBrian FeldmanEvery symbol table entry is 1208ea14e5c3SBrian Feldman.Dq defined 1209210ad6ebSJoseph Koshyin relation to some section. 12104e86fcacSSheldon HearnThis member holds the relevant section 1211ea14e5c3SBrian Feldmanheader table index. 1212ea14e5c3SBrian Feldman.El 1213ea14e5c3SBrian Feldman.Pp 1214ea14e5c3SBrian FeldmanRelocation is the process of connecting symbolic references with 12154e86fcacSSheldon Hearnsymbolic definitions. 12164e86fcacSSheldon HearnRelocatable files must have information that 1217ea14e5c3SBrian Feldmandescribes how to modify their section contents, thus allowing executable 1218ea14e5c3SBrian Feldmanand shared object files to hold the right information for a process' 12194e86fcacSSheldon Hearnprogram image. 12204e86fcacSSheldon HearnRelocation entries are these data. 1221ea14e5c3SBrian Feldman.Pp 1222ea14e5c3SBrian FeldmanRelocation structures that do not need an addend: 1223ea14e5c3SBrian Feldman.Pp 1224ea14e5c3SBrian Feldman.Bd -literal -offset indent 1225ea14e5c3SBrian Feldmantypedef struct { 1226ea14e5c3SBrian Feldman Elf32_Addr r_offset; 1227ea14e5c3SBrian Feldman Elf32_Word r_info; 1228ea14e5c3SBrian Feldman} Elf32_Rel; 1229ea14e5c3SBrian Feldman.Ed 1230ea14e5c3SBrian Feldman.Bd -literal -offset indent 1231ea14e5c3SBrian Feldmantypedef struct { 1232ea14e5c3SBrian Feldman Elf64_Addr r_offset; 1233757686b1SMarcel Moolenaar Elf64_Xword r_info; 1234ea14e5c3SBrian Feldman} Elf64_Rel; 1235ea14e5c3SBrian Feldman.Ed 1236ea14e5c3SBrian Feldman.Pp 1237ea14e5c3SBrian FeldmanRelocation structures that need an addend: 1238ea14e5c3SBrian Feldman.Pp 1239ea14e5c3SBrian Feldman.Bd -literal -offset indent 1240ea14e5c3SBrian Feldmantypedef struct { 1241ea14e5c3SBrian Feldman Elf32_Addr r_offset; 1242ea14e5c3SBrian Feldman Elf32_Word r_info; 1243ea14e5c3SBrian Feldman Elf32_Sword r_addend; 1244ea14e5c3SBrian Feldman} Elf32_Rela; 1245ea14e5c3SBrian Feldman.Ed 1246ea14e5c3SBrian Feldman.Bd -literal -offset indent 1247ea14e5c3SBrian Feldmantypedef struct { 1248ea14e5c3SBrian Feldman Elf64_Addr r_offset; 1249757686b1SMarcel Moolenaar Elf64_Xword r_info; 1250757686b1SMarcel Moolenaar Elf64_Sxword r_addend; 1251ea14e5c3SBrian Feldman} Elf64_Rela; 1252ea14e5c3SBrian Feldman.Ed 1253ea14e5c3SBrian Feldman.Pp 1254ea14e5c3SBrian Feldman.Bl -tag -width "r_offset" -compact 1255ea14e5c3SBrian Feldman.It Dv r_offset 1256ea14e5c3SBrian FeldmanThis member gives the location at which to apply the relocation action. 1257ea14e5c3SBrian FeldmanFor a relocatable file, the value is the byte offset from the beginning 12584e86fcacSSheldon Hearnof the section to the storage unit affected by the relocation. 12594e86fcacSSheldon HearnFor an 1260ea14e5c3SBrian Feldmanexecutable file or shared object, the value is the virtual address of 1261ea14e5c3SBrian Feldmanthe storage unit affected by the relocation. 1262ea14e5c3SBrian Feldman.It Dv r_info 1263ea14e5c3SBrian FeldmanThis member gives both the symbol table index with respect to which the 12644e86fcacSSheldon Hearnrelocation must be made and the type of relocation to apply. 12654e86fcacSSheldon HearnRelocation 12664e86fcacSSheldon Hearntypes are processor-specific. 12674e86fcacSSheldon HearnWhen the text refers to a relocation 1268ea14e5c3SBrian Feldmanentry's relocation type or symbol table index, it means the result of 1269ea14e5c3SBrian Feldmanapplying 1270ea14e5c3SBrian Feldman.Sy ELF_[32|64]_R_TYPE 1271ea14e5c3SBrian Feldmanor 1272ea14e5c3SBrian Feldman.Sy ELF[32|64]_R_SYM , 1273ea14e5c3SBrian Feldmanrespectively to the entry's 1274ea14e5c3SBrian Feldman.Sy r_info 1275ea14e5c3SBrian Feldmanmember. 1276ea14e5c3SBrian Feldman.It Dv r_addend 1277ea14e5c3SBrian FeldmanThis member specifies a constant addend used to compute the value to be 1278ea14e5c3SBrian Feldmanstored into the relocatable field. 1279ea14e5c3SBrian Feldman.El 1280ea14e5c3SBrian Feldman.Sh SEE ALSO 1281ea14e5c3SBrian Feldman.Xr as 1 , 1282ea14e5c3SBrian Feldman.Xr gdb 1 , 1283ea14e5c3SBrian Feldman.Xr ld 1 , 1284ea14e5c3SBrian Feldman.Xr objdump 1 , 1285ea14e5c3SBrian Feldman.Xr execve 2 , 1286ea14e5c3SBrian Feldman.Xr core 5 1287ea14e5c3SBrian Feldman.Rs 1288ea14e5c3SBrian Feldman.%A Hewlett Packard 1289ea14e5c3SBrian Feldman.%B Elf-64 Object File Format 1290ea14e5c3SBrian Feldman.Re 1291ea14e5c3SBrian Feldman.Rs 1292ea14e5c3SBrian Feldman.%A Santa Cruz Operation 1293ea14e5c3SBrian Feldman.%B System V Application Binary Interface 1294ea14e5c3SBrian Feldman.Re 1295ea14e5c3SBrian Feldman.Rs 1296ea14e5c3SBrian Feldman.%A Unix System Laboratories 1297ea14e5c3SBrian Feldman.%T Object Files 1298ea14e5c3SBrian Feldman.%B "Executable and Linking Format (ELF)" 1299ea14e5c3SBrian Feldman.Re 1300ea14e5c3SBrian Feldman.Sh HISTORY 1301ea14e5c3SBrian FeldmanThe ELF header files made their appearance in 1302ea14e5c3SBrian Feldman.Fx 2.2.6 . 1303ea14e5c3SBrian FeldmanELF in itself first appeared in 1304ea14e5c3SBrian Feldman.At V . 1305ea14e5c3SBrian FeldmanThe ELF format is an adopted standard. 1306ea14e5c3SBrian Feldman.Sh AUTHORS 1307ea14e5c3SBrian FeldmanThis manual page was written by 1308ea14e5c3SBrian Feldman.An Jeroen Ruigrok van der Werven 1309d905b0b6SMike Pritchard.Aq asmodai@FreeBSD.org 1310ed2879a5SRuslan Ermilovwith inspiration from BSDi's 1311ed2879a5SRuslan Ermilov.Bsx 1312ea14e5c3SBrian Feldman.Xr elf 5 1313ea14e5c3SBrian Feldmanmanpage. 1314