xref: /freebsd/share/man/man5/elf.5 (revision 32eef9aeb1f39a1623cea55da147c89abbd5b9a5)
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.\"
27ea14e5c3SBrian Feldman.Dd July 31, 1999
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
37ea14e5c3SBrian Feldman.Aq Pa 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
54023caa7bSJeroen Ruigrok van der Werven.Pa 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
66ea14e5c3SBrian Feldman.Pa sys/elf32.h
67ea14e5c3SBrian Feldmanand
68ea14e5c3SBrian Feldman.Pa sys/elf64.h
69ea14e5c3SBrian Feldmaninstead of
7051753e00SJeroen Ruigrok van der Werven.Pa 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
81ea14e5c3SBrian Feldman.Pa sys/elf_common.h
82ea14e5c3SBrian Feldmanas well as
83ea14e5c3SBrian Feldman.Pa 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
91ea14e5c3SBrian FeldmanElf32_Addr	Unsigned program address
92ea14e5c3SBrian FeldmanElf32_Half	Unsigned halfword field
93ea14e5c3SBrian FeldmanElf32_Off	Unsigned file offset
94ea14e5c3SBrian FeldmanElf32_Sword	Signed large integer
95ea14e5c3SBrian FeldmanElf32_Word	Field or unsigned large integer
96ea14e5c3SBrian FeldmanElf32_Size	Unsigned object size
97ea14e5c3SBrian Feldman.Ed
98ea14e5c3SBrian Feldman.Pp
99ea14e5c3SBrian FeldmanFor 64-bit architectures we have the following types:
100ea14e5c3SBrian Feldman.Bd -literal -offset indent
101ea14e5c3SBrian FeldmanElf64_Addr	Unsigned program address
102ea14e5c3SBrian FeldmanElf64_Half	Unsigned halfword field
103ea14e5c3SBrian FeldmanElf64_Off	Unsigned file offset
104ea14e5c3SBrian FeldmanElf64_Sword	Signed large integer
105ea14e5c3SBrian FeldmanElf64_Word	Field or unsigned large integer
106ea14e5c3SBrian FeldmanElf64_Size	Unsigned object size
107ea14e5c3SBrian FeldmanElf64_Quarter	Unsigned quarterword field
108ea14e5c3SBrian Feldman.Ed
109ea14e5c3SBrian Feldman.Pp
110ea14e5c3SBrian FeldmanAll data structures that the file format defines follow the
111ea14e5c3SBrian Feldman.Dq natural
1124e86fcacSSheldon Hearnsize and alignment guidelines for the relevant class.
1134e86fcacSSheldon HearnIf necessary,
114ea14e5c3SBrian Feldmandata structures contain explicit padding to ensure 4-byte alignment
115ea14e5c3SBrian Feldmanfor 4-byte objects, to force structure sizes to a multiple of 4, etc.
116ea14e5c3SBrian Feldman.Pp
117ea14e5c3SBrian FeldmanThe ELF header is described by the type Elf32_Ehdr or Elf64_Ehdr:
118ea14e5c3SBrian Feldman.Bd -literal -offset indent
119ea14e5c3SBrian Feldmantypedef struct {
120ea14e5c3SBrian Feldman        unsigned char   e_ident[EI_NIDENT];
121ea14e5c3SBrian Feldman        Elf32_Half      e_type;
122ea14e5c3SBrian Feldman        Elf32_Half      e_machine;
123ea14e5c3SBrian Feldman        Elf32_Word      e_version;
124ea14e5c3SBrian Feldman        Elf32_Addr      e_entry;
125ea14e5c3SBrian Feldman        Elf32_Off       e_phoff;
126ea14e5c3SBrian Feldman        Elf32_Off       e_shoff;
127ea14e5c3SBrian Feldman        Elf32_Word      e_flags;
128ea14e5c3SBrian Feldman        Elf32_Half      e_ehsize;
129ea14e5c3SBrian Feldman        Elf32_Half      e_phentsize;
130ea14e5c3SBrian Feldman        Elf32_Half      e_phnum;
131ea14e5c3SBrian Feldman        Elf32_Half      e_shentsize;
132ea14e5c3SBrian Feldman        Elf32_Half      e_shnum;
133ea14e5c3SBrian Feldman        Elf32_Half      e_shstrndx;
134ea14e5c3SBrian Feldman} Elf32_Ehdr;
135ea14e5c3SBrian Feldman.Ed
136ea14e5c3SBrian Feldman.Pp
137ea14e5c3SBrian Feldman.Bd -literal -offset indent
138ea14e5c3SBrian Feldmantypedef struct {
139ea14e5c3SBrian Feldman	unsigned char   e_ident[EI_NIDENT];
140ea14e5c3SBrian Feldman	Elf64_Quarter   e_type;
141ea14e5c3SBrian Feldman	Elf64_Quarter   e_machine;
142ea14e5c3SBrian Feldman	Elf64_Half      e_version;
143ea14e5c3SBrian Feldman	Elf64_Addr      e_entry;
144ea14e5c3SBrian Feldman	Elf64_Off       e_phoff;
145ea14e5c3SBrian Feldman	Elf64_Off       e_shoff;
146ea14e5c3SBrian Feldman	Elf64_Half      e_flags;
147ea14e5c3SBrian Feldman	Elf64_Quarter   e_ehsize;
148ea14e5c3SBrian Feldman	Elf64_Quarter   e_phentsize;
149ea14e5c3SBrian Feldman	Elf64_Quarter   e_phnum;
150ea14e5c3SBrian Feldman	Elf64_Quarter   e_shentsize;
151ea14e5c3SBrian Feldman	Elf64_Quarter   e_shnum;
152ea14e5c3SBrian Feldman	Elf64_Quarter   e_shstrndx;
153ea14e5c3SBrian Feldman} Elf64_Ehdr;
154ea14e5c3SBrian Feldman.Ed
155ea14e5c3SBrian Feldman.Pp
156ea14e5c3SBrian FeldmanThe fields have the following meanings:
157ea14e5c3SBrian Feldman.Pp
158ea14e5c3SBrian Feldman.Bl -tag -width "e_phentsize" -compact -offset indent
159ea14e5c3SBrian Feldman.It Dv e_ident
160ea14e5c3SBrian FeldmanThis array of bytes specifies to interpret the file,
161ea14e5c3SBrian Feldmanindependent of the processor or the file's remaining contents.
162ea14e5c3SBrian FeldmanWithin this array everything is named by macros, which start with
163ea14e5c3SBrian Feldmanthe prefix
164ea14e5c3SBrian Feldman.Sy EI_
165ea14e5c3SBrian Feldmanand may contain values which start with the prefix
166ea14e5c3SBrian Feldman.Sy ELF .
167ea14e5c3SBrian FeldmanThe following macros are defined:
168ea14e5c3SBrian Feldman.Pp
1690d59faf6SJeroen Ruigrok van der Werven.Bl -tag -width "EI_ABIVERSION" -compact
170ea14e5c3SBrian Feldman.It Dv EI_MAG0
1714e86fcacSSheldon HearnThe first byte of the magic number.
1724e86fcacSSheldon HearnIt must be filled with
173ea14e5c3SBrian Feldman.Sy ELFMAG0 .
174ea14e5c3SBrian Feldman.It Dv EI_MAG1
1754e86fcacSSheldon HearnThe second byte of the magic number.
1764e86fcacSSheldon HearnIt must be filled with
177ea14e5c3SBrian Feldman.Sy ELFMAG1 .
178ea14e5c3SBrian Feldman.It Dv EI_MAG2
1794e86fcacSSheldon HearnThe third byte of the magic number.
1804e86fcacSSheldon HearnIt must be filled with
181ea14e5c3SBrian Feldman.Sy ELFMAG2 .
182ea14e5c3SBrian Feldman.It Dv EI_MAG3
1834e86fcacSSheldon HearnThe fourth byte of the magic number.
1844e86fcacSSheldon HearnIt must be filled with
185ea14e5c3SBrian Feldman.Sy ELFMAG3 .
186ea14e5c3SBrian Feldman.It Dv EI_CLASS
187ea14e5c3SBrian FeldmanThe fifth byte identifies the architecture for this binary:
188ea14e5c3SBrian Feldman.Pp
189ea14e5c3SBrian Feldman.Bl -tag -width "ELFCLASSNONE" -compact
190ea14e5c3SBrian Feldman.It Dv ELFCLASSNONE
191ea14e5c3SBrian FeldmanThis class is invalid.
192ea14e5c3SBrian Feldman.It Dv ELFCLASS32
1934e86fcacSSheldon HearnThis defines the 32-bit architecture.
1944e86fcacSSheldon HearnIt supports machines with files
195ea14e5c3SBrian Feldmanand virtual address spaces up to 4 Gigabytes.
196ea14e5c3SBrian Feldman.It Dv ELFCLASS64
197ea14e5c3SBrian FeldmanThis defines the 64-bit architecture.
198ea14e5c3SBrian Feldman.El
199ea14e5c3SBrian Feldman.It Dv EI_DATA
200ea14e5c3SBrian FeldmanThe sixth byte specifies the data encoding of the processor-specific
2014e86fcacSSheldon Hearndata in the file.
2024e86fcacSSheldon HearnCurrently these encodings are supported:
203ea14e5c3SBrian Feldman.Pp
204ea14e5c3SBrian Feldman.Bl -tag -width "ELFDATA2LSB" -compact
205ea14e5c3SBrian Feldman.It Dv ELFDATANONE
206ea14e5c3SBrian FeldmanUnknown data format.
207ea14e5c3SBrian Feldman.It Dv ELFDATA2LSB
208ea14e5c3SBrian FeldmanTwo's complement, little-endian.
209ea14e5c3SBrian Feldman.It Dv ELFDATA2MSB
210ea14e5c3SBrian FeldmanTwo's complement, big-endian.
211ea14e5c3SBrian Feldman.El
212ea14e5c3SBrian Feldman.It Dv EI_VERSION
213ea14e5c3SBrian FeldmanThe version number of the ELF specification:
214ea14e5c3SBrian Feldman.Pp
215ea14e5c3SBrian Feldman.Bl -tag -width "EV_CURRENT" -compact
216ea14e5c3SBrian Feldman.It Dv EV_NONE
217ea14e5c3SBrian FeldmanInvalid version.
218ea14e5c3SBrian Feldman.It Dv EV_CURRENT
219ea14e5c3SBrian FeldmanCurrent version.
220ea14e5c3SBrian Feldman.El
2210d59faf6SJeroen Ruigrok van der Werven.It Dv EI_OSABI
2220d59faf6SJeroen Ruigrok van der WervenThis byte identifies the operating system
2230d59faf6SJeroen Ruigrok van der Wervenand ABI to which the object is targeted.
2240d59faf6SJeroen Ruigrok van der WervenSome fields in other ELF structures have flags
2250d59faf6SJeroen Ruigrok van der Wervenand values that have platform specific meanings;
2260d59faf6SJeroen Ruigrok van der Werventhe interpretation of those fields is determined by the value of this byte.
2270d59faf6SJeroen Ruigrok van der WervenThe following values are currently defined:
2280d59faf6SJeroen Ruigrok van der Werven.Pp
2290d59faf6SJeroen Ruigrok van der Werven.Bl -tag -width "ELFOSABI_STANDALONE" -compact
2300d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_SYSV
2310d59faf6SJeroen Ruigrok van der WervenUNIX System V ABI.
2320d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_HPUX
2330d59faf6SJeroen Ruigrok van der WervenHP-UX operating system ABI.
2340d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_NETBSD
235d013e3f5SRuslan Ermilov.Nx
236d013e3f5SRuslan Ermilovoperating system ABI.
2370d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_LINUX
2380d59faf6SJeroen Ruigrok van der WervenGNU/Linux operating system ABI.
2390d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_HURD
2400d59faf6SJeroen Ruigrok van der WervenGNU/Hurd operating system ABI.
2410d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_86OPEN
2420d59faf6SJeroen Ruigrok van der Werven86Open Common IA32 ABI.
2430d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_SOLARIS
2440d59faf6SJeroen Ruigrok van der WervenSolaris operating system ABI.
2450d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_MONTEREY
2460d59faf6SJeroen Ruigrok van der WervenMonterey project ABI.
2470d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_IRIX
2480d59faf6SJeroen Ruigrok van der WervenIRIX operating system ABI.
2490d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_FREEBSD
250c5e7e03aSRuslan Ermilov.Fx
251c5e7e03aSRuslan Ermilovoperating system ABI.
2520d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_TRU64
2530d59faf6SJeroen Ruigrok van der WervenTRU64 UNIX operating system ABI.
2540d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_ARM
2550d59faf6SJeroen Ruigrok van der WervenARM architecture ABI.
2560d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_STANDALONE
2570d59faf6SJeroen Ruigrok van der WervenStandalone (embedded) ABI.
2580d59faf6SJeroen Ruigrok van der Werven.El
2590d59faf6SJeroen Ruigrok van der Werven.It Dv EI_ABIVERSION
2600d59faf6SJeroen Ruigrok van der WervenThis byte identifies the version of the ABI
2610d59faf6SJeroen Ruigrok van der Wervento which the object is targeted.
2620d59faf6SJeroen Ruigrok van der WervenThis field is used to distinguish among incompatible versions of an ABI.
2630d59faf6SJeroen Ruigrok van der WervenThe interpretation of this version number
2640d59faf6SJeroen Ruigrok van der Wervenis dependent on the ABI identified by the EI_OSABI field.
2650d59faf6SJeroen Ruigrok van der WervenApplications conforming to this specification use the value 0.
266ea14e5c3SBrian Feldman.It Dv EI_PAD
2674e86fcacSSheldon HearnStart of padding.
2684e86fcacSSheldon HearnThese bytes are reserved and set to zero.
2694e86fcacSSheldon HearnPrograms
2704e86fcacSSheldon Hearnwhich read them should ignore them.
2714e86fcacSSheldon HearnThe value for EI_PAD will change in
272ea14e5c3SBrian Feldmanthe future if currently unused bytes are given meanings.
273ea14e5c3SBrian Feldman.It Dv EI_BRAND
274ea14e5c3SBrian FeldmanStart of architecture identification.
275ea14e5c3SBrian Feldman.It Dv EI_NIDENT
276ea14e5c3SBrian FeldmanThe size of the e_ident array.
277ea14e5c3SBrian Feldman.El
278ea14e5c3SBrian Feldman.Pp
279ea14e5c3SBrian Feldman.It Dv e_type
280ea14e5c3SBrian FeldmanThis member of the structure identifies the object file type:
281ea14e5c3SBrian Feldman.Pp
282ea14e5c3SBrian Feldman.Bl -tag -width "ET_NONE" -compact
283ea14e5c3SBrian Feldman.It Dv ET_NONE
284ea14e5c3SBrian FeldmanAn unknown type.
285ea14e5c3SBrian Feldman.It Dv ET_REL
286ea14e5c3SBrian FeldmanA relocatable file.
287ea14e5c3SBrian Feldman.It Dv ET_EXEC
288ea14e5c3SBrian FeldmanAn executable file.
289ea14e5c3SBrian Feldman.It Dv ET_DYN
290ea14e5c3SBrian FeldmanA shared object.
291ea14e5c3SBrian Feldman.It Dv ET_CORE
292ea14e5c3SBrian FeldmanA core file.
293ea14e5c3SBrian Feldman.El
294ea14e5c3SBrian Feldman.Pp
295ea14e5c3SBrian Feldman.It Dv e_machine
296ea14e5c3SBrian FeldmanThis member specifies the required architecture for an individual file:
297ea14e5c3SBrian Feldman.Pp
298ea14e5c3SBrian Feldman.Bl -tag -width "EM_MIPS_RS4_BE" -compact
299ea14e5c3SBrian Feldman.It Dv EM_NONE
300ea14e5c3SBrian FeldmanAn unknown machine.
301ea14e5c3SBrian Feldman.It Dv EM_M32
302ea14e5c3SBrian FeldmanAT&T WE 32100.
303ea14e5c3SBrian Feldman.It Dv EM_SPARC
304ea14e5c3SBrian FeldmanSun Microsystems SPARC.
305ea14e5c3SBrian Feldman.It Dv EM_386
306ea14e5c3SBrian FeldmanIntel 80386.
307ea14e5c3SBrian Feldman.It Dv EM_68K
308ea14e5c3SBrian FeldmanMotorola 68000.
309ea14e5c3SBrian Feldman.It Dv EM_88K
310ea14e5c3SBrian FeldmanMotorola 88000.
311ea14e5c3SBrian Feldman.It Dv EM_486
312ea14e5c3SBrian FeldmanIntel 80486.
313ea14e5c3SBrian Feldman.It Dv EM_860
314ea14e5c3SBrian FeldmanIntel 80860.
315ea14e5c3SBrian Feldman.It Dv EM_MIPS
316ea14e5c3SBrian FeldmanMIPS RS3000 (big-endian only).
317ea14e5c3SBrian Feldman.It Dv EM_MIPS_RS4_BE
318ea14e5c3SBrian FeldmanMIPS RS4000 (big-endian only).
319ea14e5c3SBrian Feldman.It Dv EM_SPARC64
320ea14e5c3SBrian FeldmanSPARC v9 64-bit unofficial.
321ea14e5c3SBrian Feldman.It Dv EM_PARISC
322ea14e5c3SBrian FeldmanHPPA.
323ea14e5c3SBrian Feldman.It Dv EM_PPC
324ea14e5c3SBrian FeldmanPowerPC.
325ea14e5c3SBrian Feldman.It Dv EM_ALPHA
326ea14e5c3SBrian FeldmanCompaq [DEC] Alpha.
327ea14e5c3SBrian Feldman.El
328ea14e5c3SBrian Feldman.Pp
329ea14e5c3SBrian Feldman.It Dv e_version
330ea14e5c3SBrian FeldmanThis member identifies the file version:
331ea14e5c3SBrian Feldman.Pp
332ea14e5c3SBrian Feldman.Bl -tag -width "EV_CURRENT" -compact
333ea14e5c3SBrian Feldman.It Dv EV_NONE
334ea14e5c3SBrian FeldmanInvalid version
335ea14e5c3SBrian Feldman.It Dv EV_CURRENT
336ea14e5c3SBrian FeldmanCurrent version
337ea14e5c3SBrian Feldman.El
338ea14e5c3SBrian Feldman.It Dv e_entry
339ea14e5c3SBrian FeldmanThis member gives the virtual address to which the system first transfers
3404e86fcacSSheldon Hearncontrol, thus starting the process.
3414e86fcacSSheldon HearnIf the file has no associated entry
342ea14e5c3SBrian Feldmanpoint, this member holds zero.
343ea14e5c3SBrian Feldman.It Dv e_phoff
3444e86fcacSSheldon HearnThis member holds the program header table's file offset in bytes.
3454e86fcacSSheldon HearnIf
346ea14e5c3SBrian Feldmanthe file has no program header table, this member holds zero.
347ea14e5c3SBrian Feldman.It Dv e_shoff
3484e86fcacSSheldon HearnThis member holds the section header table's file offset in bytes.
3494e86fcacSSheldon HearnIf the
350ea14e5c3SBrian Feldmanfile has no section header table this member holds zero.
351ea14e5c3SBrian Feldman.It Dv e_flags
3524e86fcacSSheldon HearnThis member holds processor-specific flags associated with the file.
3534e86fcacSSheldon HearnFlag
354ea14e5c3SBrian Feldmannames take the form EF_`machine_flag'. Currently no flags have been defined.
355ea14e5c3SBrian Feldman.It Dv e_ehsize
356ea14e5c3SBrian FeldmanThis member holds the ELF header's size in bytes.
357ea14e5c3SBrian Feldman.It Dv e_phentsize
358ea14e5c3SBrian FeldmanThis member holds the size in bytes of one entry in the file's program header
359ea14e5c3SBrian Feldmantable; all entries are the same size.
360ea14e5c3SBrian Feldman.It Dv e_phnum
361f3a2511aSChris CostelloThis member holds the number of entries in the program header
3624e86fcacSSheldon Hearntable.
3634e86fcacSSheldon HearnThus the product of
364ea14e5c3SBrian Feldman.Sy e_phentsize
365ea14e5c3SBrian Feldmanand
366ea14e5c3SBrian Feldman.Sy e_phnum
367ea14e5c3SBrian Feldmangives the table's size
3684e86fcacSSheldon Hearnin bytes.
3694e86fcacSSheldon HearnIf a file has no program header,
370ea14e5c3SBrian Feldman.Sy e_phnum
371ea14e5c3SBrian Feldmanholds the value zero.
372ea14e5c3SBrian Feldman.It Dv e_shentsize
3734e86fcacSSheldon HearnThis member holds a sections header's size in bytes.
3744e86fcacSSheldon HearnA section header is one
375ea14e5c3SBrian Feldmanentry in the section header table; all entries are the same size.
376ea14e5c3SBrian Feldman.It Dv e_shnum
3774e86fcacSSheldon HearnThis member holds the number of entries in the section header table.
3784e86fcacSSheldon HearnThus
379ea14e5c3SBrian Feldmanthe product of
380ea14e5c3SBrian Feldman.Sy e_shentsize
381ea14e5c3SBrian Feldmanand
382ea14e5c3SBrian Feldman.Sy e_shnum
3834e86fcacSSheldon Hearngives the section header table's size in bytes.
3844e86fcacSSheldon HearnIf a file has no section
385ea14e5c3SBrian Feldmanheader table,
386ea14e5c3SBrian Feldman.Sy e_shnum
387ea14e5c3SBrian Feldmanholds the value of zero.
388ea14e5c3SBrian Feldman.It Dv e_shstrndx
389ea14e5c3SBrian FeldmanThis member holds the section header table index of the entry associated
3904e86fcacSSheldon Hearnwith the section name string table.
3914e86fcacSSheldon HearnIf the file has no section name string
392ea14e5c3SBrian Feldmantable, this member holds the value
393ea14e5c3SBrian Feldman.Sy SHN_UNDEF .
394ea14e5c3SBrian Feldman.Pp
395ea14e5c3SBrian Feldman.Bl -tag -width "SHN_LORESERVE" -compact
396ea14e5c3SBrian Feldman.It Dv SHN_UNDEF
397ea14e5c3SBrian FeldmanThis value marks an undefined, missing, irrelevant, or otherwise meaningless
3984e86fcacSSheldon Hearnsection reference.
3994e86fcacSSheldon HearnFor example, a symbol
400ea14e5c3SBrian Feldman.Dq defined
401ea14e5c3SBrian Feldmanrelative to section number
402ea14e5c3SBrian Feldman.Sy SHN_UNDEF
403ea14e5c3SBrian Feldmanis an undefined symbol.
404ea14e5c3SBrian Feldman.It Dv SHN_LORESERVE
405ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of reserved indexes.
406ea14e5c3SBrian Feldman.It Dv SHN_LOPROC
407ea14e5c3SBrian FeldmanThis value up to and including
408ea14e5c3SBrian Feldman.Sy SHN_HIPROC
409ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
410ea14e5c3SBrian Feldman.It Dv SHN_HIPROC
411ea14e5c3SBrian FeldmanThis value down to and including
412ea14e5c3SBrian Feldman.Sy SHN_LOPROC
413ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
414ea14e5c3SBrian Feldman.It Dv SHN_ABS
4154e86fcacSSheldon HearnThis value specifies absolute values for the corresponding reference.
4164e86fcacSSheldon HearnFor
417ea14e5c3SBrian Feldmanexample, symbols defined relative to section number
418ea14e5c3SBrian Feldman.Sy SHN_ABS
419ea14e5c3SBrian Feldmanhave absolute values and are not affected by relocation.
420ea14e5c3SBrian Feldman.It Dv SHN_COMMON
421ea14e5c3SBrian FeldmanSymbols defined relative to this section are common symbols, such as Fortran
422ea14e5c3SBrian FeldmanCOMMON or unallocated C external variables.
423ea14e5c3SBrian Feldman.It Dv SHN_HIRESERVE
424ea14e5c3SBrian FeldmanThis value specifies the upper bound of the range of the range of reserved
425ea14e5c3SBrian Feldmanindices between
426ea14e5c3SBrian Feldman.Sy SHN_LORESERVE
427ea14e5c3SBrian Feldmanand
428ea14e5c3SBrian Feldman.Sy SHN_HIRESERVE ,
429ea14e5c3SBrian Feldmaninclusive; the values do
4304e86fcacSSheldon Hearnnot reference the section header table.
4314e86fcacSSheldon HearnThat is, the section header table
432ea14e5c3SBrian Feldmandoes
433ea14e5c3SBrian Feldman.Em not
434ea14e5c3SBrian Feldmancontain entries for the reserved indices.
435ea14e5c3SBrian Feldman.El
436ea14e5c3SBrian Feldman.El
437ea14e5c3SBrian Feldman.Pp
438ea14e5c3SBrian FeldmanAn executable or shared object file's program header table is an array of
439ea14e5c3SBrian Feldmanstructures, each describing a segment or other information the system needs
4404e86fcacSSheldon Hearnto prepare the program for execution.
4414e86fcacSSheldon HearnAn object file
442ea14e5c3SBrian Feldman.Em segment
443ea14e5c3SBrian Feldmancontains one or more
444ea14e5c3SBrian Feldman.Em sections .
445ea14e5c3SBrian FeldmanProgram headers are meaningful only for executable and shared object files.
446ea14e5c3SBrian FeldmanA file specifies its own program header size with the ELF header's
447ea14e5c3SBrian Feldman.Sy e_phentsize
448ea14e5c3SBrian Feldmanand
449ea14e5c3SBrian Feldman.Sy e_phnum
4504e86fcacSSheldon Hearnmembers.
4514e86fcacSSheldon HearnAs with the Elf executable header, the program header
452ea14e5c3SBrian Feldmanalso has different versions depending on the architecture:
453ea14e5c3SBrian Feldman.Pp
454ea14e5c3SBrian Feldman.Bd -literal -offset indent
455ea14e5c3SBrian Feldmantypedef struct {
456ea14e5c3SBrian Feldman        Elf32_Word      p_type;
457ea14e5c3SBrian Feldman        Elf32_Off       p_offset;
458ea14e5c3SBrian Feldman        Elf32_Addr      p_vaddr;
459ea14e5c3SBrian Feldman        Elf32_Addr      p_paddr;
460ea14e5c3SBrian Feldman        Elf32_Size      p_filesz;
461ea14e5c3SBrian Feldman        Elf32_Size      p_memsz;
462ea14e5c3SBrian Feldman        Elf32_Word      p_flags;
463ea14e5c3SBrian Feldman        Elf32_Size      p_align;
464ea14e5c3SBrian Feldman} Elf32_Phdr;
465ea14e5c3SBrian Feldman.Ed
466ea14e5c3SBrian Feldman.Pp
467ea14e5c3SBrian Feldman.Bd -literal -offset indent
468ea14e5c3SBrian Feldmantypedef struct {
469ea14e5c3SBrian Feldman        Elf64_Half      p_type;
470ea14e5c3SBrian Feldman        Elf64_Half      p_flags;
471ea14e5c3SBrian Feldman        Elf64_Off       p_offset;
472ea14e5c3SBrian Feldman        Elf64_Addr      p_vaddr;
473ea14e5c3SBrian Feldman        Elf64_Addr      p_paddr;
474ea14e5c3SBrian Feldman        Elf64_Size      p_filesz;
475ea14e5c3SBrian Feldman        Elf64_Size      p_memsz;
476ea14e5c3SBrian Feldman        Elf64_Size      p_align;
477ea14e5c3SBrian Feldman} Elf64_Phdr;
478ea14e5c3SBrian Feldman.Ed
479ea14e5c3SBrian Feldman.Pp
480ea14e5c3SBrian FeldmanThe main difference between the 32-bit and the 64-bit program header lies
481ea14e5c3SBrian Feldmanonly in the location of a
482ea14e5c3SBrian Feldman.Sy p_flags
483ea14e5c3SBrian Feldmanmember in the total struct.
484ea14e5c3SBrian Feldman.Pp
485ea14e5c3SBrian Feldman.Bl -tag -width "p_offset" -compact -offset indent
486ea14e5c3SBrian Feldman.It Dv p_type
487ea14e5c3SBrian FeldmanThis member of the Phdr struct tells what kind of segment this array
488ea14e5c3SBrian Feldmanelement describes or how to interpret the array element's information.
489ea14e5c3SBrian Feldman.Bl -tag -width "PT_DYNAMIC" -compact
490ea14e5c3SBrian Feldman.Pp
491ea14e5c3SBrian Feldman.It Dv PT_NULL
492ea14e5c3SBrian FeldmanThe array element is unused and the other members' values are undefined.
493ea14e5c3SBrian FeldmanThis lets the program header have ignored entries.
494ea14e5c3SBrian Feldman.It Dv PT_LOAD
495ea14e5c3SBrian FeldmanThe array element specifies a loadable segment, described by
496ea14e5c3SBrian Feldman.Sy p_filesz
497ea14e5c3SBrian Feldmanand
498ea14e5c3SBrian Feldman.Sy p_memsz .
499ea14e5c3SBrian FeldmanThe bytes from the file are mapped to the beginning of the memory
5004e86fcacSSheldon Hearnsegment.
5019232968eSDima DorfmanIf the segment's memory size
5029232968eSDima Dorfman.Pq Sy p_memsz
5039232968eSDima Dorfmanis larger than the file size
5049232968eSDima Dorfman.Pq Sy p_filesz ,
5059232968eSDima Dorfmanthe
506ea14e5c3SBrian Feldman.Dq extra
507ea14e5c3SBrian Feldmanbytes are defined to hold the value 0 and to follow the segment's
5084e86fcacSSheldon Hearninitialized area.
5094e86fcacSSheldon HearnThe file size may not be larger than the memory size.
510ea14e5c3SBrian FeldmanLoadable segment entries in the program header table appear in ascending
511ea14e5c3SBrian Feldmanorder, sorted on the
512ea14e5c3SBrian Feldman.Sy p_vaddr
513ea14e5c3SBrian Feldmanmember.
514ea14e5c3SBrian Feldman.It Dv PT_DYNAMIC
515ea14e5c3SBrian FeldmanThe array element specifies dynamic linking information.
516ea14e5c3SBrian Feldman.It Dv PT_INTERP
517ea14e5c3SBrian FeldmanThe array element specifies the location and size of a null-terminated
5184e86fcacSSheldon Hearnpath name to invoke as an interpreter.
5194e86fcacSSheldon HearnThis segment type is meaningful
520ea14e5c3SBrian Feldmanonly for executable files (though it may occur for shared objects). However
5214e86fcacSSheldon Hearnit may not occur more than once in a file.
5224e86fcacSSheldon HearnIf it is present it must precede
523ea14e5c3SBrian Feldmanany loadable segment entry.
524ea14e5c3SBrian Feldman.It Dv PT_NOTE
525ea14e5c3SBrian FeldmanThe array element specifies the location and size for auxiliary information.
526ea14e5c3SBrian Feldman.It Dv PT_SHLIB
5274e86fcacSSheldon HearnThis segment type is reserved but has unspecified semantics.
5284e86fcacSSheldon HearnPrograms that
529ea14e5c3SBrian Feldmancontain an array element of this type do not conform to the ABI.
530ea14e5c3SBrian Feldman.It Dv PT_PHDR
531ea14e5c3SBrian FeldmanThe array element, if present, specifies the location and size of the program
532ea14e5c3SBrian Feldmanheader table itself, both in the file and in the memory image of the program.
5334e86fcacSSheldon HearnThis segment type may not occur more than once in a file.
5344e86fcacSSheldon HearnMoreover, it may
535ea14e5c3SBrian Feldmanonly occur if the program header table is part of the memory image of the
5364e86fcacSSheldon Hearnprogram.
5374e86fcacSSheldon HearnIf it is present it must precede any loadable segment entry.
538ea14e5c3SBrian Feldman.It Dv PT_LOPROC
539ea14e5c3SBrian FeldmanThis value up to and including
540ea14e5c3SBrian Feldman.Sy PT_HIPROC
541ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
542ea14e5c3SBrian Feldman.It Dv PT_HIPROC
543ea14e5c3SBrian FeldmanThis value down to and including
544ea14e5c3SBrian Feldman.Sy PT_LOPROC
545ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
546ea14e5c3SBrian Feldman.El
547ea14e5c3SBrian Feldman.Pp
548ea14e5c3SBrian Feldman.It Dv p_offset
549ea14e5c3SBrian FeldmanThis member holds the offset from the beginning of the file at which
550ea14e5c3SBrian Feldmanthe first byte of the of the segment resides.
551ea14e5c3SBrian Feldman.It Dv p_vaddr
552ea14e5c3SBrian FeldmanThis member holds the virtual address at which the first byte of the
553ea14e5c3SBrian Feldmansegment resides in memory.
554ea14e5c3SBrian Feldman.It Dv p_paddr
555ea14e5c3SBrian FeldmanOn systems for which physical addressing is relevant, this member is
5564e86fcacSSheldon Hearnreserved for the segment's physical address.
557753d686dSRuslan ErmilovUnder
558753d686dSRuslan Ermilov.Bx
559753d686dSRuslan Ermilovthis member is
560ea14e5c3SBrian Feldmannot used and must be zero.
561ea14e5c3SBrian Feldman.It Dv p_filesz
562ea14e5c3SBrian FeldmanThis member holds the number of bytes in the file image of the segment.
563ea14e5c3SBrian FeldmanIt may be zero.
564ea14e5c3SBrian Feldman.It Dv p_memsz
565ea14e5c3SBrian FeldmanThis member holds the number of bytes in the memory image of the segment.
566ea14e5c3SBrian FeldmanIt may be zero.
567ea14e5c3SBrian Feldman.It Dv p_flags
568ea14e5c3SBrian FeldmanThis member holds flags relevant to the segment:
569ea14e5c3SBrian Feldman.Pp
570ea14e5c3SBrian Feldman.Bl -tag -width "PF_X" -compact
571ea14e5c3SBrian Feldman.It Dv PF_X
572ea14e5c3SBrian FeldmanAn executable segment.
573ea14e5c3SBrian Feldman.It Dv PF_W
574ea14e5c3SBrian FeldmanA writable segment.
575ea14e5c3SBrian Feldman.It Dv PF_R
576ea14e5c3SBrian FeldmanA readable segment.
577ea14e5c3SBrian Feldman.El
578ea14e5c3SBrian Feldman.Pp
579ea14e5c3SBrian FeldmanA text segment commonly has the flags
580ea14e5c3SBrian Feldman.Sy PF_X
581ea14e5c3SBrian Feldmanand
582672300f7SRuslan Ermilov.Sy PF_R .
583ea14e5c3SBrian FeldmanA data segment commonly has
584ea14e5c3SBrian Feldman.Sy PF_X ,
585ea14e5c3SBrian Feldman.Sy PF_W
586ea14e5c3SBrian Feldmanand
587ea14e5c3SBrian Feldman.Sy PF_R .
588ea14e5c3SBrian Feldman.It Dv p_align
589ea14e5c3SBrian FeldmanThis member holds the value to which the segments are aligned in memory
5904e86fcacSSheldon Hearnand in the file.
5914e86fcacSSheldon HearnLoadable process segments must have congruent values for
592ea14e5c3SBrian Feldman.Sy p_vaddr
593ea14e5c3SBrian Feldmanand
594ea14e5c3SBrian Feldman.Sy p_offset ,
5954e86fcacSSheldon Hearnmodulo the page size.
5964e86fcacSSheldon HearnValues of zero and one mean no alignment is required.
597ea14e5c3SBrian FeldmanOtherwise,
598ea14e5c3SBrian Feldman.Sy p_align
599ea14e5c3SBrian Feldmanshould be a positive, integral power of two, and
600ea14e5c3SBrian Feldman.Sy p_vaddr
601ea14e5c3SBrian Feldmanshould equal
602ea14e5c3SBrian Feldman.Sy p_offset ,
603ea14e5c3SBrian Feldmanmodulo
604ea14e5c3SBrian Feldman.Sy p_align .
605ea14e5c3SBrian Feldman.El
606ea14e5c3SBrian Feldman.Pp
6074e86fcacSSheldon HearnAn file's section header table lets one locate all the file's sections.
6084e86fcacSSheldon HearnThe
6094e86fcacSSheldon Hearnsection header table is an array of Elf32_Shdr or Elf64_Shdr structures.
6104e86fcacSSheldon HearnThe
611ea14e5c3SBrian FeldmanELF header's
612ea14e5c3SBrian Feldman.Sy e_shoff
613ea14e5c3SBrian Feldmanmember gives the byte offset from the beginning of the file to the section
614ea14e5c3SBrian Feldmanheader table.
615ea14e5c3SBrian Feldman.Sy e_shnum
616ea14e5c3SBrian Feldmanholds the number of entries the section header table contains.
617ea14e5c3SBrian Feldman.Sy e_shentsize
618ea14e5c3SBrian Feldmanholds the size in bytes of each entry.
619ea14e5c3SBrian Feldman.Pp
6204e86fcacSSheldon HearnA section header table index is a subscript into this array.
6214e86fcacSSheldon HearnSome section
6224e86fcacSSheldon Hearnheader table indices are reserved.
6234e86fcacSSheldon HearnAn object file does not have sections for
624ea14e5c3SBrian Feldmanthese special indices:
625ea14e5c3SBrian Feldman.Pp
626ea14e5c3SBrian Feldman.Bl -tag -width "SHN_LORESERVE" -compact
627ea14e5c3SBrian Feldman.It Dv SHN_UNDEF
628ea14e5c3SBrian FeldmanThis value marks an undefined, missing, irrelevant or otherwise meaningless
629ea14e5c3SBrian Feldmansection reference.
630ea14e5c3SBrian Feldman.It Dv SHN_LORESERVE
631ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of reserved indices.
632ea14e5c3SBrian Feldman.It Dv SHN_LOPROC
633ea14e5c3SBrian FeldmanThis value up to and including
634ea14e5c3SBrian Feldman.Sy SHN_HIPROC
635ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
636ea14e5c3SBrian Feldman.It Dv SHN_HIPROC
637ea14e5c3SBrian FeldmanThis value down to and including
638ea14e5c3SBrian Feldman.Sy SHN_LOPROC
639ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
640ea14e5c3SBrian Feldman.It Dv SHN_ABS
6414e86fcacSSheldon HearnThis value specifies absolute values for the corresponding reference.
6424e86fcacSSheldon HearnFor
643ea14e5c3SBrian Feldmanexample, symbols defined relative to section number
644ea14e5c3SBrian Feldman.Sy SHN_ABS
645ea14e5c3SBrian Feldmanhave absolute values and are not affected by relocation.
646ea14e5c3SBrian Feldman.It Dv SHN_COMMON
647ea14e5c3SBrian FeldmanSymbols defined relative to this section are common symbols, such as FORTRAN
648ea14e5c3SBrian FeldmanCOMMON or unallocated C external variables.
649ea14e5c3SBrian Feldman.It Dv SHN_HIRESERVE
6504e86fcacSSheldon HearnThis value specifies the upper bound of the range of reserved indices.
6514e86fcacSSheldon HearnThe
652ea14e5c3SBrian Feldmansystem reserves indices between
653ea14e5c3SBrian Feldman.Sy SHN_LORESERVE
654ea14e5c3SBrian Feldmanand
655ea14e5c3SBrian Feldman.Sy SHN_HIRESERVE ,
6564e86fcacSSheldon Hearninclusive.
6574e86fcacSSheldon HearnThe section header table does not contain entries for the
658ea14e5c3SBrian Feldmanreserved indices.
659ea14e5c3SBrian Feldman.El
660ea14e5c3SBrian Feldman.Pp
661ea14e5c3SBrian FeldmanThe section header has the following structure:
662ea14e5c3SBrian Feldman.Bd -literal -offset indent
663ea14e5c3SBrian Feldmantypedef struct {
664ea14e5c3SBrian Feldman	Elf32_Word      sh_name;
665ea14e5c3SBrian Feldman	Elf32_Word      sh_type;
666ea14e5c3SBrian Feldman	Elf32_Word      sh_flags;
667ea14e5c3SBrian Feldman	Elf32_Addr      sh_addr;
668ea14e5c3SBrian Feldman	Elf32_Off       sh_offset;
669ea14e5c3SBrian Feldman	Elf32_Size      sh_size;
670ea14e5c3SBrian Feldman	Elf32_Word      sh_link;
671ea14e5c3SBrian Feldman	Elf32_Word      sh_info;
672ea14e5c3SBrian Feldman	Elf32_Size      sh_addralign;
673ea14e5c3SBrian Feldman	Elf32_Size      sh_entsize;
674ea14e5c3SBrian Feldman} Elf32_Shdr;
675ea14e5c3SBrian Feldman.Ed
676ea14e5c3SBrian Feldman.Pp
677ea14e5c3SBrian Feldman.Bd -literal -offset indent
678ea14e5c3SBrian Feldmantypedef struct {
679ea14e5c3SBrian Feldman	Elf64_Half      sh_name;
680ea14e5c3SBrian Feldman	Elf64_Half      sh_type;
681ea14e5c3SBrian Feldman	Elf64_Size      sh_flags;
682ea14e5c3SBrian Feldman	Elf64_Addr      sh_addr;
683ea14e5c3SBrian Feldman	Elf64_Off       sh_offset;
684ea14e5c3SBrian Feldman	Elf64_Size      sh_size;
685ea14e5c3SBrian Feldman	Elf64_Half      sh_link;
686ea14e5c3SBrian Feldman	Elf64_Half      sh_info;
687ea14e5c3SBrian Feldman	Elf64_Size      sh_addralign;
688ea14e5c3SBrian Feldman	Elf64_Size      sh_entsize;
689ea14e5c3SBrian Feldman} Elf64_Shdr;
690ea14e5c3SBrian Feldman.Ed
691ea14e5c3SBrian Feldman.Pp
692ea14e5c3SBrian Feldman.Bl -tag -width "sh_addralign" -compact
693ea14e5c3SBrian Feldman.It Dv sh_name
6944e86fcacSSheldon HearnThis member specifies the name of the section.
6954e86fcacSSheldon HearnIts value is an index
696ea14e5c3SBrian Feldmaninto the section header string table section, giving the location of
697ea14e5c3SBrian Feldmana null-terminated string.
698ea14e5c3SBrian Feldman.It Dv sh_type
6990757c960SBrian FeldmanThis member categorizes the section's contents and semantics.
700ea14e5c3SBrian Feldman.Pp
701ea14e5c3SBrian Feldman.Bl -tag -width "SHT_PROGBITS" -compact
702ea14e5c3SBrian Feldman.It Dv SHT_NULL
7034e86fcacSSheldon HearnThis value marks the section header as inactive.
7044e86fcacSSheldon HearnIt does not
7054e86fcacSSheldon Hearnhave an associated section.
7064e86fcacSSheldon HearnOther members of the section header
707ea14e5c3SBrian Feldmanhave undefined values.
708ea14e5c3SBrian Feldman.It Dv SHT_PROGBITS
709ea14e5c3SBrian FeldmanThe section holds information defined by the program, whose
710ea14e5c3SBrian Feldmanformat and meaning are determined solely by the program.
711ea14e5c3SBrian Feldman.It Dv SHT_SYMTAB
7124e86fcacSSheldon HearnThis section holds a symbol table.
7134e86fcacSSheldon HearnTypically,
714ea14e5c3SBrian Feldman.Sy SHT_SYMTAB
715ea14e5c3SBrian Feldmanprovides symbols for link editing, though it may also be used
7164e86fcacSSheldon Hearnfor dynamic linking.
7174e86fcacSSheldon HearnAs a complete symbol table, it may contain
7184e86fcacSSheldon Hearnmany symbols unnecessary for dynamic linking.
7194e86fcacSSheldon HearnAn object file can
720ea14e5c3SBrian Feldmanalso contain a
721ea14e5c3SBrian Feldman.Sy SHN_DYNSYM
722ea14e5c3SBrian Feldmansection.
723ea14e5c3SBrian Feldman.It Dv SHT_STRTAB
7244e86fcacSSheldon HearnThis section holds a string table.
7254e86fcacSSheldon HearnAn object file may have multiple
726ea14e5c3SBrian Feldmanstring table sections.
727ea14e5c3SBrian Feldman.It Dv SHT_RELA
728ea14e5c3SBrian FeldmanThis section holds relocation entries with explicit addends, such
729ea14e5c3SBrian Feldmanas type
730ea14e5c3SBrian Feldman.Sy Elf32_Rela
7314e86fcacSSheldon Hearnfor the 32-bit class of object files.
7324e86fcacSSheldon HearnAn object may have multiple
733ea14e5c3SBrian Feldmanrelocation sections.
734ea14e5c3SBrian Feldman.It Dv SHT_HASH
7354e86fcacSSheldon HearnThis section holds a symbol hash table.
7364e86fcacSSheldon HearnAll object participating in
7374e86fcacSSheldon Hearndynamic linking must contain a symbol hash table.
7384e86fcacSSheldon HearnAn object file may
739ea14e5c3SBrian Feldmanhave only one hash table.
740ea14e5c3SBrian Feldman.It Dv SHT_DYNAMIC
7414e86fcacSSheldon HearnThis section holds information for dynamic linking.
7424e86fcacSSheldon HearnAn object file may
743ea14e5c3SBrian Feldmanhave only one dynamic section.
744ea14e5c3SBrian Feldman.It Dv SHT_NOTE
745ea14e5c3SBrian FeldmanThis section holds information that marks the file in some way.
746ea14e5c3SBrian Feldman.It Dv SHT_NOBITS
747ea14e5c3SBrian FeldmanA section of this type occupies no space in the file but otherwise
748ea14e5c3SBrian Feldmanresembles
749ea14e5c3SBrian Feldman.Sy SHN_PROGBITS .
750ea14e5c3SBrian FeldmanAlthough this section contains no bytes, the
751ea14e5c3SBrian Feldman.Sy sh_offset
752ea14e5c3SBrian Feldmanmember contains the conceptual file offset.
753ea14e5c3SBrian Feldman.It Dv SHT_REL
754ea14e5c3SBrian FeldmanThis section holds relocation offsets without explicit addends, such
755ea14e5c3SBrian Feldmanas type
756ea14e5c3SBrian Feldman.Sy Elf32_Rel
7574e86fcacSSheldon Hearnfor the 32-bit class of object files.
7584e86fcacSSheldon HearnAn object file may have multiple
759ea14e5c3SBrian Feldmanrelocation sections.
760ea14e5c3SBrian Feldman.It Dv SHT_SHLIB
761ea14e5c3SBrian FeldmanThis section is reserved but has unspecified semantics.
762ea14e5c3SBrian Feldman.It Dv SHT_DYNSYM
7634e86fcacSSheldon HearnThis section holds a minimal set of dynamic linking symbols.
7644e86fcacSSheldon HearnAn
765ea14e5c3SBrian Feldmanobject file can also contain a
766ea14e5c3SBrian Feldman.Sy SHN_SYMTAB
767ea14e5c3SBrian Feldmansection.
768ea14e5c3SBrian Feldman.It Dv SHT_LOPROC
769ea14e5c3SBrian FeldmanThis value up to and including
770ea14e5c3SBrian Feldman.Sy SHT_HIPROC
771ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
772ea14e5c3SBrian Feldman.It Dv SHT_HIPROC
773ea14e5c3SBrian FeldmanThis value down to and including
774ea14e5c3SBrian Feldman.Sy SHT_LOPROC
775ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
776ea14e5c3SBrian Feldman.It Dv SHT_LOUSER
777ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of indices reserved for
778ea14e5c3SBrian Feldmanapplication programs.
779ea14e5c3SBrian Feldman.It Dv SHT_HIUSER
780ea14e5c3SBrian FeldmanThis value specifies the upper bound of the range of indices reserved for
7814e86fcacSSheldon Hearnapplication programs.
7824e86fcacSSheldon HearnSection types between
783ea14e5c3SBrian Feldman.Sy SHT_LOUSER
784ea14e5c3SBrian Feldmanand
785ea14e5c3SBrian Feldman.Sy SHT_HIUSER
786ea14e5c3SBrian Feldmanmay be used by the application, without conflicting with current or future
787ea14e5c3SBrian Feldmansystem-defined section types.
788ea14e5c3SBrian Feldman.El
789ea14e5c3SBrian Feldman.Pp
790ea14e5c3SBrian Feldman.It Dv sh_flags
791ea14e5c3SBrian FeldmanSections support one-bit flags that describe miscellaneous attributes.
792ea14e5c3SBrian FeldmanIf a flag bit is set in
793ea14e5c3SBrian Feldman.Sy sh_flags ,
794ea14e5c3SBrian Feldmanthe attribute is
795ea14e5c3SBrian Feldman.Dq on
7964e86fcacSSheldon Hearnfor the section.
7974e86fcacSSheldon HearnOtherwise, the attribute is
798ea14e5c3SBrian Feldman.Dq off
7994e86fcacSSheldon Hearnor does not apply.
8004e86fcacSSheldon HearnUndefined attributes are set to zero.
801ea14e5c3SBrian Feldman.Pp
802ea14e5c3SBrian Feldman.Bl -tag -width "SHF_EXECINSTR" -compact
803ea14e5c3SBrian Feldman.It Dv SHF_WRITE
804ea14e5c3SBrian FeldmanThis section contains data that should be writable during process
805ea14e5c3SBrian Feldmanexecution.
806ea14e5c3SBrian Feldman.It Dv SHF_ALLOC
8074e86fcacSSheldon HearnThe section occupies memory during process execution.
8084e86fcacSSheldon HearnSome control
8094e86fcacSSheldon Hearnsections do not reside in the memory image of an object file.
8104e86fcacSSheldon HearnThis
811ea14e5c3SBrian Feldmanattribute is off for those sections.
812ea14e5c3SBrian Feldman.It Dv SHF_EXECINSTR
813ea14e5c3SBrian FeldmanThe section contains executable machine instructions.
814ea14e5c3SBrian Feldman.It Dv SHF_MASKPROC
815ea14e5c3SBrian FeldmanAll bits included in this mask are reserved for processor-specific
816ea14e5c3SBrian Feldmansemantics.
817ea14e5c3SBrian Feldman.El
818ea14e5c3SBrian Feldman.Pp
819ea14e5c3SBrian Feldman.It Dv sh_addr
820ea14e5c3SBrian FeldmanIf the section will appear in the memory image of a process, this member
821ea14e5c3SBrian Feldmanholds the address at which the section's first byte should reside.
822ea14e5c3SBrian FeldmanOtherwise, the member contains zero.
823ea14e5c3SBrian Feldman.It Dv sh_offset
824ea14e5c3SBrian FeldmanThis member's value holds the byte offset from the beginning of the file
8254e86fcacSSheldon Hearnto the first byte in the section.
8264e86fcacSSheldon HearnOne section type,
827ea14e5c3SBrian Feldman.Sy SHT_NOBITS ,
828ea14e5c3SBrian Feldmanoccupies no space in the file, and its
829ea14e5c3SBrian Feldman.Sy sh_offset
830ea14e5c3SBrian Feldmanmember locates the conceptual placement in the file.
831ea14e5c3SBrian Feldman.It Dv sh_size
8324e86fcacSSheldon HearnThis member holds the section's size in bytes.
8334e86fcacSSheldon HearnUnless the section type
834ea14e5c3SBrian Feldmanis
835ea14e5c3SBrian Feldman.Sy SHT_NOBITS ,
836ea14e5c3SBrian Feldmanthe section occupies
837ea14e5c3SBrian Feldman.Sy sh_size
8384e86fcacSSheldon Hearnbytes in the file.
8394e86fcacSSheldon HearnA section of type
840ea14e5c3SBrian Feldman.Sy SHT_NOBITS
841ea14e5c3SBrian Feldmanmay have a non-zero size, but it occupies no space in the file.
842ea14e5c3SBrian Feldman.It Dv sh_link
843ea14e5c3SBrian FeldmanThis member holds a section header table index link, whose interpretation
844ea14e5c3SBrian Feldmandepends on the section type.
845ea14e5c3SBrian Feldman.It Dv sh_info
846ea14e5c3SBrian FeldmanThis member holds extra information, whose interpretation depends on the
847ea14e5c3SBrian Feldmansection type.
848ea14e5c3SBrian Feldman.It Dv sh_addralign
8494e86fcacSSheldon HearnSome sections have address alignment constraints.
8504e86fcacSSheldon HearnIf a section holds a
851ea14e5c3SBrian Feldmandoubleword, the system must ensure doubleword alignment for the entire
8524e86fcacSSheldon Hearnsection.
8534e86fcacSSheldon HearnThat is, the value of
854ea14e5c3SBrian Feldman.Sy sh_addr
855ea14e5c3SBrian Feldmanmust be congruent to zero, modulo the value of
856ea14e5c3SBrian Feldman.Sy sh_addralign .
8574e86fcacSSheldon HearnOnly zero and positive integral powers of two are allowed.
8584e86fcacSSheldon HearnValues of zero
859ea14e5c3SBrian Feldmanor one mean the section has no alignment constraints.
860ea14e5c3SBrian Feldman.It Dv sh_entsize
861ea14e5c3SBrian FeldmanSome sections hold a table of fixed-sized entries, such as a symbol table.
862ea14e5c3SBrian FeldmanFor such a section, this member gives the size in bytes for each entry.
863ea14e5c3SBrian FeldmanThis member contains zero if the section does not hold a table of
864ea14e5c3SBrian Feldmanfixed-size entries.
865ea14e5c3SBrian Feldman.El
866ea14e5c3SBrian Feldman.Pp
867ea14e5c3SBrian FeldmanVarious sections hold program and control information:
868ea14e5c3SBrian Feldman.Bl -tag -width ".shstrtab" -compact
869ea14e5c3SBrian Feldman.It .bss
8700757c960SBrian FeldmanThis section holds uninitialized data that contributes to the program's
8714e86fcacSSheldon Hearnmemory image.
8724e86fcacSSheldon HearnBy definition, the system initializes the data with zeros
8734e86fcacSSheldon Hearnwhen the program begins to run.
8744e86fcacSSheldon HearnThis section is of type
875ea14e5c3SBrian Feldman.Sy SHT_NOBITS .
876ea14e5c3SBrian FeldmanThe attributes types are
877ea14e5c3SBrian Feldman.Sy SHF_ALLOC
878ea14e5c3SBrian Feldmanand
879ea14e5c3SBrian Feldman.Sy SHF_WRITE .
880ea14e5c3SBrian Feldman.It .comment
8814e86fcacSSheldon HearnThis section holds version control information.
8824e86fcacSSheldon HearnThis section is of type
883ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
884ea14e5c3SBrian FeldmanNo attribute types are used.
885ea14e5c3SBrian Feldman.It .data
8860757c960SBrian FeldmanThis section holds initialized data that contribute to the program's
8874e86fcacSSheldon Hearnmemory image.
8884e86fcacSSheldon HearnThis section is of type
889ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
890ea14e5c3SBrian FeldmanThe attribute types are
891ea14e5c3SBrian Feldman.Sy SHF_ALLOC
892ea14e5c3SBrian Feldmanand
893ea14e5c3SBrian Feldman.Sy SHF_WRITE .
894ea14e5c3SBrian Feldman.It .data1
8950757c960SBrian FeldmanThis section holds initialized data that contribute to the program's
8964e86fcacSSheldon Hearnmemory image.
8974e86fcacSSheldon HearnThis section is of type
898ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
899ea14e5c3SBrian FeldmanThe attribute types are
900ea14e5c3SBrian Feldman.Sy SHF_ALLOC
901ea14e5c3SBrian Feldmanand
902ea14e5c3SBrian Feldman.Sy SHF_WRITE .
903ea14e5c3SBrian Feldman.It .debug
9044e86fcacSSheldon HearnThis section holds information for symbolic debugging.
9054e86fcacSSheldon HearnThe contents
9064e86fcacSSheldon Hearnare unspecified.
9074e86fcacSSheldon HearnThis section is of type
908ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
909ea14e5c3SBrian FeldmanNo attribute types are used.
910ea14e5c3SBrian Feldman.It .dynamic
9114e86fcacSSheldon HearnThis section holds dynamic linking information.
9124e86fcacSSheldon HearnThe section's attributes
913ea14e5c3SBrian Feldmanwill include the
914ea14e5c3SBrian Feldman.Sy SHF_ALLOC
9154e86fcacSSheldon Hearnbit.
9164e86fcacSSheldon HearnWhether the
917ea14e5c3SBrian Feldman.Sy SHF_WRITE
9184e86fcacSSheldon Hearnbit is set is processor-specific.
9194e86fcacSSheldon HearnThis section is of type
920ea14e5c3SBrian Feldman.Sy SHT_DYNAMIC .
921ea14e5c3SBrian FeldmanSee the attributes above.
922ea14e5c3SBrian Feldman.It .dynstr
923ea14e5c3SBrian FeldmanThis section holds strings needed for dynamic linking, most commonly
924ea14e5c3SBrian Feldmanthe strings that represent the names associated with symbol table entries.
925ea14e5c3SBrian FeldmanThis section is of type
926ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
927ea14e5c3SBrian FeldmanThe attribute type used is
928ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
929ea14e5c3SBrian Feldman.It .dynsym
9304e86fcacSSheldon HearnThis section holds the dynamic linking symbol table.
9314e86fcacSSheldon HearnThis section is of type
932ea14e5c3SBrian Feldman.Sy SHT_DYNSYM .
933ea14e5c3SBrian FeldmanThe attribute used is
934ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
935ea14e5c3SBrian Feldman.It .fini
936ea14e5c3SBrian FeldmanThis section holds executable instructions that contribute to the process
9374e86fcacSSheldon Hearntermination code.
9384e86fcacSSheldon HearnWhen a program exits normally the system arranges to
9394e86fcacSSheldon Hearnexecute the code in this section.
9404e86fcacSSheldon HearnThis section is of type
941ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
942ea14e5c3SBrian FeldmanThe attributes used are
943ea14e5c3SBrian Feldman.Sy SHF_ALLOC
944ea14e5c3SBrian Feldmanand
945ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
946ea14e5c3SBrian Feldman.It .got
9474e86fcacSSheldon HearnThis section holds the global offset table.
9484e86fcacSSheldon HearnThis section is of type
949ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
950ea14e5c3SBrian FeldmanThe attributes are processor-specific.
951ea14e5c3SBrian Feldman.It .hash
9524e86fcacSSheldon HearnThis section holds a symbol hash table.
9534e86fcacSSheldon HearnThis section is of type
954ea14e5c3SBrian Feldman.Sy SHT_HASH .
955ea14e5c3SBrian FeldmanThe attribute used is
956ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
957ea14e5c3SBrian Feldman.It .init
958ea14e5c3SBrian FeldmanThis section holds executable instructions that contribute to the process
9594e86fcacSSheldon Hearninitialization code.
9604e86fcacSSheldon HearnWhen a program starts to run the system arranges to
961ea14e5c3SBrian Feldmanexecute the code in this section before calling the main program entry point.
962ea14e5c3SBrian FeldmanThis section is of type
963ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
964ea14e5c3SBrian FeldmanThe attributes used are
965ea14e5c3SBrian Feldman.Sy SHF_ALLOC
966ea14e5c3SBrian Feldmanand
967ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
968ea14e5c3SBrian Feldman.It .interp
9694e86fcacSSheldon HearnThis section holds the pathname of a program interpreter.
9704e86fcacSSheldon HearnIf the file has
971ea14e5c3SBrian Feldmana loadable segment that includes the section, the section's attributes will
972ea14e5c3SBrian Feldmaninclude the
973ea14e5c3SBrian Feldman.Sy SHF_ALLOC
9744e86fcacSSheldon Hearnbit.
9754e86fcacSSheldon HearnOtherwise, that bit will be off.
9764e86fcacSSheldon HearnThis section is of type
977ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
978ea14e5c3SBrian Feldman.It .line
979ea14e5c3SBrian FeldmanThis section holds line number information for symbolic debugging, which
980ea14e5c3SBrian Feldmandescribes the correspondence between the program source and the machine code.
9814e86fcacSSheldon HearnThe contents are unspecified.
9824e86fcacSSheldon HearnThis section is of type
983ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
984ea14e5c3SBrian FeldmanNo attribute types are used.
985ea14e5c3SBrian Feldman.It .note
986ea14e5c3SBrian FeldmanThis section holds information in the
987ea14e5c3SBrian Feldman.Dq Note Section
9884e86fcacSSheldon Hearnformat described below.
9894e86fcacSSheldon HearnThis section is of type
990ea14e5c3SBrian Feldman.Sy SHT_NOTE .
991ea14e5c3SBrian FeldmanNo attribute types are used.
992ea14e5c3SBrian Feldman.It .plt
9934e86fcacSSheldon HearnThis section holds the procedure linkage table.
9944e86fcacSSheldon HearnThis section is of type
995ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
996ea14e5c3SBrian FeldmanThe attributes are processor-specific.
997ea14e5c3SBrian Feldman.It .relNAME
9984e86fcacSSheldon HearnThis section holds relocation information as described below.
9994e86fcacSSheldon HearnIf the file
1000ea14e5c3SBrian Feldmanhas a loadable segment that includes relocation, the section's attributes
1001ea14e5c3SBrian Feldmanwill include the
1002ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10034e86fcacSSheldon Hearnbit.
10044e86fcacSSheldon HearnOtherwise the bit will be off.
10054e86fcacSSheldon HearnBy convention,
1006ea14e5c3SBrian Feldman.Dq NAME
10074e86fcacSSheldon Hearnis supplied by the section to which the relocations apply.
10084e86fcacSSheldon HearnThus a relocation
1009ea14e5c3SBrian Feldmansection for
1010ea14e5c3SBrian Feldman.Sy .text
1011ea14e5c3SBrian Feldmannormally would have the name
1012ea14e5c3SBrian Feldman.Sy .rel.text .
1013ea14e5c3SBrian FeldmanThis section is of type
1014ea14e5c3SBrian Feldman.Sy SHT_REL .
1015ea14e5c3SBrian Feldman.It .relaNAME
10164e86fcacSSheldon HearnThis section holds relocation information as described below.
10174e86fcacSSheldon HearnIf the file
1018ea14e5c3SBrian Feldmanhas a loadable segment that includes relocation, the section's attributes
1019ea14e5c3SBrian Feldmanwill include the
1020ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10214e86fcacSSheldon Hearnbit.
10224e86fcacSSheldon HearnOtherwise the bit will be off.
10234e86fcacSSheldon HearnBy convention,
1024ea14e5c3SBrian Feldman.Dq NAME
10254e86fcacSSheldon Hearnis supplied by the section to which the relocations apply.
10264e86fcacSSheldon HearnThus a relocation
1027ea14e5c3SBrian Feldmansection for
1028ea14e5c3SBrian Feldman.Sy .text
1029ea14e5c3SBrian Feldmannormally would have the name
1030ea14e5c3SBrian Feldman.Sy .rela.text .
1031ea14e5c3SBrian FeldmanThis section is of type
1032ea14e5c3SBrian Feldman.Sy SHT_RELA .
1033ea14e5c3SBrian Feldman.It .rodata
1034f3a2511aSChris CostelloThis section holds read-only data that typically contributes to a
10354e86fcacSSheldon Hearnnon-writable segment in the process image.
10364e86fcacSSheldon HearnThis section is of type
1037ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1038ea14e5c3SBrian FeldmanThe attribute used is
1039ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
1040ea14e5c3SBrian Feldman.It .rodata1
1041ea14e5c3SBrian FeldmanThis section hold read-only data that typically contributes to a
10424e86fcacSSheldon Hearnnon-writable segment in the process image.
10434e86fcacSSheldon HearnThis section is of type
1044ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1045ea14e5c3SBrian FeldmanThe attribute used is
1046ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
1047ea14e5c3SBrian Feldman.It .shstrtab
10484e86fcacSSheldon HearnThis section holds section names.
10494e86fcacSSheldon HearnThis section is of type
1050ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
1051ea14e5c3SBrian FeldmanNo attribute types are used.
1052ea14e5c3SBrian Feldman.It .strtab
1053ea14e5c3SBrian FeldmanThis section holds strings, most commonly the strings that represent the
10544e86fcacSSheldon Hearnnames associated with symbol table entries.
10554e86fcacSSheldon HearnIf the file has a loadable
1056ea14e5c3SBrian Feldmansegment that includes the symbol string table, the section's attributes
1057ea14e5c3SBrian Feldmanwill include the
1058ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10594e86fcacSSheldon Hearnbit.
10604e86fcacSSheldon HearnOtherwise the bit will be off.
10614e86fcacSSheldon HearnThis section is of type
1062ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
1063ea14e5c3SBrian Feldman.It .symtab
10644e86fcacSSheldon HearnThis section holds a symbol table.
10654e86fcacSSheldon HearnIf the file has a loadable segment
1066ea14e5c3SBrian Feldmanthat includes the symbol table, the section's attributes will include
1067ea14e5c3SBrian Feldmanthe
1068ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10694e86fcacSSheldon Hearnbit.
10704e86fcacSSheldon HearnOtherwise the bit will be off.
10714e86fcacSSheldon HearnThis section is of type
1072ea14e5c3SBrian Feldman.Sy SHT_SYMTAB .
1073ea14e5c3SBrian Feldman.It .text
1074ea14e5c3SBrian FeldmanThis section holds the
1075ea14e5c3SBrian Feldman.Dq text ,
10764e86fcacSSheldon Hearnor executable instructions, of a program.
10774e86fcacSSheldon HearnThis section is of type
1078ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1079ea14e5c3SBrian FeldmanThe attributes used are
1080ea14e5c3SBrian Feldman.Sy SHF_ALLOC
1081ea14e5c3SBrian Feldmanand
1082ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
1083ea14e5c3SBrian Feldman.El
1084ea14e5c3SBrian Feldman.Pp
1085ea14e5c3SBrian FeldmanString table sections hold null-terminated character sequences, commonly
10864e86fcacSSheldon Hearncalled strings.
10874e86fcacSSheldon HearnThe object file uses these strings to represent symbol
10884e86fcacSSheldon Hearnand section names.
10894e86fcacSSheldon HearnOne references a string as an index into the string
10904e86fcacSSheldon Hearntable section.
10914e86fcacSSheldon HearnThe first byte, which is index zero, is defined to hold
10924e86fcacSSheldon Hearna null character.
10934e86fcacSSheldon HearnSimilarly, a string table's last byte is defined to
1094ea14e5c3SBrian Feldmanhold a null character, ensuring null termination for all strings.
1095ea14e5c3SBrian Feldman.Pp
1096ea14e5c3SBrian FeldmanAn object file's symbol table holds information needed to locate and
10974e86fcacSSheldon Hearnrelocate a program's symbolic definitions and references.
10984e86fcacSSheldon HearnA symbol table
1099ea14e5c3SBrian Feldmanindex is a subscript into this array.
1100ea14e5c3SBrian Feldman.Pp
1101ea14e5c3SBrian Feldman.Bd -literal -offset indent
1102ea14e5c3SBrian Feldmantypedef struct {
1103ea14e5c3SBrian Feldman	Elf32_Word      st_name;
1104ea14e5c3SBrian Feldman	Elf32_Addr      st_value;
1105ea14e5c3SBrian Feldman	Elf32_Size      st_size;
1106ea14e5c3SBrian Feldman	unsigned char   st_info;
1107ea14e5c3SBrian Feldman	unsigned char   st_other;
1108ea14e5c3SBrian Feldman	Elf32_Half      st_shndx;
1109ea14e5c3SBrian Feldman} Elf32_Sym;
1110ea14e5c3SBrian Feldman.Ed
1111ea14e5c3SBrian Feldman.Pp
1112ea14e5c3SBrian Feldman.Bd -literal -offset indent
1113ea14e5c3SBrian Feldmantypedef struct {
1114ea14e5c3SBrian Feldman	Elf64_Half      st_name;
1115ea14e5c3SBrian Feldman	unsigned char   st_info;
1116ea14e5c3SBrian Feldman	unsigned char   st_other;
1117ea14e5c3SBrian Feldman	Elf64_Quarter   st_shndx;
1118ea14e5c3SBrian Feldman	Elf64_Addr      st_value;
1119ea14e5c3SBrian Feldman	Elf64_Size      st_size;
1120ea14e5c3SBrian Feldman} Elf64_Sym;
1121ea14e5c3SBrian Feldman.Ed
1122ea14e5c3SBrian Feldman.Pp
1123ea14e5c3SBrian Feldman.Bl -tag -width "st_value" -compact
1124ea14e5c3SBrian Feldman.It Dv st_name
1125ea14e5c3SBrian FeldmanThis member holds an index into the object file's symbol string table,
11264e86fcacSSheldon Hearnwhich holds character representations of the symbol names.
11274e86fcacSSheldon HearnIf the value
1128ea14e5c3SBrian Feldmanis non-zero, it represents a string table index that gives the symbol
11294e86fcacSSheldon Hearnname.
11304e86fcacSSheldon HearnOtherwise, the symbol table has no name.
1131ea14e5c3SBrian Feldman.It Dv st_value
1132ea14e5c3SBrian FeldmanThis member gives the value of the associated symbol.
1133ea14e5c3SBrian Feldman.It Dv st_size
11344e86fcacSSheldon HearnMany symbols have associated sizes.
11354e86fcacSSheldon HearnThis member holds zero if the symbol
1136ea14e5c3SBrian Feldmanhas no size or an unknown size.
1137ea14e5c3SBrian Feldman.It Dv st_info
1138ea14e5c3SBrian FeldmanThis member specifies the symbol's type and binding attributes:
1139ea14e5c3SBrian Feldman.Pp
1140ea14e5c3SBrian Feldman.Bl -tag -width "STT_SECTION" -compact
1141ea14e5c3SBrian Feldman.It Dv STT_NOTYPE
1142ea14e5c3SBrian FeldmanThe symbol's type is not defined.
1143ea14e5c3SBrian Feldman.It Dv STT_OBJECT
1144ea14e5c3SBrian FeldmanThe symbol is associated with a data object.
1145ea14e5c3SBrian Feldman.It Dv STT_FUNC
1146ea14e5c3SBrian FeldmanThe symbol is associated with a function or other executable code.
1147ea14e5c3SBrian Feldman.It Dv STT_SECTION
11484e86fcacSSheldon HearnThe symbol is associated with a section.
11494e86fcacSSheldon HearnSymbol table entries of
1150ea14e5c3SBrian Feldmanthis type exist primarily for relocation and normally have
1151ea14e5c3SBrian Feldman.Sy STB_LOCAL
1152ea14e5c3SBrian Feldmanbindings.
1153ea14e5c3SBrian Feldman.It Dv STT_FILE
1154ea14e5c3SBrian FeldmanBy convention the symbol's name gives the name of the source file
11554e86fcacSSheldon Hearnassociated with the object file.
11564e86fcacSSheldon HearnA file symbol has
1157ea14e5c3SBrian Feldman.Sy STB_LOCAL
1158ea14e5c3SBrian Feldmanbindings, its section index is
1159ea14e5c3SBrian Feldman.Sy SHN_ABS ,
1160ea14e5c3SBrian Feldmanand it precedes the other
1161ea14e5c3SBrian Feldman.Sy STB_LOCAL
1162ea14e5c3SBrian Feldmansymbols of the file, if it is present.
1163ea14e5c3SBrian Feldman.It Dv STT_LOPROC
1164ea14e5c3SBrian FeldmanThis value up to and including
1165ea14e5c3SBrian Feldman.Sy STT_HIPROC
1166ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1167ea14e5c3SBrian Feldman.It Dv STT_HIPROC
1168ea14e5c3SBrian FeldmanThis value down to and including
1169ea14e5c3SBrian Feldman.Sy STT_LOPROC
1170ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1171ea14e5c3SBrian Feldman.El
1172ea14e5c3SBrian Feldman.Pp
1173ea14e5c3SBrian Feldman.Bl -tag -width "STB_GLOBAL" -compact
1174ea14e5c3SBrian Feldman.It Dv STB_LOCAL
1175ea14e5c3SBrian FeldmanLocal symbols are not visible outside the object file containing their
11764e86fcacSSheldon Hearndefinition.
11774e86fcacSSheldon HearnLocal symbols of the same name may exist in multiple file
1178ea14e5c3SBrian Feldmanwithout interfering with each other.
1179ea14e5c3SBrian Feldman.It Dv STB_GLOBAL
11804e86fcacSSheldon HearnGlobal symbols are visible to all object files being combined.
11814e86fcacSSheldon HearnOne file's
1182ea14e5c3SBrian Feldmandefinition of a global symbol will satisfy another file's undefined
1183ea14e5c3SBrian Feldmanreference to the same symbol.
1184ea14e5c3SBrian Feldman.It Dv STB_WEAK
1185ea14e5c3SBrian FeldmanWeak symbols resemble global symbols, but their definitions have lower
1186ea14e5c3SBrian Feldmanprecedence.
1187ea14e5c3SBrian Feldman.It Dv STB_LOPROC
1188ea14e5c3SBrian FeldmanThis value up to and including
1189ea14e5c3SBrian Feldman.Sy STB_HIPROC
1190ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1191ea14e5c3SBrian Feldman.It Dv STB_HIPROC
1192ea14e5c3SBrian FeldmanThis value down to and including
1193ea14e5c3SBrian Feldman.Sy STB_LOPROC
1194ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1195ea14e5c3SBrian Feldman.Pp
1196ea14e5c3SBrian FeldmanThere are macros for packing and unpacking the binding and type fields:
1197d0353b83SRuslan Ermilov.Pp
1198ea14e5c3SBrian Feldman.Bl -tag -width "ELF32_ST_INFO(bind, type)" -compact
1199d0353b83SRuslan Ermilov.It Xo
1200d0353b83SRuslan Ermilov.Fn ELF32_ST_BIND info
1201d0353b83SRuslan Ermilov.Xc
1202ea14e5c3SBrian Feldmanor
1203d0353b83SRuslan Ermilov.Fn ELF64_ST_BIND info
1204f3a2511aSChris Costelloextract a binding from an st_info value.
1205d0353b83SRuslan Ermilov.It Xo
1206d0353b83SRuslan Ermilov.Fn ELF64_ST_TYPE info
1207d0353b83SRuslan Ermilov.Xc
1208ea14e5c3SBrian Feldmanor
1209d0353b83SRuslan Ermilov.Fn ELF32_ST_TYPE info
1210f3a2511aSChris Costelloextract a type from an st_info value.
1211d0353b83SRuslan Ermilov.It Xo
1212d0353b83SRuslan Ermilov.Fn ELF32_ST_INFO bind type
1213d0353b83SRuslan Ermilov.Xc
1214ea14e5c3SBrian Feldmanor
1215d0353b83SRuslan Ermilov.Fn ELF64_ST_INFO bind type
1216f3a2511aSChris Costelloconvert a binding and a type into an st_info value.
1217ea14e5c3SBrian Feldman.El
1218ea14e5c3SBrian Feldman.El
1219ea14e5c3SBrian Feldman.Pp
1220ea14e5c3SBrian Feldman.It Dv st_other
1221ea14e5c3SBrian FeldmanThis member currently holds zero and has no defined meaning.
1222ea14e5c3SBrian Feldman.It Dv st_shndx
1223ea14e5c3SBrian FeldmanEvery symbol table entry is
1224ea14e5c3SBrian Feldman.Dq defined
12254e86fcacSSheldon Hearnin relation to some action.
12264e86fcacSSheldon HearnThis member holds the relevant section
1227ea14e5c3SBrian Feldmanheader table index.
1228ea14e5c3SBrian Feldman.El
1229ea14e5c3SBrian Feldman.Pp
1230ea14e5c3SBrian FeldmanRelocation is the process of connecting symbolic references with
12314e86fcacSSheldon Hearnsymbolic definitions.
12324e86fcacSSheldon HearnRelocatable files must have information that
1233ea14e5c3SBrian Feldmandescribes how to modify their section contents, thus allowing executable
1234ea14e5c3SBrian Feldmanand shared object files to hold the right information for a process'
12354e86fcacSSheldon Hearnprogram image.
12364e86fcacSSheldon HearnRelocation entries are these data.
1237ea14e5c3SBrian Feldman.Pp
1238ea14e5c3SBrian FeldmanRelocation structures that do not need an addend:
1239ea14e5c3SBrian Feldman.Pp
1240ea14e5c3SBrian Feldman.Bd -literal -offset indent
1241ea14e5c3SBrian Feldmantypedef struct {
1242ea14e5c3SBrian Feldman	Elf32_Addr      r_offset;
1243ea14e5c3SBrian Feldman	Elf32_Word      r_info;
1244ea14e5c3SBrian Feldman} Elf32_Rel;
1245ea14e5c3SBrian Feldman.Ed
1246ea14e5c3SBrian Feldman.Bd -literal -offset indent
1247ea14e5c3SBrian Feldmantypedef struct {
1248ea14e5c3SBrian Feldman	Elf64_Addr      r_offset;
1249ea14e5c3SBrian Feldman	Elf64_Size      r_info;
1250ea14e5c3SBrian Feldman} Elf64_Rel;
1251ea14e5c3SBrian Feldman.Ed
1252ea14e5c3SBrian Feldman.Pp
1253ea14e5c3SBrian FeldmanRelocation structures that need an addend:
1254ea14e5c3SBrian Feldman.Pp
1255ea14e5c3SBrian Feldman.Bd -literal -offset indent
1256ea14e5c3SBrian Feldmantypedef struct {
1257ea14e5c3SBrian Feldman	Elf32_Addr      r_offset;
1258ea14e5c3SBrian Feldman	Elf32_Word      r_info;
1259ea14e5c3SBrian Feldman	Elf32_Sword     r_addend;
1260ea14e5c3SBrian Feldman} Elf32_Rela;
1261ea14e5c3SBrian Feldman.Ed
1262ea14e5c3SBrian Feldman.Bd -literal -offset indent
1263ea14e5c3SBrian Feldmantypedef struct {
1264ea14e5c3SBrian Feldman	Elf64_Addr      r_offset;
1265ea14e5c3SBrian Feldman	Elf64_Size      r_info;
1266ea14e5c3SBrian Feldman	Elf64_Off       r_addend;
1267ea14e5c3SBrian Feldman} Elf64_Rela;
1268ea14e5c3SBrian Feldman.Ed
1269ea14e5c3SBrian Feldman.Pp
1270ea14e5c3SBrian Feldman.Bl -tag -width "r_offset" -compact
1271ea14e5c3SBrian Feldman.It Dv r_offset
1272ea14e5c3SBrian FeldmanThis member gives the location at which to apply the relocation action.
1273ea14e5c3SBrian FeldmanFor a relocatable file, the value is the byte offset from the beginning
12744e86fcacSSheldon Hearnof the section to the storage unit affected by the relocation.
12754e86fcacSSheldon HearnFor an
1276ea14e5c3SBrian Feldmanexecutable file or shared object, the value is the virtual address of
1277ea14e5c3SBrian Feldmanthe storage unit affected by the relocation.
1278ea14e5c3SBrian Feldman.It Dv r_info
1279ea14e5c3SBrian FeldmanThis member gives both the symbol table index with respect to which the
12804e86fcacSSheldon Hearnrelocation must be made and the type of relocation to apply.
12814e86fcacSSheldon HearnRelocation
12824e86fcacSSheldon Hearntypes are processor-specific.
12834e86fcacSSheldon HearnWhen the text refers to a relocation
1284ea14e5c3SBrian Feldmanentry's relocation type or symbol table index, it means the result of
1285ea14e5c3SBrian Feldmanapplying
1286ea14e5c3SBrian Feldman.Sy ELF_[32|64]_R_TYPE
1287ea14e5c3SBrian Feldmanor
1288ea14e5c3SBrian Feldman.Sy ELF[32|64]_R_SYM ,
1289ea14e5c3SBrian Feldmanrespectively to the entry's
1290ea14e5c3SBrian Feldman.Sy r_info
1291ea14e5c3SBrian Feldmanmember.
1292ea14e5c3SBrian Feldman.It Dv r_addend
1293ea14e5c3SBrian FeldmanThis member specifies a constant addend used to compute the value to be
1294ea14e5c3SBrian Feldmanstored into the relocatable field.
1295ea14e5c3SBrian Feldman.El
1296ea14e5c3SBrian Feldman.Sh SEE ALSO
1297ea14e5c3SBrian Feldman.Xr as 1 ,
1298ea14e5c3SBrian Feldman.Xr gdb 1 ,
1299ea14e5c3SBrian Feldman.Xr ld 1 ,
1300ea14e5c3SBrian Feldman.Xr objdump 1 ,
1301ea14e5c3SBrian Feldman.Xr execve 2 ,
1302ea14e5c3SBrian Feldman.Xr core 5
1303ea14e5c3SBrian Feldman.Rs
1304ea14e5c3SBrian Feldman.%A Hewlett Packard
1305ea14e5c3SBrian Feldman.%B Elf-64 Object File Format
1306ea14e5c3SBrian Feldman.Re
1307ea14e5c3SBrian Feldman.Rs
1308ea14e5c3SBrian Feldman.%A Santa Cruz Operation
1309ea14e5c3SBrian Feldman.%B System V Application Binary Interface
1310ea14e5c3SBrian Feldman.Re
1311ea14e5c3SBrian Feldman.Rs
1312ea14e5c3SBrian Feldman.%A Unix System Laboratories
1313ea14e5c3SBrian Feldman.%T Object Files
1314ea14e5c3SBrian Feldman.%B "Executable and Linking Format (ELF)"
1315ea14e5c3SBrian Feldman.Re
1316ea14e5c3SBrian Feldman.Sh HISTORY
1317ea14e5c3SBrian FeldmanThe ELF header files made their appearance in
1318ea14e5c3SBrian Feldman.Fx 2.2.6 .
1319ea14e5c3SBrian FeldmanELF in itself first appeared in
1320ea14e5c3SBrian Feldman.At V .
1321ea14e5c3SBrian FeldmanThe ELF format is an adopted standard.
1322ea14e5c3SBrian Feldman.Sh AUTHORS
1323ea14e5c3SBrian FeldmanThis manual page was written by
1324ea14e5c3SBrian Feldman.An Jeroen Ruigrok van der Werven
1325d905b0b6SMike Pritchard.Aq asmodai@FreeBSD.org
1326ed2879a5SRuslan Ermilovwith inspiration from BSDi's
1327ed2879a5SRuslan Ermilov.Bsx
1328ea14e5c3SBrian Feldman.Xr elf 5
1329ea14e5c3SBrian Feldmanmanpage.
1330