diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-24 04:52:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-24 04:52:22 +0000 |
commit | 3d08cd331c1adcf0d917392f7e527b3f00511748 (patch) | |
tree | 312f0d1e1632f48862f044b8bb87e602dcffb5f9 /man5/elf.5 | |
parent | Adding debian version 6.7-2. (diff) | |
download | manpages-3d08cd331c1adcf0d917392f7e527b3f00511748.tar.xz manpages-3d08cd331c1adcf0d917392f7e527b3f00511748.zip |
Merging upstream version 6.8.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'man5/elf.5')
-rw-r--r-- | man5/elf.5 | 2213 |
1 files changed, 0 insertions, 2213 deletions
diff --git a/man5/elf.5 b/man5/elf.5 deleted file mode 100644 index 84c7f27..0000000 --- a/man5/elf.5 +++ /dev/null @@ -1,2213 +0,0 @@ -.\" $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. -.\" -.\" %%%LICENSE_START(PERMISSIVE_MISC) -.\"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. -.\" %%%LICENSE_END -.\" -.\" $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 -.\" 2007-10-11, Mike Frysinger <vapier@gentoo.org>, various fixes -.\" 2007-12-08, mtk, Converted from mdoc to man macros -.\" -.TH ELF 5 2024-02-25 "Linux man-pages 6.7" -.SH NAME -elf \- format of Executable and Linking Format (ELF) files -.SH SYNOPSIS -.nf -.\" .B #include <elf_abi.h> -.B #include <elf.h> -.fi -.SH DESCRIPTION -The header file -.I <elf.h> -defines the format of ELF executable binary files. -Amongst these files are -normal executable files, relocatable object files, core files, and shared -objects. -.P -An executable file using the ELF file format consists of an ELF header, -followed by a program header table or a section header table, or both. -The ELF header is always at offset zero of the file. -The program header -table and the section header table's offset in the file are defined in the -ELF header. -The two tables describe the rest of the particularities of -the file. -.P -.\" Applications which wish to process ELF binary files for their native -.\" architecture only should include -.\" .I <elf_abi.h> -.\" in their source code. -.\" These applications should need to refer to -.\" all the types and structures by their generic names -.\" "Elf_xxx" -.\" and to the macros by -.\" ELF_xxx". -.\" Applications written this way can be compiled on any architecture, -.\" regardless of whether the host is 32-bit or 64-bit. -.\" .P -.\" Should an application need to process ELF files of an unknown -.\" architecture, then the application needs to explicitly use either -.\" "Elf32_xxx" -.\" or -.\" "Elf64_xxx" -.\" type and structure names. -.\" Likewise, the macros need to be identified by -.\" "ELF32_xxx" -.\" or -.\" "ELF64_xxx". -.\" .P -This header file describes the above mentioned headers as C structures -and also includes structures for dynamic sections, relocation sections and -symbol tables. -.\" -.SS Basic types -The following types are used for N-bit architectures (N=32,64, -.I ElfN -stands for -.I Elf32 -or -.IR Elf64 , -.I uintN_t -stands for -.I uint32_t -or -.IR uint64_t ): -.P -.in +4n -.EX -ElfN_Addr Unsigned program address, uintN_t -ElfN_Off Unsigned file offset, uintN_t -ElfN_Section Unsigned section index, uint16_t -ElfN_Versym Unsigned version symbol information, uint16_t -Elf_Byte unsigned char -ElfN_Half uint16_t -ElfN_Sword int32_t -ElfN_Word uint32_t -ElfN_Sxword int64_t -ElfN_Xword uint64_t -.\" Elf32_Size Unsigned object size -.EE -.in -.P -(Note: the *BSD terminology is a bit different. -There, -.I Elf64_Half -is -twice as large as -.IR Elf32_Half , -and -.I Elf64Quarter -is used for -.IR uint16_t . -In order to avoid confusion these types are replaced by explicit ones -in the below.) -.P -All data structures that the file format defines follow the -"natural" -size and alignment guidelines for the relevant class. -If necessary, -data structures contain explicit padding to ensure 4-byte alignment -for 4-byte objects, to force structure sizes to a multiple of 4, and so on. -.\" -.SS ELF header (Ehdr) -The ELF header is described by the type -.I Elf32_Ehdr -or -.IR Elf64_Ehdr : -.P -.in +4n -.EX -#define EI_NIDENT 16 -\& -typedef struct { - unsigned char e_ident[EI_NIDENT]; - uint16_t e_type; - uint16_t e_machine; - uint32_t e_version; - ElfN_Addr e_entry; - ElfN_Off e_phoff; - ElfN_Off e_shoff; - uint32_t e_flags; - uint16_t e_ehsize; - uint16_t e_phentsize; - uint16_t e_phnum; - uint16_t e_shentsize; - uint16_t e_shnum; - uint16_t e_shstrndx; -} ElfN_Ehdr; -.EE -.in -.P -The fields have the following meanings: -.\" -.\" -.TP -.I e_ident -This array of bytes specifies how 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 -.B EI_ -and may contain values which start with the prefix -.BR ELF . -The following macros are defined: -.RS -.TP -.B EI_MAG0 -The first byte of the magic number. -It must be filled with -.BR ELFMAG0 . -(0: 0x7f) -.TP -.B EI_MAG1 -The second byte of the magic number. -It must be filled with -.BR ELFMAG1 . -(1: \[aq]E\[aq]) -.TP -.B EI_MAG2 -The third byte of the magic number. -It must be filled with -.BR ELFMAG2 . -(2: \[aq]L\[aq]) -.TP -.B EI_MAG3 -The fourth byte of the magic number. -It must be filled with -.BR ELFMAG3 . -(3: \[aq]F\[aq]) -.TP -.B EI_CLASS -The fifth byte identifies the architecture for this binary: -.RS -.TP 14 -.PD 0 -.B ELFCLASSNONE -This class is invalid. -.TP -.B ELFCLASS32 -This defines the 32-bit architecture. -It supports machines with files -and virtual address spaces up to 4 Gigabytes. -.TP -.B ELFCLASS64 -This defines the 64-bit architecture. -.PD -.RE -.TP -.B EI_DATA -The sixth byte specifies the data encoding of the processor-specific -data in the file. -Currently, these encodings are supported: -.RS 9 -.TP 14 -.PD 0 -.B ELFDATANONE -Unknown data format. -.TP -.B ELFDATA2LSB -Two's complement, little-endian. -.TP -.B ELFDATA2MSB -Two's complement, big-endian. -.PD -.RE -.TP -.B EI_VERSION -The seventh byte is the version number of the ELF specification: -.IP -.PD 0 -.RS -.TP 14 -.B EV_NONE -Invalid version. -.TP -.B EV_CURRENT -Current version. -.PD -.RE -.\".El -.TP -.B EI_OSABI -The eighth 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. -For example: -.RS -.TP 21 -.PD 0 -.B ELFOSABI_NONE -Same as ELFOSABI_SYSV -.\" 0 -.TP -.B ELFOSABI_SYSV -UNIX System V ABI -.\" 0 -.\" synonym: ELFOSABI_NONE -.TP -.B ELFOSABI_HPUX -HP-UX ABI -.\" 1 -.TP -.B ELFOSABI_NETBSD -NetBSD ABI -.\" 2 -.TP -.B ELFOSABI_LINUX -Linux ABI -.\" 3 -.\" .TP -.\" .BR ELFOSABI_HURD -.\" Hurd ABI -.\" 4 -.\" .TP -.\" .BR ELFOSABI_86OPEN -.\" 86Open Common IA32 ABI -.\" 5 -.TP -.B ELFOSABI_SOLARIS -Solaris ABI -.\" 6 -.\" .TP -.\" .BR ELFOSABI_MONTEREY -.\" Monterey project ABI -.\" Now replaced by -.\" ELFOSABI_AIX -.\" 7 -.TP -.B ELFOSABI_IRIX -IRIX ABI -.\" 8 -.TP -.B ELFOSABI_FREEBSD -FreeBSD ABI -.\" 9 -.TP -.B ELFOSABI_TRU64 -TRU64 UNIX ABI -.\" 10 -.\" ELFOSABI_MODESTO -.\" 11 -.\" ELFOSABI_OPENBSD -.\" 12 -.TP -.B ELFOSABI_ARM -ARM architecture ABI -.\" 97 -.TP -.B ELFOSABI_STANDALONE -Stand-alone (embedded) ABI -.\" 255 -.PD -.RE -.TP -.B EI_ABIVERSION -The ninth 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 -.B EI_OSABI -field. -Applications conforming to this specification use the value 0. -.TP -.B EI_PAD -Start of padding. -These bytes are reserved and set to zero. -Programs -which read them should ignore them. -The value for -.B EI_PAD -will change in -the future if currently unused bytes are given meanings. -.\" As reported by Yuri Kozlov and confirmed by Mike Frysinger, EI_BRAND is -.\" not in GABI (http://www.sco.com/developers/gabi/latest/ch4.eheader.html) -.\" It looks to be a BSDism -.\" .TP -.\" .BR EI_BRAND -.\" Start of architecture identification. -.TP -.B EI_NIDENT -The size of the -.I e_ident -array. -.RE -.TP -.I e_type -This member of the structure identifies the object file type: -.RS -.TP 16 -.PD 0 -.B ET_NONE -An unknown type. -.TP -.B ET_REL -A relocatable file. -.TP -.B ET_EXEC -An executable file. -.TP -.B ET_DYN -A shared object. -.TP -.B ET_CORE -A core file. -.PD -.RE -.TP -.I e_machine -This member specifies the required architecture for an individual file. -For example: -.RS -.TP 16 -.PD 0 -.B EM_NONE -An unknown machine -.\" 0 -.TP -.B EM_M32 -AT&T WE 32100 -.\" 1 -.TP -.B EM_SPARC -Sun Microsystems SPARC -.\" 2 -.TP -.B EM_386 -Intel 80386 -.\" 3 -.TP -.B EM_68K -Motorola 68000 -.\" 4 -.TP -.B EM_88K -Motorola 88000 -.\" 5 -.\" .TP -.\" .BR EM_486 -.\" Intel 80486 -.\" 6 -.TP -.B EM_860 -Intel 80860 -.\" 7 -.TP -.B EM_MIPS -MIPS RS3000 (big-endian only) -.\" 8 -.\" EM_S370 -.\" 9 -.\" .TP -.\" .BR EM_MIPS_RS4_BE -.\" MIPS RS4000 (big-endian only). Deprecated -.\" 10 -.\" EM_MIPS_RS3_LE (MIPS R3000 little-endian) -.\" 10 -.TP -.B EM_PARISC -HP/PA -.\" 15 -.TP -.B EM_SPARC32PLUS -SPARC with enhanced instruction set -.\" 18 -.TP -.B EM_PPC -PowerPC -.\" 20 -.TP -.B EM_PPC64 -PowerPC 64-bit -.\" 21 -.TP -.B EM_S390 -IBM S/390 -.\" 22 -.TP -.B EM_ARM -Advanced RISC Machines -.\" 40 -.TP -.B EM_SH -Renesas SuperH -.\" 42 -.TP -.B EM_SPARCV9 -SPARC v9 64-bit -.\" 43 -.TP -.B EM_IA_64 -Intel Itanium -.\" 50 -.TP -.B EM_X86_64 -AMD x86-64 -.\" 62 -.TP -.B EM_VAX -DEC Vax -.\" 75 -.\" EM_CRIS -.\" 76 -.\" .TP -.\" .BR EM_ALPHA -.\" Compaq [DEC] Alpha -.\" .TP -.\" .BR EM_ALPHA_EXP -.\" Compaq [DEC] Alpha with enhanced instruction set -.PD -.RE -.TP -.I e_version -This member identifies the file version: -.RS -.TP 16 -.PD 0 -.B EV_NONE -Invalid version -.TP -.B EV_CURRENT -Current version -.PD -.RE -.TP -.I 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. -.TP -.I 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. -.TP -.I 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. -.TP -.I 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. -.TP -.I e_ehsize -This member holds the ELF header's size in bytes. -.TP -.I 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. -.TP -.I e_phnum -This member holds the number of entries in the program header -table. -Thus the product of -.I e_phentsize -and -.I e_phnum -gives the table's size -in bytes. -If a file has no program header, -.I e_phnum -holds the value zero. -.IP -If the number of entries in the program header table is -larger than or equal to -.\" This is a Linux extension, added in Linux 2.6.34. -.B PN_XNUM -(0xffff), this member holds -.B PN_XNUM -(0xffff) and the real number of entries in the program header table is held -in the -.I sh_info -member of the initial entry in section header table. -Otherwise, the -.I sh_info -member of the initial entry contains the value zero. -.RS -.TP -.B PN_XNUM -This is defined as 0xffff, the largest number -.I e_phnum -can have, specifying where the actual number of program headers is assigned. -.PD -.RE -.TP -.I 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. -.TP -.I e_shnum -This member holds the number of entries in the section header table. -Thus -the product of -.I e_shentsize -and -.I e_shnum -gives the section header table's size in bytes. -If a file has no section -header table, -.I e_shnum -holds the value of zero. -.IP -If the number of entries in the section header table is -larger than or equal to -.B SHN_LORESERVE -(0xff00), -.I e_shnum -holds the value zero and the real number of entries in the section header -table is held in the -.I sh_size -member of the initial entry in section header table. -Otherwise, the -.I sh_size -member of the initial entry in the section header table holds -the value zero. -.TP -.I 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 -.BR SHN_UNDEF . -.IP -If the index of section name string table section is -larger than or equal to -.B SHN_LORESERVE -(0xff00), this member holds -.B SHN_XINDEX -(0xffff) and the real index of the section name string table section -is held in the -.I sh_link -member of the initial entry in section header table. -Otherwise, the -.I sh_link -member of the initial entry in section header table contains the value zero. -.\" -.SS Program header (Phdr) -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 -.I segment -contains one or more -.IR 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 -.I e_phentsize -and -.I e_phnum -members. -The ELF program header is described by the type -.I Elf32_Phdr -or -.I Elf64_Phdr -depending on the architecture: -.P -.in +4n -.EX -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; -.EE -.in -.P -.in +4n -.EX -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; -.EE -.in -.P -The main difference between the 32-bit and the 64-bit program header lies -in the location of the -.I p_flags -member in the total struct. -.TP -.I p_type -This member of the structure indicates what kind of segment this array -element describes or how to interpret the array element's information. -.RS 10 -.TP -.B PT_NULL -The array element is unused and the other members' values are undefined. -This lets the program header have ignored entries. -.TP -.B PT_LOAD -The array element specifies a loadable segment, described by -.I p_filesz -and -.IR p_memsz . -The bytes from the file are mapped to the beginning of the memory -segment. -If the segment's memory size -.I p_memsz -is larger than the file size -.IR p_filesz , -the -"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 -.I p_vaddr -member. -.TP -.B PT_DYNAMIC -The array element specifies dynamic linking information. -.TP -.B PT_INTERP -The array element specifies the location and size of a null-terminated -pathname 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. -.TP -.B PT_NOTE -The array element specifies the location of notes (ElfN_Nhdr). -.TP -.B 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. -.TP -.B 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 -occur only 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. -.TP -.B PT_LOPROC -.TQ -.B PT_HIPROC -Values in the inclusive range -.RB [ PT_LOPROC , -.BR PT_HIPROC ] -are reserved for processor-specific semantics. -.TP -.B PT_GNU_STACK -GNU extension which is used by the Linux kernel to control the state of the -stack via the flags set in the -.I p_flags -member. -.RE -.TP -.I p_offset -This member holds the offset from the beginning of the file at which -the first byte of the segment resides. -.TP -.I p_vaddr -This member holds the virtual address at which the first byte of the -segment resides in memory. -.TP -.I p_paddr -On systems for which physical addressing is relevant, this member is -reserved for the segment's physical address. -Under -BSD -this member is -not used and must be zero. -.TP -.I p_filesz -This member holds the number of bytes in the file image of the segment. -It may be zero. -.TP -.I p_memsz -This member holds the number of bytes in the memory image of the segment. -It may be zero. -.TP -.I p_flags -This member holds a bit mask of flags relevant to the segment: -.RS -.TP -.PD 0 -.B PF_X -An executable segment. -.TP -.B PF_W -A writable segment. -.TP -.B PF_R -A readable segment. -.PD -.RE -.IP -A text segment commonly has the flags -.B PF_X -and -.BR PF_R . -A data segment commonly has -.B PF_W -and -.BR PF_R . -.TP -.I 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 -.I p_vaddr -and -.IR p_offset , -modulo the page size. -Values of zero and one mean no alignment is required. -Otherwise, -.I p_align -should be a positive, integral power of two, and -.I p_vaddr -should equal -.IR p_offset , -modulo -.IR p_align . -.\" -.SS Section header (Shdr) -A file's section header table lets one locate all the file's sections. -The -section header table is an array of -.I Elf32_Shdr -or -.I Elf64_Shdr -structures. -The -ELF header's -.I e_shoff -member gives the byte offset from the beginning of the file to the section -header table. -.I e_shnum -holds the number of entries the section header table contains. -.I e_shentsize -holds the size in bytes of each entry. -.P -A section header table index is a subscript into this array. -Some section -header table indices are reserved: -the initial entry and the indices between -.B SHN_LORESERVE -and -.BR SHN_HIRESERVE . -The initial entry is used in ELF extensions for -.IR e_phnum , -.IR e_shnum , -and -.IR e_shstrndx ; -in other cases, each field in the initial entry is set to zero. -An object file does not have sections for -these special indices: -.TP -.B SHN_UNDEF -This value marks an undefined, missing, irrelevant, -or otherwise meaningless section reference. -.TP -.B SHN_LORESERVE -This value specifies the lower bound of the range of reserved indices. -.TP -.B SHN_LOPROC -.TQ -.B SHN_HIPROC -Values greater in the inclusive range -.RB [ SHN_LOPROC , -.BR SHN_HIPROC ] -are reserved for processor-specific semantics. -.TP -.B SHN_ABS -This value specifies the absolute value for the corresponding reference. -For -example, a symbol defined relative to section number -.B SHN_ABS -has an absolute value and is not affected by relocation. -.TP -.B SHN_COMMON -Symbols defined relative to this section are common symbols, -such as FORTRAN COMMON or unallocated C external variables. -.TP -.B SHN_HIRESERVE -This value specifies the upper bound of the range of reserved indices. -The -system reserves indices between -.B SHN_LORESERVE -and -.BR SHN_HIRESERVE , -inclusive. -The section header table does not contain entries for the -reserved indices. -.P -The section header has the following structure: -.P -.in +4n -.EX -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; -.EE -.in -.P -.in +4n -.EX -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; -.EE -.in -.P -No real differences exist between the 32-bit and 64-bit section headers. -.TP -.I 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. -.TP -.I sh_type -This member categorizes the section's contents and semantics. -.RS -.TP -.B 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. -.TP -.B SHT_PROGBITS -This section holds information defined by the program, whose -format and meaning are determined solely by the program. -.TP -.B SHT_SYMTAB -This section holds a symbol table. -Typically, -.B 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 -.B SHT_DYNSYM -section. -.TP -.B SHT_STRTAB -This section holds a string table. -An object file may have multiple -string table sections. -.TP -.B SHT_RELA -This section holds relocation entries with explicit addends, such -as type -.I Elf32_Rela -for the 32-bit class of object files. -An object may have multiple -relocation sections. -.TP -.B 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. -.TP -.B SHT_DYNAMIC -This section holds information for dynamic linking. -An object file may -have only one dynamic section. -.TP -.B SHT_NOTE -This section holds notes (ElfN_Nhdr). -.TP -.B SHT_NOBITS -A section of this type occupies no space in the file but otherwise -resembles -.BR SHT_PROGBITS . -Although this section contains no bytes, the -.I sh_offset -member contains the conceptual file offset. -.TP -.B SHT_REL -This section holds relocation offsets without explicit addends, such -as type -.I Elf32_Rel -for the 32-bit class of object files. -An object file may have multiple -relocation sections. -.TP -.B SHT_SHLIB -This section is reserved but has unspecified semantics. -.TP -.B SHT_DYNSYM -This section holds a minimal set of dynamic linking symbols. -An -object file can also contain a -.B SHT_SYMTAB -section. -.TP -.B SHT_LOPROC -.TQ -.B SHT_HIPROC -Values in the inclusive range -.RB [ SHT_LOPROC , -.BR SHT_HIPROC ] -are reserved for processor-specific semantics. -.TP -.B SHT_LOUSER -This value specifies the lower bound of the range of indices reserved for -application programs. -.TP -.B SHT_HIUSER -This value specifies the upper bound of the range of indices reserved for -application programs. -Section types between -.B SHT_LOUSER -and -.B SHT_HIUSER -may be used by the application, without conflicting with current or future -system-defined section types. -.RE -.TP -.I sh_flags -Sections support one-bit flags that describe miscellaneous attributes. -If a flag bit is set in -.IR sh_flags , -the attribute is -"on" -for the section. -Otherwise, the attribute is -"off" -or does not apply. -Undefined attributes are set to zero. -.RS -.TP -.B SHF_WRITE -This section contains data that should be writable during process -execution. -.TP -.B 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. -.TP -.B SHF_EXECINSTR -This section contains executable machine instructions. -.TP -.B SHF_MASKPROC -All bits included in this mask are reserved for processor-specific -semantics. -.RE -.TP -.I 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. -.TP -.I 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, -.BR SHT_NOBITS , -occupies no space in the file, and its -.I sh_offset -member locates the conceptual placement in the file. -.TP -.I sh_size -This member holds the section's size in bytes. -Unless the section type -is -.BR SHT_NOBITS , -the section occupies -.I sh_size -bytes in the file. -A section of type -.B SHT_NOBITS -may have a nonzero size, but it occupies no space in the file. -.TP -.I sh_link -This member holds a section header table index link, whose interpretation -depends on the section type. -.TP -.I sh_info -This member holds extra information, whose interpretation depends on the -section type. -.TP -.I 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 -.I sh_addr -must be congruent to zero, modulo the value of -.IR sh_addralign . -Only zero and positive integral powers of two are allowed. -The value 0 or 1 means that the section has no alignment constraints. -.TP -.I 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. -.P -Various sections hold program and control information: -.TP -.I .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 -.BR SHT_NOBITS . -The attribute types are -.B SHF_ALLOC -and -.BR SHF_WRITE . -.TP -.I .comment -This section holds version control information. -This section is of type -.BR SHT_PROGBITS . -No attribute types are used. -.TP -.I .ctors -This section holds initialized pointers to the C++ constructor functions. -This section is of type -.BR SHT_PROGBITS . -The attribute types are -.B SHF_ALLOC -and -.BR SHF_WRITE . -.TP -.I .data -This section holds initialized data that contribute to the program's -memory image. -This section is of type -.BR SHT_PROGBITS . -The attribute types are -.B SHF_ALLOC -and -.BR SHF_WRITE . -.TP -.I .data1 -This section holds initialized data that contribute to the program's -memory image. -This section is of type -.BR SHT_PROGBITS . -The attribute types are -.B SHF_ALLOC -and -.BR SHF_WRITE . -.TP -.I .debug -This section holds information for symbolic debugging. -The contents -are unspecified. -This section is of type -.BR SHT_PROGBITS . -No attribute types are used. -.TP -.I .dtors -This section holds initialized pointers to the C++ destructor functions. -This section is of type -.BR SHT_PROGBITS . -The attribute types are -.B SHF_ALLOC -and -.BR SHF_WRITE . -.TP -.I .dynamic -This section holds dynamic linking information. -The section's attributes -will include the -.B SHF_ALLOC -bit. -Whether the -.B SHF_WRITE -bit is set is processor-specific. -This section is of type -.BR SHT_DYNAMIC . -See the attributes above. -.TP -.I .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 -.BR SHT_STRTAB . -The attribute type used is -.BR SHF_ALLOC . -.TP -.I .dynsym -This section holds the dynamic linking symbol table. -This section is of type -.BR SHT_DYNSYM . -The attribute used is -.BR SHF_ALLOC . -.TP -.I .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 -.BR SHT_PROGBITS . -The attributes used are -.B SHF_ALLOC -and -.BR SHF_EXECINSTR . -.TP -.I .gnu.version -This section holds the version symbol table, an array of -.I ElfN_Half -elements. -This section is of type -.BR SHT_GNU_versym . -The attribute type used is -.BR SHF_ALLOC . -.TP -.I .gnu.version_d -This section holds the version symbol definitions, a table of -.I ElfN_Verdef -structures. -This section is of type -.BR SHT_GNU_verdef . -The attribute type used is -.BR SHF_ALLOC . -.TP -.I .gnu.version_r -This section holds the version symbol needed elements, a table of -.I ElfN_Verneed -structures. -This section is of -type -.BR SHT_GNU_versym . -The attribute type used is -.BR SHF_ALLOC . -.TP -.I .got -This section holds the global offset table. -This section is of type -.BR SHT_PROGBITS . -The attributes are processor-specific. -.TP -.I .hash -This section holds a symbol hash table. -This section is of type -.BR SHT_HASH . -The attribute used is -.BR SHF_ALLOC . -.TP -.I .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 -.BR SHT_PROGBITS . -The attributes used are -.B SHF_ALLOC -and -.BR SHF_EXECINSTR . -.TP -.I .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 -.B SHF_ALLOC -bit. -Otherwise, that bit will be off. -This section is of type -.BR SHT_PROGBITS . -.TP -.I .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 -.BR SHT_PROGBITS . -No attribute types are used. -.TP -.I .note -This section holds various notes. -This section is of type -.BR SHT_NOTE . -No attribute types are used. -.TP -.I .note.ABI\-tag -This section is used to declare the expected run-time ABI of the ELF image. -It may include the operating system name and its run-time versions. -This section is of type -.BR SHT_NOTE . -The only attribute used is -.BR SHF_ALLOC . -.TP -.I .note.gnu.build\-id -This section is used to hold an ID that uniquely identifies -the contents of the ELF image. -Different files with the same build ID should contain the same executable -content. -See the -.B \-\-build\-id -option to the GNU linker (\fBld\fR (1)) for more details. -This section is of type -.BR SHT_NOTE . -The only attribute used is -.BR SHF_ALLOC . -.TP -.I .note.GNU\-stack -This section is used in Linux object files for declaring stack attributes. -This section is of type -.BR SHT_PROGBITS . -The only attribute used is -.BR SHF_EXECINSTR . -This indicates to the GNU linker that the object file requires an -executable stack. -.TP -.I .note.openbsd.ident -OpenBSD native executables usually contain this section -to identify themselves so the kernel can bypass any compatibility -ELF binary emulation tests when loading the file. -.TP -.I .plt -This section holds the procedure linkage table. -This section is of type -.BR SHT_PROGBITS . -The attributes are processor-specific. -.TP -.I .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 -.B SHF_ALLOC -bit. -Otherwise, the bit will be off. -By convention, -"NAME" -is supplied by the section to which the relocations apply. -Thus a relocation -section for -.B .text -normally would have the name -.BR .rel.text . -This section is of type -.BR SHT_REL . -.TP -.I .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 -.B SHF_ALLOC -bit. -Otherwise, the bit will be off. -By convention, -"NAME" -is supplied by the section to which the relocations apply. -Thus a relocation -section for -.B .text -normally would have the name -.BR .rela.text . -This section is of type -.BR SHT_RELA . -.TP -.I .rodata -This section holds read-only data that typically contributes to a -nonwritable segment in the process image. -This section is of type -.BR SHT_PROGBITS . -The attribute used is -.BR SHF_ALLOC . -.TP -.I .rodata1 -This section holds read-only data that typically contributes to a -nonwritable segment in the process image. -This section is of type -.BR SHT_PROGBITS . -The attribute used is -.BR SHF_ALLOC . -.TP -.I .shstrtab -This section holds section names. -This section is of type -.BR SHT_STRTAB . -No attribute types are used. -.TP -.I .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 -.B SHF_ALLOC -bit. -Otherwise, the bit will be off. -This section is of type -.BR SHT_STRTAB . -.TP -.I .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 -.B SHF_ALLOC -bit. -Otherwise, the bit will be off. -This section is of type -.BR SHT_SYMTAB . -.TP -.I .text -This section holds the -"text", -or executable instructions, of a program. -This section is of type -.BR SHT_PROGBITS . -The attributes used are -.B SHF_ALLOC -and -.BR SHF_EXECINSTR . -.\" -.SS String and symbol tables -String table sections hold null-terminated character sequences, commonly -called strings. -The object file uses these strings to represent symbol -and section names. -One references a string as an index into the string -table section. -The first byte, which is index zero, is defined to hold -a null byte (\[aq]\e0\[aq]). -Similarly, a string table's last byte is defined to -hold a null byte, ensuring null termination for all strings. -.P -An object file's symbol table holds information needed to locate and -relocate a program's symbolic definitions and references. -A symbol table -index is a subscript into this array. -.P -.in +4n -.EX -typedef struct { - uint32_t st_name; - Elf32_Addr st_value; - uint32_t st_size; - unsigned char st_info; - unsigned char st_other; - uint16_t st_shndx; -} Elf32_Sym; -.EE -.in -.P -.in +4n -.EX -typedef struct { - uint32_t st_name; - unsigned char st_info; - unsigned char st_other; - uint16_t st_shndx; - Elf64_Addr st_value; - uint64_t st_size; -} Elf64_Sym; -.EE -.in -.P -The 32-bit and 64-bit versions have the same members, just in a different -order. -.TP -.I st_name -This member holds an index into the object file's symbol string table, -which holds character representations of the symbol names. -If the value -is nonzero, it represents a string table index that gives the symbol -name. -Otherwise, the symbol has no name. -.TP -.I st_value -This member gives the value of the associated symbol. -.TP -.I st_size -Many symbols have associated sizes. -This member holds zero if the symbol -has no size or an unknown size. -.TP -.I st_info -This member specifies the symbol's type and binding attributes: -.RS -.TP -.B STT_NOTYPE -The symbol's type is not defined. -.TP -.B STT_OBJECT -The symbol is associated with a data object. -.TP -.B STT_FUNC -The symbol is associated with a function or other executable code. -.TP -.B STT_SECTION -The symbol is associated with a section. -Symbol table entries of -this type exist primarily for relocation and normally have -.B STB_LOCAL -bindings. -.TP -.B STT_FILE -By convention, the symbol's name gives the name of the source file -associated with the object file. -A file symbol has -.B STB_LOCAL -bindings, its section index is -.BR SHN_ABS , -and it precedes the other -.B STB_LOCAL -symbols of the file, if it is present. -.TP -.B STT_LOPROC -.TQ -.B STT_HIPROC -Values in the inclusive range -.RB [ STT_LOPROC , -.BR STT_HIPROC ] -are reserved for processor-specific semantics. -.TP -.B 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. -.TP -.B 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. -.TP -.B STB_WEAK -Weak symbols resemble global symbols, but their definitions have lower -precedence. -.TP -.B STB_LOPROC -.TQ -.B STB_HIPROC -Values in the inclusive range -.RB [ STB_LOPROC , -.BR STB_HIPROC ] -are reserved for processor-specific semantics. -.RE -.IP -There are macros for packing and unpacking the binding and type fields: -.RS -.TP -.BI ELF32_ST_BIND( info ) -.TQ -.BI ELF64_ST_BIND( info ) -Extract a binding from an -.I st_info -value. -.TP -.BI ELF32_ST_TYPE( info ) -.TQ -.BI ELF64_ST_TYPE( info ) -Extract a type from an -.I st_info -value. -.TP -.BI ELF32_ST_INFO( bind ", " type ) -.TQ -.BI ELF64_ST_INFO( bind ", " type ) -Convert a binding and a type into an -.I st_info -value. -.RE -.TP -.I st_other -This member defines the symbol visibility. -.RS -.TP -.PD 0 -.B STV_DEFAULT -Default symbol visibility rules. -Global and weak symbols are available to other modules; -references in the local module can be interposed -by definitions in other modules. -.TP -.B STV_INTERNAL -Processor-specific hidden class. -.TP -.B STV_HIDDEN -Symbol is unavailable to other modules; -references in the local module always resolve to the local symbol -(i.e., the symbol can't be interposed by definitions in other modules). -.TP -.B STV_PROTECTED -Symbol is available to other modules, -but references in the local module always resolve to the local symbol. -.PD -.P -There are macros for extracting the visibility type: -.P -.BR ELF32_ST_VISIBILITY (other) -or -.BR ELF64_ST_VISIBILITY (other) -.RE -.TP -.I st_shndx -Every symbol table entry is -"defined" -in relation to some section. -This member holds the relevant section -header table index. -.\" -.SS Relocation entries (Rel & Rela) -Relocation is the process of connecting symbolic references with -symbolic definitions. -Relocatable files must have information that -describes how to modify their section contents, thus allowing executable -and shared object files to hold the right information for a process's -program image. -Relocation entries are these data. -.P -Relocation structures that do not need an addend: -.P -.in +4n -.EX -typedef struct { - Elf32_Addr r_offset; - uint32_t r_info; -} Elf32_Rel; -.EE -.in -.P -.in +4n -.EX -typedef struct { - Elf64_Addr r_offset; - uint64_t r_info; -} Elf64_Rel; -.EE -.in -.P -Relocation structures that need an addend: -.P -.in +4n -.EX -typedef struct { - Elf32_Addr r_offset; - uint32_t r_info; - int32_t r_addend; -} Elf32_Rela; -.EE -.in -.P -.in +4n -.EX -typedef struct { - Elf64_Addr r_offset; - uint64_t r_info; - int64_t r_addend; -} Elf64_Rela; -.EE -.in -.TP -.I 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. -.TP -.I 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 -.B ELF[32|64]_R_TYPE -or -.BR ELF[32|64]_R_SYM , -respectively, to the entry's -.I r_info -member. -.TP -.I r_addend -This member specifies a constant addend used to compute the value to be -stored into the relocatable field. -.\" -.SS Dynamic tags (Dyn) -The -.I .dynamic -section contains a series of structures that hold relevant -dynamic linking information. -The -.I d_tag -member controls the interpretation -of -.IR d_un . -.P -.in +4n -.EX -typedef struct { - Elf32_Sword d_tag; - union { - Elf32_Word d_val; - Elf32_Addr d_ptr; - } d_un; -} Elf32_Dyn; -extern Elf32_Dyn _DYNAMIC[]; -.EE -.in -.P -.in +4n -.EX -typedef struct { - Elf64_Sxword d_tag; - union { - Elf64_Xword d_val; - Elf64_Addr d_ptr; - } d_un; -} Elf64_Dyn; -extern Elf64_Dyn _DYNAMIC[]; -.EE -.in -.TP -.I d_tag -This member may have any of the following values: -.RS -.TP 12 -.B DT_NULL -Marks end of dynamic section -.TP -.B DT_NEEDED -String table offset to name of a needed library -.TP -.B DT_PLTRELSZ -Size in bytes of PLT relocation entries -.TP -.B DT_PLTGOT -Address of PLT and/or GOT -.TP -.B DT_HASH -Address of symbol hash table -.TP -.B DT_STRTAB -Address of string table -.TP -.B DT_SYMTAB -Address of symbol table -.TP -.B DT_RELA -Address of Rela relocation table -.TP -.B DT_RELASZ -Size in bytes of the Rela relocation table -.TP -.B DT_RELAENT -Size in bytes of a Rela relocation table entry -.TP -.B DT_STRSZ -Size in bytes of string table -.TP -.B DT_SYMENT -Size in bytes of a symbol table entry -.TP -.B DT_INIT -Address of the initialization function -.TP -.B DT_FINI -Address of the termination function -.TP -.B DT_SONAME -String table offset to name of shared object -.TP -.B DT_RPATH -String table offset to library search path (deprecated) -.TP -.B DT_SYMBOLIC -Alert linker to search this shared object before the executable for symbols -.TP -.B DT_REL -Address of Rel relocation table -.TP -.B DT_RELSZ -Size in bytes of Rel relocation table -.TP -.B DT_RELENT -Size in bytes of a Rel table entry -.TP -.B DT_PLTREL -Type of relocation entry to which the PLT refers (Rela or Rel) -.TP -.B DT_DEBUG -Undefined use for debugging -.TP -.B DT_TEXTREL -Absence of this entry indicates that no relocation entries should -apply to a nonwritable segment -.TP -.B DT_JMPREL -Address of relocation entries associated solely with the PLT -.TP -.B DT_BIND_NOW -Instruct dynamic linker to process all relocations before -transferring control to the executable -.TP -.B DT_RUNPATH -String table offset to library search path -.TP -.B DT_LOPROC -.TQ -.B DT_HIPROC -Values in the inclusive range -.RB [ DT_LOPROC , -.BR DT_HIPROC ] -are reserved for processor-specific semantics -.RE -.TP -.I d_val -This member represents integer values with various interpretations. -.TP -.I 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. -.TP -.I _DYNAMIC -Array containing all the dynamic structures in the -.I .dynamic -section. -This is automatically populated by the linker. -.\" GABI ELF Reference for Note Sections: -.\" http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section -.\" -.\" Note that it implies the sizes and alignments of notes depend on the ELF -.\" size (e.g. 32-bit ELFs have three 4-byte words and use 4-byte alignment -.\" while 64-bit ELFs use 8-byte words & alignment), but that is not the case -.\" in the real world. Notes always have three 4-byte words as can be seen -.\" in the source links below (remember that Elf64_Word is a 32-bit quantity). -.\" glibc: https://sourceware.org/git/?p=glibc.git;a=blob;f=elf/elf.h;h=9e59b3275917549af0cebe1f2de9ded3b7b10bf2#l1173 -.\" binutils: https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=binutils/readelf.c;h=274ddd17266aef6e4ad1f67af8a13a21500ff2af#l15943 -.\" Linux: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/elf.h?h=v4.8#n422 -.\" Solaris: https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-18048.html -.\" FreeBSD: https://svnweb.freebsd.org/base/head/sys/sys/elf_common.h?revision=303677&view=markup#l33 -.\" NetBSD: https://www.netbsd.org/docs/kernel/elf-notes.html -.\" OpenBSD: https://github.com/openbsd/src/blob/master/sys/sys/exec_elf.h#L533 -.\" -.SS Notes (Nhdr) -ELF notes allow for appending arbitrary information for the system to use. -They are largely used by core files -.RI ( e_type -of -.BR ET_CORE ), -but many projects define their own set of extensions. -For example, -the GNU tool chain uses ELF notes to pass information from -the linker to the C library. -.P -Note sections contain a series of notes (see the -.I struct -definitions below). -Each note is followed by the name field (whose length is defined in -\fIn_namesz\fR) and then by the descriptor field (whose length is defined in -\fIn_descsz\fR) and whose starting address has a 4 byte alignment. -Neither field is defined in the note struct due to their arbitrary lengths. -.P -An example for parsing out two consecutive notes should clarify their layout -in memory: -.P -.in +4n -.EX -void *memory, *name, *desc; -Elf64_Nhdr *note, *next_note; -\& -/* The buffer is pointing to the start of the section/segment. */ -note = memory; -\& -/* If the name is defined, it follows the note. */ -name = note\->n_namesz == 0 ? NULL : memory + sizeof(*note); -\& -/* If the descriptor is defined, it follows the name - (with alignment). */ -\& -desc = note\->n_descsz == 0 ? NULL : - memory + sizeof(*note) + ALIGN_UP(note\->n_namesz, 4); -\& -/* The next note follows both (with alignment). */ -next_note = memory + sizeof(*note) + - ALIGN_UP(note\->n_namesz, 4) + - ALIGN_UP(note\->n_descsz, 4); -.EE -.in -.P -Keep in mind that the interpretation of -.I n_type -depends on the namespace defined by the -.I n_namesz -field. -If the -.I n_namesz -field is not set (e.g., is 0), then there are two sets of notes: -one for core files and one for all other ELF types. -If the namespace is unknown, then tools will usually fallback to these sets -of notes as well. -.P -.in +4n -.EX -typedef struct { - Elf32_Word n_namesz; - Elf32_Word n_descsz; - Elf32_Word n_type; -} Elf32_Nhdr; -.EE -.in -.P -.in +4n -.EX -typedef struct { - Elf64_Word n_namesz; - Elf64_Word n_descsz; - Elf64_Word n_type; -} Elf64_Nhdr; -.EE -.in -.TP -.I n_namesz -The length of the name field in bytes. -The contents will immediately follow this note in memory. -The name is null terminated. -For example, if the name is "GNU", then -.I n_namesz -will be set to 4. -.TP -.I n_descsz -The length of the descriptor field in bytes. -The contents will immediately follow the name field in memory. -.TP -.I n_type -Depending on the value of the name field, this member may have any of the -following values: -.RS -.TP 5 -.B Core files (e_type = ET_CORE) -Notes used by all core files. -These are highly operating system or architecture specific and often require -close coordination with kernels, C libraries, and debuggers. -These are used when the namespace is the default (i.e., -.I n_namesz -will be set to 0), or a fallback when the namespace is unknown. -.RS -.TP 21 -.PD 0 -.B NT_PRSTATUS -prstatus struct -.TP -.B NT_FPREGSET -fpregset struct -.TP -.B NT_PRPSINFO -prpsinfo struct -.TP -.B NT_PRXREG -prxregset struct -.TP -.B NT_TASKSTRUCT -task structure -.TP -.B NT_PLATFORM -String from sysinfo(SI_PLATFORM) -.TP -.B NT_AUXV -auxv array -.TP -.B NT_GWINDOWS -gwindows struct -.TP -.B NT_ASRS -asrset struct -.TP -.B NT_PSTATUS -pstatus struct -.TP -.B NT_PSINFO -psinfo struct -.TP -.B NT_PRCRED -prcred struct -.TP -.B NT_UTSNAME -utsname struct -.TP -.B NT_LWPSTATUS -lwpstatus struct -.TP -.B NT_LWPSINFO -lwpinfo struct -.TP -.B NT_PRFPXREG -fprxregset struct -.TP -.B NT_SIGINFO -siginfo_t (size might increase over time) -.TP -.B NT_FILE -Contains information about mapped files -.TP -.B NT_PRXFPREG -user_fxsr_struct -.TP -.B NT_PPC_VMX -PowerPC Altivec/VMX registers -.TP -.B NT_PPC_SPE -PowerPC SPE/EVR registers -.TP -.B NT_PPC_VSX -PowerPC VSX registers -.TP -.B NT_386_TLS -i386 TLS slots (struct user_desc) -.TP -.B NT_386_IOPERM -x86 io permission bitmap (1=deny) -.TP -.B NT_X86_XSTATE -x86 extended state using xsave -.TP -.B NT_S390_HIGH_GPRS -s390 upper register halves -.TP -.B NT_S390_TIMER -s390 timer register -.TP -.B NT_S390_TODCMP -s390 time-of-day (TOD) clock comparator register -.TP -.B NT_S390_TODPREG -s390 time-of-day (TOD) programmable register -.TP -.B NT_S390_CTRS -s390 control registers -.TP -.B NT_S390_PREFIX -s390 prefix register -.TP -.B NT_S390_LAST_BREAK -s390 breaking event address -.TP -.B NT_S390_SYSTEM_CALL -s390 system call restart data -.TP -.B NT_S390_TDB -s390 transaction diagnostic block -.TP -.B NT_ARM_VFP -ARM VFP/NEON registers -.TP -.B NT_ARM_TLS -ARM TLS register -.TP -.B NT_ARM_HW_BREAK -ARM hardware breakpoint registers -.TP -.B NT_ARM_HW_WATCH -ARM hardware watchpoint registers -.TP -.B NT_ARM_SYSTEM_CALL -ARM system call number -.PD -.RE -.TP -.B n_name = GNU -Extensions used by the GNU tool chain. -.RS -.TP -.B NT_GNU_ABI_TAG -Operating system (OS) ABI information. -The desc field will be 4 words: -.IP -.PD 0 -.RS -.IP [0] 5 -OS descriptor -(\fBELF_NOTE_OS_LINUX\fR, \fBELF_NOTE_OS_GNU\fR, and so on)` -.IP [1] -major version of the ABI -.IP [2] -minor version of the ABI -.IP [3] -subminor version of the ABI -.RE -.PD -.TP -.B NT_GNU_HWCAP -Synthetic hwcap information. -The desc field begins with two words: -.IP -.PD 0 -.RS -.IP [0] 5 -number of entries -.IP [1] -bit mask of enabled entries -.RE -.PD -.IP -Then follow variable-length entries, one byte followed by a null-terminated -hwcap name string. -The byte gives the bit number to test if enabled, (1U << bit) & bit mask. -.TP -.B NT_GNU_BUILD_ID -Unique build ID as generated by the GNU -.BR ld (1) -.B \-\-build\-id -option. -The desc consists of any nonzero number of bytes. -.TP -.B NT_GNU_GOLD_VERSION -The desc contains the GNU Gold linker version used. -.RE -.TP -.B Default/unknown namespace (e_type != ET_CORE) -These are used when the namespace is the default (i.e., -.I n_namesz -will be set to 0), or a fallback when the namespace is unknown. -.RS -.TP 12 -.PD 0 -.B NT_VERSION -A version string of some sort. -.TP -.B NT_ARCH -Architecture information. -.PD -.RE -.RE -.SH NOTES -.\" OpenBSD -.\" ELF support first appeared in -.\" OpenBSD 1.2, -.\" although not all supported platforms use it as the native -.\" binary file format. -ELF first appeared in -System V. -The ELF format is an adopted standard. -.P -The extensions for -.IR e_phnum , -.IR e_shnum , -and -.I e_shstrndx -respectively are -Linux extensions. -Sun, BSD, and AMD64 also support them; for further information, -look under SEE ALSO. -.\" .SH AUTHORS -.\" The original version of this manual page was written by -.\" .An Jeroen Ruigrok van der Werven -.\" .Aq asmodai@FreeBSD.org -.\" with inspiration from BSDi's -.\" .Bsx -.\" .Nm elf -.\" man page. -.SH SEE ALSO -.BR as (1), -.BR elfedit (1), -.BR gdb (1), -.BR ld (1), -.BR nm (1), -.BR objcopy (1), -.BR objdump (1), -.BR patchelf (1), -.BR readelf (1), -.BR size (1), -.BR strings (1), -.BR strip (1), -.BR execve (2), -.BR dl_iterate_phdr (3), -.BR core (5), -.BR ld.so (8) -.P -Hewlett-Packard, -.IR "Elf-64 Object File Format" . -.P -Santa Cruz Operation, -.IR "System V Application Binary Interface" . -.P -UNIX System Laboratories, -"Object Files", -.IR "Executable and Linking Format (ELF)" . -.P -Sun Microsystems, -.IR "Linker and Libraries Guide" . -.P -AMD64 ABI Draft, -.IR "System V Application Binary Interface AMD64 Architecture Processor Supplement" . |