diff options
| -rw-r--r-- | man5/elf.5 | 1245 |
1 files changed, 0 insertions, 1245 deletions
diff --git a/man5/elf.5 b/man5/elf.5 index 04a70306f9..229de3fd3a 100644 --- a/man5/elf.5 +++ b/man5/elf.5 @@ -1,33 +1,3 @@ -.\" $OpenBSD: elf.5,v 1.12 2003/10/27 20:23:58 jmc Exp $ -.\"Copyright (c) 1999 Jeroen Ruigrok van der Werven -.\"All rights reserved. -.\" -.\"Redistribution and use in source and binary forms, with or without -.\"modification, are permitted provided that the following conditions -.\"are met: -.\"1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\"2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\"THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\"ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\"IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\"ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\"FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\"DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\"OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\"HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\"LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\"OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\"SUCH DAMAGE. -.\" -.\" $FreeBSD: src/share/man/man5/elf.5,v 1.21 2001/10/01 16:09:23 ru Exp $ -.\" -.\" Slightly adapted - aeb, 2004-01-01 -.\" 2005-07-15, Mike Frysinger <vapier@gentoo.org>, various fixes -.\" .Dd July 31, 1999 .Dt ELF 5 .Os @@ -133,1014 +103,6 @@ typedef struct { .Ed .Pp The fields have the following meanings: -.Bl -tag -width "e_phentsize" -offset indent -.It Dv e_ident -This array of bytes specifies to interpret the file, -independent of the processor or the file's remaining contents. -Within this array everything is named by macros, which start with -the prefix -.Sy EI_ -and may contain values which start with the prefix -.Sy ELF . -The following macros are defined: -.Bl -tag -width "EI_VERSION" \" EI_ABIVERSION -.It Dv EI_MAG0 -The first byte of the magic number. -It must be filled with -.Sy ELFMAG0 . -(0: 0x7f) -.It Dv EI_MAG1 -The second byte of the magic number. -It must be filled with -.Sy ELFMAG1 . -(1: 'E') -.It Dv EI_MAG2 -The third byte of the magic number. -It must be filled with -.Sy ELFMAG2 . -(2: 'L') -.It Dv EI_MAG3 -The fourth byte of the magic number. -It must be filled with -.Sy ELFMAG3 . -(3: 'F') -.It Dv EI_CLASS -The fifth byte identifies the architecture for this binary: -.Pp -.Bl -tag -width "ELFCLASSNONE" -compact -.It Dv ELFCLASSNONE -This class is invalid. -.It Dv ELFCLASS32 -This defines the 32-bit architecture. -It supports machines with files -and virtual address spaces up to 4 Gigabytes. -.It Dv ELFCLASS64 -This defines the 64-bit architecture. -.El -.It Dv EI_DATA -The sixth byte specifies the data encoding of the processor-specific -data in the file. -Currently these encodings are supported: -.Pp -.Bl -tag -width "ELFDATA2LSB" -compact -.It Dv ELFDATANONE -Unknown data format. -.It Dv ELFDATA2LSB -Two's complement, little-endian. -.It Dv ELFDATA2MSB -Two's complement, big-endian. -.El -.It Dv EI_VERSION -The version number of the ELF specification: -.Pp -.Bl -tag -width "EV_CURRENT" -compact -.It Dv EV_NONE -Invalid version. -.It Dv EV_CURRENT -Current version. -.El -.It Dv EI_OSABI -This byte identifies the operating system -and ABI to which the object is targeted. -Some fields in other ELF structures have flags -and values that have platform specific meanings; -the interpretation of those fields is determined by the value of this byte. -E.g.: -.Pp -.Bl -tag -width "ELFOSABI_STANDALONE" -compact -.It Dv ELFOSABI_NONE -Same as ELFOSABI_SYSV -.\" 0 -.It Dv ELFOSABI_SYSV -UNIX System V ABI. -.\" 0 -.\" synonym: ELFOSABI_NONE -.It Dv ELFOSABI_HPUX -HP-UX ABI. -.\" 1 -.It Dv ELFOSABI_NETBSD -NetBSD ABI. -.\" 2 -.It Dv ELFOSABI_LINUX -Linux ABI. -.\" 3 -.\" .It Dv ELFOSABI_HURD -.\" Hurd ABI. -.\" 4 -.\" .It Dv ELFOSABI_86OPEN -.\" 86Open Common IA32 ABI. -.\" 5 -.It Dv ELFOSABI_SOLARIS -Solaris ABI. -.\" 6 -.\" .It Dv ELFOSABI_MONTEREY -.\" Monterey project ABI. Now replaced by -.\" ELFOSABI_AIX -.\" 7 -.It Dv ELFOSABI_IRIX -IRIX ABI. -.\" 8 -.It Dv ELFOSABI_FREEBSD -FreeBSD ABI. -.\" 9 -.It Dv ELFOSABI_TRU64 -TRU64 UNIX ABI. -.\" 10 -.\" ELFOSABI_MODESTO -.\" 11 -.\" ELFOSABI_OPENBSD -.\" 12 -.It Dv ELFOSABI_ARM -ARM architecture ABI. -.\" 97 -.It Dv ELFOSABI_STANDALONE -Stand-alone (embedded) ABI. -.\" 255 -.El -.It Dv EI_ABIVERSION -This byte identifies the version of the ABI -to which the object is targeted. -This field is used to distinguish among incompatible versions of an ABI. -The interpretation of this version number -is dependent on the ABI identified by the EI_OSABI field. -Applications conforming to this specification use the value 0. -.It Dv EI_PAD -Start of padding. -These bytes are reserved and set to zero. -Programs -which read them should ignore them. -The value for EI_PAD will change in -the future if currently unused bytes are given meanings. -.It Dv EI_BRAND -Start of architecture identification. -.It Dv EI_NIDENT -The size of the e_ident array. -.El -.Pp -.It Dv e_type -This member of the structure identifies the object file type: -.Pp -.Bl -tag -width "ET_NONE" -compact -.It Dv ET_NONE -An unknown type. -.It Dv ET_REL -A relocatable file. -.It Dv ET_EXEC -An executable file. -.It Dv ET_DYN -A shared object. -.It Dv ET_CORE -A core file. -.El -.Pp -.It Dv e_machine -This member specifies the required architecture for an individual file. -E.g.: -.Pp -.Bl -tag -width "EM_MIPS_RS4_BE" -compact -.It Dv EM_NONE -An unknown machine. -.\" 0 -.It Dv EM_M32 -AT&T WE 32100. -.\" 1 -.It Dv EM_SPARC -Sun Microsystems SPARC. -.\" 2 -.It Dv EM_386 -Intel 80386. -.\" 3 -.It Dv EM_68K -Motorola 68000. -.\" 4 -.It Dv EM_88K -Motorola 88000. -.\" 5 -.\" .It Dv EM_486 -.\" Intel 80486. -.\" 6 -.It Dv EM_860 -Intel 80860. -.\" 7 -.It Dv EM_MIPS -MIPS RS3000 (big-endian only). -.\" 8 -.\" EM_S370 -.\" 9 -.\" .It Dv EM_MIPS_RS4_BE -.\" MIPS RS4000 (big-endian only). Deprecated. -.\" 10 -.\" EM_MIPS_RS3_LE (MIPS R3000 little-endian) -.\" 10 -.It Dv EM_PARISC -HP/PA. -.\" 15 -.It Dv EM_SPARC32PLUS -SPARC with enhanced instruction set. -.\" 18 -.It Dv EM_PPC -PowerPC. -.\" 20 -.It Dv EM_PPC64 -PowerPC 64-bit. -.\" 21 -.It Dv EM_S390 -IBM S/390 -.\" 22 -.It Dv EM_ARM -Advanced RISC Machines -.\" 40 -.It Dv EM_SH -Renesas SuperH -.\" 42 -.It Dv EM_SPARCV9 -SPARC v9 64-bit. -.\" 43 -.It Dv EM_IA_64 -Intel Itanium -.\" 50 -.It Dv EM_X86_64 -AMD x86-64 -.\" 62 -.It Dv EM_VAX -DEC Vax. -.\" 75 -.\" EM_CRIS -.\" 76 -.\" .It Dv EM_ALPHA -.\" Compaq [DEC] Alpha. -.\" .It Dv EM_ALPHA_EXP -.\" Compaq [DEC] Alpha with enhanced instruction set. -.El -.Pp -.It Dv e_version -This member identifies the file version: -.Pp -.Bl -tag -width "EV_CURRENT" -compact -.It Dv EV_NONE -Invalid version. -.It Dv EV_CURRENT -Current version. -.El -.It Dv e_entry -This member gives the virtual address to which the system first transfers -control, thus starting the process. -If the file has no associated entry -point, this member holds zero. -.It Dv e_phoff -This member holds the program header table's file offset in bytes. -If -the file has no program header table, this member holds zero. -.It Dv e_shoff -This member holds the section header table's file offset in bytes. -If the -file has no section header table this member holds zero. -.It Dv e_flags -This member holds processor-specific flags associated with the file. -Flag names take the form EF_`machine_flag'. -Currently no flags have been defined. -.It Dv e_ehsize -This member holds the ELF header's size in bytes. -.It Dv e_phentsize -This member holds the size in bytes of one entry in the file's program header -table; all entries are the same size. -.It Dv e_phnum -This member holds the number of entries in the program header -table. -Thus the product of -.Sy e_phentsize -and -.Sy e_phnum -gives the table's size -in bytes. -If a file has no program header, -.Sy e_phnum -holds the value zero. -.It Dv e_shentsize -This member holds a sections header's size in bytes. -A section header is one -entry in the section header table; all entries are the same size. -.It Dv e_shnum -This member holds the number of entries in the section header table. -Thus -the product of -.Sy e_shentsize -and -.Sy e_shnum -gives the section header table's size in bytes. -If a file has no section -header table, -.Sy e_shnum -holds the value of zero. -.It Dv e_shstrndx -This member holds the section header table index of the entry associated -with the section name string table. -If the file has no section name string -table, this member holds the value -.Sy SHN_UNDEF . -.Bl -tag -width "SHN_LORESERVE" -.It Dv SHN_UNDEF -This value marks an undefined, missing, irrelevant, or otherwise meaningless -section reference. -For example, a symbol -.Dq defined -relative to section number -.Sy SHN_UNDEF -is an undefined symbol. -.It Dv SHN_LORESERVE -This value specifies the lower bound of the range of reserved indices. -.It Dv SHN_LOPROC -Values greater than or equal to -.Sy SHN_HIPROC -are reserved for processor-specific semantics. -.It Dv SHN_HIPROC -Values less than or equal to -.Sy SHN_LOPROC -are reserved for processor-specific semantics. -.It Dv SHN_ABS -This value specifies absolute values for the corresponding reference. -For -example, symbols defined relative to section number -.Sy SHN_ABS -have absolute values and are not affected by relocation. -.It Dv SHN_COMMON -Symbols defined relative to this section are common symbols, such as Fortran -COMMON or unallocated C external variables. -.It Dv SHN_HIRESERVE -This value specifies the upper bound of the range of reserved -indices between -.Sy SHN_LORESERVE -and -.Sy SHN_HIRESERVE , -inclusive; the values do -not reference the section header table. -That is, the section header table -does -.Em not -contain entries for the reserved indices. -.El -.El -.Pp -An executable or shared object file's program header table is an array of -structures, each describing a segment or other information the system needs -to prepare the program for execution. -An object file -.Em segment -contains one or more -.Em sections . -Program headers are meaningful only for executable and shared object files. -A file specifies its own program header size with the ELF header's -.Sy e_phentsize -and -.Sy e_phnum -members. -The ELF program header is described by the type Elf32_Phdr or Elf64_Phdr -depending on the architecture: -.Bd -literal -offset indent -typedef struct { - uint32_t p_type; - Elf32_Off p_offset; - Elf32_Addr p_vaddr; - Elf32_Addr p_paddr; - uint32_t p_filesz; - uint32_t p_memsz; - uint32_t p_flags; - uint32_t p_align; -} Elf32_Phdr; -.Ed -.Bd -literal -offset indent -typedef struct { - uint32_t p_type; - uint32_t p_flags; - Elf64_Off p_offset; - Elf64_Addr p_vaddr; - Elf64_Addr p_paddr; - uint64_t p_filesz; - uint64_t p_memsz; - uint64_t p_align; -} Elf64_Phdr; -.Ed -.Pp -The main difference between the 32-bit and the 64-bit program header lies -in the location of the -.Sy p_flags -member in the total struct. -.Bl -tag -width "p_offset" -offset indent -.It Dv p_type -This member of the Phdr struct tells what kind of segment this array -element describes or how to interpret the array element's information. -.Bl -tag -width "PT_DYNAMIC" -.It Dv PT_NULL -The array element is unused and the other members' values are undefined. -This lets the program header have ignored entries. -.It Dv PT_LOAD -The array element specifies a loadable segment, described by -.Sy p_filesz -and -.Sy p_memsz . -The bytes from the file are mapped to the beginning of the memory -segment. -If the segment's memory size -.Pq Sy p_memsz -is larger than the file size -.Pq Sy p_filesz , -the -.Dq extra -bytes are defined to hold the value 0 and to follow the segment's -initialized area. -The file size may not be larger than the memory size. -Loadable segment entries in the program header table appear in ascending -order, sorted on the -.Sy p_vaddr -member. -.It Dv PT_DYNAMIC -The array element specifies dynamic linking information. -.It Dv PT_INTERP -The array element specifies the location and size of a null-terminated -path name to invoke as an interpreter. -This segment type is meaningful -only for executable files (though it may occur for shared objects). -However it may not occur more than once in a file. -If it is present, it must precede any loadable segment entry. -.It Dv PT_NOTE -The array element specifies the location and size for auxiliary information. -.It Dv PT_SHLIB -This segment type is reserved but has unspecified semantics. -Programs that -contain an array element of this type do not conform to the ABI. -.It Dv PT_PHDR -The array element, if present, specifies the location and size of the program -header table itself, both in the file and in the memory image of the program. -This segment type may not occur more than once in a file. -Moreover, it may -only occur if the program header table is part of the memory image of the -program. -If it is present, it must precede any loadable segment entry. -.It Dv PT_LOPROC -Values greater than or equal to -.Sy PT_HIPROC -are reserved for processor-specific semantics. -.It Dv PT_HIPROC -Values less than or equal to -.Sy PT_LOPROC -are reserved for processor-specific semantics. -.El -.Pp -.It Dv p_offset -This member holds the offset from the beginning of the file at which -the first byte of the segment resides. -.It Dv p_vaddr -This member holds the virtual address at which the first byte of the -segment resides in memory. -.It Dv p_paddr -On systems for which physical addressing is relevant, this member is -reserved for the segment's physical address. -Under -.Bx -this member is -not used and must be zero. -.It Dv p_filesz -This member holds the number of bytes in the file image of the segment. -It may be zero. -.It Dv p_memsz -This member holds the number of bytes in the memory image of the segment. -It may be zero. -.It Dv p_flags -This member holds flags relevant to the segment: -.Pp -.Bl -tag -width "PF_X" -compact -.It Dv PF_X -An executable segment. -.It Dv PF_W -A writable segment. -.It Dv PF_R -A readable segment. -.El -.Pp -A text segment commonly has the flags -.Sy PF_X -and -.Sy PF_R . -A data segment commonly has -.Sy PF_X , -.Sy PF_W -and -.Sy PF_R . -.It Dv p_align -This member holds the value to which the segments are aligned in memory -and in the file. -Loadable process segments must have congruent values for -.Sy p_vaddr -and -.Sy p_offset , -modulo the page size. -Values of zero and one mean no alignment is required. -Otherwise, -.Sy p_align -should be a positive, integral power of two, and -.Sy p_vaddr -should equal -.Sy p_offset , -modulo -.Sy p_align . -.El -.Pp -A file's section header table lets one locate all the file's sections. -The -section header table is an array of Elf32_Shdr or Elf64_Shdr structures. -The -ELF header's -.Sy e_shoff -member gives the byte offset from the beginning of the file to the section -header table. -.Sy e_shnum -holds the number of entries the section header table contains. -.Sy e_shentsize -holds the size in bytes of each entry. -.Pp -A section header table index is a subscript into this array. -Some section -header table indices are reserved. -An object file does not have sections for -these special indices: -.Bl -tag -width "SHN_LORESERVE" -.It Dv SHN_UNDEF -This value marks an undefined, missing, irrelevant or otherwise meaningless -section reference. -.It Dv SHN_LORESERVE -This value specifies the lower bound of the range of reserved indices. -.It Dv SHN_LOPROC -Values greater than or equal to -.Sy SHN_HIPROC -are reserved for processor-specific semantics. -.It Dv SHN_HIPROC -Values less than or equal to -.Sy SHN_LOPROC -are reserved for processor-specific semantics. -.It Dv SHN_ABS -This value specifies the absolute value for the corresponding reference. -For -example, a symbol defined relative to section number -.Sy SHN_ABS -has an absolute value and is not affected by relocation. -.It Dv SHN_COMMON -Symbols defined relative to this section are common symbols, such as FORTRAN -COMMON or unallocated C external variables. -.It Dv SHN_HIRESERVE -This value specifies the upper bound of the range of reserved indices. -The -system reserves indices between -.Sy SHN_LORESERVE -and -.Sy SHN_HIRESERVE , -inclusive. -The section header table does not contain entries for the -reserved indices. -.El -.Pp -The section header has the following structure: -.Bd -literal -offset indent -typedef struct { - uint32_t sh_name; - uint32_t sh_type; - uint32_t sh_flags; - Elf32_Addr sh_addr; - Elf32_Off sh_offset; - uint32_t sh_size; - uint32_t sh_link; - uint32_t sh_info; - uint32_t sh_addralign; - uint32_t sh_entsize; -} Elf32_Shdr; -.Ed -.Bd -literal -offset indent -typedef struct { - uint32_t sh_name; - uint32_t sh_type; - uint64_t sh_flags; - Elf64_Addr sh_addr; - Elf64_Off sh_offset; - uint64_t sh_size; - uint32_t sh_link; - uint32_t sh_info; - uint64_t sh_addralign; - uint64_t sh_entsize; -} Elf64_Shdr; -.Ed -.Pp -No real differences exist between the 32-bit and 64-bit section headers. -.Bl -tag -width "sh_addralign" -offset indent -.It Dv sh_name -This member specifies the name of the section. -Its value is an index -into the section header string table section, giving the location of -a null-terminated string. -.It Dv sh_type -This member categorizes the section's contents and semantics. -.Bl -tag -width "SHT_PROGBITS" -.It Dv SHT_NULL -This value marks the section header as inactive. -It does not -have an associated section. -Other members of the section header -have undefined values. -.It Dv SHT_PROGBITS -This section holds information defined by the program, whose -format and meaning are determined solely by the program. -.It Dv SHT_SYMTAB -This section holds a symbol table. -Typically, -.Sy SHT_SYMTAB -provides symbols for link editing, though it may also be used -for dynamic linking. -As a complete symbol table, it may contain -many symbols unnecessary for dynamic linking. -An object file can -also contain a -.Sy SHT_DYNSYM -section. -.It Dv SHT_STRTAB -This section holds a string table. -An object file may have multiple -string table sections. -.It Dv SHT_RELA -This section holds relocation entries with explicit addends, such -as type -.Sy Elf32_Rela -for the 32-bit class of object files. -An object may have multiple -relocation sections. -.It Dv SHT_HASH -This section holds a symbol hash table. -An object participating in -dynamic linking must contain a symbol hash table. -An object file may -have only one hash table. -.It Dv SHT_DYNAMIC -This section holds information for dynamic linking. -An object file may -have only one dynamic section. -.It Dv SHT_NOTE -This section holds information that marks the file in some way. -.It Dv SHT_NOBITS -A section of this type occupies no space in the file but otherwise -resembles -.Sy SHT_PROGBITS . -Although this section contains no bytes, the -.Sy sh_offset -member contains the conceptual file offset. -.It Dv SHT_REL -This section holds relocation offsets without explicit addends, such -as type -.Sy Elf32_Rel -for the 32-bit class of object files. -An object file may have multiple -relocation sections. -.It Dv SHT_SHLIB -This section is reserved but has unspecified semantics. -.It Dv SHT_DYNSYM -This section holds a minimal set of dynamic linking symbols. -An -object file can also contain a -.Sy SHT_SYMTAB -section. -.It Dv SHT_LOPROC -This value up to and including -.Sy SHT_HIPROC -is reserved for processor-specific semantics. -.It Dv SHT_HIPROC -This value down to and including -.Sy SHT_LOPROC -is reserved for processor-specific semantics. -.It Dv SHT_LOUSER -This value specifies the lower bound of the range of indices reserved for -application programs. -.It Dv SHT_HIUSER -This value specifies the upper bound of the range of indices reserved for -application programs. -Section types between -.Sy SHT_LOUSER -and -.Sy SHT_HIUSER -may be used by the application, without conflicting with current or future -system-defined section types. -.El -.Pp -.It Dv sh_flags -Sections support one-bit flags that describe miscellaneous attributes. -If a flag bit is set in -.Sy sh_flags , -the attribute is -.Dq on -for the section. -Otherwise, the attribute is -.Dq off -or does not apply. -Undefined attributes are set to zero. -.Pp -.Bl -tag -width "SHF_EXECINSTR" -compact -.It Dv SHF_WRITE -This section contains data that should be writable during process -execution. -.It Dv SHF_ALLOC -This section occupies memory during process execution. -Some control -sections do not reside in the memory image of an object file. -This -attribute is off for those sections. -.It Dv SHF_EXECINSTR -This section contains executable machine instructions. -.It Dv SHF_MASKPROC -All bits included in this mask are reserved for processor-specific -semantics. -.El -.Pp -.It Dv sh_addr -If this section appears in the memory image of a process, this member -holds the address at which the section's first byte should reside. -Otherwise, the member contains zero. -.It Dv sh_offset -This member's value holds the byte offset from the beginning of the file -to the first byte in the section. -One section type, -.Sy SHT_NOBITS , -occupies no space in the file, and its -.Sy sh_offset -member locates the conceptual placement in the file. -.It Dv sh_size -This member holds the section's size in bytes. -Unless the section type -is -.Sy SHT_NOBITS , -the section occupies -.Sy sh_size -bytes in the file. -A section of type -.Sy SHT_NOBITS -may have a non-zero size, but it occupies no space in the file. -.It Dv sh_link -This member holds a section header table index link, whose interpretation -depends on the section type. -.It Dv sh_info -This member holds extra information, whose interpretation depends on the -section type. -.It Dv sh_addralign -Some sections have address alignment constraints. -If a section holds a -doubleword, the system must ensure doubleword alignment for the entire -section. -That is, the value of -.Sy sh_addr -must be congruent to zero, modulo the value of -.Sy sh_addralign . -Only zero and positive integral powers of two are allowed. -Values of zero -or one mean the section has no alignment constraints. -.It Dv sh_entsize -Some sections hold a table of fixed-sized entries, such as a symbol table. -For such a section, this member gives the size in bytes for each entry. -This member contains zero if the section does not hold a table of -fixed-size entries. -.El -.Pp -Various sections hold program and control information: -.Bl -tag -width ".shstrtab" -offset indent -.It .bss -This section holds uninitialized data that contributes to the program's -memory image. -By definition, the system initializes the data with zeros -when the program begins to run. -This section is of type -.Sy SHT_NOBITS . -The attribute types are -.Sy SHF_ALLOC -and -.Sy SHF_WRITE . -.It .comment -This section holds version control information. -This section is of type -.Sy SHT_PROGBITS . -No attribute types are used. -.It .ctors -This section holds initialized pointers to the C++ constructor functions. -This section is of type -.Sy SHT_PROGBITS . -The attribute types are -.Sy SHF_ALLOC -and -.Sy SHF_WRITE . -.It .data -This section holds initialized data that contribute to the program's -memory image. -This section is of type -.Sy SHT_PROGBITS . -The attribute types are -.Sy SHF_ALLOC -and -.Sy SHF_WRITE . -.It .data1 -This section holds initialized data that contribute to the program's -memory image. -This section is of type -.Sy SHT_PROGBITS . -The attribute types are -.Sy SHF_ALLOC -and -.Sy SHF_WRITE . -.It .debug -This section holds information for symbolic debugging. -The contents -are unspecified. -This section is of type -.Sy SHT_PROGBITS . -No attribute types are used. -.It .dtors -This section holds initialized pointers to the C++ destructor functions. -This section is of type -.Sy SHT_PROGBITS . -The attribute types are -.Sy SHF_ALLOC -and -.Sy SHF_WRITE . -.It .dynamic -This section holds dynamic linking information. -The section's attributes -will include the -.Sy SHF_ALLOC -bit. -Whether the -.Sy SHF_WRITE -bit is set is processor-specific. -This section is of type -.Sy SHT_DYNAMIC . -See the attributes above. -.It .dynstr -This section holds strings needed for dynamic linking, most commonly -the strings that represent the names associated with symbol table entries. -This section is of type -.Sy SHT_STRTAB . -The attribute type used is -.Sy SHF_ALLOC . -.It .dynsym -This section holds the dynamic linking symbol table. -This section is of type -.Sy SHT_DYNSYM . -The attribute used is -.Sy SHF_ALLOC . -.It .fini -This section holds executable instructions that contribute to the process -termination code. -When a program exits normally the system arranges to -execute the code in this section. -This section is of type -.Sy SHT_PROGBITS . -The attributes used are -.Sy SHF_ALLOC -and -.Sy SHF_EXECINSTR . -.It .got -This section holds the global offset table. -This section is of type -.Sy SHT_PROGBITS . -The attributes are processor-specific. -.It .hash -This section holds a symbol hash table. -This section is of type -.Sy SHT_HASH . -The attribute used is -.Sy SHF_ALLOC . -.It .init -This section holds executable instructions that contribute to the process -initialization code. -When a program starts to run the system arranges to -execute the code in this section before calling the main program entry point. -This section is of type -.Sy SHT_PROGBITS . -The attributes used are -.Sy SHF_ALLOC -and -.Sy SHF_EXECINSTR . -.It .interp -This section holds the pathname of a program interpreter. -If the file has -a loadable segment that includes the section, the section's attributes will -include the -.Sy SHF_ALLOC -bit. -Otherwise, that bit will be off. -This section is of type -.Sy SHT_PROGBITS . -.It .line -This section holds line number information for symbolic debugging, which -describes the correspondence between the program source and the machine code. -The contents are unspecified. -This section is of type -.Sy SHT_PROGBITS . -No attribute types are used. -.It .note -This section holds information in the -.Dq Note Section -format described below. -This section is of type -.Sy SHT_NOTE . -No attribute types are used. -.Ox -native executables usually contain a -.Sy .note.openbsd.ident -section to identify themselves, for the kernel to bypass any compatibility -ELF binary emulation tests when loading the file. -.It .plt -This section holds the procedure linkage table. -This section is of type -.Sy SHT_PROGBITS . -The attributes are processor-specific. -.It .relNAME -This section holds relocation information as described below. -If the file -has a loadable segment that includes relocation, the section's attributes -will include the -.Sy SHF_ALLOC -bit. -Otherwise the bit will be off. -By convention, -.Dq NAME -is supplied by the section to which the relocations apply. -Thus a relocation -section for -.Sy .text -normally would have the name -.Sy .rel.text . -This section is of type -.Sy SHT_REL . -.It .relaNAME -This section holds relocation information as described below. -If the file -has a loadable segment that includes relocation, the section's attributes -will include the -.Sy SHF_ALLOC -bit. -Otherwise the bit will be off. -By convention, -.Dq NAME -is supplied by the section to which the relocations apply. -Thus a relocation -section for -.Sy .text -normally would have the name -.Sy .rela.text . -This section is of type -.Sy SHT_RELA . -.It .rodata -This section holds read-only data that typically contributes to a -non-writable segment in the process image. -This section is of type -.Sy SHT_PROGBITS . -The attribute used is -.Sy SHF_ALLOC . -.It .rodata1 -This section holds read-only data that typically contributes to a -non-writable segment in the process image. -This section is of type -.Sy SHT_PROGBITS . -The attribute used is -.Sy SHF_ALLOC . -.It .shstrtab -This section holds section names. -This section is of type -.Sy SHT_STRTAB . -No attribute types are used. -.It .strtab -This section holds strings, most commonly the strings that represent the -names associated with symbol table entries. -If the file has a loadable -segment that includes the symbol string table, the section's attributes -will include the -.Sy SHF_ALLOC -bit. -Otherwise the bit will be off. -This section is of type -.Sy SHT_STRTAB . -.It .symtab -This section holds a symbol table. -If the file has a loadable segment -that includes the symbol table, the section's attributes will include -the -.Sy SHF_ALLOC -bit. -Otherwise the bit will be off. -This section is of type -.Sy SHT_SYMTAB . -.It .text -This section holds the -.Dq text , -or executable instructions, of a program. -This section is of type -.Sy SHT_PROGBITS . -The attributes used are -.Sy SHF_ALLOC -and -.Sy SHF_EXECINSTR . -.El .Pp String table sections hold null-terminated character sequences, commonly called strings. @@ -1196,90 +158,6 @@ This member holds zero if the symbol has no size or an unknown size. .It Dv st_info This member specifies the symbol's type and binding attributes: -.Bl -tag -width "STT_SECTION" -.It Dv STT_NOTYPE -The symbol's type is not defined. -.It Dv STT_OBJECT -The symbol is associated with a data object. -.It Dv STT_FUNC -The symbol is associated with a function or other executable code. -.It Dv STT_SECTION -The symbol is associated with a section. -Symbol table entries of -this type exist primarily for relocation and normally have -.Sy STB_LOCAL -bindings. -.It Dv STT_FILE -By convention, the symbol's name gives the name of the source file -associated with the object file. -A file symbol has -.Sy STB_LOCAL -bindings, its section index is -.Sy SHN_ABS , -and it precedes the other -.Sy STB_LOCAL -symbols of the file, if it is present. -.It Dv STT_LOPROC -This value up to and including -.Sy STT_HIPROC -is reserved for processor-specific semantics. -.It Dv STT_HIPROC -This value down to and including -.Sy STT_LOPROC -is reserved for processor-specific semantics. -.El -.Bl -tag -width "STB_GLOBAL" -.It Dv STB_LOCAL -Local symbols are not visible outside the object file containing their -definition. -Local symbols of the same name may exist in multiple files -without interfering with each other. -.It Dv STB_GLOBAL -Global symbols are visible to all object files being combined. -One file's -definition of a global symbol will satisfy another file's undefined -reference to the same symbol. -.It Dv STB_WEAK -Weak symbols resemble global symbols, but their definitions have lower -precedence. -.It Dv STB_LOPROC -This value up to and including -.Sy STB_HIPROC -is reserved for processor-specific semantics. -.It Dv STB_HIPROC -This value down to and including -.Sy STB_LOPROC -is reserved for processor-specific semantics. -.Pp -There are macros for packing and unpacking the binding and type fields: -.Pp -.Bl -tag -width "ELF_ST_INFO" -compact -.Fn ELF32_ST_BIND info -or -.Fn ELF64_ST_BIND info -extract a binding from an st_info value. -.Pp -.Fn ELF32_ST_TYPE info -or -.Fn ELF64_ST_TYPE info -.br -extract a type from an st_info value. -.Pp -.Fn ELF32_ST_INFO bind type -or -.Fn ELF64_ST_INFO bind type -.br -convert a binding and a type into an st_info value. -.El -.Pp -.It Dv st_other -This member currently holds zero and has no defined meaning. -.It Dv st_shndx -Every symbol table entry is -.Dq defined -in relation to some section. -This member holds the relevant section -header table index. .El .Pp Relocation is the process of connecting symbolic references with @@ -1319,129 +197,6 @@ typedef struct { int64_t r_addend; } Elf64_Rela; .Ed -.Bl -tag -width "r_offset" -offset indent -.It Dv r_offset -This member gives the location at which to apply the relocation action. -For a relocatable file, the value is the byte offset from the beginning -of the section to the storage unit affected by the relocation. -For an -executable file or shared object, the value is the virtual address of -the storage unit affected by the relocation. -.It Dv r_info -This member gives both the symbol table index with respect to which the -relocation must be made and the type of relocation to apply. -Relocation -types are processor-specific. -When the text refers to a relocation -entry's relocation type or symbol table index, it means the result of -applying -.Sy ELF_[32|64]_R_TYPE -or -.Sy ELF[32|64]_R_SYM , -respectively, to the entry's -.Sy r_info -member. -.It Dv r_addend -This member specifies a constant addend used to compute the value to be -stored into the relocatable field. -.El -.Pp -The .dynamic section contains a series of structures that hold relevant -dynamic linking information. The d_tag member controls the interpretation -of d_un. -.Bd -literal -offset indent -typedef struct { - Elf32_Sword d_tag; - union { - Elf32_Word d_val; - Elf32_Addr d_ptr; - } d_un; -} Elf32_Dyn; -extern Elf32_Dyn _DYNAMIC[]; -.Ed -.Bd -literal -offset indent -typedef struct { - Elf64_Sxword d_tag; - union { - Elf64_Xword d_val; - Elf64_Addr d_ptr; - } d_un; -} Elf64_Dyn; -extern Elf64_Dyn _DYNAMIC[]; -.Ed -.Bl -tag -width "d_tag" -offset indent -.It Dv d_tag -This member may have any of the following values: -.Bl -tag -width "DT_SYMBOLIC" -.It Dv DT_NULL -Marks end of dynamic section -.It Dv DT_NEEDED -String table offset to name of a needed library -.It Dv DT_PLTRELSZ -Size in bytes of PLT relocs -.It Dv DT_PLTGOT -Address of PLT and/or GOT -.It Dv DT_HASH -Address of symbol hash table -.It Dv DT_STRTAB -Address of string table -.It Dv DT_SYMTAB -Address of symbol table -.It Dv DT_RELA -Address of Rela relocs table -.It Dv DT_RELASZ -Size in bytes of Rela table -.It Dv DT_RELAENT -Size in bytes of a Rela table entry -.It Dv DT_STRSZ -Size in bytes of string table -.It Dv DT_SYMENT -Size in bytes of a symbol table entry -.It Dv DT_INIT -Address of the initialization function -.It Dv DT_FINI -Address of the termination function -.It Dv DT_SONAME -String table offset to name of shared object -.It Dv DT_RPATH -String table offset to library search path (deprecated) -.It Dv DT_SYMBOLIC -Alert linker to search this shared object before the executable for symbols -.It Dv DT_REL -Address of Rel relocs table -.It Dv DT_RELSZ -Size in bytes of Rel table -.It Dv DT_RELENT -Size in bytes of a Rel table entry -.It Dv DT_PLTREL -Type of reloc the PLT refers (Rela or Rel) -.It Dv DT_DEBUG -Undefined use for debugging -.It Dv DT_TEXTREL -Absence of this indicates no relocs should apply to a non-writable segment -.It Dv DT_JMPREL -Address of reloc entries solely for the PLT -.It Dv DT_BIND_NOW -Instruct dynamic linker to process all relocs before transferring control to -the executable -.It Dv DT_RUNPATH -String table offset to library search path -.It Dv DT_LOPROC -Start of processor-specific semantics -.It Dv DT_HIPROC -End of processor-specific semantics -.El -.It Dv d_val -This member represents integer values with various interpretations. -.It Dv d_ptr -This member represents program virtual addresses. When interpreting -these addresses, the actual address should be computed based on the -original file value and memory base address. Files do not contain -relocation entries to fixup these addresses. -.It Dv _DYNAMIC -Array containing all the dynamic structures in the .dynamic section. -This is automatically populated by the linker. -.El .Sh SEE ALSO .Xr as 1 , .Xr gdb 1 , |
