xref: /freebsd/share/man/man5/elf.5 (revision 6a4b42f0ce3478f0dfb556a8e8b639a0f6ebe83d)
1ea14e5c3SBrian Feldman.\" Copyright (c) 1999 Jeroen Ruigrok van der Werven
2ea14e5c3SBrian Feldman.\" All rights reserved.
3ea14e5c3SBrian Feldman.\"
4ea14e5c3SBrian Feldman.\" Redistribution and use in source and binary forms, with or without
5ea14e5c3SBrian Feldman.\" modification, are permitted provided that the following conditions
6ea14e5c3SBrian Feldman.\" are met:
7ea14e5c3SBrian Feldman.\" 1. Redistributions of source code must retain the above copyright
8ea14e5c3SBrian Feldman.\"    notice, this list of conditions and the following disclaimer.
9ea14e5c3SBrian Feldman.\" 2. Redistributions in binary form must reproduce the above copyright
10ea14e5c3SBrian Feldman.\"    notice, this list of conditions and the following disclaimer in the
11ea14e5c3SBrian Feldman.\"    documentation and/or other materials provided with the distribution.
12ea14e5c3SBrian Feldman.\"
13ea14e5c3SBrian Feldman.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14ea14e5c3SBrian Feldman.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15ea14e5c3SBrian Feldman.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16ea14e5c3SBrian Feldman.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17ea14e5c3SBrian Feldman.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18ea14e5c3SBrian Feldman.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19ea14e5c3SBrian Feldman.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20ea14e5c3SBrian Feldman.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21ea14e5c3SBrian Feldman.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22ea14e5c3SBrian Feldman.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23ea14e5c3SBrian Feldman.\" SUCH DAMAGE.
24ea14e5c3SBrian Feldman.\"
25ea14e5c3SBrian Feldman.\" $FreeBSD$
26ea14e5c3SBrian Feldman.\"
275bc7a730SMarcel Moolenaar.Dd December 18, 2005
28ea14e5c3SBrian Feldman.Dt ELF 5
293d45e180SRuslan Ermilov.Os
30ea14e5c3SBrian Feldman.Sh NAME
31ea14e5c3SBrian Feldman.Nm elf
32ea14e5c3SBrian Feldman.Nd format of ELF executable binary files
33ea14e5c3SBrian Feldman.Sh SYNOPSIS
3432eef9aeSRuslan Ermilov.In elf.h
35ea14e5c3SBrian Feldman.Sh DESCRIPTION
36ea14e5c3SBrian FeldmanThe header file
37fe08efe6SRuslan Ermilov.In elf.h
384e86fcacSSheldon Hearndefines the format of ELF executable binary files.
394e86fcacSSheldon HearnAmongst these files are
40ea14e5c3SBrian Feldmannormal executable files, relocatable object files, core files and shared
41ea14e5c3SBrian Feldmanlibraries.
42ea14e5c3SBrian Feldman.Pp
43ea14e5c3SBrian FeldmanAn executable file using the ELF file format consists of an ELF header,
44ea14e5c3SBrian Feldmanfollowed by a program header table or a section header table, or both.
454e86fcacSSheldon HearnThe ELF header is always at offset zero of the file.
464e86fcacSSheldon HearnThe program header
47ea14e5c3SBrian Feldmantable and the section header table's offset in the file are defined in the
484e86fcacSSheldon HearnELF header.
494e86fcacSSheldon HearnThe two tables describe the rest of the particularities of
50ea14e5c3SBrian Feldmanthe file.
51ea14e5c3SBrian Feldman.Pp
52ea14e5c3SBrian FeldmanApplications which wish to process ELF binary files for their native
53ea14e5c3SBrian Feldmanarchitecture only should include
54743d5d51SRuslan Ermilov.In elf.h
554e86fcacSSheldon Hearnin their source code.
564e86fcacSSheldon HearnThese applications should need to refer to
57ea14e5c3SBrian Feldmanall the types and structures by their generic names
58ea14e5c3SBrian Feldman.Dq Elf_xxx
59ea14e5c3SBrian Feldmanand to the macros by
60ea14e5c3SBrian Feldman.Dq ELF_xxx .
61ea14e5c3SBrian FeldmanApplications written this way can be compiled on any architecture,
62ea14e5c3SBrian Feldmanregardless whether the host is 32-bit or 64-bit.
63ea14e5c3SBrian Feldman.Pp
64ea14e5c3SBrian FeldmanShould an application need to process ELF files of an unknown
65ea14e5c3SBrian Feldmanarchitecture then the application needs to include both
66743d5d51SRuslan Ermilov.In sys/elf32.h
67ea14e5c3SBrian Feldmanand
68743d5d51SRuslan Ermilov.In sys/elf64.h
69ea14e5c3SBrian Feldmaninstead of
70743d5d51SRuslan Ermilov.In elf.h .
71ea14e5c3SBrian FeldmanFurthermore, all types and structures need to be identified by either
72ea14e5c3SBrian Feldman.Dq Elf32_xxx
73ea14e5c3SBrian Feldmanor
74ea14e5c3SBrian Feldman.Dq Elf64_xxx .
75ea14e5c3SBrian FeldmanThe macros need to be identified by
76ea14e5c3SBrian Feldman.Dq ELF32_xxx
77ea14e5c3SBrian Feldmanor
78ea14e5c3SBrian Feldman.Dq ELF64_xxx .
79ea14e5c3SBrian Feldman.Pp
80ea14e5c3SBrian FeldmanWhatever the system's architecture is, it will always include
81743d5d51SRuslan Ermilov.In sys/elf_common.h
82ea14e5c3SBrian Feldmanas well as
83743d5d51SRuslan Ermilov.In sys/elf_generic.h .
84ea14e5c3SBrian Feldman.Pp
85ea14e5c3SBrian FeldmanThese header files describe the above mentioned headers as C structures
86ea14e5c3SBrian Feldmanand also include structures for dynamic sections, relocation sections and
87ea14e5c3SBrian Feldmansymbol tables.
88ea14e5c3SBrian Feldman.Pp
89ea14e5c3SBrian FeldmanThe following types are being used for 32-bit architectures:
90ea14e5c3SBrian Feldman.Bd -literal -offset indent
91757686b1SMarcel MoolenaarElf32_Addr	Unsigned 32-bit program address
92757686b1SMarcel MoolenaarElf32_Half	Unsigned 16-bit field
93fb59cdf6SJoseph KoshyElf32_Lword	Unsigned 64-bit field
94757686b1SMarcel MoolenaarElf32_Off	Unsigned 32-bit file offset
95757686b1SMarcel MoolenaarElf32_Sword	Signed 32-bit field or integer
96757686b1SMarcel MoolenaarElf32_Word	Unsigned 32-bit field or integer
97ea14e5c3SBrian Feldman.Ed
98ea14e5c3SBrian Feldman.Pp
99ea14e5c3SBrian FeldmanFor 64-bit architectures we have the following types:
100ea14e5c3SBrian Feldman.Bd -literal -offset indent
101757686b1SMarcel MoolenaarElf64_Addr	Unsigned 64-bit program address
102757686b1SMarcel MoolenaarElf64_Half	Unsigned 16-bit field
103fb59cdf6SJoseph KoshyElf64_Lword	Unsigned 64-bit field
104757686b1SMarcel MoolenaarElf64_Off	Unsigned 64-bit file offset
105757686b1SMarcel MoolenaarElf64_Sword	Signed 32-bit field
106757686b1SMarcel MoolenaarElf64_Sxword	Signed 64-bit field or integer
107fb59cdf6SJoseph KoshyElf64_Word	Unsigned 32-bit field
108757686b1SMarcel MoolenaarElf64_Xword	Unsigned 64-bit field or integer
109ea14e5c3SBrian Feldman.Ed
110ea14e5c3SBrian Feldman.Pp
111ea14e5c3SBrian FeldmanAll data structures that the file format defines follow the
112ea14e5c3SBrian Feldman.Dq natural
1134e86fcacSSheldon Hearnsize and alignment guidelines for the relevant class.
1144e86fcacSSheldon HearnIf necessary,
115ea14e5c3SBrian Feldmandata structures contain explicit padding to ensure 4-byte alignment
116ea14e5c3SBrian Feldmanfor 4-byte objects, to force structure sizes to a multiple of 4, etc.
117ea14e5c3SBrian Feldman.Pp
118ea14e5c3SBrian FeldmanThe ELF header is described by the type Elf32_Ehdr or Elf64_Ehdr:
119ea14e5c3SBrian Feldman.Bd -literal -offset indent
120ea14e5c3SBrian Feldmantypedef struct {
121ea14e5c3SBrian Feldman        unsigned char   e_ident[EI_NIDENT];
122ea14e5c3SBrian Feldman        Elf32_Half      e_type;
123ea14e5c3SBrian Feldman        Elf32_Half      e_machine;
124ea14e5c3SBrian Feldman        Elf32_Word      e_version;
125ea14e5c3SBrian Feldman        Elf32_Addr      e_entry;
126ea14e5c3SBrian Feldman        Elf32_Off       e_phoff;
127ea14e5c3SBrian Feldman        Elf32_Off       e_shoff;
128ea14e5c3SBrian Feldman        Elf32_Word      e_flags;
129ea14e5c3SBrian Feldman        Elf32_Half      e_ehsize;
130ea14e5c3SBrian Feldman        Elf32_Half      e_phentsize;
131ea14e5c3SBrian Feldman        Elf32_Half      e_phnum;
132ea14e5c3SBrian Feldman        Elf32_Half      e_shentsize;
133ea14e5c3SBrian Feldman        Elf32_Half      e_shnum;
134ea14e5c3SBrian Feldman        Elf32_Half      e_shstrndx;
135ea14e5c3SBrian Feldman} Elf32_Ehdr;
136ea14e5c3SBrian Feldman.Ed
137ea14e5c3SBrian Feldman.Pp
138ea14e5c3SBrian Feldman.Bd -literal -offset indent
139ea14e5c3SBrian Feldmantypedef struct {
140ea14e5c3SBrian Feldman	unsigned char   e_ident[EI_NIDENT];
141757686b1SMarcel Moolenaar	Elf64_Half      e_type;
142757686b1SMarcel Moolenaar	Elf64_Half      e_machine;
143757686b1SMarcel Moolenaar	Elf64_Word      e_version;
144ea14e5c3SBrian Feldman	Elf64_Addr      e_entry;
145ea14e5c3SBrian Feldman	Elf64_Off       e_phoff;
146ea14e5c3SBrian Feldman	Elf64_Off       e_shoff;
147757686b1SMarcel Moolenaar	Elf64_Word      e_flags;
148757686b1SMarcel Moolenaar	Elf64_Half      e_ehsize;
149757686b1SMarcel Moolenaar	Elf64_Half      e_phentsize;
150757686b1SMarcel Moolenaar	Elf64_Half      e_phnum;
151757686b1SMarcel Moolenaar	Elf64_Half      e_shentsize;
152757686b1SMarcel Moolenaar	Elf64_Half      e_shnum;
153757686b1SMarcel Moolenaar	Elf64_Half      e_shstrndx;
154ea14e5c3SBrian Feldman} Elf64_Ehdr;
155ea14e5c3SBrian Feldman.Ed
156ea14e5c3SBrian Feldman.Pp
157ea14e5c3SBrian FeldmanThe fields have the following meanings:
158ea14e5c3SBrian Feldman.Pp
159ea14e5c3SBrian Feldman.Bl -tag -width "e_phentsize" -compact -offset indent
160ea14e5c3SBrian Feldman.It Dv e_ident
161ea14e5c3SBrian FeldmanThis array of bytes specifies to interpret the file,
162ea14e5c3SBrian Feldmanindependent of the processor or the file's remaining contents.
163ea14e5c3SBrian FeldmanWithin this array everything is named by macros, which start with
164ea14e5c3SBrian Feldmanthe prefix
165ea14e5c3SBrian Feldman.Sy EI_
166ea14e5c3SBrian Feldmanand may contain values which start with the prefix
167ea14e5c3SBrian Feldman.Sy ELF .
168ea14e5c3SBrian FeldmanThe following macros are defined:
169ea14e5c3SBrian Feldman.Pp
1700d59faf6SJeroen Ruigrok van der Werven.Bl -tag -width "EI_ABIVERSION" -compact
171ea14e5c3SBrian Feldman.It Dv EI_MAG0
1724e86fcacSSheldon HearnThe first byte of the magic number.
1734e86fcacSSheldon HearnIt must be filled with
174ea14e5c3SBrian Feldman.Sy ELFMAG0 .
175ea14e5c3SBrian Feldman.It Dv EI_MAG1
1764e86fcacSSheldon HearnThe second byte of the magic number.
1774e86fcacSSheldon HearnIt must be filled with
178ea14e5c3SBrian Feldman.Sy ELFMAG1 .
179ea14e5c3SBrian Feldman.It Dv EI_MAG2
1804e86fcacSSheldon HearnThe third byte of the magic number.
1814e86fcacSSheldon HearnIt must be filled with
182ea14e5c3SBrian Feldman.Sy ELFMAG2 .
183ea14e5c3SBrian Feldman.It Dv EI_MAG3
1844e86fcacSSheldon HearnThe fourth byte of the magic number.
1854e86fcacSSheldon HearnIt must be filled with
186ea14e5c3SBrian Feldman.Sy ELFMAG3 .
187ea14e5c3SBrian Feldman.It Dv EI_CLASS
188ea14e5c3SBrian FeldmanThe fifth byte identifies the architecture for this binary:
189ea14e5c3SBrian Feldman.Pp
190ea14e5c3SBrian Feldman.Bl -tag -width "ELFCLASSNONE" -compact
191ea14e5c3SBrian Feldman.It Dv ELFCLASSNONE
192ea14e5c3SBrian FeldmanThis class is invalid.
193ea14e5c3SBrian Feldman.It Dv ELFCLASS32
1944e86fcacSSheldon HearnThis defines the 32-bit architecture.
1954e86fcacSSheldon HearnIt supports machines with files
196ea14e5c3SBrian Feldmanand virtual address spaces up to 4 Gigabytes.
197ea14e5c3SBrian Feldman.It Dv ELFCLASS64
198ea14e5c3SBrian FeldmanThis defines the 64-bit architecture.
199ea14e5c3SBrian Feldman.El
200ea14e5c3SBrian Feldman.It Dv EI_DATA
201ea14e5c3SBrian FeldmanThe sixth byte specifies the data encoding of the processor-specific
2024e86fcacSSheldon Hearndata in the file.
2034e86fcacSSheldon HearnCurrently these encodings are supported:
204ea14e5c3SBrian Feldman.Pp
205ea14e5c3SBrian Feldman.Bl -tag -width "ELFDATA2LSB" -compact
206ea14e5c3SBrian Feldman.It Dv ELFDATANONE
207ea14e5c3SBrian FeldmanUnknown data format.
208ea14e5c3SBrian Feldman.It Dv ELFDATA2LSB
209ea14e5c3SBrian FeldmanTwo's complement, little-endian.
210ea14e5c3SBrian Feldman.It Dv ELFDATA2MSB
211ea14e5c3SBrian FeldmanTwo's complement, big-endian.
212ea14e5c3SBrian Feldman.El
213ea14e5c3SBrian Feldman.It Dv EI_VERSION
214ea14e5c3SBrian FeldmanThe version number of the ELF specification:
215ea14e5c3SBrian Feldman.Pp
216ea14e5c3SBrian Feldman.Bl -tag -width "EV_CURRENT" -compact
217ea14e5c3SBrian Feldman.It Dv EV_NONE
218ea14e5c3SBrian FeldmanInvalid version.
219ea14e5c3SBrian Feldman.It Dv EV_CURRENT
220ea14e5c3SBrian FeldmanCurrent version.
221ea14e5c3SBrian Feldman.El
2220d59faf6SJeroen Ruigrok van der Werven.It Dv EI_OSABI
2230d59faf6SJeroen Ruigrok van der WervenThis byte identifies the operating system
2240d59faf6SJeroen Ruigrok van der Wervenand ABI to which the object is targeted.
2250d59faf6SJeroen Ruigrok van der WervenSome fields in other ELF structures have flags
2260d59faf6SJeroen Ruigrok van der Wervenand values that have platform specific meanings;
2270d59faf6SJeroen Ruigrok van der Werventhe interpretation of those fields is determined by the value of this byte.
2280d59faf6SJeroen Ruigrok van der WervenThe following values are currently defined:
2290d59faf6SJeroen Ruigrok van der Werven.Pp
2300d59faf6SJeroen Ruigrok van der Werven.Bl -tag -width "ELFOSABI_STANDALONE" -compact
2310d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_SYSV
2320d59faf6SJeroen Ruigrok van der WervenUNIX System V ABI.
2330d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_HPUX
2340d59faf6SJeroen Ruigrok van der WervenHP-UX operating system ABI.
2350d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_NETBSD
236d013e3f5SRuslan Ermilov.Nx
237d013e3f5SRuslan Ermilovoperating system ABI.
2380d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_LINUX
2390d59faf6SJeroen Ruigrok van der WervenGNU/Linux operating system ABI.
2400d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_HURD
2410d59faf6SJeroen Ruigrok van der WervenGNU/Hurd operating system ABI.
2420d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_86OPEN
2430d59faf6SJeroen Ruigrok van der Werven86Open Common IA32 ABI.
2440d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_SOLARIS
2450d59faf6SJeroen Ruigrok van der WervenSolaris operating system ABI.
2460d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_MONTEREY
2470d59faf6SJeroen Ruigrok van der WervenMonterey project ABI.
2480d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_IRIX
2490d59faf6SJeroen Ruigrok van der WervenIRIX operating system ABI.
2500d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_FREEBSD
251c5e7e03aSRuslan Ermilov.Fx
252c5e7e03aSRuslan Ermilovoperating system ABI.
2530d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_TRU64
2540d59faf6SJeroen Ruigrok van der WervenTRU64 UNIX operating system ABI.
2550d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_ARM
2560d59faf6SJeroen Ruigrok van der WervenARM architecture ABI.
2570d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_STANDALONE
2580d59faf6SJeroen Ruigrok van der WervenStandalone (embedded) ABI.
2590d59faf6SJeroen Ruigrok van der Werven.El
2600d59faf6SJeroen Ruigrok van der Werven.It Dv EI_ABIVERSION
2610d59faf6SJeroen Ruigrok van der WervenThis byte identifies the version of the ABI
2620d59faf6SJeroen Ruigrok van der Wervento which the object is targeted.
2630d59faf6SJeroen Ruigrok van der WervenThis field is used to distinguish among incompatible versions of an ABI.
2640d59faf6SJeroen Ruigrok van der WervenThe interpretation of this version number
2650d59faf6SJeroen Ruigrok van der Wervenis dependent on the ABI identified by the EI_OSABI field.
2660d59faf6SJeroen Ruigrok van der WervenApplications conforming to this specification use the value 0.
267ea14e5c3SBrian Feldman.It Dv EI_PAD
2684e86fcacSSheldon HearnStart of padding.
2694e86fcacSSheldon HearnThese bytes are reserved and set to zero.
2704e86fcacSSheldon HearnPrograms
2714e86fcacSSheldon Hearnwhich read them should ignore them.
2724e86fcacSSheldon HearnThe value for EI_PAD will change in
273ea14e5c3SBrian Feldmanthe future if currently unused bytes are given meanings.
274ea14e5c3SBrian Feldman.It Dv EI_BRAND
275ea14e5c3SBrian FeldmanStart of architecture identification.
276ea14e5c3SBrian Feldman.It Dv EI_NIDENT
277ea14e5c3SBrian FeldmanThe size of the e_ident array.
278ea14e5c3SBrian Feldman.El
279ea14e5c3SBrian Feldman.Pp
280ea14e5c3SBrian Feldman.It Dv e_type
281ea14e5c3SBrian FeldmanThis member of the structure identifies the object file type:
282ea14e5c3SBrian Feldman.Pp
283ea14e5c3SBrian Feldman.Bl -tag -width "ET_NONE" -compact
284ea14e5c3SBrian Feldman.It Dv ET_NONE
285ea14e5c3SBrian FeldmanAn unknown type.
286ea14e5c3SBrian Feldman.It Dv ET_REL
287ea14e5c3SBrian FeldmanA relocatable file.
288ea14e5c3SBrian Feldman.It Dv ET_EXEC
289ea14e5c3SBrian FeldmanAn executable file.
290ea14e5c3SBrian Feldman.It Dv ET_DYN
291ea14e5c3SBrian FeldmanA shared object.
292ea14e5c3SBrian Feldman.It Dv ET_CORE
293ea14e5c3SBrian FeldmanA core file.
294ea14e5c3SBrian Feldman.El
295ea14e5c3SBrian Feldman.Pp
296ea14e5c3SBrian Feldman.It Dv e_machine
297ea14e5c3SBrian FeldmanThis member specifies the required architecture for an individual file:
298ea14e5c3SBrian Feldman.Pp
299ea14e5c3SBrian Feldman.Bl -tag -width "EM_MIPS_RS4_BE" -compact
300ea14e5c3SBrian Feldman.It Dv EM_NONE
301ea14e5c3SBrian FeldmanAn unknown machine.
302ea14e5c3SBrian Feldman.It Dv EM_M32
303ea14e5c3SBrian FeldmanAT&T WE 32100.
304ea14e5c3SBrian Feldman.It Dv EM_SPARC
305ea14e5c3SBrian FeldmanSun Microsystems SPARC.
306ea14e5c3SBrian Feldman.It Dv EM_386
307ea14e5c3SBrian FeldmanIntel 80386.
308ea14e5c3SBrian Feldman.It Dv EM_68K
309ea14e5c3SBrian FeldmanMotorola 68000.
310ea14e5c3SBrian Feldman.It Dv EM_88K
311ea14e5c3SBrian FeldmanMotorola 88000.
312ea14e5c3SBrian Feldman.It Dv EM_486
313ea14e5c3SBrian FeldmanIntel 80486.
314ea14e5c3SBrian Feldman.It Dv EM_860
315ea14e5c3SBrian FeldmanIntel 80860.
316ea14e5c3SBrian Feldman.It Dv EM_MIPS
317ea14e5c3SBrian FeldmanMIPS RS3000 (big-endian only).
318ea14e5c3SBrian Feldman.It Dv EM_MIPS_RS4_BE
319ea14e5c3SBrian FeldmanMIPS RS4000 (big-endian only).
320ea14e5c3SBrian Feldman.It Dv EM_SPARC64
321ea14e5c3SBrian FeldmanSPARC v9 64-bit unofficial.
322ea14e5c3SBrian Feldman.It Dv EM_PARISC
323ea14e5c3SBrian FeldmanHPPA.
324ea14e5c3SBrian Feldman.It Dv EM_PPC
325ea14e5c3SBrian FeldmanPowerPC.
326ea14e5c3SBrian Feldman.It Dv EM_ALPHA
327ea14e5c3SBrian FeldmanCompaq [DEC] Alpha.
328ea14e5c3SBrian Feldman.El
329ea14e5c3SBrian Feldman.Pp
330ea14e5c3SBrian Feldman.It Dv e_version
331ea14e5c3SBrian FeldmanThis member identifies the file version:
332ea14e5c3SBrian Feldman.Pp
333ea14e5c3SBrian Feldman.Bl -tag -width "EV_CURRENT" -compact
334ea14e5c3SBrian Feldman.It Dv EV_NONE
335ea14e5c3SBrian FeldmanInvalid version
336ea14e5c3SBrian Feldman.It Dv EV_CURRENT
337ea14e5c3SBrian FeldmanCurrent version
338ea14e5c3SBrian Feldman.El
339ea14e5c3SBrian Feldman.It Dv e_entry
340ea14e5c3SBrian FeldmanThis member gives the virtual address to which the system first transfers
3414e86fcacSSheldon Hearncontrol, thus starting the process.
3424e86fcacSSheldon HearnIf the file has no associated entry
343ea14e5c3SBrian Feldmanpoint, this member holds zero.
344ea14e5c3SBrian Feldman.It Dv e_phoff
3454e86fcacSSheldon HearnThis member holds the program header table's file offset in bytes.
3464e86fcacSSheldon HearnIf
347ea14e5c3SBrian Feldmanthe file has no program header table, this member holds zero.
348ea14e5c3SBrian Feldman.It Dv e_shoff
3494e86fcacSSheldon HearnThis member holds the section header table's file offset in bytes.
3504e86fcacSSheldon HearnIf the
351ea14e5c3SBrian Feldmanfile has no section header table this member holds zero.
352ea14e5c3SBrian Feldman.It Dv e_flags
3534e86fcacSSheldon HearnThis member holds processor-specific flags associated with the file.
3544e86fcacSSheldon HearnFlag
3555203edcdSRuslan Ermilovnames take the form EF_`machine_flag'.
3565203edcdSRuslan ErmilovCurrently no flags have been defined.
357ea14e5c3SBrian Feldman.It Dv e_ehsize
358ea14e5c3SBrian FeldmanThis member holds the ELF header's size in bytes.
359ea14e5c3SBrian Feldman.It Dv e_phentsize
360ea14e5c3SBrian FeldmanThis member holds the size in bytes of one entry in the file's program header
361ea14e5c3SBrian Feldmantable; all entries are the same size.
362ea14e5c3SBrian Feldman.It Dv e_phnum
363f3a2511aSChris CostelloThis member holds the number of entries in the program header
3644e86fcacSSheldon Hearntable.
365e0195199SJoseph KoshyIf the file is using extended program header numbering, then the
366ea14e5c3SBrian Feldman.Sy e_phnum
367e0195199SJoseph Koshymember will contain the value
368e0195199SJoseph Koshy.Dv PN_XNUM
369e0195199SJoseph Koshyand the actual number of program header table entries will be stored
370e0195199SJoseph Koshyin the
371e0195199SJoseph Koshy.Sy sh_info
372e0195199SJoseph Koshymember of the section header at index
373e0195199SJoseph Koshy.Dv SHN_UNDEF .
374e0195199SJoseph KoshyThe product of
375e0195199SJoseph Koshy.Sy e_phentsize
376e0195199SJoseph Koshyand the number of program header table entries gives the program
377e0195199SJoseph Koshyheader table's size in bytes.
3784e86fcacSSheldon HearnIf a file has no program header,
379ea14e5c3SBrian Feldman.Sy e_phnum
380ea14e5c3SBrian Feldmanholds the value zero.
381ea14e5c3SBrian Feldman.It Dv e_shentsize
3824e86fcacSSheldon HearnThis member holds a sections header's size in bytes.
3834e86fcacSSheldon HearnA section header is one
384ea14e5c3SBrian Feldmanentry in the section header table; all entries are the same size.
385ea14e5c3SBrian Feldman.It Dv e_shnum
3864e86fcacSSheldon HearnThis member holds the number of entries in the section header table.
387fb59cdf6SJoseph KoshyIf the file is using extended section numbering, then the
388fb59cdf6SJoseph Koshy.Sy e_shnum
389e0195199SJoseph Koshymember will be zero and the actual section number will be stored in the
390fb59cdf6SJoseph Koshy.Sy sh_size
391fb59cdf6SJoseph Koshymember of the section header at index
392fb59cdf6SJoseph Koshy.Dv SHN_UNDEF .
393fb59cdf6SJoseph KoshyIf a file has no section header table, both the
394fb59cdf6SJoseph Koshy.Sy e_shnum
395fb59cdf6SJoseph Koshyand the
396fb59cdf6SJoseph Koshy.Sy e_shoff
397fb59cdf6SJoseph Koshyfields of the ELF header will be zero.
398fb59cdf6SJoseph KoshyThe product of
399ea14e5c3SBrian Feldman.Sy e_shentsize
400fb59cdf6SJoseph Koshyand the number of sections in the file gives the section header
401fb59cdf6SJoseph Koshytable's size in bytes.
402ea14e5c3SBrian Feldman.It Dv e_shstrndx
403ea14e5c3SBrian FeldmanThis member holds the section header table index of the entry associated
4044e86fcacSSheldon Hearnwith the section name string table.
405fb59cdf6SJoseph KoshyIf extended section numbering is being used, this field will hold the
406fb59cdf6SJoseph Koshyvalue
407fb59cdf6SJoseph Koshy.Sy SHN_XINDEX ,
408fb59cdf6SJoseph Koshyand the actual section header table index will be present in the
409fb59cdf6SJoseph Koshy.Sy sh_link
410fb59cdf6SJoseph Koshyfield of the section header entry at index
411fb59cdf6SJoseph Koshy.Dv SHN_UNDEF .
4124e86fcacSSheldon HearnIf the file has no section name string
413ea14e5c3SBrian Feldmantable, this member holds the value
414ea14e5c3SBrian Feldman.Sy SHN_UNDEF .
415ea14e5c3SBrian Feldman.El
416ea14e5c3SBrian Feldman.Pp
417ea14e5c3SBrian FeldmanAn executable or shared object file's program header table is an array of
418ea14e5c3SBrian Feldmanstructures, each describing a segment or other information the system needs
4194e86fcacSSheldon Hearnto prepare the program for execution.
4204e86fcacSSheldon HearnAn object file
421ea14e5c3SBrian Feldman.Em segment
422ea14e5c3SBrian Feldmancontains one or more
423ea14e5c3SBrian Feldman.Em sections .
424ea14e5c3SBrian FeldmanProgram headers are meaningful only for executable and shared object files.
425ea14e5c3SBrian FeldmanA file specifies its own program header size with the ELF header's
426ea14e5c3SBrian Feldman.Sy e_phentsize
427ea14e5c3SBrian Feldmanand
428ea14e5c3SBrian Feldman.Sy e_phnum
4294e86fcacSSheldon Hearnmembers.
4304e86fcacSSheldon HearnAs with the Elf executable header, the program header
431ea14e5c3SBrian Feldmanalso has different versions depending on the architecture:
432ea14e5c3SBrian Feldman.Pp
433ea14e5c3SBrian Feldman.Bd -literal -offset indent
434ea14e5c3SBrian Feldmantypedef struct {
435ea14e5c3SBrian Feldman        Elf32_Word      p_type;
436ea14e5c3SBrian Feldman        Elf32_Off       p_offset;
437ea14e5c3SBrian Feldman        Elf32_Addr      p_vaddr;
438ea14e5c3SBrian Feldman        Elf32_Addr      p_paddr;
439757686b1SMarcel Moolenaar        Elf32_Word      p_filesz;
440757686b1SMarcel Moolenaar        Elf32_Word      p_memsz;
441ea14e5c3SBrian Feldman        Elf32_Word      p_flags;
442757686b1SMarcel Moolenaar        Elf32_Word      p_align;
443ea14e5c3SBrian Feldman} Elf32_Phdr;
444ea14e5c3SBrian Feldman.Ed
445ea14e5c3SBrian Feldman.Pp
446ea14e5c3SBrian Feldman.Bd -literal -offset indent
447ea14e5c3SBrian Feldmantypedef struct {
448757686b1SMarcel Moolenaar        Elf64_Word      p_type;
449757686b1SMarcel Moolenaar        Elf64_Word      p_flags;
450ea14e5c3SBrian Feldman        Elf64_Off       p_offset;
451ea14e5c3SBrian Feldman        Elf64_Addr      p_vaddr;
452ea14e5c3SBrian Feldman        Elf64_Addr      p_paddr;
453757686b1SMarcel Moolenaar        Elf64_Xword     p_filesz;
454757686b1SMarcel Moolenaar        Elf64_Xword     p_memsz;
455757686b1SMarcel Moolenaar        Elf64_Xword     p_align;
456ea14e5c3SBrian Feldman} Elf64_Phdr;
457ea14e5c3SBrian Feldman.Ed
458ea14e5c3SBrian Feldman.Pp
459ea14e5c3SBrian FeldmanThe main difference between the 32-bit and the 64-bit program header lies
460ea14e5c3SBrian Feldmanonly in the location of a
461ea14e5c3SBrian Feldman.Sy p_flags
462ea14e5c3SBrian Feldmanmember in the total struct.
463ea14e5c3SBrian Feldman.Pp
464ea14e5c3SBrian Feldman.Bl -tag -width "p_offset" -compact -offset indent
465ea14e5c3SBrian Feldman.It Dv p_type
466ea14e5c3SBrian FeldmanThis member of the Phdr struct tells what kind of segment this array
467ea14e5c3SBrian Feldmanelement describes or how to interpret the array element's information.
468ea14e5c3SBrian Feldman.Bl -tag -width "PT_DYNAMIC" -compact
469ea14e5c3SBrian Feldman.Pp
470ea14e5c3SBrian Feldman.It Dv PT_NULL
471ea14e5c3SBrian FeldmanThe array element is unused and the other members' values are undefined.
472ea14e5c3SBrian FeldmanThis lets the program header have ignored entries.
473ea14e5c3SBrian Feldman.It Dv PT_LOAD
474ea14e5c3SBrian FeldmanThe array element specifies a loadable segment, described by
475ea14e5c3SBrian Feldman.Sy p_filesz
476ea14e5c3SBrian Feldmanand
477ea14e5c3SBrian Feldman.Sy p_memsz .
478ea14e5c3SBrian FeldmanThe bytes from the file are mapped to the beginning of the memory
4794e86fcacSSheldon Hearnsegment.
4809232968eSDima DorfmanIf the segment's memory size
4819232968eSDima Dorfman.Pq Sy p_memsz
4829232968eSDima Dorfmanis larger than the file size
4839232968eSDima Dorfman.Pq Sy p_filesz ,
4849232968eSDima Dorfmanthe
485ea14e5c3SBrian Feldman.Dq extra
486ea14e5c3SBrian Feldmanbytes are defined to hold the value 0 and to follow the segment's
4874e86fcacSSheldon Hearninitialized area.
4884e86fcacSSheldon HearnThe file size may not be larger than the memory size.
489ea14e5c3SBrian FeldmanLoadable segment entries in the program header table appear in ascending
490ea14e5c3SBrian Feldmanorder, sorted on the
491ea14e5c3SBrian Feldman.Sy p_vaddr
492ea14e5c3SBrian Feldmanmember.
493ea14e5c3SBrian Feldman.It Dv PT_DYNAMIC
494ea14e5c3SBrian FeldmanThe array element specifies dynamic linking information.
495ea14e5c3SBrian Feldman.It Dv PT_INTERP
496ea14e5c3SBrian FeldmanThe array element specifies the location and size of a null-terminated
4974e86fcacSSheldon Hearnpath name to invoke as an interpreter.
4984e86fcacSSheldon HearnThis segment type is meaningful
4995203edcdSRuslan Ermilovonly for executable files (though it may occur for shared objects).
5005203edcdSRuslan ErmilovHowever
5014e86fcacSSheldon Hearnit may not occur more than once in a file.
5024e86fcacSSheldon HearnIf it is present it must precede
503ea14e5c3SBrian Feldmanany loadable segment entry.
504ea14e5c3SBrian Feldman.It Dv PT_NOTE
505ea14e5c3SBrian FeldmanThe array element specifies the location and size for auxiliary information.
506ea14e5c3SBrian Feldman.It Dv PT_SHLIB
5074e86fcacSSheldon HearnThis segment type is reserved but has unspecified semantics.
5084e86fcacSSheldon HearnPrograms that
509ea14e5c3SBrian Feldmancontain an array element of this type do not conform to the ABI.
510ea14e5c3SBrian Feldman.It Dv PT_PHDR
511ea14e5c3SBrian FeldmanThe array element, if present, specifies the location and size of the program
512ea14e5c3SBrian Feldmanheader table itself, both in the file and in the memory image of the program.
5134e86fcacSSheldon HearnThis segment type may not occur more than once in a file.
5144e86fcacSSheldon HearnMoreover, it may
515ea14e5c3SBrian Feldmanonly occur if the program header table is part of the memory image of the
5164e86fcacSSheldon Hearnprogram.
5174e86fcacSSheldon HearnIf it is present it must precede any loadable segment entry.
518ea14e5c3SBrian Feldman.It Dv PT_LOPROC
519ea14e5c3SBrian FeldmanThis value up to and including
520ea14e5c3SBrian Feldman.Sy PT_HIPROC
521ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
522ea14e5c3SBrian Feldman.It Dv PT_HIPROC
523ea14e5c3SBrian FeldmanThis value down to and including
524ea14e5c3SBrian Feldman.Sy PT_LOPROC
525ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
526ea14e5c3SBrian Feldman.El
527ea14e5c3SBrian Feldman.Pp
528ea14e5c3SBrian Feldman.It Dv p_offset
529ea14e5c3SBrian FeldmanThis member holds the offset from the beginning of the file at which
530f4c311e6SPeter Pentchevthe first byte of the segment resides.
531ea14e5c3SBrian Feldman.It Dv p_vaddr
532ea14e5c3SBrian FeldmanThis member holds the virtual address at which the first byte of the
533ea14e5c3SBrian Feldmansegment resides in memory.
534ea14e5c3SBrian Feldman.It Dv p_paddr
535ea14e5c3SBrian FeldmanOn systems for which physical addressing is relevant, this member is
5364e86fcacSSheldon Hearnreserved for the segment's physical address.
537753d686dSRuslan ErmilovUnder
538753d686dSRuslan Ermilov.Bx
539753d686dSRuslan Ermilovthis member is
540ea14e5c3SBrian Feldmannot used and must be zero.
541ea14e5c3SBrian Feldman.It Dv p_filesz
542ea14e5c3SBrian FeldmanThis member holds the number of bytes in the file image of the segment.
543ea14e5c3SBrian FeldmanIt may be zero.
544ea14e5c3SBrian Feldman.It Dv p_memsz
545ea14e5c3SBrian FeldmanThis member holds the number of bytes in the memory image of the segment.
546ea14e5c3SBrian FeldmanIt may be zero.
547ea14e5c3SBrian Feldman.It Dv p_flags
548ea14e5c3SBrian FeldmanThis member holds flags relevant to the segment:
549ea14e5c3SBrian Feldman.Pp
550ea14e5c3SBrian Feldman.Bl -tag -width "PF_X" -compact
551ea14e5c3SBrian Feldman.It Dv PF_X
552ea14e5c3SBrian FeldmanAn executable segment.
553ea14e5c3SBrian Feldman.It Dv PF_W
554ea14e5c3SBrian FeldmanA writable segment.
555ea14e5c3SBrian Feldman.It Dv PF_R
556ea14e5c3SBrian FeldmanA readable segment.
557ea14e5c3SBrian Feldman.El
558ea14e5c3SBrian Feldman.Pp
559ea14e5c3SBrian FeldmanA text segment commonly has the flags
560ea14e5c3SBrian Feldman.Sy PF_X
561ea14e5c3SBrian Feldmanand
562672300f7SRuslan Ermilov.Sy PF_R .
563ea14e5c3SBrian FeldmanA data segment commonly has
564ea14e5c3SBrian Feldman.Sy PF_X ,
565ea14e5c3SBrian Feldman.Sy PF_W
566ea14e5c3SBrian Feldmanand
567ea14e5c3SBrian Feldman.Sy PF_R .
568ea14e5c3SBrian Feldman.It Dv p_align
569ea14e5c3SBrian FeldmanThis member holds the value to which the segments are aligned in memory
5704e86fcacSSheldon Hearnand in the file.
5714e86fcacSSheldon HearnLoadable process segments must have congruent values for
572ea14e5c3SBrian Feldman.Sy p_vaddr
573ea14e5c3SBrian Feldmanand
574ea14e5c3SBrian Feldman.Sy p_offset ,
5754e86fcacSSheldon Hearnmodulo the page size.
5764e86fcacSSheldon HearnValues of zero and one mean no alignment is required.
577ea14e5c3SBrian FeldmanOtherwise,
578ea14e5c3SBrian Feldman.Sy p_align
579ea14e5c3SBrian Feldmanshould be a positive, integral power of two, and
580ea14e5c3SBrian Feldman.Sy p_vaddr
581ea14e5c3SBrian Feldmanshould equal
582ea14e5c3SBrian Feldman.Sy p_offset ,
583ea14e5c3SBrian Feldmanmodulo
584ea14e5c3SBrian Feldman.Sy p_align .
585ea14e5c3SBrian Feldman.El
586ea14e5c3SBrian Feldman.Pp
5874e86fcacSSheldon HearnAn file's section header table lets one locate all the file's sections.
5884e86fcacSSheldon HearnThe
5894e86fcacSSheldon Hearnsection header table is an array of Elf32_Shdr or Elf64_Shdr structures.
5904e86fcacSSheldon HearnThe
591ea14e5c3SBrian FeldmanELF header's
592ea14e5c3SBrian Feldman.Sy e_shoff
593ea14e5c3SBrian Feldmanmember gives the byte offset from the beginning of the file to the section
594ea14e5c3SBrian Feldmanheader table.
595ea14e5c3SBrian Feldman.Sy e_shnum
596ea14e5c3SBrian Feldmanholds the number of entries the section header table contains.
597ea14e5c3SBrian Feldman.Sy e_shentsize
598ea14e5c3SBrian Feldmanholds the size in bytes of each entry.
599ea14e5c3SBrian Feldman.Pp
6004e86fcacSSheldon HearnA section header table index is a subscript into this array.
6014e86fcacSSheldon HearnSome section
6024e86fcacSSheldon Hearnheader table indices are reserved.
6034e86fcacSSheldon HearnAn object file does not have sections for
604ea14e5c3SBrian Feldmanthese special indices:
605ea14e5c3SBrian Feldman.Pp
606ea14e5c3SBrian Feldman.Bl -tag -width "SHN_LORESERVE" -compact
607ea14e5c3SBrian Feldman.It Dv SHN_UNDEF
6087e1b2808SHiten PandyaThis value marks an undefined, missing, irrelevant, or otherwise meaningless
609ea14e5c3SBrian Feldmansection reference.
6107e1b2808SHiten PandyaFor example, a symbol
6117e1b2808SHiten Pandya.Dq defined
6127e1b2808SHiten Pandyarelative to section number
6137e1b2808SHiten Pandya.Sy SHN_UNDEF
6147e1b2808SHiten Pandyais an undefined symbol.
615ea14e5c3SBrian Feldman.It Dv SHN_LORESERVE
616ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of reserved indices.
617ea14e5c3SBrian Feldman.It Dv SHN_LOPROC
618ea14e5c3SBrian FeldmanThis value up to and including
619ea14e5c3SBrian Feldman.Sy SHN_HIPROC
620ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
621ea14e5c3SBrian Feldman.It Dv SHN_HIPROC
622ea14e5c3SBrian FeldmanThis value down to and including
623ea14e5c3SBrian Feldman.Sy SHN_LOPROC
624ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
625ea14e5c3SBrian Feldman.It Dv SHN_ABS
6264e86fcacSSheldon HearnThis value specifies absolute values for the corresponding reference.
6274e86fcacSSheldon HearnFor
628ea14e5c3SBrian Feldmanexample, symbols defined relative to section number
629ea14e5c3SBrian Feldman.Sy SHN_ABS
630ea14e5c3SBrian Feldmanhave absolute values and are not affected by relocation.
631ea14e5c3SBrian Feldman.It Dv SHN_COMMON
632ea14e5c3SBrian FeldmanSymbols defined relative to this section are common symbols, such as FORTRAN
633ea14e5c3SBrian FeldmanCOMMON or unallocated C external variables.
634ea14e5c3SBrian Feldman.It Dv SHN_HIRESERVE
6354e86fcacSSheldon HearnThis value specifies the upper bound of the range of reserved indices.
6364e86fcacSSheldon HearnThe
637ea14e5c3SBrian Feldmansystem reserves indices between
638ea14e5c3SBrian Feldman.Sy SHN_LORESERVE
639ea14e5c3SBrian Feldmanand
640ea14e5c3SBrian Feldman.Sy SHN_HIRESERVE ,
6414e86fcacSSheldon Hearninclusive.
6424e86fcacSSheldon HearnThe section header table does not contain entries for the
643ea14e5c3SBrian Feldmanreserved indices.
644ea14e5c3SBrian Feldman.El
645ea14e5c3SBrian Feldman.Pp
646ea14e5c3SBrian FeldmanThe section header has the following structure:
647ea14e5c3SBrian Feldman.Bd -literal -offset indent
648ea14e5c3SBrian Feldmantypedef struct {
649ea14e5c3SBrian Feldman	Elf32_Word      sh_name;
650ea14e5c3SBrian Feldman	Elf32_Word      sh_type;
651ea14e5c3SBrian Feldman	Elf32_Word      sh_flags;
652ea14e5c3SBrian Feldman	Elf32_Addr      sh_addr;
653ea14e5c3SBrian Feldman	Elf32_Off       sh_offset;
654757686b1SMarcel Moolenaar	Elf32_Word      sh_size;
655ea14e5c3SBrian Feldman	Elf32_Word      sh_link;
656ea14e5c3SBrian Feldman	Elf32_Word      sh_info;
657757686b1SMarcel Moolenaar	Elf32_Word      sh_addralign;
658757686b1SMarcel Moolenaar	Elf32_Word      sh_entsize;
659ea14e5c3SBrian Feldman} Elf32_Shdr;
660ea14e5c3SBrian Feldman.Ed
661ea14e5c3SBrian Feldman.Pp
662ea14e5c3SBrian Feldman.Bd -literal -offset indent
663ea14e5c3SBrian Feldmantypedef struct {
664757686b1SMarcel Moolenaar	Elf64_Word      sh_name;
665757686b1SMarcel Moolenaar	Elf64_Word      sh_type;
666757686b1SMarcel Moolenaar	Elf64_Xword     sh_flags;
667ea14e5c3SBrian Feldman	Elf64_Addr      sh_addr;
668ea14e5c3SBrian Feldman	Elf64_Off       sh_offset;
669757686b1SMarcel Moolenaar	Elf64_Xword     sh_size;
670757686b1SMarcel Moolenaar	Elf64_Word      sh_link;
671757686b1SMarcel Moolenaar	Elf64_Word      sh_info;
672757686b1SMarcel Moolenaar	Elf64_Xword     sh_addralign;
673757686b1SMarcel Moolenaar	Elf64_Xword     sh_entsize;
674ea14e5c3SBrian Feldman} Elf64_Shdr;
675ea14e5c3SBrian Feldman.Ed
676ea14e5c3SBrian Feldman.Pp
677ea14e5c3SBrian Feldman.Bl -tag -width "sh_addralign" -compact
678ea14e5c3SBrian Feldman.It Dv sh_name
6794e86fcacSSheldon HearnThis member specifies the name of the section.
6804e86fcacSSheldon HearnIts value is an index
681ea14e5c3SBrian Feldmaninto the section header string table section, giving the location of
682ea14e5c3SBrian Feldmana null-terminated string.
683ea14e5c3SBrian Feldman.It Dv sh_type
6840757c960SBrian FeldmanThis member categorizes the section's contents and semantics.
685ea14e5c3SBrian Feldman.Pp
686ea14e5c3SBrian Feldman.Bl -tag -width "SHT_PROGBITS" -compact
687ea14e5c3SBrian Feldman.It Dv SHT_NULL
6884e86fcacSSheldon HearnThis value marks the section header as inactive.
6894e86fcacSSheldon HearnIt does not
6904e86fcacSSheldon Hearnhave an associated section.
6914e86fcacSSheldon HearnOther members of the section header
692ea14e5c3SBrian Feldmanhave undefined values.
693ea14e5c3SBrian Feldman.It Dv SHT_PROGBITS
694ea14e5c3SBrian FeldmanThe section holds information defined by the program, whose
695ea14e5c3SBrian Feldmanformat and meaning are determined solely by the program.
696ea14e5c3SBrian Feldman.It Dv SHT_SYMTAB
6974e86fcacSSheldon HearnThis section holds a symbol table.
6984e86fcacSSheldon HearnTypically,
699ea14e5c3SBrian Feldman.Sy SHT_SYMTAB
700ea14e5c3SBrian Feldmanprovides symbols for link editing, though it may also be used
7014e86fcacSSheldon Hearnfor dynamic linking.
7024e86fcacSSheldon HearnAs a complete symbol table, it may contain
7034e86fcacSSheldon Hearnmany symbols unnecessary for dynamic linking.
7044e86fcacSSheldon HearnAn object file can
705ea14e5c3SBrian Feldmanalso contain a
706ea14e5c3SBrian Feldman.Sy SHN_DYNSYM
707ea14e5c3SBrian Feldmansection.
708ea14e5c3SBrian Feldman.It Dv SHT_STRTAB
7094e86fcacSSheldon HearnThis section holds a string table.
7104e86fcacSSheldon HearnAn object file may have multiple
711ea14e5c3SBrian Feldmanstring table sections.
712ea14e5c3SBrian Feldman.It Dv SHT_RELA
713ea14e5c3SBrian FeldmanThis section holds relocation entries with explicit addends, such
714ea14e5c3SBrian Feldmanas type
715ea14e5c3SBrian Feldman.Sy Elf32_Rela
7164e86fcacSSheldon Hearnfor the 32-bit class of object files.
7174e86fcacSSheldon HearnAn object may have multiple
718ea14e5c3SBrian Feldmanrelocation sections.
719ea14e5c3SBrian Feldman.It Dv SHT_HASH
7204e86fcacSSheldon HearnThis section holds a symbol hash table.
7214e86fcacSSheldon HearnAll object participating in
7224e86fcacSSheldon Hearndynamic linking must contain a symbol hash table.
7234e86fcacSSheldon HearnAn object file may
724ea14e5c3SBrian Feldmanhave only one hash table.
725ea14e5c3SBrian Feldman.It Dv SHT_DYNAMIC
7264e86fcacSSheldon HearnThis section holds information for dynamic linking.
7274e86fcacSSheldon HearnAn object file may
728ea14e5c3SBrian Feldmanhave only one dynamic section.
729ea14e5c3SBrian Feldman.It Dv SHT_NOTE
730ea14e5c3SBrian FeldmanThis section holds information that marks the file in some way.
731ea14e5c3SBrian Feldman.It Dv SHT_NOBITS
732ea14e5c3SBrian FeldmanA section of this type occupies no space in the file but otherwise
733ea14e5c3SBrian Feldmanresembles
734ea14e5c3SBrian Feldman.Sy SHN_PROGBITS .
735ea14e5c3SBrian FeldmanAlthough this section contains no bytes, the
736ea14e5c3SBrian Feldman.Sy sh_offset
737ea14e5c3SBrian Feldmanmember contains the conceptual file offset.
738ea14e5c3SBrian Feldman.It Dv SHT_REL
739ea14e5c3SBrian FeldmanThis section holds relocation offsets without explicit addends, such
740ea14e5c3SBrian Feldmanas type
741ea14e5c3SBrian Feldman.Sy Elf32_Rel
7424e86fcacSSheldon Hearnfor the 32-bit class of object files.
7434e86fcacSSheldon HearnAn object file may have multiple
744ea14e5c3SBrian Feldmanrelocation sections.
745ea14e5c3SBrian Feldman.It Dv SHT_SHLIB
746ea14e5c3SBrian FeldmanThis section is reserved but has unspecified semantics.
747ea14e5c3SBrian Feldman.It Dv SHT_DYNSYM
7484e86fcacSSheldon HearnThis section holds a minimal set of dynamic linking symbols.
7494e86fcacSSheldon HearnAn
750ea14e5c3SBrian Feldmanobject file can also contain a
751ea14e5c3SBrian Feldman.Sy SHN_SYMTAB
752ea14e5c3SBrian Feldmansection.
753ea14e5c3SBrian Feldman.It Dv SHT_LOPROC
754ea14e5c3SBrian FeldmanThis value up to and including
755ea14e5c3SBrian Feldman.Sy SHT_HIPROC
756ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
757ea14e5c3SBrian Feldman.It Dv SHT_HIPROC
758ea14e5c3SBrian FeldmanThis value down to and including
759ea14e5c3SBrian Feldman.Sy SHT_LOPROC
760ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
761ea14e5c3SBrian Feldman.It Dv SHT_LOUSER
762ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of indices reserved for
763ea14e5c3SBrian Feldmanapplication programs.
764ea14e5c3SBrian Feldman.It Dv SHT_HIUSER
765ea14e5c3SBrian FeldmanThis value specifies the upper bound of the range of indices reserved for
7664e86fcacSSheldon Hearnapplication programs.
7674e86fcacSSheldon HearnSection types between
768ea14e5c3SBrian Feldman.Sy SHT_LOUSER
769ea14e5c3SBrian Feldmanand
770ea14e5c3SBrian Feldman.Sy SHT_HIUSER
771ea14e5c3SBrian Feldmanmay be used by the application, without conflicting with current or future
772ea14e5c3SBrian Feldmansystem-defined section types.
773ea14e5c3SBrian Feldman.El
774ea14e5c3SBrian Feldman.Pp
775ea14e5c3SBrian Feldman.It Dv sh_flags
776ea14e5c3SBrian FeldmanSections support one-bit flags that describe miscellaneous attributes.
777ea14e5c3SBrian FeldmanIf a flag bit is set in
778ea14e5c3SBrian Feldman.Sy sh_flags ,
779ea14e5c3SBrian Feldmanthe attribute is
780ea14e5c3SBrian Feldman.Dq on
7814e86fcacSSheldon Hearnfor the section.
7824e86fcacSSheldon HearnOtherwise, the attribute is
783ea14e5c3SBrian Feldman.Dq off
7844e86fcacSSheldon Hearnor does not apply.
7854e86fcacSSheldon HearnUndefined attributes are set to zero.
786ea14e5c3SBrian Feldman.Pp
787ea14e5c3SBrian Feldman.Bl -tag -width "SHF_EXECINSTR" -compact
788ea14e5c3SBrian Feldman.It Dv SHF_WRITE
789ea14e5c3SBrian FeldmanThis section contains data that should be writable during process
790ea14e5c3SBrian Feldmanexecution.
791ea14e5c3SBrian Feldman.It Dv SHF_ALLOC
7924e86fcacSSheldon HearnThe section occupies memory during process execution.
7934e86fcacSSheldon HearnSome control
7944e86fcacSSheldon Hearnsections do not reside in the memory image of an object file.
7954e86fcacSSheldon HearnThis
796ea14e5c3SBrian Feldmanattribute is off for those sections.
797ea14e5c3SBrian Feldman.It Dv SHF_EXECINSTR
798ea14e5c3SBrian FeldmanThe section contains executable machine instructions.
799ea14e5c3SBrian Feldman.It Dv SHF_MASKPROC
800ea14e5c3SBrian FeldmanAll bits included in this mask are reserved for processor-specific
801ea14e5c3SBrian Feldmansemantics.
802ea14e5c3SBrian Feldman.El
803ea14e5c3SBrian Feldman.Pp
804ea14e5c3SBrian Feldman.It Dv sh_addr
805ea14e5c3SBrian FeldmanIf the section will appear in the memory image of a process, this member
806ea14e5c3SBrian Feldmanholds the address at which the section's first byte should reside.
807ea14e5c3SBrian FeldmanOtherwise, the member contains zero.
808ea14e5c3SBrian Feldman.It Dv sh_offset
809ea14e5c3SBrian FeldmanThis member's value holds the byte offset from the beginning of the file
8104e86fcacSSheldon Hearnto the first byte in the section.
8114e86fcacSSheldon HearnOne section type,
812ea14e5c3SBrian Feldman.Sy SHT_NOBITS ,
813ea14e5c3SBrian Feldmanoccupies no space in the file, and its
814ea14e5c3SBrian Feldman.Sy sh_offset
815ea14e5c3SBrian Feldmanmember locates the conceptual placement in the file.
816ea14e5c3SBrian Feldman.It Dv sh_size
8174e86fcacSSheldon HearnThis member holds the section's size in bytes.
8184e86fcacSSheldon HearnUnless the section type
819ea14e5c3SBrian Feldmanis
820ea14e5c3SBrian Feldman.Sy SHT_NOBITS ,
821ea14e5c3SBrian Feldmanthe section occupies
822ea14e5c3SBrian Feldman.Sy sh_size
8234e86fcacSSheldon Hearnbytes in the file.
8244e86fcacSSheldon HearnA section of type
825ea14e5c3SBrian Feldman.Sy SHT_NOBITS
826ea14e5c3SBrian Feldmanmay have a non-zero size, but it occupies no space in the file.
827ea14e5c3SBrian Feldman.It Dv sh_link
828ea14e5c3SBrian FeldmanThis member holds a section header table index link, whose interpretation
829ea14e5c3SBrian Feldmandepends on the section type.
830ea14e5c3SBrian Feldman.It Dv sh_info
831ea14e5c3SBrian FeldmanThis member holds extra information, whose interpretation depends on the
832ea14e5c3SBrian Feldmansection type.
833ea14e5c3SBrian Feldman.It Dv sh_addralign
8344e86fcacSSheldon HearnSome sections have address alignment constraints.
8354e86fcacSSheldon HearnIf a section holds a
836ea14e5c3SBrian Feldmandoubleword, the system must ensure doubleword alignment for the entire
8374e86fcacSSheldon Hearnsection.
8384e86fcacSSheldon HearnThat is, the value of
839ea14e5c3SBrian Feldman.Sy sh_addr
840ea14e5c3SBrian Feldmanmust be congruent to zero, modulo the value of
841ea14e5c3SBrian Feldman.Sy sh_addralign .
8424e86fcacSSheldon HearnOnly zero and positive integral powers of two are allowed.
8434e86fcacSSheldon HearnValues of zero
844ea14e5c3SBrian Feldmanor one mean the section has no alignment constraints.
845ea14e5c3SBrian Feldman.It Dv sh_entsize
846ea14e5c3SBrian FeldmanSome sections hold a table of fixed-sized entries, such as a symbol table.
847ea14e5c3SBrian FeldmanFor such a section, this member gives the size in bytes for each entry.
848ea14e5c3SBrian FeldmanThis member contains zero if the section does not hold a table of
849ea14e5c3SBrian Feldmanfixed-size entries.
850ea14e5c3SBrian Feldman.El
851ea14e5c3SBrian Feldman.Pp
852ea14e5c3SBrian FeldmanVarious sections hold program and control information:
853ea14e5c3SBrian Feldman.Bl -tag -width ".shstrtab" -compact
854ea14e5c3SBrian Feldman.It .bss
8554f068961SRuslan Ermilov(Block Started by Symbol)
8560757c960SBrian FeldmanThis section holds uninitialized data that contributes to the program's
8574e86fcacSSheldon Hearnmemory image.
8584e86fcacSSheldon HearnBy definition, the system initializes the data with zeros
8594e86fcacSSheldon Hearnwhen the program begins to run.
8604e86fcacSSheldon HearnThis section is of type
861ea14e5c3SBrian Feldman.Sy SHT_NOBITS .
862ea14e5c3SBrian FeldmanThe attributes types are
863ea14e5c3SBrian Feldman.Sy SHF_ALLOC
864ea14e5c3SBrian Feldmanand
865ea14e5c3SBrian Feldman.Sy SHF_WRITE .
866ea14e5c3SBrian Feldman.It .comment
8674e86fcacSSheldon HearnThis section holds version control information.
8684e86fcacSSheldon HearnThis section is of type
869ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
870ea14e5c3SBrian FeldmanNo attribute types are used.
871ea14e5c3SBrian Feldman.It .data
8720757c960SBrian FeldmanThis section holds initialized data that contribute to the program's
8734e86fcacSSheldon Hearnmemory image.
8744e86fcacSSheldon HearnThis section is of type
875ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
876ea14e5c3SBrian FeldmanThe attribute types are
877ea14e5c3SBrian Feldman.Sy SHF_ALLOC
878ea14e5c3SBrian Feldmanand
879ea14e5c3SBrian Feldman.Sy SHF_WRITE .
880ea14e5c3SBrian Feldman.It .data1
8810757c960SBrian FeldmanThis section holds initialized data that contribute to the program's
8824e86fcacSSheldon Hearnmemory image.
8834e86fcacSSheldon HearnThis section is of type
884ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
885ea14e5c3SBrian FeldmanThe attribute types are
886ea14e5c3SBrian Feldman.Sy SHF_ALLOC
887ea14e5c3SBrian Feldmanand
888ea14e5c3SBrian Feldman.Sy SHF_WRITE .
889ea14e5c3SBrian Feldman.It .debug
8904e86fcacSSheldon HearnThis section holds information for symbolic debugging.
8914e86fcacSSheldon HearnThe contents
8924e86fcacSSheldon Hearnare unspecified.
8934e86fcacSSheldon HearnThis section is of type
894ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
895ea14e5c3SBrian FeldmanNo attribute types are used.
896ea14e5c3SBrian Feldman.It .dynamic
8974e86fcacSSheldon HearnThis section holds dynamic linking information.
8984e86fcacSSheldon HearnThe section's attributes
899ea14e5c3SBrian Feldmanwill include the
900ea14e5c3SBrian Feldman.Sy SHF_ALLOC
9014e86fcacSSheldon Hearnbit.
9024e86fcacSSheldon HearnWhether the
903ea14e5c3SBrian Feldman.Sy SHF_WRITE
9044e86fcacSSheldon Hearnbit is set is processor-specific.
9054e86fcacSSheldon HearnThis section is of type
906ea14e5c3SBrian Feldman.Sy SHT_DYNAMIC .
907ea14e5c3SBrian FeldmanSee the attributes above.
908ea14e5c3SBrian Feldman.It .dynstr
909ea14e5c3SBrian FeldmanThis section holds strings needed for dynamic linking, most commonly
910ea14e5c3SBrian Feldmanthe strings that represent the names associated with symbol table entries.
911ea14e5c3SBrian FeldmanThis section is of type
912ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
913ea14e5c3SBrian FeldmanThe attribute type used is
914ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
915ea14e5c3SBrian Feldman.It .dynsym
9164e86fcacSSheldon HearnThis section holds the dynamic linking symbol table.
9174e86fcacSSheldon HearnThis section is of type
918ea14e5c3SBrian Feldman.Sy SHT_DYNSYM .
919ea14e5c3SBrian FeldmanThe attribute used is
920ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
921ea14e5c3SBrian Feldman.It .fini
922ea14e5c3SBrian FeldmanThis section holds executable instructions that contribute to the process
9234e86fcacSSheldon Hearntermination code.
9244e86fcacSSheldon HearnWhen a program exits normally the system arranges to
9254e86fcacSSheldon Hearnexecute the code in this section.
9264e86fcacSSheldon HearnThis section is of type
927ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
928ea14e5c3SBrian FeldmanThe attributes used are
929ea14e5c3SBrian Feldman.Sy SHF_ALLOC
930ea14e5c3SBrian Feldmanand
931ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
932ea14e5c3SBrian Feldman.It .got
9334e86fcacSSheldon HearnThis section holds the global offset table.
9344e86fcacSSheldon HearnThis section is of type
935ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
936ea14e5c3SBrian FeldmanThe attributes are processor-specific.
937ea14e5c3SBrian Feldman.It .hash
9384e86fcacSSheldon HearnThis section holds a symbol hash table.
9394e86fcacSSheldon HearnThis section is of type
940ea14e5c3SBrian Feldman.Sy SHT_HASH .
941ea14e5c3SBrian FeldmanThe attribute used is
942ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
943ea14e5c3SBrian Feldman.It .init
944ea14e5c3SBrian FeldmanThis section holds executable instructions that contribute to the process
9454e86fcacSSheldon Hearninitialization code.
9464e86fcacSSheldon HearnWhen a program starts to run the system arranges to
947ea14e5c3SBrian Feldmanexecute the code in this section before calling the main program entry point.
948ea14e5c3SBrian FeldmanThis section is of type
949ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
950ea14e5c3SBrian FeldmanThe attributes used are
951ea14e5c3SBrian Feldman.Sy SHF_ALLOC
952ea14e5c3SBrian Feldmanand
953ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
954ea14e5c3SBrian Feldman.It .interp
9554e86fcacSSheldon HearnThis section holds the pathname of a program interpreter.
9564e86fcacSSheldon HearnIf the file has
957ea14e5c3SBrian Feldmana loadable segment that includes the section, the section's attributes will
958ea14e5c3SBrian Feldmaninclude the
959ea14e5c3SBrian Feldman.Sy SHF_ALLOC
9604e86fcacSSheldon Hearnbit.
9614e86fcacSSheldon HearnOtherwise, that bit will be off.
9624e86fcacSSheldon HearnThis section is of type
963ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
964ea14e5c3SBrian Feldman.It .line
965ea14e5c3SBrian FeldmanThis section holds line number information for symbolic debugging, which
966ea14e5c3SBrian Feldmandescribes the correspondence between the program source and the machine code.
9674e86fcacSSheldon HearnThe contents are unspecified.
9684e86fcacSSheldon HearnThis section is of type
969ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
970ea14e5c3SBrian FeldmanNo attribute types are used.
971ea14e5c3SBrian Feldman.It .note
972ea14e5c3SBrian FeldmanThis section holds information in the
973ea14e5c3SBrian Feldman.Dq Note Section
9744e86fcacSSheldon Hearnformat described below.
9754e86fcacSSheldon HearnThis section is of type
976ea14e5c3SBrian Feldman.Sy SHT_NOTE .
977ea14e5c3SBrian FeldmanNo attribute types are used.
978ea14e5c3SBrian Feldman.It .plt
9794e86fcacSSheldon HearnThis section holds the procedure linkage table.
9804e86fcacSSheldon HearnThis section is of type
981ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
982ea14e5c3SBrian FeldmanThe attributes are processor-specific.
983ea14e5c3SBrian Feldman.It .relNAME
9844e86fcacSSheldon HearnThis section holds relocation information as described below.
9854e86fcacSSheldon HearnIf the file
986ea14e5c3SBrian Feldmanhas a loadable segment that includes relocation, the section's attributes
987ea14e5c3SBrian Feldmanwill include the
988ea14e5c3SBrian Feldman.Sy SHF_ALLOC
9894e86fcacSSheldon Hearnbit.
9904e86fcacSSheldon HearnOtherwise the bit will be off.
9914e86fcacSSheldon HearnBy convention,
992ea14e5c3SBrian Feldman.Dq NAME
9934e86fcacSSheldon Hearnis supplied by the section to which the relocations apply.
9944e86fcacSSheldon HearnThus a relocation
995ea14e5c3SBrian Feldmansection for
996ea14e5c3SBrian Feldman.Sy .text
997ea14e5c3SBrian Feldmannormally would have the name
998ea14e5c3SBrian Feldman.Sy .rel.text .
999ea14e5c3SBrian FeldmanThis section is of type
1000ea14e5c3SBrian Feldman.Sy SHT_REL .
1001ea14e5c3SBrian Feldman.It .relaNAME
10024e86fcacSSheldon HearnThis section holds relocation information as described below.
10034e86fcacSSheldon HearnIf the file
1004ea14e5c3SBrian Feldmanhas a loadable segment that includes relocation, the section's attributes
1005ea14e5c3SBrian Feldmanwill include the
1006ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10074e86fcacSSheldon Hearnbit.
10084e86fcacSSheldon HearnOtherwise the bit will be off.
10094e86fcacSSheldon HearnBy convention,
1010ea14e5c3SBrian Feldman.Dq NAME
10114e86fcacSSheldon Hearnis supplied by the section to which the relocations apply.
10124e86fcacSSheldon HearnThus a relocation
1013ea14e5c3SBrian Feldmansection for
1014ea14e5c3SBrian Feldman.Sy .text
1015ea14e5c3SBrian Feldmannormally would have the name
1016ea14e5c3SBrian Feldman.Sy .rela.text .
1017ea14e5c3SBrian FeldmanThis section is of type
1018ea14e5c3SBrian Feldman.Sy SHT_RELA .
1019ea14e5c3SBrian Feldman.It .rodata
1020f3a2511aSChris CostelloThis section holds read-only data that typically contributes to a
10214e86fcacSSheldon Hearnnon-writable segment in the process image.
10224e86fcacSSheldon HearnThis section is of type
1023ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1024ea14e5c3SBrian FeldmanThe attribute used is
1025ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
1026ea14e5c3SBrian Feldman.It .rodata1
1027ea14e5c3SBrian FeldmanThis section hold read-only data that typically contributes to a
10284e86fcacSSheldon Hearnnon-writable segment in the process image.
10294e86fcacSSheldon HearnThis section is of type
1030ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1031ea14e5c3SBrian FeldmanThe attribute used is
1032ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
1033ea14e5c3SBrian Feldman.It .shstrtab
10344e86fcacSSheldon HearnThis section holds section names.
10354e86fcacSSheldon HearnThis section is of type
1036ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
1037ea14e5c3SBrian FeldmanNo attribute types are used.
1038ea14e5c3SBrian Feldman.It .strtab
1039ea14e5c3SBrian FeldmanThis section holds strings, most commonly the strings that represent the
10404e86fcacSSheldon Hearnnames associated with symbol table entries.
10414e86fcacSSheldon HearnIf the file has a loadable
1042ea14e5c3SBrian Feldmansegment that includes the symbol string table, the section's attributes
1043ea14e5c3SBrian Feldmanwill include the
1044ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10454e86fcacSSheldon Hearnbit.
10464e86fcacSSheldon HearnOtherwise the bit will be off.
10474e86fcacSSheldon HearnThis section is of type
1048ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
1049ea14e5c3SBrian Feldman.It .symtab
10504e86fcacSSheldon HearnThis section holds a symbol table.
10514e86fcacSSheldon HearnIf the file has a loadable segment
1052ea14e5c3SBrian Feldmanthat includes the symbol table, the section's attributes will include
1053ea14e5c3SBrian Feldmanthe
1054ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10554e86fcacSSheldon Hearnbit.
10564e86fcacSSheldon HearnOtherwise the bit will be off.
10574e86fcacSSheldon HearnThis section is of type
1058ea14e5c3SBrian Feldman.Sy SHT_SYMTAB .
1059ea14e5c3SBrian Feldman.It .text
1060ea14e5c3SBrian FeldmanThis section holds the
1061ea14e5c3SBrian Feldman.Dq text ,
10624e86fcacSSheldon Hearnor executable instructions, of a program.
10634e86fcacSSheldon HearnThis section is of type
1064ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1065ea14e5c3SBrian FeldmanThe attributes used are
1066ea14e5c3SBrian Feldman.Sy SHF_ALLOC
1067ea14e5c3SBrian Feldmanand
1068ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
1069dc1cbf89STom Rhodes.It .jcr
1070dc1cbf89STom RhodesThis section holds information about Java classes that must
1071dc1cbf89STom Rhodesbe registered.
1072dc1cbf89STom Rhodes.It .eh_frame
1073dc1cbf89STom RhodesThis section holds information used for C++ exception-handling.
1074ea14e5c3SBrian Feldman.El
1075ea14e5c3SBrian Feldman.Pp
1076ea14e5c3SBrian FeldmanString table sections hold null-terminated character sequences, commonly
10774e86fcacSSheldon Hearncalled strings.
10784e86fcacSSheldon HearnThe object file uses these strings to represent symbol
10794e86fcacSSheldon Hearnand section names.
10804e86fcacSSheldon HearnOne references a string as an index into the string
10814e86fcacSSheldon Hearntable section.
10824e86fcacSSheldon HearnThe first byte, which is index zero, is defined to hold
10834e86fcacSSheldon Hearna null character.
10844e86fcacSSheldon HearnSimilarly, a string table's last byte is defined to
1085ea14e5c3SBrian Feldmanhold a null character, ensuring null termination for all strings.
1086ea14e5c3SBrian Feldman.Pp
1087ea14e5c3SBrian FeldmanAn object file's symbol table holds information needed to locate and
10884e86fcacSSheldon Hearnrelocate a program's symbolic definitions and references.
10894e86fcacSSheldon HearnA symbol table
1090ea14e5c3SBrian Feldmanindex is a subscript into this array.
1091ea14e5c3SBrian Feldman.Pp
1092ea14e5c3SBrian Feldman.Bd -literal -offset indent
1093ea14e5c3SBrian Feldmantypedef struct {
1094ea14e5c3SBrian Feldman	Elf32_Word      st_name;
1095ea14e5c3SBrian Feldman	Elf32_Addr      st_value;
1096757686b1SMarcel Moolenaar	Elf32_Word      st_size;
1097ea14e5c3SBrian Feldman	unsigned char   st_info;
1098ea14e5c3SBrian Feldman	unsigned char   st_other;
1099ea14e5c3SBrian Feldman	Elf32_Half      st_shndx;
1100ea14e5c3SBrian Feldman} Elf32_Sym;
1101ea14e5c3SBrian Feldman.Ed
1102ea14e5c3SBrian Feldman.Pp
1103ea14e5c3SBrian Feldman.Bd -literal -offset indent
1104ea14e5c3SBrian Feldmantypedef struct {
1105757686b1SMarcel Moolenaar	Elf64_Word      st_name;
1106ea14e5c3SBrian Feldman	unsigned char   st_info;
1107ea14e5c3SBrian Feldman	unsigned char   st_other;
1108757686b1SMarcel Moolenaar	Elf64_Half      st_shndx;
1109ea14e5c3SBrian Feldman	Elf64_Addr      st_value;
1110757686b1SMarcel Moolenaar	Elf64_Xword     st_size;
1111ea14e5c3SBrian Feldman} Elf64_Sym;
1112ea14e5c3SBrian Feldman.Ed
1113ea14e5c3SBrian Feldman.Pp
1114ea14e5c3SBrian Feldman.Bl -tag -width "st_value" -compact
1115ea14e5c3SBrian Feldman.It Dv st_name
1116ea14e5c3SBrian FeldmanThis member holds an index into the object file's symbol string table,
11174e86fcacSSheldon Hearnwhich holds character representations of the symbol names.
11184e86fcacSSheldon HearnIf the value
1119ea14e5c3SBrian Feldmanis non-zero, it represents a string table index that gives the symbol
11204e86fcacSSheldon Hearnname.
11214e86fcacSSheldon HearnOtherwise, the symbol table has no name.
1122ea14e5c3SBrian Feldman.It Dv st_value
1123ea14e5c3SBrian FeldmanThis member gives the value of the associated symbol.
1124ea14e5c3SBrian Feldman.It Dv st_size
11254e86fcacSSheldon HearnMany symbols have associated sizes.
11264e86fcacSSheldon HearnThis member holds zero if the symbol
1127ea14e5c3SBrian Feldmanhas no size or an unknown size.
1128ea14e5c3SBrian Feldman.It Dv st_info
1129ea14e5c3SBrian FeldmanThis member specifies the symbol's type and binding attributes:
1130ea14e5c3SBrian Feldman.Pp
1131ea14e5c3SBrian Feldman.Bl -tag -width "STT_SECTION" -compact
1132ea14e5c3SBrian Feldman.It Dv STT_NOTYPE
1133ea14e5c3SBrian FeldmanThe symbol's type is not defined.
1134ea14e5c3SBrian Feldman.It Dv STT_OBJECT
1135ea14e5c3SBrian FeldmanThe symbol is associated with a data object.
1136ea14e5c3SBrian Feldman.It Dv STT_FUNC
1137ea14e5c3SBrian FeldmanThe symbol is associated with a function or other executable code.
1138ea14e5c3SBrian Feldman.It Dv STT_SECTION
11394e86fcacSSheldon HearnThe symbol is associated with a section.
11404e86fcacSSheldon HearnSymbol table entries of
1141ea14e5c3SBrian Feldmanthis type exist primarily for relocation and normally have
1142ea14e5c3SBrian Feldman.Sy STB_LOCAL
1143ea14e5c3SBrian Feldmanbindings.
1144ea14e5c3SBrian Feldman.It Dv STT_FILE
1145ea14e5c3SBrian FeldmanBy convention the symbol's name gives the name of the source file
11464e86fcacSSheldon Hearnassociated with the object file.
11474e86fcacSSheldon HearnA file symbol has
1148ea14e5c3SBrian Feldman.Sy STB_LOCAL
1149ea14e5c3SBrian Feldmanbindings, its section index is
1150ea14e5c3SBrian Feldman.Sy SHN_ABS ,
1151ea14e5c3SBrian Feldmanand it precedes the other
1152ea14e5c3SBrian Feldman.Sy STB_LOCAL
1153ea14e5c3SBrian Feldmansymbols of the file, if it is present.
1154ea14e5c3SBrian Feldman.It Dv STT_LOPROC
1155ea14e5c3SBrian FeldmanThis value up to and including
1156ea14e5c3SBrian Feldman.Sy STT_HIPROC
1157ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1158ea14e5c3SBrian Feldman.It Dv STT_HIPROC
1159ea14e5c3SBrian FeldmanThis value down to and including
1160ea14e5c3SBrian Feldman.Sy STT_LOPROC
1161ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1162ea14e5c3SBrian Feldman.El
1163ea14e5c3SBrian Feldman.Pp
1164ea14e5c3SBrian Feldman.Bl -tag -width "STB_GLOBAL" -compact
1165ea14e5c3SBrian Feldman.It Dv STB_LOCAL
1166ea14e5c3SBrian FeldmanLocal symbols are not visible outside the object file containing their
11674e86fcacSSheldon Hearndefinition.
11684e86fcacSSheldon HearnLocal symbols of the same name may exist in multiple file
1169ea14e5c3SBrian Feldmanwithout interfering with each other.
1170ea14e5c3SBrian Feldman.It Dv STB_GLOBAL
11714e86fcacSSheldon HearnGlobal symbols are visible to all object files being combined.
11724e86fcacSSheldon HearnOne file's
1173ea14e5c3SBrian Feldmandefinition of a global symbol will satisfy another file's undefined
1174ea14e5c3SBrian Feldmanreference to the same symbol.
1175ea14e5c3SBrian Feldman.It Dv STB_WEAK
1176ea14e5c3SBrian FeldmanWeak symbols resemble global symbols, but their definitions have lower
1177ea14e5c3SBrian Feldmanprecedence.
1178ea14e5c3SBrian Feldman.It Dv STB_LOPROC
1179ea14e5c3SBrian FeldmanThis value up to and including
1180ea14e5c3SBrian Feldman.Sy STB_HIPROC
1181ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1182ea14e5c3SBrian Feldman.It Dv STB_HIPROC
1183ea14e5c3SBrian FeldmanThis value down to and including
1184ea14e5c3SBrian Feldman.Sy STB_LOPROC
1185ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1186ea14e5c3SBrian Feldman.Pp
1187ea14e5c3SBrian FeldmanThere are macros for packing and unpacking the binding and type fields:
1188d0353b83SRuslan Ermilov.Pp
1189ea14e5c3SBrian Feldman.Bl -tag -width "ELF32_ST_INFO(bind, type)" -compact
1190d0353b83SRuslan Ermilov.It Xo
1191d0353b83SRuslan Ermilov.Fn ELF32_ST_BIND info
1192d0353b83SRuslan Ermilov.Xc
1193ea14e5c3SBrian Feldmanor
1194d0353b83SRuslan Ermilov.Fn ELF64_ST_BIND info
1195f3a2511aSChris Costelloextract a binding from an st_info value.
1196d0353b83SRuslan Ermilov.It Xo
1197d0353b83SRuslan Ermilov.Fn ELF64_ST_TYPE info
1198d0353b83SRuslan Ermilov.Xc
1199ea14e5c3SBrian Feldmanor
1200d0353b83SRuslan Ermilov.Fn ELF32_ST_TYPE info
1201f3a2511aSChris Costelloextract a type from an st_info value.
1202d0353b83SRuslan Ermilov.It Xo
1203d0353b83SRuslan Ermilov.Fn ELF32_ST_INFO bind type
1204d0353b83SRuslan Ermilov.Xc
1205ea14e5c3SBrian Feldmanor
1206d0353b83SRuslan Ermilov.Fn ELF64_ST_INFO bind type
1207f3a2511aSChris Costelloconvert a binding and a type into an st_info value.
1208ea14e5c3SBrian Feldman.El
1209ea14e5c3SBrian Feldman.El
1210ea14e5c3SBrian Feldman.Pp
1211ea14e5c3SBrian Feldman.It Dv st_other
1212ea14e5c3SBrian FeldmanThis member currently holds zero and has no defined meaning.
1213ea14e5c3SBrian Feldman.It Dv st_shndx
1214ea14e5c3SBrian FeldmanEvery symbol table entry is
1215ea14e5c3SBrian Feldman.Dq defined
1216210ad6ebSJoseph Koshyin relation to some section.
12174e86fcacSSheldon HearnThis member holds the relevant section
1218ea14e5c3SBrian Feldmanheader table index.
1219ea14e5c3SBrian Feldman.El
1220ea14e5c3SBrian Feldman.Pp
1221ea14e5c3SBrian FeldmanRelocation is the process of connecting symbolic references with
12224e86fcacSSheldon Hearnsymbolic definitions.
12234e86fcacSSheldon HearnRelocatable files must have information that
1224ea14e5c3SBrian Feldmandescribes how to modify their section contents, thus allowing executable
1225ea14e5c3SBrian Feldmanand shared object files to hold the right information for a process'
12264e86fcacSSheldon Hearnprogram image.
12274e86fcacSSheldon HearnRelocation entries are these data.
1228ea14e5c3SBrian Feldman.Pp
1229ea14e5c3SBrian FeldmanRelocation structures that do not need an addend:
1230ea14e5c3SBrian Feldman.Pp
1231ea14e5c3SBrian Feldman.Bd -literal -offset indent
1232ea14e5c3SBrian Feldmantypedef struct {
1233ea14e5c3SBrian Feldman	Elf32_Addr      r_offset;
1234ea14e5c3SBrian Feldman	Elf32_Word      r_info;
1235ea14e5c3SBrian Feldman} Elf32_Rel;
1236ea14e5c3SBrian Feldman.Ed
1237ea14e5c3SBrian Feldman.Bd -literal -offset indent
1238ea14e5c3SBrian Feldmantypedef struct {
1239ea14e5c3SBrian Feldman	Elf64_Addr      r_offset;
1240757686b1SMarcel Moolenaar	Elf64_Xword     r_info;
1241ea14e5c3SBrian Feldman} Elf64_Rel;
1242ea14e5c3SBrian Feldman.Ed
1243ea14e5c3SBrian Feldman.Pp
1244ea14e5c3SBrian FeldmanRelocation structures that need an addend:
1245ea14e5c3SBrian Feldman.Pp
1246ea14e5c3SBrian Feldman.Bd -literal -offset indent
1247ea14e5c3SBrian Feldmantypedef struct {
1248ea14e5c3SBrian Feldman	Elf32_Addr      r_offset;
1249ea14e5c3SBrian Feldman	Elf32_Word      r_info;
1250ea14e5c3SBrian Feldman	Elf32_Sword     r_addend;
1251ea14e5c3SBrian Feldman} Elf32_Rela;
1252ea14e5c3SBrian Feldman.Ed
1253ea14e5c3SBrian Feldman.Bd -literal -offset indent
1254ea14e5c3SBrian Feldmantypedef struct {
1255ea14e5c3SBrian Feldman	Elf64_Addr      r_offset;
1256757686b1SMarcel Moolenaar	Elf64_Xword     r_info;
1257757686b1SMarcel Moolenaar	Elf64_Sxword    r_addend;
1258ea14e5c3SBrian Feldman} Elf64_Rela;
1259ea14e5c3SBrian Feldman.Ed
1260ea14e5c3SBrian Feldman.Pp
1261ea14e5c3SBrian Feldman.Bl -tag -width "r_offset" -compact
1262ea14e5c3SBrian Feldman.It Dv r_offset
1263ea14e5c3SBrian FeldmanThis member gives the location at which to apply the relocation action.
1264ea14e5c3SBrian FeldmanFor a relocatable file, the value is the byte offset from the beginning
12654e86fcacSSheldon Hearnof the section to the storage unit affected by the relocation.
12664e86fcacSSheldon HearnFor an
1267ea14e5c3SBrian Feldmanexecutable file or shared object, the value is the virtual address of
1268ea14e5c3SBrian Feldmanthe storage unit affected by the relocation.
1269ea14e5c3SBrian Feldman.It Dv r_info
1270ea14e5c3SBrian FeldmanThis member gives both the symbol table index with respect to which the
12714e86fcacSSheldon Hearnrelocation must be made and the type of relocation to apply.
12724e86fcacSSheldon HearnRelocation
12734e86fcacSSheldon Hearntypes are processor-specific.
12744e86fcacSSheldon HearnWhen the text refers to a relocation
1275ea14e5c3SBrian Feldmanentry's relocation type or symbol table index, it means the result of
1276ea14e5c3SBrian Feldmanapplying
1277ea14e5c3SBrian Feldman.Sy ELF_[32|64]_R_TYPE
1278ea14e5c3SBrian Feldmanor
1279ea14e5c3SBrian Feldman.Sy ELF[32|64]_R_SYM ,
1280ea14e5c3SBrian Feldmanrespectively to the entry's
1281ea14e5c3SBrian Feldman.Sy r_info
1282ea14e5c3SBrian Feldmanmember.
1283ea14e5c3SBrian Feldman.It Dv r_addend
1284ea14e5c3SBrian FeldmanThis member specifies a constant addend used to compute the value to be
1285ea14e5c3SBrian Feldmanstored into the relocatable field.
1286ea14e5c3SBrian Feldman.El
1287ea14e5c3SBrian Feldman.Sh SEE ALSO
1288ea14e5c3SBrian Feldman.Xr as 1 ,
1289ea14e5c3SBrian Feldman.Xr gdb 1 ,
1290ea14e5c3SBrian Feldman.Xr ld 1 ,
1291ea14e5c3SBrian Feldman.Xr objdump 1 ,
1292ea14e5c3SBrian Feldman.Xr execve 2 ,
12936a4b42f0SJoseph Koshy.Xr ar 5 ,
1294ea14e5c3SBrian Feldman.Xr core 5
1295ea14e5c3SBrian Feldman.Rs
1296ea14e5c3SBrian Feldman.%A Hewlett Packard
1297ea14e5c3SBrian Feldman.%B Elf-64 Object File Format
1298ea14e5c3SBrian Feldman.Re
1299ea14e5c3SBrian Feldman.Rs
1300ea14e5c3SBrian Feldman.%A Santa Cruz Operation
1301ea14e5c3SBrian Feldman.%B System V Application Binary Interface
1302ea14e5c3SBrian Feldman.Re
1303ea14e5c3SBrian Feldman.Rs
1304ea14e5c3SBrian Feldman.%A Unix System Laboratories
1305ea14e5c3SBrian Feldman.%T Object Files
1306ea14e5c3SBrian Feldman.%B "Executable and Linking Format (ELF)"
1307ea14e5c3SBrian Feldman.Re
1308ea14e5c3SBrian Feldman.Sh HISTORY
1309ea14e5c3SBrian FeldmanThe ELF header files made their appearance in
1310ea14e5c3SBrian Feldman.Fx 2.2.6 .
1311ea14e5c3SBrian FeldmanELF in itself first appeared in
1312ea14e5c3SBrian Feldman.At V .
1313ea14e5c3SBrian FeldmanThe ELF format is an adopted standard.
1314ea14e5c3SBrian Feldman.Sh AUTHORS
1315ea14e5c3SBrian FeldmanThis manual page was written by
1316ea14e5c3SBrian Feldman.An Jeroen Ruigrok van der Werven
1317d905b0b6SMike Pritchard.Aq asmodai@FreeBSD.org
1318ed2879a5SRuslan Ermilovwith inspiration from BSDi's
1319ed2879a5SRuslan Ermilov.Bsx
1320ea14e5c3SBrian Feldman.Xr elf 5
1321ea14e5c3SBrian Feldmanmanpage.
1322