TianoCore EDK2
master
Loading...
Searching...
No Matches
Elf32.h
Go to the documentation of this file.
1
9
/*-
10
* Copyright (c) 1996-1998 John D. Polstra.
11
* All rights reserved.
12
*
13
* Redistribution and use in source and binary forms, with or without
14
* modification, are permitted provided that the following conditions
15
* are met:
16
* 1. Redistributions of source code must retain the above copyright
17
* notice, this list of conditions and the following disclaimer.
18
* 2. Redistributions in binary form must reproduce the above copyright
19
* notice, this list of conditions and the following disclaimer in the
20
* documentation and/or other materials provided with the distribution.
21
*
22
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
* SUCH DAMAGE.
33
*
34
* $FreeBSD: src/sys/sys/elf32.h,v 1.8.14.2 2007/12/03 21:30:36 marius Exp $
35
*/
36
37
#ifndef _SYS_ELF32_H_
38
#define _SYS_ELF32_H_ 1
39
40
/*
41
* ELF definitions common to all 32-bit architectures.
42
*/
43
44
typedef
UINT32 Elf32_Addr;
45
typedef
UINT16 Elf32_Half;
46
typedef
UINT32 Elf32_Off;
47
typedef
INT32 Elf32_Sword;
48
typedef
UINT32 Elf32_Word;
49
typedef
UINT64 Elf32_Lword;
50
51
typedef
Elf32_Word Elf32_Hashelt;
52
53
/* Non-standard class-dependent datatype used for abstraction. */
54
typedef
Elf32_Word Elf32_Size;
55
typedef
Elf32_Sword Elf32_Ssize;
56
57
/*
58
* ELF header.
59
*/
60
61
typedef
struct
{
62
unsigned
char
e_ident[EI_NIDENT];
/* File identification. */
63
Elf32_Half e_type;
/* File type. */
64
Elf32_Half e_machine;
/* Machine architecture. */
65
Elf32_Word e_version;
/* ELF format version. */
66
Elf32_Addr e_entry;
/* Entry point. */
67
Elf32_Off e_phoff;
/* Program header file offset. */
68
Elf32_Off e_shoff;
/* Section header file offset. */
69
Elf32_Word e_flags;
/* Architecture-specific flags. */
70
Elf32_Half e_ehsize;
/* Size of ELF header in bytes. */
71
Elf32_Half e_phentsize;
/* Size of program header entry. */
72
Elf32_Half e_phnum;
/* Number of program header entries. */
73
Elf32_Half e_shentsize;
/* Size of section header entry. */
74
Elf32_Half e_shnum;
/* Number of section header entries. */
75
Elf32_Half e_shstrndx;
/* Section name strings section. */
76
}
Elf32_Ehdr
;
77
78
/*
79
* Section header.
80
*/
81
82
typedef
struct
{
83
Elf32_Word sh_name;
/* Section name (index into the
84
section header string table). */
85
Elf32_Word sh_type;
/* Section type. */
86
Elf32_Word sh_flags;
/* Section flags. */
87
Elf32_Addr sh_addr;
/* Address in memory image. */
88
Elf32_Off sh_offset;
/* Offset in file. */
89
Elf32_Word sh_size;
/* Size in bytes. */
90
Elf32_Word sh_link;
/* Index of a related section. */
91
Elf32_Word sh_info;
/* Depends on section type. */
92
Elf32_Word sh_addralign;
/* Alignment in bytes. */
93
Elf32_Word sh_entsize;
/* Size of each entry in section. */
94
}
Elf32_Shdr
;
95
96
/*
97
* Program header.
98
*/
99
100
typedef
struct
{
101
Elf32_Word p_type;
/* Entry type. */
102
Elf32_Off p_offset;
/* File offset of contents. */
103
Elf32_Addr p_vaddr;
/* Virtual address in memory image. */
104
Elf32_Addr p_paddr;
/* Physical address (not used). */
105
Elf32_Word p_filesz;
/* Size of contents in file. */
106
Elf32_Word p_memsz;
/* Size of contents in memory. */
107
Elf32_Word p_flags;
/* Access permission flags. */
108
Elf32_Word p_align;
/* Alignment in memory and file. */
109
}
Elf32_Phdr
;
110
111
/*
112
* Dynamic structure. The ".dynamic" section contains an array of them.
113
*/
114
115
typedef
struct
{
116
Elf32_Sword d_tag;
/* Entry type. */
117
union
{
118
Elf32_Word d_val;
/* Integer value. */
119
Elf32_Addr d_ptr;
/* Address value. */
120
} d_un;
121
}
Elf32_Dyn
;
122
123
/*
124
* Relocation entries.
125
*/
126
127
/* Relocations that don't need an addend field. */
128
typedef
struct
{
129
Elf32_Addr r_offset;
/* Location to be relocated. */
130
Elf32_Word r_info;
/* Relocation type and symbol index. */
131
}
Elf32_Rel
;
132
133
/* Relocations that need an addend field. */
134
typedef
struct
{
135
Elf32_Addr r_offset;
/* Location to be relocated. */
136
Elf32_Word r_info;
/* Relocation type and symbol index. */
137
Elf32_Sword r_addend;
/* Addend. */
138
}
Elf32_Rela
;
139
140
/* Macros for accessing the fields of r_info. */
141
#define ELF32_R_SYM(info) ((info) >> 8)
142
#define ELF32_R_TYPE(info) ((unsigned char)(info))
143
144
/* Macro for constructing r_info from field values. */
145
#define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type))
146
147
/*
148
* Note entry header
149
*/
150
typedef
Elf_Note
Elf32_Nhdr
;
151
152
/*
153
* Move entry
154
*/
155
typedef
struct
{
156
Elf32_Lword m_value;
/* symbol value */
157
Elf32_Word m_info;
/* size + index */
158
Elf32_Word m_poffset;
/* symbol offset */
159
Elf32_Half m_repeat;
/* repeat count */
160
Elf32_Half m_stride;
/* stride info */
161
}
Elf32_Move
;
162
163
/*
164
* The macros compose and decompose values for Move.r_info
165
*
166
* sym = ELF32_M_SYM(M.m_info)
167
* size = ELF32_M_SIZE(M.m_info)
168
* M.m_info = ELF32_M_INFO(sym, size)
169
*/
170
#define ELF32_M_SYM(info) ((info)>>8)
171
#define ELF32_M_SIZE(info) ((unsigned char)(info))
172
#define ELF32_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))
173
174
/*
175
* Hardware/Software capabilities entry
176
*/
177
typedef
struct
{
178
Elf32_Word c_tag;
/* how to interpret value */
179
union
{
180
Elf32_Word c_val;
181
Elf32_Addr c_ptr;
182
} c_un;
183
}
Elf32_Cap
;
184
185
/*
186
* Symbol table entries.
187
*/
188
189
typedef
struct
{
190
Elf32_Word st_name;
/* String table index of name. */
191
Elf32_Addr st_value;
/* Symbol value. */
192
Elf32_Word st_size;
/* Size of associated object. */
193
unsigned
char
st_info;
/* Type and binding information. */
194
unsigned
char
st_other;
/* Reserved (not used). */
195
Elf32_Half st_shndx;
/* Section index of symbol. */
196
}
Elf32_Sym
;
197
198
/* Macros for accessing the fields of st_info. */
199
#define ELF32_ST_BIND(info) ((info) >> 4)
200
#define ELF32_ST_TYPE(info) ((info) & 0xf)
201
202
/* Macro for constructing st_info from field values. */
203
#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
204
205
/* Macro for accessing the fields of st_other. */
206
#define ELF32_ST_VISIBILITY(oth) ((oth) & 0x3)
207
208
/* Structures used by Sun & GNU symbol versioning. */
209
typedef
struct
{
210
Elf32_Half vd_version;
211
Elf32_Half vd_flags;
212
Elf32_Half vd_ndx;
213
Elf32_Half vd_cnt;
214
Elf32_Word vd_hash;
215
Elf32_Word vd_aux;
216
Elf32_Word vd_next;
217
}
Elf32_Verdef
;
218
219
typedef
struct
{
220
Elf32_Word vda_name;
221
Elf32_Word vda_next;
222
}
Elf32_Verdaux
;
223
224
typedef
struct
{
225
Elf32_Half vn_version;
226
Elf32_Half vn_cnt;
227
Elf32_Word vn_file;
228
Elf32_Word vn_aux;
229
Elf32_Word vn_next;
230
}
Elf32_Verneed
;
231
232
typedef
struct
{
233
Elf32_Word vna_hash;
234
Elf32_Half vna_flags;
235
Elf32_Half vna_other;
236
Elf32_Word vna_name;
237
Elf32_Word vna_next;
238
}
Elf32_Vernaux
;
239
240
typedef
Elf32_Half Elf32_Versym;
241
242
typedef
struct
{
243
Elf32_Half si_boundto;
/* direct bindings - symbol bound to */
244
Elf32_Half si_flags;
/* per symbol flags */
245
}
Elf32_Syminfo
;
246
247
#endif
/* !_SYS_ELF32_H_ */
Elf32_Cap
Definition:
Elf32.h:177
Elf32_Dyn
Definition:
Elf32.h:115
Elf32_Ehdr
Definition:
Elf32.h:61
Elf32_Move
Definition:
Elf32.h:155
Elf32_Phdr
Definition:
Elf32.h:100
Elf32_Rel
Definition:
Elf32.h:128
Elf32_Rela
Definition:
Elf32.h:134
Elf32_Shdr
Definition:
Elf32.h:82
Elf32_Sym
Definition:
Elf32.h:189
Elf32_Syminfo
Definition:
Elf32.h:242
Elf32_Verdaux
Definition:
Elf32.h:219
Elf32_Verdef
Definition:
Elf32.h:209
Elf32_Vernaux
Definition:
Elf32.h:232
Elf32_Verneed
Definition:
Elf32.h:224
Elf_Note
Definition:
ElfCommon.h:54
UefiPayloadPkg
PayloadLoaderPeim
ElfLib
Elf32.h
Generated on Fri Nov 15 2024 18:01:27 for TianoCore EDK2 by
1.9.6