aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Kerrisk <mtk.manpages@gmail.com>2005-12-13 14:20:45 +0000
committerMichael Kerrisk <mtk.manpages@gmail.com>2005-12-13 14:20:45 +0000
commitb2e302ec2f3d3d02d2d1bde0be7554d89ceb373a (patch)
tree0b1fe6eb9e283a748b4b3687a40be87b910e8888
parent855b75c6a3b2a3d9e444866dd6aec54b0ee49fbb (diff)
downloadman-pages-b2e302ec2f3d3d02d2d1bde0be7554d89ceb373a.tar.gz
Formatting fix
-rw-r--r--man5/elf.51245
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 ,