elf64.h
Go to the documentation of this file.
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 1996-1998 John D. Polstra.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  * $FreeBSD$
29  */
30 
31 #include <stdint.h>
32 
33 #ifndef _FREEBSD_ELF_SYS_ELF64_H_
34 #define _FREEBSD_ELF_SYS_ELF64_H_ 1
35 
37 
38 /*
39  * ELF definitions common to all 64-bit architectures.
40  */
41 
50 
51 /*
52  * Types of dynamic symbol hash table bucket and chain elements.
53  *
54  * This is inconsistent among 64 bit architectures, so a machine dependent
55  * typedef is required.
56  */
57 
59 
60 /* Non-standard class-dependent datatype used for abstraction. */
63 
64 /*
65  * ELF header.
66  */
67 
68 typedef struct {
69  unsigned char e_ident[EI_NIDENT]; /* File identification. */
70  Elf64_Half e_type; /* File type. */
71  Elf64_Half e_machine; /* Machine architecture. */
72  Elf64_Word e_version; /* ELF format version. */
73  Elf64_Addr e_entry; /* Entry point. */
74  Elf64_Off e_phoff; /* Program header file offset. */
75  Elf64_Off e_shoff; /* Section header file offset. */
76  Elf64_Word e_flags; /* Architecture-specific flags. */
77  Elf64_Half e_ehsize; /* Size of ELF header in bytes. */
78  Elf64_Half e_phentsize; /* Size of program header entry. */
79  Elf64_Half e_phnum; /* Number of program header entries. */
80  Elf64_Half e_shentsize; /* Size of section header entry. */
81  Elf64_Half e_shnum; /* Number of section header entries. */
82  Elf64_Half e_shstrndx; /* Section name strings section. */
83 } Elf64_Ehdr;
84 
85 /*
86  * Shared object information, found in SHT_MIPS_LIBLIST.
87  */
88 
89 typedef struct {
90  Elf64_Word l_name; /* The name of a shared object. */
91  Elf64_Word l_time_stamp; /* 64-bit timestamp. */
92  Elf64_Word l_checksum; /* Checksum of visible symbols, sizes. */
93  Elf64_Word l_version; /* Interface version string index. */
94  Elf64_Word l_flags; /* Flags (LL_*). */
95 } Elf64_Lib;
96 
97 /*
98  * Section header.
99  */
100 
101 typedef struct {
102  Elf64_Word sh_name; /* Section name (index into the
103  section header string table). */
104  Elf64_Word sh_type; /* Section type. */
105  Elf64_Xword sh_flags; /* Section flags. */
106  Elf64_Addr sh_addr; /* Address in memory image. */
107  Elf64_Off sh_offset; /* Offset in file. */
108  Elf64_Xword sh_size; /* Size in bytes. */
109  Elf64_Word sh_link; /* Index of a related section. */
110  Elf64_Word sh_info; /* Depends on section type. */
111  Elf64_Xword sh_addralign; /* Alignment in bytes. */
112  Elf64_Xword sh_entsize; /* Size of each entry in section. */
113 } Elf64_Shdr;
114 
115 /*
116  * Program header.
117  */
118 
119 typedef struct {
120  Elf64_Word p_type; /* Entry type. */
121  Elf64_Word p_flags; /* Access permission flags. */
122  Elf64_Off p_offset; /* File offset of contents. */
123  Elf64_Addr p_vaddr; /* Virtual address in memory image. */
124  Elf64_Addr p_paddr; /* Physical address (not used). */
125  Elf64_Xword p_filesz; /* Size of contents in file. */
126  Elf64_Xword p_memsz; /* Size of contents in memory. */
127  Elf64_Xword p_align; /* Alignment in memory and file. */
128 } Elf64_Phdr;
129 
130 /*
131  * Dynamic structure. The ".dynamic" section contains an array of them.
132  */
133 
134 typedef struct {
135  Elf64_Sxword d_tag; /* Entry type. */
136  union {
137  Elf64_Xword d_val; /* Integer value. */
138  Elf64_Addr d_ptr; /* Address value. */
139  } d_un;
140 } Elf64_Dyn;
141 
142 /*
143  * Relocation entries.
144  */
145 
146 /* Relocations that don't need an addend field. */
147 typedef struct {
148  Elf64_Addr r_offset; /* Location to be relocated. */
149  Elf64_Xword r_info; /* Relocation type and symbol index. */
150 } Elf64_Rel;
151 
152 /* Relocations that need an addend field. */
153 typedef struct {
154  Elf64_Addr r_offset; /* Location to be relocated. */
155  Elf64_Xword r_info; /* Relocation type and symbol index. */
156  Elf64_Sxword r_addend; /* Addend. */
157 } Elf64_Rela;
158 
159 /* Macros for accessing the fields of r_info. */
160 #define ELF64_R_SYM(info) ((info) >> 32)
161 #define ELF64_R_TYPE(info) ((info) & 0xffffffffL)
162 
163 /* Macro for constructing r_info from field values. */
164 #define ELF64_R_INFO(sym, type) (((sym) << 32) + ((type) & 0xffffffffL))
165 
166 #define ELF64_R_TYPE_DATA(info) (((Elf64_Xword)(info)<<32)>>40)
167 #define ELF64_R_TYPE_ID(info) (((Elf64_Xword)(info)<<56)>>56)
168 #define ELF64_R_TYPE_INFO(data, type) \
169  (((Elf64_Xword)(data)<<8)+(Elf64_Xword)(type))
170 
171 /*
172  * Note entry header
173  */
175 
176 /*
177  * Move entry
178  */
179 typedef struct {
180  Elf64_Lword m_value; /* symbol value */
181  Elf64_Xword m_info; /* size + index */
182  Elf64_Xword m_poffset; /* symbol offset */
183  Elf64_Half m_repeat; /* repeat count */
184  Elf64_Half m_stride; /* stride info */
185 } Elf64_Move;
186 
187 #define ELF64_M_SYM(info) ((info)>>8)
188 #define ELF64_M_SIZE(info) ((unsigned char)(info))
189 #define ELF64_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))
190 
191 /*
192  * Hardware/Software capabilities entry
193  */
194 typedef struct {
195  Elf64_Xword c_tag; /* how to interpret value */
196  union {
199  } c_un;
200 } Elf64_Cap;
201 
202 /*
203  * Symbol table entries.
204  */
205 
206 typedef struct {
207  Elf64_Word st_name; /* String table index of name. */
208  unsigned char st_info; /* Type and binding information. */
209  unsigned char st_other; /* Reserved (not used). */
210  Elf64_Half st_shndx; /* Section index of symbol. */
211  Elf64_Addr st_value; /* Symbol value. */
212  Elf64_Xword st_size; /* Size of associated object. */
213 } Elf64_Sym;
214 
215 /* Macros for accessing the fields of st_info. */
216 #define ELF64_ST_BIND(info) ((info) >> 4)
217 #define ELF64_ST_TYPE(info) ((info) & 0xf)
218 
219 /* Macro for constructing st_info from field values. */
220 #define ELF64_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
221 
222 /* Macro for accessing the fields of st_other. */
223 #define ELF64_ST_VISIBILITY(oth) ((oth) & 0x3)
224 
225 /* Structures used by Sun & GNU-style symbol versioning. */
226 typedef struct {
234 } Elf64_Verdef;
235 
236 typedef struct {
239 } Elf64_Verdaux;
240 
241 typedef struct {
247 } Elf64_Verneed;
248 
249 typedef struct {
255 } Elf64_Vernaux;
256 
258 
259 typedef struct {
260  Elf64_Half si_boundto; /* direct bindings - symbol bound to */
261  Elf64_Half si_flags; /* per symbol flags */
262 } Elf64_Syminfo;
263 
264 typedef struct {
269 } Elf64_Chdr;
270 
271 #endif /* !_FREEBSD_ELF_SYS_ELF64_H_ */
Elf64_Phdr::p_type
Elf64_Word p_type
Definition: elf64.h:120
Elf64_Vernaux::vna_name
Elf64_Word vna_name
Definition: elf64.h:253
Elf64_Verdef::vd_aux
Elf64_Word vd_aux
Definition: elf64.h:232
Elf64_Sym::st_value
Elf64_Addr st_value
Definition: elf64.h:211
Elf64_Rela::r_offset
Elf64_Addr r_offset
Definition: elf64.h:154
Elf64_Ehdr::e_shoff
Elf64_Off e_shoff
Definition: elf64.h:75
Elf64_Ehdr::e_version
Elf64_Word e_version
Definition: elf64.h:72
Elf64_Phdr::p_filesz
Elf64_Xword p_filesz
Definition: elf64.h:125
Elf64_Sword
int32_t Elf64_Sword
Definition: elf64.h:45
uint16_t
unsigned short uint16_t
Definition: stdint-msvc2008.h:79
Elf64_Versym
Elf64_Half Elf64_Versym
Definition: elf64.h:257
Elf64_Off
uint64_t Elf64_Off
Definition: elf64.h:44
Elf64_Dyn::d_tag
Elf64_Sxword d_tag
Definition: elf64.h:135
Elf64_Shdr::sh_offset
Elf64_Off sh_offset
Definition: elf64.h:107
Elf64_Ehdr::e_flags
Elf64_Word e_flags
Definition: elf64.h:76
Elf64_Verneed
Definition: elf64.h:241
Elf64_Rela::r_addend
Elf64_Sxword r_addend
Definition: elf64.h:156
Elf_Note
Definition: elf_common.h:51
Elf64_Half
uint16_t Elf64_Half
Definition: elf64.h:43
Elf64_Chdr::ch_size
Elf64_Xword ch_size
Definition: elf64.h:267
Elf64_Cap::c_val
Elf64_Xword c_val
Definition: elf64.h:197
Elf64_Move::m_stride
Elf64_Half m_stride
Definition: elf64.h:184
Elf64_Syminfo::si_boundto
Elf64_Half si_boundto
Definition: elf64.h:260
Elf64_Ehdr::e_phoff
Elf64_Off e_phoff
Definition: elf64.h:74
Elf64_Sxword
int64_t Elf64_Sxword
Definition: elf64.h:46
Elf64_Chdr::ch_addralign
Elf64_Xword ch_addralign
Definition: elf64.h:268
Elf64_Sym::st_shndx
Elf64_Half st_shndx
Definition: elf64.h:210
Elf64_Move
Definition: elf64.h:179
Elf64_Nhdr
Elf_Note Elf64_Nhdr
Definition: elf64.h:174
Elf64_Shdr::sh_type
Elf64_Word sh_type
Definition: elf64.h:104
Elf64_Ehdr::e_type
Elf64_Half e_type
Definition: elf64.h:70
Elf64_Dyn::d_val
Elf64_Xword d_val
Definition: elf64.h:137
Elf64_Verdaux::vda_next
Elf64_Word vda_next
Definition: elf64.h:238
Elf64_Ehdr::e_shstrndx
Elf64_Half e_shstrndx
Definition: elf64.h:82
Elf64_Syminfo
Definition: elf64.h:259
Elf64_Dyn::d_ptr
Elf64_Addr d_ptr
Definition: elf64.h:138
Elf64_Rel::r_info
Elf64_Xword r_info
Definition: elf64.h:149
uint32_t
unsigned int uint32_t
Definition: stdint-msvc2008.h:80
Elf64_Shdr::sh_link
Elf64_Word sh_link
Definition: elf64.h:109
Elf64_Verneed::vn_version
Elf64_Half vn_version
Definition: elf64.h:242
Elf64_Lib::l_version
Elf64_Word l_version
Definition: elf64.h:93
Elf64_Vernaux::vna_other
Elf64_Half vna_other
Definition: elf64.h:252
Elf64_Phdr::p_vaddr
Elf64_Addr p_vaddr
Definition: elf64.h:123
Elf64_Phdr
Definition: elf64.h:119
Elf64_Shdr::sh_name
Elf64_Word sh_name
Definition: elf64.h:102
Elf64_Vernaux
Definition: elf64.h:249
Elf64_Shdr::sh_addr
Elf64_Addr sh_addr
Definition: elf64.h:106
Elf64_Hashelt
Elf64_Word Elf64_Hashelt
Definition: elf64.h:58
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
Elf64_Lib::l_name
Elf64_Word l_name
Definition: elf64.h:90
Elf64_Verneed::vn_file
Elf64_Word vn_file
Definition: elf64.h:244
Elf64_Cap::c_ptr
Elf64_Addr c_ptr
Definition: elf64.h:198
Elf64_Chdr::ch_reserved
Elf64_Word ch_reserved
Definition: elf64.h:266
Elf64_Sym::st_size
Elf64_Xword st_size
Definition: elf64.h:212
Elf64_Rela::r_info
Elf64_Xword r_info
Definition: elf64.h:155
Elf64_Verdef::vd_cnt
Elf64_Half vd_cnt
Definition: elf64.h:230
Elf64_Ehdr::e_phnum
Elf64_Half e_phnum
Definition: elf64.h:79
Elf64_Xword
uint64_t Elf64_Xword
Definition: elf64.h:49
Elf64_Verdef::vd_next
Elf64_Word vd_next
Definition: elf64.h:233
Elf64_Phdr::p_paddr
Elf64_Addr p_paddr
Definition: elf64.h:124
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
Elf64_Ehdr
Definition: elf64.h:68
Elf64_Shdr
Definition: elf64.h:101
Elf64_Sym::st_other
unsigned char st_other
Definition: elf64.h:209
Elf64_Ehdr::e_shnum
Elf64_Half e_shnum
Definition: elf64.h:81
Elf64_Chdr
Definition: elf64.h:264
Elf64_Verdef::vd_hash
Elf64_Word vd_hash
Definition: elf64.h:231
Elf64_Sym::st_info
unsigned char st_info
Definition: elf64.h:208
Elf64_Verdef::vd_flags
Elf64_Half vd_flags
Definition: elf64.h:228
Elf64_Ehdr::e_shentsize
Elf64_Half e_shentsize
Definition: elf64.h:80
Elf64_Shdr::sh_flags
Elf64_Xword sh_flags
Definition: elf64.h:105
stdint.h
Elf64_Phdr::p_align
Elf64_Xword p_align
Definition: elf64.h:127
Elf64_Cap::c_tag
Elf64_Xword c_tag
Definition: elf64.h:195
Elf64_Chdr::ch_type
Elf64_Word ch_type
Definition: elf64.h:265
Elf64_Dyn
Definition: elf64.h:134
Elf64_Syminfo::si_flags
Elf64_Half si_flags
Definition: elf64.h:261
EI_NIDENT
#define EI_NIDENT
Definition: elf_common.h:137
Elf64_Phdr::p_offset
Elf64_Off p_offset
Definition: elf64.h:122
Elf64_Shdr::sh_entsize
Elf64_Xword sh_entsize
Definition: elf64.h:112
Elf64_Phdr::p_flags
Elf64_Word p_flags
Definition: elf64.h:121
Elf64_Lword
uint64_t Elf64_Lword
Definition: elf64.h:48
Elf64_Ehdr::e_phentsize
Elf64_Half e_phentsize
Definition: elf64.h:78
Elf64_Move::m_repeat
Elf64_Half m_repeat
Definition: elf64.h:183
Elf64_Addr
uint64_t Elf64_Addr
Definition: elf64.h:42
Elf64_Ehdr::e_machine
Elf64_Half e_machine
Definition: elf64.h:71
Elf64_Lib::l_time_stamp
Elf64_Word l_time_stamp
Definition: elf64.h:91
Elf64_Ehdr::e_entry
Elf64_Addr e_entry
Definition: elf64.h:73
Elf64_Lib::l_flags
Elf64_Word l_flags
Definition: elf64.h:94
Elf64_Verneed::vn_cnt
Elf64_Half vn_cnt
Definition: elf64.h:243
Elf64_Cap
Definition: elf64.h:194
Elf64_Verneed::vn_aux
Elf64_Word vn_aux
Definition: elf64.h:245
Elf64_Verdaux
Definition: elf64.h:236
Elf64_Move::m_value
Elf64_Lword m_value
Definition: elf64.h:180
Elf64_Verdef::vd_version
Elf64_Half vd_version
Definition: elf64.h:227
elf_common.h
Elf64_Rel
Definition: elf64.h:147
Elf64_Vernaux::vna_hash
Elf64_Word vna_hash
Definition: elf64.h:250
Elf64_Vernaux::vna_flags
Elf64_Half vna_flags
Definition: elf64.h:251
Elf64_Rela
Definition: elf64.h:153
Elf64_Size
Elf64_Xword Elf64_Size
Definition: elf64.h:61
Elf64_Verneed::vn_next
Elf64_Word vn_next
Definition: elf64.h:246
Elf64_Shdr::sh_info
Elf64_Word sh_info
Definition: elf64.h:110
Elf64_Lib::l_checksum
Elf64_Word l_checksum
Definition: elf64.h:92
Elf64_Verdaux::vda_name
Elf64_Word vda_name
Definition: elf64.h:237
Elf64_Rel::r_offset
Elf64_Addr r_offset
Definition: elf64.h:148
Elf64_Word
uint32_t Elf64_Word
Definition: elf64.h:47
Elf64_Sym
Definition: elf64.h:206
Elf64_Shdr::sh_size
Elf64_Xword sh_size
Definition: elf64.h:108
Elf64_Shdr::sh_addralign
Elf64_Xword sh_addralign
Definition: elf64.h:111
Elf64_Ehdr::e_ehsize
Elf64_Half e_ehsize
Definition: elf64.h:77
Elf64_Lib
Definition: elf64.h:89
int32_t
signed int int32_t
Definition: stdint-msvc2008.h:77
Elf64_Move::m_poffset
Elf64_Xword m_poffset
Definition: elf64.h:182
Elf64_Verdef
Definition: elf64.h:226
Elf64_Sym::st_name
Elf64_Word st_name
Definition: elf64.h:207
Elf64_Vernaux::vna_next
Elf64_Word vna_next
Definition: elf64.h:254
Elf64_Ssize
Elf64_Sxword Elf64_Ssize
Definition: elf64.h:62
Elf64_Verdef::vd_ndx
Elf64_Half vd_ndx
Definition: elf64.h:229
Elf64_Phdr::p_memsz
Elf64_Xword p_memsz
Definition: elf64.h:126
Elf64_Move::m_info
Elf64_Xword m_info
Definition: elf64.h:181


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:14