summaryrefslogtreecommitdiff
path: root/static/netbsd/man5/elf.5
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man5/elf.5')
-rw-r--r--static/netbsd/man5/elf.5528
1 files changed, 528 insertions, 0 deletions
diff --git a/static/netbsd/man5/elf.5 b/static/netbsd/man5/elf.5
new file mode 100644
index 00000000..0f316f8d
--- /dev/null
+++ b/static/netbsd/man5/elf.5
@@ -0,0 +1,528 @@
+.\" $NetBSD: elf.5,v 1.19 2025/12/09 22:21:28 uwe Exp $
+.\"
+.\" Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This document is derived from work contributed to The NetBSD Foundation
+.\" by Antti Kantee.
+.\"
+.\" 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+.\"
+.Dd December 9, 2025
+.Dt ELF 5
+.Os
+.Sh NAME
+.Nm ELF
+.Nd executable and linking format
+.Sh SYNOPSIS
+.In elf.h
+.Sh DESCRIPTION
+Because of the flexible nature of ELF, the structures describing it are
+available both as 32bit and 64bit versions.
+This document uses the 32bit versions, refer to
+.In elf.h
+for the corresponding 64bit versions.
+.Pp
+The four main types of an ELF object file are:
+.
+.Bl -tag -offset indent -width ".Em relocatable"
+.
+.It Em executable
+A file suitable for execution.
+It contains the information required for creating a new process image.
+.
+.It Em shared
+The shared object contains necessary information which can be used by
+either the link editor
+.Xr ld 1
+at link time or by the dynamic loader
+.Xr ld.elf_so 1
+at run time.
+.
+.It Em relocatable
+Contains the necessary information to be run through the link editor
+.Xr ld 1
+to create an executable or a shared library.
+.
+.It Em core
+A file which describes the virtual address space and register state of
+a process.
+Core files are typically used in conjunction with debuggers such as
+.Xr gdb 1 .
+.El
+.Pp
+ELF files have a dual nature.
+The toolchain, including tools such as the
+.Xr as 1
+and linker
+.Xr ld 1 ,
+treats them as a set of
+.Em sections
+described by their section headers.
+The system loader treats them as a set of
+.Em segments
+described by the program headers.
+.Pp
+The general format of an ELF file is the following: The file starts with an
+ELF header.
+This is followed by a table of program headers
+.Pq optional for relocatable and shared files .
+After this come the sections/segments.
+The file ends with a table of section headers
+.Pq optional for executable files .
+.Pp
+A segment can be considered to consist of several sections.
+For example, all executable sections are typically packed into one
+loadable segment which is read-only and executable
+.Po
+see
+.Fa p_flags
+in the program header
+.Pc .
+This enables the system to map the entire file with just a few
+operations, one for each loadable segment, instead of doing numerous
+map operations for each section separately.
+.
+.
+.Ss ELF Header
+.
+Each file is described by the ELF header:
+.Bd -literal -offset indent
+typedef struct {
+ unsigned char e_ident[EI_NIDENT];
+ Elf32_Half e_type;
+ Elf32_Half e_machine;
+ Elf32_Word e_version;
+ Elf32_Addr e_entry;
+ Elf32_Off e_phoff;
+ Elf32_Off e_shoff;
+ Elf32_Word e_flags;
+ Elf32_Half e_ehsize;
+ Elf32_Half e_phentsize;
+ Elf32_Half e_phnum;
+ Elf32_Half e_shentsize;
+ Elf32_Half e_shnum;
+ Elf32_Half e_shstrndx;
+} Elf32_Ehdr;
+.Ed
+.
+.Bl -tag -width Fa
+.
+.It Fa e_ident Ns Li []
+The array contains the following information in the indicated locations:
+.Bl -tag -width Dv
+.
+.It Dv EI_MAG0
+The elements ranging from
+.Dv EI_MAG0
+to
+.Dv EI_MAG3
+contain the ELF magic number:
+.Ql \e0177ELF .
+.
+.It Dv EI_CLASS
+Contains the address size of the binary, either 32 or 64bit.
+.
+.It Dv EI_DATA
+byte order.
+.
+.It Dv EI_VERSION
+Contains the ELF header version.
+This is currently always set to 1.
+.
+.It Dv EI_OSABI
+Contains the operating system ABI identification.
+Note that even though the definition
+.Dv ELFOSABI_NETBSD
+exists,
+.Nx
+uses
+.Dv ELFOSABI_SYSV
+here, since the
+.Nx
+ABI does not deviate from the standard.
+.
+.It Dv EI_ABIVERSION
+ABI version.
+.El
+.
+.It Fa e_type
+Contains the file type identification.
+It can be either
+.Dv ET_REL ,
+.Dv ET_EXEC ,
+.Dv ET_DYN ,
+or
+.Dv ET_CORE
+for relocatable, executable, shared, or core, respectively.
+.
+.It Fa e_machine
+Contains the machine type, e.g.\&
+.Tn SPARC ,
+Alpha,
+.Tn MIPS ,
+\&...
+.
+.It Fa e_entry
+The program entry point if the file is executable.
+.
+.It Fa e_phoff
+The position of the program header table in the file or 0 if it doesn't exist.
+.
+.It Fa e_shoff
+The position of the section header table in the file or 0 if it doesn't exist.
+.
+.It Fa e_flags
+Contains processor-specific flags.
+For example, the
+.Tn SPARC
+port uses this space to specify what kind of memory store ordering is
+required.
+.
+.It Fa e_ehsize
+The size of the ELF header.
+.
+.It Fa e_phentsize
+The size of an entry in the program header table.
+All entries are the same size.
+.
+.It Fa e_phnum
+The number of entries in the program header table, or 0 if none exists.
+.
+.It Fa e_shentsize
+The size of an entry in the section header table.
+All entries are the same size.
+.
+.It Fa e_shnum
+The number of entries in the section header table, or 0 if none exists.
+.
+.It Fa e_shstrndx
+Contains the index number of the section which contains the section
+name strings.
+.El
+.
+.
+.Ss Section Headers
+.
+Each ELF section in turn is described by a section header:
+.Bd -literal -offset indent
+typedef struct {
+ Elf32_Word sh_name;
+ Elf32_Word sh_type;
+ Elf32_Word sh_flags;
+ Elf32_Addr sh_addr;
+ Elf32_Off sh_offset;
+ Elf32_Word sh_size;
+ Elf32_Word sh_link;
+ Elf32_Word sh_info;
+ Elf32_Word sh_addralign;
+ Elf32_Word sh_entsize;
+} Elf32_Shdr;
+.Ed
+.
+.Bl -tag -width Fa
+.
+.It Fa sh_name
+Contains an index to the position in the section header string section
+where the name of the current section can be found.
+.
+.It Fa sh_type
+Contains the section type indicator.
+The more important possible values are:
+.Bl -tag -width Dv \" "SHT_PROGBITS"
+.
+.It Dv SHT_NULL
+Section is inactive.
+The other fields contain undefined values.
+.
+.It Dv SHT_PROGBITS
+Section contains program information.
+It can be for example code, data, or debugger information.
+.
+.It Dv SHT_SYMTAB
+Section contains a symbol table.
+This section usually contains all the symbols and is intended for the
+regular link editor
+.Xr ld 1 .
+.
+.It Dv SHT_STRTAB
+Section contains a string table.
+.
+.It Dv SHT_RELA
+Section contains relocation information with an explicit addend.
+.
+.It Dv SHT_HASH
+Section contains a symbol hash table.
+.
+.It Dv SHT_DYNAMIC
+Section contains dynamic linking information.
+.
+.It Dv SHT_NOTE
+Section contains some special information.
+The format can be e.g. vendor-specific.
+.
+.It Dv SHT_NOBITS
+Sections contains information similar to
+.Dv SHT_PROGBITS ,
+but takes up no space in the file.
+This can be used for e.g. bss.
+.
+.It Dv SHT_REL
+Section contains relocation information without an explicit addend.
+.
+.It Dv SHT_SHLIB
+This section type is reserved but has unspecified semantics.
+.
+.It Dv SHT_DYNSYM
+Section contains a symbol table.
+This symbol table is intended for the dynamic linker, and is kept as
+small as possible to conserve space, since it must be loaded to memory
+at run time.
+.El
+.
+.It Fa sh_flags
+Contains the section flags, which can have the following values or any
+combination of them:
+.Bl -tag -width Dv
+.
+.It Dv SHF_WRITE
+Section is writable after it has been loaded.
+.
+.It Dv SHF_ALLOC
+Section will occupy memory at run time.
+.
+.It Dv SHF_EXECINSTR
+Section contains executable machine instructions.
+.
+.El
+.
+.It Fa sh_addr
+Address to where the section will be loaded, or 0 if this section does
+not reside in memory at run time.
+.
+.It Fa sh_offset
+The byte offset from the beginning of the file to the beginning of
+this section.
+If the section is of type
+.Dv SHT_NOBITS ,
+this field specifies the conceptual placement in the file.
+.
+.It Fa sh_size
+The size of the section in the file for all types except
+.Dv SHT_NOBITS .
+For that type the value may differ from zero, but the section will
+still always take up no space from the file.
+.
+.It Fa sh_link
+Contains an index to the section header table.
+The interpretation depends on the section type as follows:
+.Pp
+.Bl -tag -compact -width SHT_DYNAMIC
+.
+.It Dv SHT_REL
+.It Dv SHT_RELA
+Section index of the associated symbol table.
+.
+.Pp
+.It Dv SHT_SYMTAB
+.It Dv SHT_DYNSYM
+Section index of the associated string table.
+.
+.Pp
+.It Dv SHT_HASH
+Section index of the symbol table to which the hash table applies.
+.
+.Pp
+.It Dv SHT_DYNAMIC
+Section index of the string table by which entries in this section are used.
+.El
+.
+.It Fa sh_info
+Contains extra information.
+The interpretation depends on the type as follows:
+.Pp
+.Bl -tag -compact -width SHT_DYNSYM
+.It Dv SHT_REL
+.It Dv SHT_RELA
+Section index of the section to which the relocation information applies.
+.Pp
+.It Dv SHT_SYMTAB
+.It Dv SHT_DYNSYM
+Contains a value one greater that the last local symbol table index.
+.El
+.
+.It Fa sh_addralign
+Marks the section alignment requirement.
+If, for example, the section contains a doubleword,
+the entire section must be doubleword aligned to ensure proper alignment.
+Only 0 and integral powers of two are allowed.
+Values 0 and 1 denote that the section has no alignment.
+.
+.It Fa sh_entsize
+Contains the entry size of an element for sections which are constructed
+of a table of fixed-size entries.
+If the section does not hold a table of fixed-size entries, this value
+is 0.
+.El
+.
+.Ss Program Headers
+.
+Every executable object must contain program headers.
+Program headers contain information necessary in constructing a
+process image.
+.Bd -literal -offset indent
+typedef struct {
+ Elf32_Word p_type;
+ Elf32_Off p_offset;
+ Elf32_Addr p_vaddr;
+ Elf32_Addr p_paddr;
+ Elf32_Word p_filesz;
+ Elf32_Word p_memsz;
+ Elf32_Word p_flags;
+ Elf32_Word p_align;
+} Elf32_Phdr;
+.Ed
+.
+.Bl -tag -width Fa
+.
+.It Fa p_type
+Contains the segment type indicator.
+The possible values are:
+.Bl -tag -width Dv
+.
+.It Dv PT_NULL
+Segment is inactive.
+The other fields contain undefined values.
+.
+.It Dv PT_LOAD
+Segment is loadable.
+It is loaded to the address described by
+.Fa p_vaddr .
+If
+.Fa p_memsz
+is greater than
+.Fa p_filesz ,
+the memory range from
+.Po Fa p_vaddr
++
+.Fa p_filesz Pc
+to
+.Po Fa p_vaddr
++
+.Fa p_memsz Pc
+is zero-filled when the segment is loaded.
+.Fa p_filesz
+can not be greater than
+.Fa p_memsz .
+Segments of this type are sorted in the header table by
+.Fa p_vaddr
+in ascending order.
+.
+.It Dv PT_DYNAMIC
+Segment contains dynamic linking information.
+.
+.It Dv PT_INTERP
+Segment contains a null-terminated path name to the interpreter.
+This segment may be present only once in a file, and it must appear
+before any loadable segments.
+This field will most likely contain the ELF dynamic loader:
+.Pa /libexec/ld.elf_so
+.
+.It Dv PT_NOTE
+Segment contains some special information.
+Format can be e.g. vendor-specific.
+.
+.It Dv PT_SHLIB
+This segment type is reserved but has unspecified semantics.
+Programs which contain a segment of this type do not conform to the
+ABI, and must indicate this by setting the appropriate ABI in the ELF
+header
+.Dv EI_OSABI
+field.
+.It Dv PT_PHDR
+The values in a program header of this type specify the characteristics
+of the program header table itself.
+For example, the
+.Fa p_vaddr
+field specifies the program header table location in memory once the
+program is loaded.
+This field may not occur more than once, may occur only if the program
+header table is part of the file memory image, and must come before
+any loadable segments.
+.El
+.
+.It Fa p_offset
+Contains the byte offset from the beginning of the file to the beginning
+of this segment.
+.
+.It Fa p_vaddr
+Contains the virtual memory address to which this segment is loaded.
+.
+.It Fa p_paddr
+Contains the physical address to which this segment is loaded.
+This value is usually ignored, but may be used while bootstrapping or
+in embedded systems.
+.
+.It Fa p_filesz
+Contains the number of bytes this segment occupies in the file image.
+.
+.It Fa p_memsz
+Contains the number of bytes this segment occupies in the memory image.
+.
+.It Fa p_flags
+Contains the segment flags, which specify the permissions for the segment
+after it has been loaded.
+The following values or any combination of them is acceptable:
+.Pp
+.Bl -tag -width Dv -compact
+.It Dv PF_R
+Segment can be read.
+.It Dv PF_W
+Segment can be written.
+.It Dv PF_X
+Segment is executable.
+.El
+.
+.It Fa p_align
+Contains the segment alignment.
+Acceptable values are 0 and 1 for no alignment, and integral powers of two.
+.Fa p_vaddr
+should equal
+.Fa p_offset
+modulo
+.Fa p_align .
+.El
+.
+.Sh SEE ALSO
+.Xr as 1 ,
+.Xr gdb 1 ,
+.Xr ld 1 ,
+.Xr ld.elf_so 1 ,
+.Xr execve 2 ,
+.Xr nlist 3 ,
+.Xr a.out 5 ,
+.Xr core 5 ,
+.Xr link 5 ,
+.Xr stab 5
+.Sh HISTORY
+The ELF object file format first appeared in
+.At V .