xref: /freebsd/share/man/man5/elf.5 (revision 757686b11510174fffffec96b816204c8d659fba)
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
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
93757686b1SMarcel MoolenaarElf32_Off	Unsigned 32-bit file offset
94757686b1SMarcel MoolenaarElf32_Sword	Signed 32-bit field or integer
95757686b1SMarcel MoolenaarElf32_Word	Unsigned 32-bit field or integer
96ea14e5c3SBrian Feldman.Ed
97ea14e5c3SBrian Feldman.Pp
98ea14e5c3SBrian FeldmanFor 64-bit architectures we have the following types:
99ea14e5c3SBrian Feldman.Bd -literal -offset indent
100757686b1SMarcel MoolenaarElf64_Addr	Unsigned 64-bit program address
101757686b1SMarcel MoolenaarElf64_Half	Unsigned 16-bit field
102757686b1SMarcel MoolenaarElf64_Off	Unsigned 64-bit file offset
103757686b1SMarcel MoolenaarElf64_Sword	Signed 32-bit field
104757686b1SMarcel MoolenaarElf64_Word	Unsigned 32-bit field
105757686b1SMarcel MoolenaarElf64_Sxword	Signed 64-bit field or integer
106757686b1SMarcel MoolenaarElf64_Xword	Unsigned 64-bit field or integer
107ea14e5c3SBrian Feldman.Ed
108ea14e5c3SBrian Feldman.Pp
109ea14e5c3SBrian FeldmanAll data structures that the file format defines follow the
110ea14e5c3SBrian Feldman.Dq natural
1114e86fcacSSheldon Hearnsize and alignment guidelines for the relevant class.
1124e86fcacSSheldon HearnIf necessary,
113ea14e5c3SBrian Feldmandata structures contain explicit padding to ensure 4-byte alignment
114ea14e5c3SBrian Feldmanfor 4-byte objects, to force structure sizes to a multiple of 4, etc.
115ea14e5c3SBrian Feldman.Pp
116ea14e5c3SBrian FeldmanThe ELF header is described by the type Elf32_Ehdr or Elf64_Ehdr:
117ea14e5c3SBrian Feldman.Bd -literal -offset indent
118ea14e5c3SBrian Feldmantypedef struct {
119ea14e5c3SBrian Feldman        unsigned char   e_ident[EI_NIDENT];
120ea14e5c3SBrian Feldman        Elf32_Half      e_type;
121ea14e5c3SBrian Feldman        Elf32_Half      e_machine;
122ea14e5c3SBrian Feldman        Elf32_Word      e_version;
123ea14e5c3SBrian Feldman        Elf32_Addr      e_entry;
124ea14e5c3SBrian Feldman        Elf32_Off       e_phoff;
125ea14e5c3SBrian Feldman        Elf32_Off       e_shoff;
126ea14e5c3SBrian Feldman        Elf32_Word      e_flags;
127ea14e5c3SBrian Feldman        Elf32_Half      e_ehsize;
128ea14e5c3SBrian Feldman        Elf32_Half      e_phentsize;
129ea14e5c3SBrian Feldman        Elf32_Half      e_phnum;
130ea14e5c3SBrian Feldman        Elf32_Half      e_shentsize;
131ea14e5c3SBrian Feldman        Elf32_Half      e_shnum;
132ea14e5c3SBrian Feldman        Elf32_Half      e_shstrndx;
133ea14e5c3SBrian Feldman} Elf32_Ehdr;
134ea14e5c3SBrian Feldman.Ed
135ea14e5c3SBrian Feldman.Pp
136ea14e5c3SBrian Feldman.Bd -literal -offset indent
137ea14e5c3SBrian Feldmantypedef struct {
138ea14e5c3SBrian Feldman	unsigned char   e_ident[EI_NIDENT];
139757686b1SMarcel Moolenaar	Elf64_Half      e_type;
140757686b1SMarcel Moolenaar	Elf64_Half      e_machine;
141757686b1SMarcel Moolenaar	Elf64_Word      e_version;
142ea14e5c3SBrian Feldman	Elf64_Addr      e_entry;
143ea14e5c3SBrian Feldman	Elf64_Off       e_phoff;
144ea14e5c3SBrian Feldman	Elf64_Off       e_shoff;
145757686b1SMarcel Moolenaar	Elf64_Word      e_flags;
146757686b1SMarcel Moolenaar	Elf64_Half      e_ehsize;
147757686b1SMarcel Moolenaar	Elf64_Half      e_phentsize;
148757686b1SMarcel Moolenaar	Elf64_Half      e_phnum;
149757686b1SMarcel Moolenaar	Elf64_Half      e_shentsize;
150757686b1SMarcel Moolenaar	Elf64_Half      e_shnum;
151757686b1SMarcel Moolenaar	Elf64_Half      e_shstrndx;
152ea14e5c3SBrian Feldman} Elf64_Ehdr;
153ea14e5c3SBrian Feldman.Ed
154ea14e5c3SBrian Feldman.Pp
155ea14e5c3SBrian FeldmanThe fields have the following meanings:
156ea14e5c3SBrian Feldman.Pp
157ea14e5c3SBrian Feldman.Bl -tag -width "e_phentsize" -compact -offset indent
158ea14e5c3SBrian Feldman.It Dv e_ident
159ea14e5c3SBrian FeldmanThis array of bytes specifies to interpret the file,
160ea14e5c3SBrian Feldmanindependent of the processor or the file's remaining contents.
161ea14e5c3SBrian FeldmanWithin this array everything is named by macros, which start with
162ea14e5c3SBrian Feldmanthe prefix
163ea14e5c3SBrian Feldman.Sy EI_
164ea14e5c3SBrian Feldmanand may contain values which start with the prefix
165ea14e5c3SBrian Feldman.Sy ELF .
166ea14e5c3SBrian FeldmanThe following macros are defined:
167ea14e5c3SBrian Feldman.Pp
1680d59faf6SJeroen Ruigrok van der Werven.Bl -tag -width "EI_ABIVERSION" -compact
169ea14e5c3SBrian Feldman.It Dv EI_MAG0
1704e86fcacSSheldon HearnThe first byte of the magic number.
1714e86fcacSSheldon HearnIt must be filled with
172ea14e5c3SBrian Feldman.Sy ELFMAG0 .
173ea14e5c3SBrian Feldman.It Dv EI_MAG1
1744e86fcacSSheldon HearnThe second byte of the magic number.
1754e86fcacSSheldon HearnIt must be filled with
176ea14e5c3SBrian Feldman.Sy ELFMAG1 .
177ea14e5c3SBrian Feldman.It Dv EI_MAG2
1784e86fcacSSheldon HearnThe third byte of the magic number.
1794e86fcacSSheldon HearnIt must be filled with
180ea14e5c3SBrian Feldman.Sy ELFMAG2 .
181ea14e5c3SBrian Feldman.It Dv EI_MAG3
1824e86fcacSSheldon HearnThe fourth byte of the magic number.
1834e86fcacSSheldon HearnIt must be filled with
184ea14e5c3SBrian Feldman.Sy ELFMAG3 .
185ea14e5c3SBrian Feldman.It Dv EI_CLASS
186ea14e5c3SBrian FeldmanThe fifth byte identifies the architecture for this binary:
187ea14e5c3SBrian Feldman.Pp
188ea14e5c3SBrian Feldman.Bl -tag -width "ELFCLASSNONE" -compact
189ea14e5c3SBrian Feldman.It Dv ELFCLASSNONE
190ea14e5c3SBrian FeldmanThis class is invalid.
191ea14e5c3SBrian Feldman.It Dv ELFCLASS32
1924e86fcacSSheldon HearnThis defines the 32-bit architecture.
1934e86fcacSSheldon HearnIt supports machines with files
194ea14e5c3SBrian Feldmanand virtual address spaces up to 4 Gigabytes.
195ea14e5c3SBrian Feldman.It Dv ELFCLASS64
196ea14e5c3SBrian FeldmanThis defines the 64-bit architecture.
197ea14e5c3SBrian Feldman.El
198ea14e5c3SBrian Feldman.It Dv EI_DATA
199ea14e5c3SBrian FeldmanThe sixth byte specifies the data encoding of the processor-specific
2004e86fcacSSheldon Hearndata in the file.
2014e86fcacSSheldon HearnCurrently these encodings are supported:
202ea14e5c3SBrian Feldman.Pp
203ea14e5c3SBrian Feldman.Bl -tag -width "ELFDATA2LSB" -compact
204ea14e5c3SBrian Feldman.It Dv ELFDATANONE
205ea14e5c3SBrian FeldmanUnknown data format.
206ea14e5c3SBrian Feldman.It Dv ELFDATA2LSB
207ea14e5c3SBrian FeldmanTwo's complement, little-endian.
208ea14e5c3SBrian Feldman.It Dv ELFDATA2MSB
209ea14e5c3SBrian FeldmanTwo's complement, big-endian.
210ea14e5c3SBrian Feldman.El
211ea14e5c3SBrian Feldman.It Dv EI_VERSION
212ea14e5c3SBrian FeldmanThe version number of the ELF specification:
213ea14e5c3SBrian Feldman.Pp
214ea14e5c3SBrian Feldman.Bl -tag -width "EV_CURRENT" -compact
215ea14e5c3SBrian Feldman.It Dv EV_NONE
216ea14e5c3SBrian FeldmanInvalid version.
217ea14e5c3SBrian Feldman.It Dv EV_CURRENT
218ea14e5c3SBrian FeldmanCurrent version.
219ea14e5c3SBrian Feldman.El
2200d59faf6SJeroen Ruigrok van der Werven.It Dv EI_OSABI
2210d59faf6SJeroen Ruigrok van der WervenThis byte identifies the operating system
2220d59faf6SJeroen Ruigrok van der Wervenand ABI to which the object is targeted.
2230d59faf6SJeroen Ruigrok van der WervenSome fields in other ELF structures have flags
2240d59faf6SJeroen Ruigrok van der Wervenand values that have platform specific meanings;
2250d59faf6SJeroen Ruigrok van der Werventhe interpretation of those fields is determined by the value of this byte.
2260d59faf6SJeroen Ruigrok van der WervenThe following values are currently defined:
2270d59faf6SJeroen Ruigrok van der Werven.Pp
2280d59faf6SJeroen Ruigrok van der Werven.Bl -tag -width "ELFOSABI_STANDALONE" -compact
2290d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_SYSV
2300d59faf6SJeroen Ruigrok van der WervenUNIX System V ABI.
2310d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_HPUX
2320d59faf6SJeroen Ruigrok van der WervenHP-UX operating system ABI.
2330d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_NETBSD
234d013e3f5SRuslan Ermilov.Nx
235d013e3f5SRuslan Ermilovoperating system ABI.
2360d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_LINUX
2370d59faf6SJeroen Ruigrok van der WervenGNU/Linux operating system ABI.
2380d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_HURD
2390d59faf6SJeroen Ruigrok van der WervenGNU/Hurd operating system ABI.
2400d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_86OPEN
2410d59faf6SJeroen Ruigrok van der Werven86Open Common IA32 ABI.
2420d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_SOLARIS
2430d59faf6SJeroen Ruigrok van der WervenSolaris operating system ABI.
2440d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_MONTEREY
2450d59faf6SJeroen Ruigrok van der WervenMonterey project ABI.
2460d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_IRIX
2470d59faf6SJeroen Ruigrok van der WervenIRIX operating system ABI.
2480d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_FREEBSD
249c5e7e03aSRuslan Ermilov.Fx
250c5e7e03aSRuslan Ermilovoperating system ABI.
2510d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_TRU64
2520d59faf6SJeroen Ruigrok van der WervenTRU64 UNIX operating system ABI.
2530d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_ARM
2540d59faf6SJeroen Ruigrok van der WervenARM architecture ABI.
2550d59faf6SJeroen Ruigrok van der Werven.It Dv ELFOSABI_STANDALONE
2560d59faf6SJeroen Ruigrok van der WervenStandalone (embedded) ABI.
2570d59faf6SJeroen Ruigrok van der Werven.El
2580d59faf6SJeroen Ruigrok van der Werven.It Dv EI_ABIVERSION
2590d59faf6SJeroen Ruigrok van der WervenThis byte identifies the version of the ABI
2600d59faf6SJeroen Ruigrok van der Wervento which the object is targeted.
2610d59faf6SJeroen Ruigrok van der WervenThis field is used to distinguish among incompatible versions of an ABI.
2620d59faf6SJeroen Ruigrok van der WervenThe interpretation of this version number
2630d59faf6SJeroen Ruigrok van der Wervenis dependent on the ABI identified by the EI_OSABI field.
2640d59faf6SJeroen Ruigrok van der WervenApplications conforming to this specification use the value 0.
265ea14e5c3SBrian Feldman.It Dv EI_PAD
2664e86fcacSSheldon HearnStart of padding.
2674e86fcacSSheldon HearnThese bytes are reserved and set to zero.
2684e86fcacSSheldon HearnPrograms
2694e86fcacSSheldon Hearnwhich read them should ignore them.
2704e86fcacSSheldon HearnThe value for EI_PAD will change in
271ea14e5c3SBrian Feldmanthe future if currently unused bytes are given meanings.
272ea14e5c3SBrian Feldman.It Dv EI_BRAND
273ea14e5c3SBrian FeldmanStart of architecture identification.
274ea14e5c3SBrian Feldman.It Dv EI_NIDENT
275ea14e5c3SBrian FeldmanThe size of the e_ident array.
276ea14e5c3SBrian Feldman.El
277ea14e5c3SBrian Feldman.Pp
278ea14e5c3SBrian Feldman.It Dv e_type
279ea14e5c3SBrian FeldmanThis member of the structure identifies the object file type:
280ea14e5c3SBrian Feldman.Pp
281ea14e5c3SBrian Feldman.Bl -tag -width "ET_NONE" -compact
282ea14e5c3SBrian Feldman.It Dv ET_NONE
283ea14e5c3SBrian FeldmanAn unknown type.
284ea14e5c3SBrian Feldman.It Dv ET_REL
285ea14e5c3SBrian FeldmanA relocatable file.
286ea14e5c3SBrian Feldman.It Dv ET_EXEC
287ea14e5c3SBrian FeldmanAn executable file.
288ea14e5c3SBrian Feldman.It Dv ET_DYN
289ea14e5c3SBrian FeldmanA shared object.
290ea14e5c3SBrian Feldman.It Dv ET_CORE
291ea14e5c3SBrian FeldmanA core file.
292ea14e5c3SBrian Feldman.El
293ea14e5c3SBrian Feldman.Pp
294ea14e5c3SBrian Feldman.It Dv e_machine
295ea14e5c3SBrian FeldmanThis member specifies the required architecture for an individual file:
296ea14e5c3SBrian Feldman.Pp
297ea14e5c3SBrian Feldman.Bl -tag -width "EM_MIPS_RS4_BE" -compact
298ea14e5c3SBrian Feldman.It Dv EM_NONE
299ea14e5c3SBrian FeldmanAn unknown machine.
300ea14e5c3SBrian Feldman.It Dv EM_M32
301ea14e5c3SBrian FeldmanAT&T WE 32100.
302ea14e5c3SBrian Feldman.It Dv EM_SPARC
303ea14e5c3SBrian FeldmanSun Microsystems SPARC.
304ea14e5c3SBrian Feldman.It Dv EM_386
305ea14e5c3SBrian FeldmanIntel 80386.
306ea14e5c3SBrian Feldman.It Dv EM_68K
307ea14e5c3SBrian FeldmanMotorola 68000.
308ea14e5c3SBrian Feldman.It Dv EM_88K
309ea14e5c3SBrian FeldmanMotorola 88000.
310ea14e5c3SBrian Feldman.It Dv EM_486
311ea14e5c3SBrian FeldmanIntel 80486.
312ea14e5c3SBrian Feldman.It Dv EM_860
313ea14e5c3SBrian FeldmanIntel 80860.
314ea14e5c3SBrian Feldman.It Dv EM_MIPS
315ea14e5c3SBrian FeldmanMIPS RS3000 (big-endian only).
316ea14e5c3SBrian Feldman.It Dv EM_MIPS_RS4_BE
317ea14e5c3SBrian FeldmanMIPS RS4000 (big-endian only).
318ea14e5c3SBrian Feldman.It Dv EM_SPARC64
319ea14e5c3SBrian FeldmanSPARC v9 64-bit unofficial.
320ea14e5c3SBrian Feldman.It Dv EM_PARISC
321ea14e5c3SBrian FeldmanHPPA.
322ea14e5c3SBrian Feldman.It Dv EM_PPC
323ea14e5c3SBrian FeldmanPowerPC.
324ea14e5c3SBrian Feldman.It Dv EM_ALPHA
325ea14e5c3SBrian FeldmanCompaq [DEC] Alpha.
326ea14e5c3SBrian Feldman.El
327ea14e5c3SBrian Feldman.Pp
328ea14e5c3SBrian Feldman.It Dv e_version
329ea14e5c3SBrian FeldmanThis member identifies the file version:
330ea14e5c3SBrian Feldman.Pp
331ea14e5c3SBrian Feldman.Bl -tag -width "EV_CURRENT" -compact
332ea14e5c3SBrian Feldman.It Dv EV_NONE
333ea14e5c3SBrian FeldmanInvalid version
334ea14e5c3SBrian Feldman.It Dv EV_CURRENT
335ea14e5c3SBrian FeldmanCurrent version
336ea14e5c3SBrian Feldman.El
337ea14e5c3SBrian Feldman.It Dv e_entry
338ea14e5c3SBrian FeldmanThis member gives the virtual address to which the system first transfers
3394e86fcacSSheldon Hearncontrol, thus starting the process.
3404e86fcacSSheldon HearnIf the file has no associated entry
341ea14e5c3SBrian Feldmanpoint, this member holds zero.
342ea14e5c3SBrian Feldman.It Dv e_phoff
3434e86fcacSSheldon HearnThis member holds the program header table's file offset in bytes.
3444e86fcacSSheldon HearnIf
345ea14e5c3SBrian Feldmanthe file has no program header table, this member holds zero.
346ea14e5c3SBrian Feldman.It Dv e_shoff
3474e86fcacSSheldon HearnThis member holds the section header table's file offset in bytes.
3484e86fcacSSheldon HearnIf the
349ea14e5c3SBrian Feldmanfile has no section header table this member holds zero.
350ea14e5c3SBrian Feldman.It Dv e_flags
3514e86fcacSSheldon HearnThis member holds processor-specific flags associated with the file.
3524e86fcacSSheldon HearnFlag
3535203edcdSRuslan Ermilovnames take the form EF_`machine_flag'.
3545203edcdSRuslan ErmilovCurrently 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.El
395ea14e5c3SBrian Feldman.Pp
396ea14e5c3SBrian FeldmanAn executable or shared object file's program header table is an array of
397ea14e5c3SBrian Feldmanstructures, each describing a segment or other information the system needs
3984e86fcacSSheldon Hearnto prepare the program for execution.
3994e86fcacSSheldon HearnAn object file
400ea14e5c3SBrian Feldman.Em segment
401ea14e5c3SBrian Feldmancontains one or more
402ea14e5c3SBrian Feldman.Em sections .
403ea14e5c3SBrian FeldmanProgram headers are meaningful only for executable and shared object files.
404ea14e5c3SBrian FeldmanA file specifies its own program header size with the ELF header's
405ea14e5c3SBrian Feldman.Sy e_phentsize
406ea14e5c3SBrian Feldmanand
407ea14e5c3SBrian Feldman.Sy e_phnum
4084e86fcacSSheldon Hearnmembers.
4094e86fcacSSheldon HearnAs with the Elf executable header, the program header
410ea14e5c3SBrian Feldmanalso has different versions depending on the architecture:
411ea14e5c3SBrian Feldman.Pp
412ea14e5c3SBrian Feldman.Bd -literal -offset indent
413ea14e5c3SBrian Feldmantypedef struct {
414ea14e5c3SBrian Feldman        Elf32_Word      p_type;
415ea14e5c3SBrian Feldman        Elf32_Off       p_offset;
416ea14e5c3SBrian Feldman        Elf32_Addr      p_vaddr;
417ea14e5c3SBrian Feldman        Elf32_Addr      p_paddr;
418757686b1SMarcel Moolenaar        Elf32_Word      p_filesz;
419757686b1SMarcel Moolenaar        Elf32_Word      p_memsz;
420ea14e5c3SBrian Feldman        Elf32_Word      p_flags;
421757686b1SMarcel Moolenaar        Elf32_Word      p_align;
422ea14e5c3SBrian Feldman} Elf32_Phdr;
423ea14e5c3SBrian Feldman.Ed
424ea14e5c3SBrian Feldman.Pp
425ea14e5c3SBrian Feldman.Bd -literal -offset indent
426ea14e5c3SBrian Feldmantypedef struct {
427757686b1SMarcel Moolenaar        Elf64_Word      p_type;
428757686b1SMarcel Moolenaar        Elf64_Word      p_flags;
429ea14e5c3SBrian Feldman        Elf64_Off       p_offset;
430ea14e5c3SBrian Feldman        Elf64_Addr      p_vaddr;
431ea14e5c3SBrian Feldman        Elf64_Addr      p_paddr;
432757686b1SMarcel Moolenaar        Elf64_Xword     p_filesz;
433757686b1SMarcel Moolenaar        Elf64_Xword     p_memsz;
434757686b1SMarcel Moolenaar        Elf64_Xword     p_align;
435ea14e5c3SBrian Feldman} Elf64_Phdr;
436ea14e5c3SBrian Feldman.Ed
437ea14e5c3SBrian Feldman.Pp
438ea14e5c3SBrian FeldmanThe main difference between the 32-bit and the 64-bit program header lies
439ea14e5c3SBrian Feldmanonly in the location of a
440ea14e5c3SBrian Feldman.Sy p_flags
441ea14e5c3SBrian Feldmanmember in the total struct.
442ea14e5c3SBrian Feldman.Pp
443ea14e5c3SBrian Feldman.Bl -tag -width "p_offset" -compact -offset indent
444ea14e5c3SBrian Feldman.It Dv p_type
445ea14e5c3SBrian FeldmanThis member of the Phdr struct tells what kind of segment this array
446ea14e5c3SBrian Feldmanelement describes or how to interpret the array element's information.
447ea14e5c3SBrian Feldman.Bl -tag -width "PT_DYNAMIC" -compact
448ea14e5c3SBrian Feldman.Pp
449ea14e5c3SBrian Feldman.It Dv PT_NULL
450ea14e5c3SBrian FeldmanThe array element is unused and the other members' values are undefined.
451ea14e5c3SBrian FeldmanThis lets the program header have ignored entries.
452ea14e5c3SBrian Feldman.It Dv PT_LOAD
453ea14e5c3SBrian FeldmanThe array element specifies a loadable segment, described by
454ea14e5c3SBrian Feldman.Sy p_filesz
455ea14e5c3SBrian Feldmanand
456ea14e5c3SBrian Feldman.Sy p_memsz .
457ea14e5c3SBrian FeldmanThe bytes from the file are mapped to the beginning of the memory
4584e86fcacSSheldon Hearnsegment.
4599232968eSDima DorfmanIf the segment's memory size
4609232968eSDima Dorfman.Pq Sy p_memsz
4619232968eSDima Dorfmanis larger than the file size
4629232968eSDima Dorfman.Pq Sy p_filesz ,
4639232968eSDima Dorfmanthe
464ea14e5c3SBrian Feldman.Dq extra
465ea14e5c3SBrian Feldmanbytes are defined to hold the value 0 and to follow the segment's
4664e86fcacSSheldon Hearninitialized area.
4674e86fcacSSheldon HearnThe file size may not be larger than the memory size.
468ea14e5c3SBrian FeldmanLoadable segment entries in the program header table appear in ascending
469ea14e5c3SBrian Feldmanorder, sorted on the
470ea14e5c3SBrian Feldman.Sy p_vaddr
471ea14e5c3SBrian Feldmanmember.
472ea14e5c3SBrian Feldman.It Dv PT_DYNAMIC
473ea14e5c3SBrian FeldmanThe array element specifies dynamic linking information.
474ea14e5c3SBrian Feldman.It Dv PT_INTERP
475ea14e5c3SBrian FeldmanThe array element specifies the location and size of a null-terminated
4764e86fcacSSheldon Hearnpath name to invoke as an interpreter.
4774e86fcacSSheldon HearnThis segment type is meaningful
4785203edcdSRuslan Ermilovonly for executable files (though it may occur for shared objects).
4795203edcdSRuslan ErmilovHowever
4804e86fcacSSheldon Hearnit may not occur more than once in a file.
4814e86fcacSSheldon HearnIf it is present it must precede
482ea14e5c3SBrian Feldmanany loadable segment entry.
483ea14e5c3SBrian Feldman.It Dv PT_NOTE
484ea14e5c3SBrian FeldmanThe array element specifies the location and size for auxiliary information.
485ea14e5c3SBrian Feldman.It Dv PT_SHLIB
4864e86fcacSSheldon HearnThis segment type is reserved but has unspecified semantics.
4874e86fcacSSheldon HearnPrograms that
488ea14e5c3SBrian Feldmancontain an array element of this type do not conform to the ABI.
489ea14e5c3SBrian Feldman.It Dv PT_PHDR
490ea14e5c3SBrian FeldmanThe array element, if present, specifies the location and size of the program
491ea14e5c3SBrian Feldmanheader table itself, both in the file and in the memory image of the program.
4924e86fcacSSheldon HearnThis segment type may not occur more than once in a file.
4934e86fcacSSheldon HearnMoreover, it may
494ea14e5c3SBrian Feldmanonly occur if the program header table is part of the memory image of the
4954e86fcacSSheldon Hearnprogram.
4964e86fcacSSheldon HearnIf it is present it must precede any loadable segment entry.
497ea14e5c3SBrian Feldman.It Dv PT_LOPROC
498ea14e5c3SBrian FeldmanThis value up to and including
499ea14e5c3SBrian Feldman.Sy PT_HIPROC
500ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
501ea14e5c3SBrian Feldman.It Dv PT_HIPROC
502ea14e5c3SBrian FeldmanThis value down to and including
503ea14e5c3SBrian Feldman.Sy PT_LOPROC
504ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
505ea14e5c3SBrian Feldman.El
506ea14e5c3SBrian Feldman.Pp
507ea14e5c3SBrian Feldman.It Dv p_offset
508ea14e5c3SBrian FeldmanThis member holds the offset from the beginning of the file at which
509f4c311e6SPeter Pentchevthe first byte of the segment resides.
510ea14e5c3SBrian Feldman.It Dv p_vaddr
511ea14e5c3SBrian FeldmanThis member holds the virtual address at which the first byte of the
512ea14e5c3SBrian Feldmansegment resides in memory.
513ea14e5c3SBrian Feldman.It Dv p_paddr
514ea14e5c3SBrian FeldmanOn systems for which physical addressing is relevant, this member is
5154e86fcacSSheldon Hearnreserved for the segment's physical address.
516753d686dSRuslan ErmilovUnder
517753d686dSRuslan Ermilov.Bx
518753d686dSRuslan Ermilovthis member is
519ea14e5c3SBrian Feldmannot used and must be zero.
520ea14e5c3SBrian Feldman.It Dv p_filesz
521ea14e5c3SBrian FeldmanThis member holds the number of bytes in the file image of the segment.
522ea14e5c3SBrian FeldmanIt may be zero.
523ea14e5c3SBrian Feldman.It Dv p_memsz
524ea14e5c3SBrian FeldmanThis member holds the number of bytes in the memory image of the segment.
525ea14e5c3SBrian FeldmanIt may be zero.
526ea14e5c3SBrian Feldman.It Dv p_flags
527ea14e5c3SBrian FeldmanThis member holds flags relevant to the segment:
528ea14e5c3SBrian Feldman.Pp
529ea14e5c3SBrian Feldman.Bl -tag -width "PF_X" -compact
530ea14e5c3SBrian Feldman.It Dv PF_X
531ea14e5c3SBrian FeldmanAn executable segment.
532ea14e5c3SBrian Feldman.It Dv PF_W
533ea14e5c3SBrian FeldmanA writable segment.
534ea14e5c3SBrian Feldman.It Dv PF_R
535ea14e5c3SBrian FeldmanA readable segment.
536ea14e5c3SBrian Feldman.El
537ea14e5c3SBrian Feldman.Pp
538ea14e5c3SBrian FeldmanA text segment commonly has the flags
539ea14e5c3SBrian Feldman.Sy PF_X
540ea14e5c3SBrian Feldmanand
541672300f7SRuslan Ermilov.Sy PF_R .
542ea14e5c3SBrian FeldmanA data segment commonly has
543ea14e5c3SBrian Feldman.Sy PF_X ,
544ea14e5c3SBrian Feldman.Sy PF_W
545ea14e5c3SBrian Feldmanand
546ea14e5c3SBrian Feldman.Sy PF_R .
547ea14e5c3SBrian Feldman.It Dv p_align
548ea14e5c3SBrian FeldmanThis member holds the value to which the segments are aligned in memory
5494e86fcacSSheldon Hearnand in the file.
5504e86fcacSSheldon HearnLoadable process segments must have congruent values for
551ea14e5c3SBrian Feldman.Sy p_vaddr
552ea14e5c3SBrian Feldmanand
553ea14e5c3SBrian Feldman.Sy p_offset ,
5544e86fcacSSheldon Hearnmodulo the page size.
5554e86fcacSSheldon HearnValues of zero and one mean no alignment is required.
556ea14e5c3SBrian FeldmanOtherwise,
557ea14e5c3SBrian Feldman.Sy p_align
558ea14e5c3SBrian Feldmanshould be a positive, integral power of two, and
559ea14e5c3SBrian Feldman.Sy p_vaddr
560ea14e5c3SBrian Feldmanshould equal
561ea14e5c3SBrian Feldman.Sy p_offset ,
562ea14e5c3SBrian Feldmanmodulo
563ea14e5c3SBrian Feldman.Sy p_align .
564ea14e5c3SBrian Feldman.El
565ea14e5c3SBrian Feldman.Pp
5664e86fcacSSheldon HearnAn file's section header table lets one locate all the file's sections.
5674e86fcacSSheldon HearnThe
5684e86fcacSSheldon Hearnsection header table is an array of Elf32_Shdr or Elf64_Shdr structures.
5694e86fcacSSheldon HearnThe
570ea14e5c3SBrian FeldmanELF header's
571ea14e5c3SBrian Feldman.Sy e_shoff
572ea14e5c3SBrian Feldmanmember gives the byte offset from the beginning of the file to the section
573ea14e5c3SBrian Feldmanheader table.
574ea14e5c3SBrian Feldman.Sy e_shnum
575ea14e5c3SBrian Feldmanholds the number of entries the section header table contains.
576ea14e5c3SBrian Feldman.Sy e_shentsize
577ea14e5c3SBrian Feldmanholds the size in bytes of each entry.
578ea14e5c3SBrian Feldman.Pp
5794e86fcacSSheldon HearnA section header table index is a subscript into this array.
5804e86fcacSSheldon HearnSome section
5814e86fcacSSheldon Hearnheader table indices are reserved.
5824e86fcacSSheldon HearnAn object file does not have sections for
583ea14e5c3SBrian Feldmanthese special indices:
584ea14e5c3SBrian Feldman.Pp
585ea14e5c3SBrian Feldman.Bl -tag -width "SHN_LORESERVE" -compact
586ea14e5c3SBrian Feldman.It Dv SHN_UNDEF
5877e1b2808SHiten PandyaThis value marks an undefined, missing, irrelevant, or otherwise meaningless
588ea14e5c3SBrian Feldmansection reference.
5897e1b2808SHiten PandyaFor example, a symbol
5907e1b2808SHiten Pandya.Dq defined
5917e1b2808SHiten Pandyarelative to section number
5927e1b2808SHiten Pandya.Sy SHN_UNDEF
5937e1b2808SHiten Pandyais an undefined symbol.
594ea14e5c3SBrian Feldman.It Dv SHN_LORESERVE
595ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of reserved indices.
596ea14e5c3SBrian Feldman.It Dv SHN_LOPROC
597ea14e5c3SBrian FeldmanThis value up to and including
598ea14e5c3SBrian Feldman.Sy SHN_HIPROC
599ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
600ea14e5c3SBrian Feldman.It Dv SHN_HIPROC
601ea14e5c3SBrian FeldmanThis value down to and including
602ea14e5c3SBrian Feldman.Sy SHN_LOPROC
603ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
604ea14e5c3SBrian Feldman.It Dv SHN_ABS
6054e86fcacSSheldon HearnThis value specifies absolute values for the corresponding reference.
6064e86fcacSSheldon HearnFor
607ea14e5c3SBrian Feldmanexample, symbols defined relative to section number
608ea14e5c3SBrian Feldman.Sy SHN_ABS
609ea14e5c3SBrian Feldmanhave absolute values and are not affected by relocation.
610ea14e5c3SBrian Feldman.It Dv SHN_COMMON
611ea14e5c3SBrian FeldmanSymbols defined relative to this section are common symbols, such as FORTRAN
612ea14e5c3SBrian FeldmanCOMMON or unallocated C external variables.
613ea14e5c3SBrian Feldman.It Dv SHN_HIRESERVE
6144e86fcacSSheldon HearnThis value specifies the upper bound of the range of reserved indices.
6154e86fcacSSheldon HearnThe
616ea14e5c3SBrian Feldmansystem reserves indices between
617ea14e5c3SBrian Feldman.Sy SHN_LORESERVE
618ea14e5c3SBrian Feldmanand
619ea14e5c3SBrian Feldman.Sy SHN_HIRESERVE ,
6204e86fcacSSheldon Hearninclusive.
6214e86fcacSSheldon HearnThe section header table does not contain entries for the
622ea14e5c3SBrian Feldmanreserved indices.
623ea14e5c3SBrian Feldman.El
624ea14e5c3SBrian Feldman.Pp
625ea14e5c3SBrian FeldmanThe section header has the following structure:
626ea14e5c3SBrian Feldman.Bd -literal -offset indent
627ea14e5c3SBrian Feldmantypedef struct {
628ea14e5c3SBrian Feldman	Elf32_Word      sh_name;
629ea14e5c3SBrian Feldman	Elf32_Word      sh_type;
630ea14e5c3SBrian Feldman	Elf32_Word      sh_flags;
631ea14e5c3SBrian Feldman	Elf32_Addr      sh_addr;
632ea14e5c3SBrian Feldman	Elf32_Off       sh_offset;
633757686b1SMarcel Moolenaar	Elf32_Word      sh_size;
634ea14e5c3SBrian Feldman	Elf32_Word      sh_link;
635ea14e5c3SBrian Feldman	Elf32_Word      sh_info;
636757686b1SMarcel Moolenaar	Elf32_Word      sh_addralign;
637757686b1SMarcel Moolenaar	Elf32_Word      sh_entsize;
638ea14e5c3SBrian Feldman} Elf32_Shdr;
639ea14e5c3SBrian Feldman.Ed
640ea14e5c3SBrian Feldman.Pp
641ea14e5c3SBrian Feldman.Bd -literal -offset indent
642ea14e5c3SBrian Feldmantypedef struct {
643757686b1SMarcel Moolenaar	Elf64_Word      sh_name;
644757686b1SMarcel Moolenaar	Elf64_Word      sh_type;
645757686b1SMarcel Moolenaar	Elf64_Xword     sh_flags;
646ea14e5c3SBrian Feldman	Elf64_Addr      sh_addr;
647ea14e5c3SBrian Feldman	Elf64_Off       sh_offset;
648757686b1SMarcel Moolenaar	Elf64_Xword     sh_size;
649757686b1SMarcel Moolenaar	Elf64_Word      sh_link;
650757686b1SMarcel Moolenaar	Elf64_Word      sh_info;
651757686b1SMarcel Moolenaar	Elf64_Xword     sh_addralign;
652757686b1SMarcel Moolenaar	Elf64_Xword     sh_entsize;
653ea14e5c3SBrian Feldman} Elf64_Shdr;
654ea14e5c3SBrian Feldman.Ed
655ea14e5c3SBrian Feldman.Pp
656ea14e5c3SBrian Feldman.Bl -tag -width "sh_addralign" -compact
657ea14e5c3SBrian Feldman.It Dv sh_name
6584e86fcacSSheldon HearnThis member specifies the name of the section.
6594e86fcacSSheldon HearnIts value is an index
660ea14e5c3SBrian Feldmaninto the section header string table section, giving the location of
661ea14e5c3SBrian Feldmana null-terminated string.
662ea14e5c3SBrian Feldman.It Dv sh_type
6630757c960SBrian FeldmanThis member categorizes the section's contents and semantics.
664ea14e5c3SBrian Feldman.Pp
665ea14e5c3SBrian Feldman.Bl -tag -width "SHT_PROGBITS" -compact
666ea14e5c3SBrian Feldman.It Dv SHT_NULL
6674e86fcacSSheldon HearnThis value marks the section header as inactive.
6684e86fcacSSheldon HearnIt does not
6694e86fcacSSheldon Hearnhave an associated section.
6704e86fcacSSheldon HearnOther members of the section header
671ea14e5c3SBrian Feldmanhave undefined values.
672ea14e5c3SBrian Feldman.It Dv SHT_PROGBITS
673ea14e5c3SBrian FeldmanThe section holds information defined by the program, whose
674ea14e5c3SBrian Feldmanformat and meaning are determined solely by the program.
675ea14e5c3SBrian Feldman.It Dv SHT_SYMTAB
6764e86fcacSSheldon HearnThis section holds a symbol table.
6774e86fcacSSheldon HearnTypically,
678ea14e5c3SBrian Feldman.Sy SHT_SYMTAB
679ea14e5c3SBrian Feldmanprovides symbols for link editing, though it may also be used
6804e86fcacSSheldon Hearnfor dynamic linking.
6814e86fcacSSheldon HearnAs a complete symbol table, it may contain
6824e86fcacSSheldon Hearnmany symbols unnecessary for dynamic linking.
6834e86fcacSSheldon HearnAn object file can
684ea14e5c3SBrian Feldmanalso contain a
685ea14e5c3SBrian Feldman.Sy SHN_DYNSYM
686ea14e5c3SBrian Feldmansection.
687ea14e5c3SBrian Feldman.It Dv SHT_STRTAB
6884e86fcacSSheldon HearnThis section holds a string table.
6894e86fcacSSheldon HearnAn object file may have multiple
690ea14e5c3SBrian Feldmanstring table sections.
691ea14e5c3SBrian Feldman.It Dv SHT_RELA
692ea14e5c3SBrian FeldmanThis section holds relocation entries with explicit addends, such
693ea14e5c3SBrian Feldmanas type
694ea14e5c3SBrian Feldman.Sy Elf32_Rela
6954e86fcacSSheldon Hearnfor the 32-bit class of object files.
6964e86fcacSSheldon HearnAn object may have multiple
697ea14e5c3SBrian Feldmanrelocation sections.
698ea14e5c3SBrian Feldman.It Dv SHT_HASH
6994e86fcacSSheldon HearnThis section holds a symbol hash table.
7004e86fcacSSheldon HearnAll object participating in
7014e86fcacSSheldon Hearndynamic linking must contain a symbol hash table.
7024e86fcacSSheldon HearnAn object file may
703ea14e5c3SBrian Feldmanhave only one hash table.
704ea14e5c3SBrian Feldman.It Dv SHT_DYNAMIC
7054e86fcacSSheldon HearnThis section holds information for dynamic linking.
7064e86fcacSSheldon HearnAn object file may
707ea14e5c3SBrian Feldmanhave only one dynamic section.
708ea14e5c3SBrian Feldman.It Dv SHT_NOTE
709ea14e5c3SBrian FeldmanThis section holds information that marks the file in some way.
710ea14e5c3SBrian Feldman.It Dv SHT_NOBITS
711ea14e5c3SBrian FeldmanA section of this type occupies no space in the file but otherwise
712ea14e5c3SBrian Feldmanresembles
713ea14e5c3SBrian Feldman.Sy SHN_PROGBITS .
714ea14e5c3SBrian FeldmanAlthough this section contains no bytes, the
715ea14e5c3SBrian Feldman.Sy sh_offset
716ea14e5c3SBrian Feldmanmember contains the conceptual file offset.
717ea14e5c3SBrian Feldman.It Dv SHT_REL
718ea14e5c3SBrian FeldmanThis section holds relocation offsets without explicit addends, such
719ea14e5c3SBrian Feldmanas type
720ea14e5c3SBrian Feldman.Sy Elf32_Rel
7214e86fcacSSheldon Hearnfor the 32-bit class of object files.
7224e86fcacSSheldon HearnAn object file may have multiple
723ea14e5c3SBrian Feldmanrelocation sections.
724ea14e5c3SBrian Feldman.It Dv SHT_SHLIB
725ea14e5c3SBrian FeldmanThis section is reserved but has unspecified semantics.
726ea14e5c3SBrian Feldman.It Dv SHT_DYNSYM
7274e86fcacSSheldon HearnThis section holds a minimal set of dynamic linking symbols.
7284e86fcacSSheldon HearnAn
729ea14e5c3SBrian Feldmanobject file can also contain a
730ea14e5c3SBrian Feldman.Sy SHN_SYMTAB
731ea14e5c3SBrian Feldmansection.
732ea14e5c3SBrian Feldman.It Dv SHT_LOPROC
733ea14e5c3SBrian FeldmanThis value up to and including
734ea14e5c3SBrian Feldman.Sy SHT_HIPROC
735ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
736ea14e5c3SBrian Feldman.It Dv SHT_HIPROC
737ea14e5c3SBrian FeldmanThis value down to and including
738ea14e5c3SBrian Feldman.Sy SHT_LOPROC
739ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
740ea14e5c3SBrian Feldman.It Dv SHT_LOUSER
741ea14e5c3SBrian FeldmanThis value specifies the lower bound of the range of indices reserved for
742ea14e5c3SBrian Feldmanapplication programs.
743ea14e5c3SBrian Feldman.It Dv SHT_HIUSER
744ea14e5c3SBrian FeldmanThis value specifies the upper bound of the range of indices reserved for
7454e86fcacSSheldon Hearnapplication programs.
7464e86fcacSSheldon HearnSection types between
747ea14e5c3SBrian Feldman.Sy SHT_LOUSER
748ea14e5c3SBrian Feldmanand
749ea14e5c3SBrian Feldman.Sy SHT_HIUSER
750ea14e5c3SBrian Feldmanmay be used by the application, without conflicting with current or future
751ea14e5c3SBrian Feldmansystem-defined section types.
752ea14e5c3SBrian Feldman.El
753ea14e5c3SBrian Feldman.Pp
754ea14e5c3SBrian Feldman.It Dv sh_flags
755ea14e5c3SBrian FeldmanSections support one-bit flags that describe miscellaneous attributes.
756ea14e5c3SBrian FeldmanIf a flag bit is set in
757ea14e5c3SBrian Feldman.Sy sh_flags ,
758ea14e5c3SBrian Feldmanthe attribute is
759ea14e5c3SBrian Feldman.Dq on
7604e86fcacSSheldon Hearnfor the section.
7614e86fcacSSheldon HearnOtherwise, the attribute is
762ea14e5c3SBrian Feldman.Dq off
7634e86fcacSSheldon Hearnor does not apply.
7644e86fcacSSheldon HearnUndefined attributes are set to zero.
765ea14e5c3SBrian Feldman.Pp
766ea14e5c3SBrian Feldman.Bl -tag -width "SHF_EXECINSTR" -compact
767ea14e5c3SBrian Feldman.It Dv SHF_WRITE
768ea14e5c3SBrian FeldmanThis section contains data that should be writable during process
769ea14e5c3SBrian Feldmanexecution.
770ea14e5c3SBrian Feldman.It Dv SHF_ALLOC
7714e86fcacSSheldon HearnThe section occupies memory during process execution.
7724e86fcacSSheldon HearnSome control
7734e86fcacSSheldon Hearnsections do not reside in the memory image of an object file.
7744e86fcacSSheldon HearnThis
775ea14e5c3SBrian Feldmanattribute is off for those sections.
776ea14e5c3SBrian Feldman.It Dv SHF_EXECINSTR
777ea14e5c3SBrian FeldmanThe section contains executable machine instructions.
778ea14e5c3SBrian Feldman.It Dv SHF_MASKPROC
779ea14e5c3SBrian FeldmanAll bits included in this mask are reserved for processor-specific
780ea14e5c3SBrian Feldmansemantics.
781ea14e5c3SBrian Feldman.El
782ea14e5c3SBrian Feldman.Pp
783ea14e5c3SBrian Feldman.It Dv sh_addr
784ea14e5c3SBrian FeldmanIf the section will appear in the memory image of a process, this member
785ea14e5c3SBrian Feldmanholds the address at which the section's first byte should reside.
786ea14e5c3SBrian FeldmanOtherwise, the member contains zero.
787ea14e5c3SBrian Feldman.It Dv sh_offset
788ea14e5c3SBrian FeldmanThis member's value holds the byte offset from the beginning of the file
7894e86fcacSSheldon Hearnto the first byte in the section.
7904e86fcacSSheldon HearnOne section type,
791ea14e5c3SBrian Feldman.Sy SHT_NOBITS ,
792ea14e5c3SBrian Feldmanoccupies no space in the file, and its
793ea14e5c3SBrian Feldman.Sy sh_offset
794ea14e5c3SBrian Feldmanmember locates the conceptual placement in the file.
795ea14e5c3SBrian Feldman.It Dv sh_size
7964e86fcacSSheldon HearnThis member holds the section's size in bytes.
7974e86fcacSSheldon HearnUnless the section type
798ea14e5c3SBrian Feldmanis
799ea14e5c3SBrian Feldman.Sy SHT_NOBITS ,
800ea14e5c3SBrian Feldmanthe section occupies
801ea14e5c3SBrian Feldman.Sy sh_size
8024e86fcacSSheldon Hearnbytes in the file.
8034e86fcacSSheldon HearnA section of type
804ea14e5c3SBrian Feldman.Sy SHT_NOBITS
805ea14e5c3SBrian Feldmanmay have a non-zero size, but it occupies no space in the file.
806ea14e5c3SBrian Feldman.It Dv sh_link
807ea14e5c3SBrian FeldmanThis member holds a section header table index link, whose interpretation
808ea14e5c3SBrian Feldmandepends on the section type.
809ea14e5c3SBrian Feldman.It Dv sh_info
810ea14e5c3SBrian FeldmanThis member holds extra information, whose interpretation depends on the
811ea14e5c3SBrian Feldmansection type.
812ea14e5c3SBrian Feldman.It Dv sh_addralign
8134e86fcacSSheldon HearnSome sections have address alignment constraints.
8144e86fcacSSheldon HearnIf a section holds a
815ea14e5c3SBrian Feldmandoubleword, the system must ensure doubleword alignment for the entire
8164e86fcacSSheldon Hearnsection.
8174e86fcacSSheldon HearnThat is, the value of
818ea14e5c3SBrian Feldman.Sy sh_addr
819ea14e5c3SBrian Feldmanmust be congruent to zero, modulo the value of
820ea14e5c3SBrian Feldman.Sy sh_addralign .
8214e86fcacSSheldon HearnOnly zero and positive integral powers of two are allowed.
8224e86fcacSSheldon HearnValues of zero
823ea14e5c3SBrian Feldmanor one mean the section has no alignment constraints.
824ea14e5c3SBrian Feldman.It Dv sh_entsize
825ea14e5c3SBrian FeldmanSome sections hold a table of fixed-sized entries, such as a symbol table.
826ea14e5c3SBrian FeldmanFor such a section, this member gives the size in bytes for each entry.
827ea14e5c3SBrian FeldmanThis member contains zero if the section does not hold a table of
828ea14e5c3SBrian Feldmanfixed-size entries.
829ea14e5c3SBrian Feldman.El
830ea14e5c3SBrian Feldman.Pp
831ea14e5c3SBrian FeldmanVarious sections hold program and control information:
832ea14e5c3SBrian Feldman.Bl -tag -width ".shstrtab" -compact
833ea14e5c3SBrian Feldman.It .bss
8344f068961SRuslan Ermilov(Block Started by Symbol)
8350757c960SBrian FeldmanThis section holds uninitialized data that contributes to the program's
8364e86fcacSSheldon Hearnmemory image.
8374e86fcacSSheldon HearnBy definition, the system initializes the data with zeros
8384e86fcacSSheldon Hearnwhen the program begins to run.
8394e86fcacSSheldon HearnThis section is of type
840ea14e5c3SBrian Feldman.Sy SHT_NOBITS .
841ea14e5c3SBrian FeldmanThe attributes types are
842ea14e5c3SBrian Feldman.Sy SHF_ALLOC
843ea14e5c3SBrian Feldmanand
844ea14e5c3SBrian Feldman.Sy SHF_WRITE .
845ea14e5c3SBrian Feldman.It .comment
8464e86fcacSSheldon HearnThis section holds version control information.
8474e86fcacSSheldon HearnThis section is of type
848ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
849ea14e5c3SBrian FeldmanNo attribute types are used.
850ea14e5c3SBrian Feldman.It .data
8510757c960SBrian FeldmanThis section holds initialized data that contribute to the program's
8524e86fcacSSheldon Hearnmemory image.
8534e86fcacSSheldon HearnThis section is of type
854ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
855ea14e5c3SBrian FeldmanThe attribute types are
856ea14e5c3SBrian Feldman.Sy SHF_ALLOC
857ea14e5c3SBrian Feldmanand
858ea14e5c3SBrian Feldman.Sy SHF_WRITE .
859ea14e5c3SBrian Feldman.It .data1
8600757c960SBrian FeldmanThis section holds initialized data that contribute to the program's
8614e86fcacSSheldon Hearnmemory image.
8624e86fcacSSheldon HearnThis section is of type
863ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
864ea14e5c3SBrian FeldmanThe attribute types are
865ea14e5c3SBrian Feldman.Sy SHF_ALLOC
866ea14e5c3SBrian Feldmanand
867ea14e5c3SBrian Feldman.Sy SHF_WRITE .
868ea14e5c3SBrian Feldman.It .debug
8694e86fcacSSheldon HearnThis section holds information for symbolic debugging.
8704e86fcacSSheldon HearnThe contents
8714e86fcacSSheldon Hearnare unspecified.
8724e86fcacSSheldon HearnThis section is of type
873ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
874ea14e5c3SBrian FeldmanNo attribute types are used.
875ea14e5c3SBrian Feldman.It .dynamic
8764e86fcacSSheldon HearnThis section holds dynamic linking information.
8774e86fcacSSheldon HearnThe section's attributes
878ea14e5c3SBrian Feldmanwill include the
879ea14e5c3SBrian Feldman.Sy SHF_ALLOC
8804e86fcacSSheldon Hearnbit.
8814e86fcacSSheldon HearnWhether the
882ea14e5c3SBrian Feldman.Sy SHF_WRITE
8834e86fcacSSheldon Hearnbit is set is processor-specific.
8844e86fcacSSheldon HearnThis section is of type
885ea14e5c3SBrian Feldman.Sy SHT_DYNAMIC .
886ea14e5c3SBrian FeldmanSee the attributes above.
887ea14e5c3SBrian Feldman.It .dynstr
888ea14e5c3SBrian FeldmanThis section holds strings needed for dynamic linking, most commonly
889ea14e5c3SBrian Feldmanthe strings that represent the names associated with symbol table entries.
890ea14e5c3SBrian FeldmanThis section is of type
891ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
892ea14e5c3SBrian FeldmanThe attribute type used is
893ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
894ea14e5c3SBrian Feldman.It .dynsym
8954e86fcacSSheldon HearnThis section holds the dynamic linking symbol table.
8964e86fcacSSheldon HearnThis section is of type
897ea14e5c3SBrian Feldman.Sy SHT_DYNSYM .
898ea14e5c3SBrian FeldmanThe attribute used is
899ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
900ea14e5c3SBrian Feldman.It .fini
901ea14e5c3SBrian FeldmanThis section holds executable instructions that contribute to the process
9024e86fcacSSheldon Hearntermination code.
9034e86fcacSSheldon HearnWhen a program exits normally the system arranges to
9044e86fcacSSheldon Hearnexecute the code in this section.
9054e86fcacSSheldon HearnThis section is of type
906ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
907ea14e5c3SBrian FeldmanThe attributes used are
908ea14e5c3SBrian Feldman.Sy SHF_ALLOC
909ea14e5c3SBrian Feldmanand
910ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
911ea14e5c3SBrian Feldman.It .got
9124e86fcacSSheldon HearnThis section holds the global offset table.
9134e86fcacSSheldon HearnThis section is of type
914ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
915ea14e5c3SBrian FeldmanThe attributes are processor-specific.
916ea14e5c3SBrian Feldman.It .hash
9174e86fcacSSheldon HearnThis section holds a symbol hash table.
9184e86fcacSSheldon HearnThis section is of type
919ea14e5c3SBrian Feldman.Sy SHT_HASH .
920ea14e5c3SBrian FeldmanThe attribute used is
921ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
922ea14e5c3SBrian Feldman.It .init
923ea14e5c3SBrian FeldmanThis section holds executable instructions that contribute to the process
9244e86fcacSSheldon Hearninitialization code.
9254e86fcacSSheldon HearnWhen a program starts to run the system arranges to
926ea14e5c3SBrian Feldmanexecute the code in this section before calling the main program entry point.
927ea14e5c3SBrian FeldmanThis section is of type
928ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
929ea14e5c3SBrian FeldmanThe attributes used are
930ea14e5c3SBrian Feldman.Sy SHF_ALLOC
931ea14e5c3SBrian Feldmanand
932ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
933ea14e5c3SBrian Feldman.It .interp
9344e86fcacSSheldon HearnThis section holds the pathname of a program interpreter.
9354e86fcacSSheldon HearnIf the file has
936ea14e5c3SBrian Feldmana loadable segment that includes the section, the section's attributes will
937ea14e5c3SBrian Feldmaninclude the
938ea14e5c3SBrian Feldman.Sy SHF_ALLOC
9394e86fcacSSheldon Hearnbit.
9404e86fcacSSheldon HearnOtherwise, that bit will be off.
9414e86fcacSSheldon HearnThis section is of type
942ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
943ea14e5c3SBrian Feldman.It .line
944ea14e5c3SBrian FeldmanThis section holds line number information for symbolic debugging, which
945ea14e5c3SBrian Feldmandescribes the correspondence between the program source and the machine code.
9464e86fcacSSheldon HearnThe contents are unspecified.
9474e86fcacSSheldon HearnThis section is of type
948ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
949ea14e5c3SBrian FeldmanNo attribute types are used.
950ea14e5c3SBrian Feldman.It .note
951ea14e5c3SBrian FeldmanThis section holds information in the
952ea14e5c3SBrian Feldman.Dq Note Section
9534e86fcacSSheldon Hearnformat described below.
9544e86fcacSSheldon HearnThis section is of type
955ea14e5c3SBrian Feldman.Sy SHT_NOTE .
956ea14e5c3SBrian FeldmanNo attribute types are used.
957ea14e5c3SBrian Feldman.It .plt
9584e86fcacSSheldon HearnThis section holds the procedure linkage table.
9594e86fcacSSheldon HearnThis section is of type
960ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
961ea14e5c3SBrian FeldmanThe attributes are processor-specific.
962ea14e5c3SBrian Feldman.It .relNAME
9634e86fcacSSheldon HearnThis section holds relocation information as described below.
9644e86fcacSSheldon HearnIf the file
965ea14e5c3SBrian Feldmanhas a loadable segment that includes relocation, the section's attributes
966ea14e5c3SBrian Feldmanwill include the
967ea14e5c3SBrian Feldman.Sy SHF_ALLOC
9684e86fcacSSheldon Hearnbit.
9694e86fcacSSheldon HearnOtherwise the bit will be off.
9704e86fcacSSheldon HearnBy convention,
971ea14e5c3SBrian Feldman.Dq NAME
9724e86fcacSSheldon Hearnis supplied by the section to which the relocations apply.
9734e86fcacSSheldon HearnThus a relocation
974ea14e5c3SBrian Feldmansection for
975ea14e5c3SBrian Feldman.Sy .text
976ea14e5c3SBrian Feldmannormally would have the name
977ea14e5c3SBrian Feldman.Sy .rel.text .
978ea14e5c3SBrian FeldmanThis section is of type
979ea14e5c3SBrian Feldman.Sy SHT_REL .
980ea14e5c3SBrian Feldman.It .relaNAME
9814e86fcacSSheldon HearnThis section holds relocation information as described below.
9824e86fcacSSheldon HearnIf the file
983ea14e5c3SBrian Feldmanhas a loadable segment that includes relocation, the section's attributes
984ea14e5c3SBrian Feldmanwill include the
985ea14e5c3SBrian Feldman.Sy SHF_ALLOC
9864e86fcacSSheldon Hearnbit.
9874e86fcacSSheldon HearnOtherwise the bit will be off.
9884e86fcacSSheldon HearnBy convention,
989ea14e5c3SBrian Feldman.Dq NAME
9904e86fcacSSheldon Hearnis supplied by the section to which the relocations apply.
9914e86fcacSSheldon HearnThus a relocation
992ea14e5c3SBrian Feldmansection for
993ea14e5c3SBrian Feldman.Sy .text
994ea14e5c3SBrian Feldmannormally would have the name
995ea14e5c3SBrian Feldman.Sy .rela.text .
996ea14e5c3SBrian FeldmanThis section is of type
997ea14e5c3SBrian Feldman.Sy SHT_RELA .
998ea14e5c3SBrian Feldman.It .rodata
999f3a2511aSChris CostelloThis section holds read-only data that typically contributes to a
10004e86fcacSSheldon Hearnnon-writable segment in the process image.
10014e86fcacSSheldon HearnThis section is of type
1002ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1003ea14e5c3SBrian FeldmanThe attribute used is
1004ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
1005ea14e5c3SBrian Feldman.It .rodata1
1006ea14e5c3SBrian FeldmanThis section hold read-only data that typically contributes to a
10074e86fcacSSheldon Hearnnon-writable segment in the process image.
10084e86fcacSSheldon HearnThis section is of type
1009ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1010ea14e5c3SBrian FeldmanThe attribute used is
1011ea14e5c3SBrian Feldman.Sy SHF_ALLOC .
1012ea14e5c3SBrian Feldman.It .shstrtab
10134e86fcacSSheldon HearnThis section holds section names.
10144e86fcacSSheldon HearnThis section is of type
1015ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
1016ea14e5c3SBrian FeldmanNo attribute types are used.
1017ea14e5c3SBrian Feldman.It .strtab
1018ea14e5c3SBrian FeldmanThis section holds strings, most commonly the strings that represent the
10194e86fcacSSheldon Hearnnames associated with symbol table entries.
10204e86fcacSSheldon HearnIf the file has a loadable
1021ea14e5c3SBrian Feldmansegment that includes the symbol string table, the section's attributes
1022ea14e5c3SBrian Feldmanwill include the
1023ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10244e86fcacSSheldon Hearnbit.
10254e86fcacSSheldon HearnOtherwise the bit will be off.
10264e86fcacSSheldon HearnThis section is of type
1027ea14e5c3SBrian Feldman.Sy SHT_STRTAB .
1028ea14e5c3SBrian Feldman.It .symtab
10294e86fcacSSheldon HearnThis section holds a symbol table.
10304e86fcacSSheldon HearnIf the file has a loadable segment
1031ea14e5c3SBrian Feldmanthat includes the symbol table, the section's attributes will include
1032ea14e5c3SBrian Feldmanthe
1033ea14e5c3SBrian Feldman.Sy SHF_ALLOC
10344e86fcacSSheldon Hearnbit.
10354e86fcacSSheldon HearnOtherwise the bit will be off.
10364e86fcacSSheldon HearnThis section is of type
1037ea14e5c3SBrian Feldman.Sy SHT_SYMTAB .
1038ea14e5c3SBrian Feldman.It .text
1039ea14e5c3SBrian FeldmanThis section holds the
1040ea14e5c3SBrian Feldman.Dq text ,
10414e86fcacSSheldon Hearnor executable instructions, of a program.
10424e86fcacSSheldon HearnThis section is of type
1043ea14e5c3SBrian Feldman.Sy SHT_PROGBITS .
1044ea14e5c3SBrian FeldmanThe attributes used are
1045ea14e5c3SBrian Feldman.Sy SHF_ALLOC
1046ea14e5c3SBrian Feldmanand
1047ea14e5c3SBrian Feldman.Sy SHF_EXECINSTR .
1048dc1cbf89STom Rhodes.It .jcr
1049dc1cbf89STom RhodesThis section holds information about Java classes that must
1050dc1cbf89STom Rhodesbe registered.
1051dc1cbf89STom Rhodes.It .eh_frame
1052dc1cbf89STom RhodesThis section holds information used for C++ exception-handling.
1053ea14e5c3SBrian Feldman.El
1054ea14e5c3SBrian Feldman.Pp
1055ea14e5c3SBrian FeldmanString table sections hold null-terminated character sequences, commonly
10564e86fcacSSheldon Hearncalled strings.
10574e86fcacSSheldon HearnThe object file uses these strings to represent symbol
10584e86fcacSSheldon Hearnand section names.
10594e86fcacSSheldon HearnOne references a string as an index into the string
10604e86fcacSSheldon Hearntable section.
10614e86fcacSSheldon HearnThe first byte, which is index zero, is defined to hold
10624e86fcacSSheldon Hearna null character.
10634e86fcacSSheldon HearnSimilarly, a string table's last byte is defined to
1064ea14e5c3SBrian Feldmanhold a null character, ensuring null termination for all strings.
1065ea14e5c3SBrian Feldman.Pp
1066ea14e5c3SBrian FeldmanAn object file's symbol table holds information needed to locate and
10674e86fcacSSheldon Hearnrelocate a program's symbolic definitions and references.
10684e86fcacSSheldon HearnA symbol table
1069ea14e5c3SBrian Feldmanindex is a subscript into this array.
1070ea14e5c3SBrian Feldman.Pp
1071ea14e5c3SBrian Feldman.Bd -literal -offset indent
1072ea14e5c3SBrian Feldmantypedef struct {
1073ea14e5c3SBrian Feldman	Elf32_Word      st_name;
1074ea14e5c3SBrian Feldman	Elf32_Addr      st_value;
1075757686b1SMarcel Moolenaar	Elf32_Word      st_size;
1076ea14e5c3SBrian Feldman	unsigned char   st_info;
1077ea14e5c3SBrian Feldman	unsigned char   st_other;
1078ea14e5c3SBrian Feldman	Elf32_Half      st_shndx;
1079ea14e5c3SBrian Feldman} Elf32_Sym;
1080ea14e5c3SBrian Feldman.Ed
1081ea14e5c3SBrian Feldman.Pp
1082ea14e5c3SBrian Feldman.Bd -literal -offset indent
1083ea14e5c3SBrian Feldmantypedef struct {
1084757686b1SMarcel Moolenaar	Elf64_Word      st_name;
1085ea14e5c3SBrian Feldman	unsigned char   st_info;
1086ea14e5c3SBrian Feldman	unsigned char   st_other;
1087757686b1SMarcel Moolenaar	Elf64_Half      st_shndx;
1088ea14e5c3SBrian Feldman	Elf64_Addr      st_value;
1089757686b1SMarcel Moolenaar	Elf64_Xword     st_size;
1090ea14e5c3SBrian Feldman} Elf64_Sym;
1091ea14e5c3SBrian Feldman.Ed
1092ea14e5c3SBrian Feldman.Pp
1093ea14e5c3SBrian Feldman.Bl -tag -width "st_value" -compact
1094ea14e5c3SBrian Feldman.It Dv st_name
1095ea14e5c3SBrian FeldmanThis member holds an index into the object file's symbol string table,
10964e86fcacSSheldon Hearnwhich holds character representations of the symbol names.
10974e86fcacSSheldon HearnIf the value
1098ea14e5c3SBrian Feldmanis non-zero, it represents a string table index that gives the symbol
10994e86fcacSSheldon Hearnname.
11004e86fcacSSheldon HearnOtherwise, the symbol table has no name.
1101ea14e5c3SBrian Feldman.It Dv st_value
1102ea14e5c3SBrian FeldmanThis member gives the value of the associated symbol.
1103ea14e5c3SBrian Feldman.It Dv st_size
11044e86fcacSSheldon HearnMany symbols have associated sizes.
11054e86fcacSSheldon HearnThis member holds zero if the symbol
1106ea14e5c3SBrian Feldmanhas no size or an unknown size.
1107ea14e5c3SBrian Feldman.It Dv st_info
1108ea14e5c3SBrian FeldmanThis member specifies the symbol's type and binding attributes:
1109ea14e5c3SBrian Feldman.Pp
1110ea14e5c3SBrian Feldman.Bl -tag -width "STT_SECTION" -compact
1111ea14e5c3SBrian Feldman.It Dv STT_NOTYPE
1112ea14e5c3SBrian FeldmanThe symbol's type is not defined.
1113ea14e5c3SBrian Feldman.It Dv STT_OBJECT
1114ea14e5c3SBrian FeldmanThe symbol is associated with a data object.
1115ea14e5c3SBrian Feldman.It Dv STT_FUNC
1116ea14e5c3SBrian FeldmanThe symbol is associated with a function or other executable code.
1117ea14e5c3SBrian Feldman.It Dv STT_SECTION
11184e86fcacSSheldon HearnThe symbol is associated with a section.
11194e86fcacSSheldon HearnSymbol table entries of
1120ea14e5c3SBrian Feldmanthis type exist primarily for relocation and normally have
1121ea14e5c3SBrian Feldman.Sy STB_LOCAL
1122ea14e5c3SBrian Feldmanbindings.
1123ea14e5c3SBrian Feldman.It Dv STT_FILE
1124ea14e5c3SBrian FeldmanBy convention the symbol's name gives the name of the source file
11254e86fcacSSheldon Hearnassociated with the object file.
11264e86fcacSSheldon HearnA file symbol has
1127ea14e5c3SBrian Feldman.Sy STB_LOCAL
1128ea14e5c3SBrian Feldmanbindings, its section index is
1129ea14e5c3SBrian Feldman.Sy SHN_ABS ,
1130ea14e5c3SBrian Feldmanand it precedes the other
1131ea14e5c3SBrian Feldman.Sy STB_LOCAL
1132ea14e5c3SBrian Feldmansymbols of the file, if it is present.
1133ea14e5c3SBrian Feldman.It Dv STT_LOPROC
1134ea14e5c3SBrian FeldmanThis value up to and including
1135ea14e5c3SBrian Feldman.Sy STT_HIPROC
1136ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1137ea14e5c3SBrian Feldman.It Dv STT_HIPROC
1138ea14e5c3SBrian FeldmanThis value down to and including
1139ea14e5c3SBrian Feldman.Sy STT_LOPROC
1140ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1141ea14e5c3SBrian Feldman.El
1142ea14e5c3SBrian Feldman.Pp
1143ea14e5c3SBrian Feldman.Bl -tag -width "STB_GLOBAL" -compact
1144ea14e5c3SBrian Feldman.It Dv STB_LOCAL
1145ea14e5c3SBrian FeldmanLocal symbols are not visible outside the object file containing their
11464e86fcacSSheldon Hearndefinition.
11474e86fcacSSheldon HearnLocal symbols of the same name may exist in multiple file
1148ea14e5c3SBrian Feldmanwithout interfering with each other.
1149ea14e5c3SBrian Feldman.It Dv STB_GLOBAL
11504e86fcacSSheldon HearnGlobal symbols are visible to all object files being combined.
11514e86fcacSSheldon HearnOne file's
1152ea14e5c3SBrian Feldmandefinition of a global symbol will satisfy another file's undefined
1153ea14e5c3SBrian Feldmanreference to the same symbol.
1154ea14e5c3SBrian Feldman.It Dv STB_WEAK
1155ea14e5c3SBrian FeldmanWeak symbols resemble global symbols, but their definitions have lower
1156ea14e5c3SBrian Feldmanprecedence.
1157ea14e5c3SBrian Feldman.It Dv STB_LOPROC
1158ea14e5c3SBrian FeldmanThis value up to and including
1159ea14e5c3SBrian Feldman.Sy STB_HIPROC
1160ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1161ea14e5c3SBrian Feldman.It Dv STB_HIPROC
1162ea14e5c3SBrian FeldmanThis value down to and including
1163ea14e5c3SBrian Feldman.Sy STB_LOPROC
1164ea14e5c3SBrian Feldmanare reserved for processor-specific semantics.
1165ea14e5c3SBrian Feldman.Pp
1166ea14e5c3SBrian FeldmanThere are macros for packing and unpacking the binding and type fields:
1167d0353b83SRuslan Ermilov.Pp
1168ea14e5c3SBrian Feldman.Bl -tag -width "ELF32_ST_INFO(bind, type)" -compact
1169d0353b83SRuslan Ermilov.It Xo
1170d0353b83SRuslan Ermilov.Fn ELF32_ST_BIND info
1171d0353b83SRuslan Ermilov.Xc
1172ea14e5c3SBrian Feldmanor
1173d0353b83SRuslan Ermilov.Fn ELF64_ST_BIND info
1174f3a2511aSChris Costelloextract a binding from an st_info value.
1175d0353b83SRuslan Ermilov.It Xo
1176d0353b83SRuslan Ermilov.Fn ELF64_ST_TYPE info
1177d0353b83SRuslan Ermilov.Xc
1178ea14e5c3SBrian Feldmanor
1179d0353b83SRuslan Ermilov.Fn ELF32_ST_TYPE info
1180f3a2511aSChris Costelloextract a type from an st_info value.
1181d0353b83SRuslan Ermilov.It Xo
1182d0353b83SRuslan Ermilov.Fn ELF32_ST_INFO bind type
1183d0353b83SRuslan Ermilov.Xc
1184ea14e5c3SBrian Feldmanor
1185d0353b83SRuslan Ermilov.Fn ELF64_ST_INFO bind type
1186f3a2511aSChris Costelloconvert a binding and a type into an st_info value.
1187ea14e5c3SBrian Feldman.El
1188ea14e5c3SBrian Feldman.El
1189ea14e5c3SBrian Feldman.Pp
1190ea14e5c3SBrian Feldman.It Dv st_other
1191ea14e5c3SBrian FeldmanThis member currently holds zero and has no defined meaning.
1192ea14e5c3SBrian Feldman.It Dv st_shndx
1193ea14e5c3SBrian FeldmanEvery symbol table entry is
1194ea14e5c3SBrian Feldman.Dq defined
1195210ad6ebSJoseph Koshyin relation to some section.
11964e86fcacSSheldon HearnThis member holds the relevant section
1197ea14e5c3SBrian Feldmanheader table index.
1198ea14e5c3SBrian Feldman.El
1199ea14e5c3SBrian Feldman.Pp
1200ea14e5c3SBrian FeldmanRelocation is the process of connecting symbolic references with
12014e86fcacSSheldon Hearnsymbolic definitions.
12024e86fcacSSheldon HearnRelocatable files must have information that
1203ea14e5c3SBrian Feldmandescribes how to modify their section contents, thus allowing executable
1204ea14e5c3SBrian Feldmanand shared object files to hold the right information for a process'
12054e86fcacSSheldon Hearnprogram image.
12064e86fcacSSheldon HearnRelocation entries are these data.
1207ea14e5c3SBrian Feldman.Pp
1208ea14e5c3SBrian FeldmanRelocation structures that do not need an addend:
1209ea14e5c3SBrian Feldman.Pp
1210ea14e5c3SBrian Feldman.Bd -literal -offset indent
1211ea14e5c3SBrian Feldmantypedef struct {
1212ea14e5c3SBrian Feldman	Elf32_Addr      r_offset;
1213ea14e5c3SBrian Feldman	Elf32_Word      r_info;
1214ea14e5c3SBrian Feldman} Elf32_Rel;
1215ea14e5c3SBrian Feldman.Ed
1216ea14e5c3SBrian Feldman.Bd -literal -offset indent
1217ea14e5c3SBrian Feldmantypedef struct {
1218ea14e5c3SBrian Feldman	Elf64_Addr      r_offset;
1219757686b1SMarcel Moolenaar	Elf64_Xword     r_info;
1220ea14e5c3SBrian Feldman} Elf64_Rel;
1221ea14e5c3SBrian Feldman.Ed
1222ea14e5c3SBrian Feldman.Pp
1223ea14e5c3SBrian FeldmanRelocation structures that need an addend:
1224ea14e5c3SBrian Feldman.Pp
1225ea14e5c3SBrian Feldman.Bd -literal -offset indent
1226ea14e5c3SBrian Feldmantypedef struct {
1227ea14e5c3SBrian Feldman	Elf32_Addr      r_offset;
1228ea14e5c3SBrian Feldman	Elf32_Word      r_info;
1229ea14e5c3SBrian Feldman	Elf32_Sword     r_addend;
1230ea14e5c3SBrian Feldman} Elf32_Rela;
1231ea14e5c3SBrian Feldman.Ed
1232ea14e5c3SBrian Feldman.Bd -literal -offset indent
1233ea14e5c3SBrian Feldmantypedef struct {
1234ea14e5c3SBrian Feldman	Elf64_Addr      r_offset;
1235757686b1SMarcel Moolenaar	Elf64_Xword     r_info;
1236757686b1SMarcel Moolenaar	Elf64_Sxword    r_addend;
1237ea14e5c3SBrian Feldman} Elf64_Rela;
1238ea14e5c3SBrian Feldman.Ed
1239ea14e5c3SBrian Feldman.Pp
1240ea14e5c3SBrian Feldman.Bl -tag -width "r_offset" -compact
1241ea14e5c3SBrian Feldman.It Dv r_offset
1242ea14e5c3SBrian FeldmanThis member gives the location at which to apply the relocation action.
1243ea14e5c3SBrian FeldmanFor a relocatable file, the value is the byte offset from the beginning
12444e86fcacSSheldon Hearnof the section to the storage unit affected by the relocation.
12454e86fcacSSheldon HearnFor an
1246ea14e5c3SBrian Feldmanexecutable file or shared object, the value is the virtual address of
1247ea14e5c3SBrian Feldmanthe storage unit affected by the relocation.
1248ea14e5c3SBrian Feldman.It Dv r_info
1249ea14e5c3SBrian FeldmanThis member gives both the symbol table index with respect to which the
12504e86fcacSSheldon Hearnrelocation must be made and the type of relocation to apply.
12514e86fcacSSheldon HearnRelocation
12524e86fcacSSheldon Hearntypes are processor-specific.
12534e86fcacSSheldon HearnWhen the text refers to a relocation
1254ea14e5c3SBrian Feldmanentry's relocation type or symbol table index, it means the result of
1255ea14e5c3SBrian Feldmanapplying
1256ea14e5c3SBrian Feldman.Sy ELF_[32|64]_R_TYPE
1257ea14e5c3SBrian Feldmanor
1258ea14e5c3SBrian Feldman.Sy ELF[32|64]_R_SYM ,
1259ea14e5c3SBrian Feldmanrespectively to the entry's
1260ea14e5c3SBrian Feldman.Sy r_info
1261ea14e5c3SBrian Feldmanmember.
1262ea14e5c3SBrian Feldman.It Dv r_addend
1263ea14e5c3SBrian FeldmanThis member specifies a constant addend used to compute the value to be
1264ea14e5c3SBrian Feldmanstored into the relocatable field.
1265ea14e5c3SBrian Feldman.El
1266ea14e5c3SBrian Feldman.Sh SEE ALSO
1267ea14e5c3SBrian Feldman.Xr as 1 ,
1268ea14e5c3SBrian Feldman.Xr gdb 1 ,
1269ea14e5c3SBrian Feldman.Xr ld 1 ,
1270ea14e5c3SBrian Feldman.Xr objdump 1 ,
1271ea14e5c3SBrian Feldman.Xr execve 2 ,
1272ea14e5c3SBrian Feldman.Xr core 5
1273ea14e5c3SBrian Feldman.Rs
1274ea14e5c3SBrian Feldman.%A Hewlett Packard
1275ea14e5c3SBrian Feldman.%B Elf-64 Object File Format
1276ea14e5c3SBrian Feldman.Re
1277ea14e5c3SBrian Feldman.Rs
1278ea14e5c3SBrian Feldman.%A Santa Cruz Operation
1279ea14e5c3SBrian Feldman.%B System V Application Binary Interface
1280ea14e5c3SBrian Feldman.Re
1281ea14e5c3SBrian Feldman.Rs
1282ea14e5c3SBrian Feldman.%A Unix System Laboratories
1283ea14e5c3SBrian Feldman.%T Object Files
1284ea14e5c3SBrian Feldman.%B "Executable and Linking Format (ELF)"
1285ea14e5c3SBrian Feldman.Re
1286ea14e5c3SBrian Feldman.Sh HISTORY
1287ea14e5c3SBrian FeldmanThe ELF header files made their appearance in
1288ea14e5c3SBrian Feldman.Fx 2.2.6 .
1289ea14e5c3SBrian FeldmanELF in itself first appeared in
1290ea14e5c3SBrian Feldman.At V .
1291ea14e5c3SBrian FeldmanThe ELF format is an adopted standard.
1292ea14e5c3SBrian Feldman.Sh AUTHORS
1293ea14e5c3SBrian FeldmanThis manual page was written by
1294ea14e5c3SBrian Feldman.An Jeroen Ruigrok van der Werven
1295d905b0b6SMike Pritchard.Aq asmodai@FreeBSD.org
1296ed2879a5SRuslan Ermilovwith inspiration from BSDi's
1297ed2879a5SRuslan Ermilov.Bsx
1298ea14e5c3SBrian Feldman.Xr elf 5
1299ea14e5c3SBrian Feldmanmanpage.
1300