Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4973 | right-hear | 1 | /* |
2 | ext_types.h - external representation of ELF data types. |
||
3 | Copyright (C) 1995 - 1998 Michael Riepe |
||
4 | |||
5 | This library is free software; you can redistribute it and/or |
||
6 | modify it under the terms of the GNU Library General Public |
||
7 | License as published by the Free Software Foundation; either |
||
8 | version 2 of the License, or (at your option) any later version. |
||
9 | |||
10 | This library is distributed in the hope that it will be useful, |
||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||
13 | Library General Public License for more details. |
||
14 | |||
15 | You should have received a copy of the GNU Library General Public |
||
16 | License along with this library; if not, write to the Free Software |
||
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
||
18 | */ |
||
19 | |||
20 | /* @(#) $Id: ext_types.h,v 1.3 1998/06/01 19:47:15 michael Exp $ */ |
||
21 | |||
22 | #ifndef _EXT_TYPES_H |
||
23 | #define _EXT_TYPES_H |
||
24 | |||
25 | #ifdef __cplusplus |
||
26 | extern "C" { |
||
27 | #endif /* __cplusplus */ |
||
28 | |||
29 | /* |
||
30 | * Scalar data types |
||
31 | */ |
||
32 | typedef unsigned char __ext_Elf32_Addr [ELF32_FSZ_ADDR]; |
||
33 | typedef unsigned char __ext_Elf32_Half [ELF32_FSZ_HALF]; |
||
34 | typedef unsigned char __ext_Elf32_Off [ELF32_FSZ_OFF]; |
||
35 | typedef unsigned char __ext_Elf32_Sword [ELF32_FSZ_SWORD]; |
||
36 | typedef unsigned char __ext_Elf32_Word [ELF32_FSZ_WORD]; |
||
37 | |||
38 | #if __LIBELF64 |
||
39 | typedef unsigned char __ext_Elf64_Addr [ELF64_FSZ_ADDR]; |
||
40 | typedef unsigned char __ext_Elf64_Half [ELF64_FSZ_HALF]; |
||
41 | typedef unsigned char __ext_Elf64_Off [ELF64_FSZ_OFF]; |
||
42 | typedef unsigned char __ext_Elf64_Sword [ELF64_FSZ_SWORD]; |
||
43 | typedef unsigned char __ext_Elf64_Sxword[ELF64_FSZ_SXWORD]; |
||
44 | typedef unsigned char __ext_Elf64_Word [ELF64_FSZ_WORD]; |
||
45 | typedef unsigned char __ext_Elf64_Xword [ELF64_FSZ_XWORD]; |
||
46 | #endif /* __LIBELF64 */ |
||
47 | |||
48 | /* |
||
49 | * ELF header |
||
50 | */ |
||
51 | typedef struct { |
||
52 | unsigned char e_ident[EI_NIDENT]; |
||
53 | __ext_Elf32_Half e_type; |
||
54 | __ext_Elf32_Half e_machine; |
||
55 | __ext_Elf32_Word e_version; |
||
56 | __ext_Elf32_Addr e_entry; |
||
57 | __ext_Elf32_Off e_phoff; |
||
58 | __ext_Elf32_Off e_shoff; |
||
59 | __ext_Elf32_Word e_flags; |
||
60 | __ext_Elf32_Half e_ehsize; |
||
61 | __ext_Elf32_Half e_phentsize; |
||
62 | __ext_Elf32_Half e_phnum; |
||
63 | __ext_Elf32_Half e_shentsize; |
||
64 | __ext_Elf32_Half e_shnum; |
||
65 | __ext_Elf32_Half e_shstrndx; |
||
66 | } __ext_Elf32_Ehdr; |
||
67 | |||
68 | #if __LIBELF64 |
||
69 | typedef struct { |
||
70 | unsigned char e_ident[EI_NIDENT]; |
||
71 | __ext_Elf64_Half e_type; |
||
72 | __ext_Elf64_Half e_machine; |
||
73 | __ext_Elf64_Word e_version; |
||
74 | __ext_Elf64_Addr e_entry; |
||
75 | __ext_Elf64_Off e_phoff; |
||
76 | __ext_Elf64_Off e_shoff; |
||
77 | __ext_Elf64_Word e_flags; |
||
78 | __ext_Elf64_Half e_ehsize; |
||
79 | __ext_Elf64_Half e_phentsize; |
||
80 | __ext_Elf64_Half e_phnum; |
||
81 | __ext_Elf64_Half e_shentsize; |
||
82 | __ext_Elf64_Half e_shnum; |
||
83 | __ext_Elf64_Half e_shstrndx; |
||
84 | } __ext_Elf64_Ehdr; |
||
85 | #endif /* __LIBELF64 */ |
||
86 | |||
87 | /* |
||
88 | * Section header |
||
89 | */ |
||
90 | typedef struct { |
||
91 | __ext_Elf32_Word sh_name; |
||
92 | __ext_Elf32_Word sh_type; |
||
93 | __ext_Elf32_Word sh_flags; |
||
94 | __ext_Elf32_Addr sh_addr; |
||
95 | __ext_Elf32_Off sh_offset; |
||
96 | __ext_Elf32_Word sh_size; |
||
97 | __ext_Elf32_Word sh_link; |
||
98 | __ext_Elf32_Word sh_info; |
||
99 | __ext_Elf32_Word sh_addralign; |
||
100 | __ext_Elf32_Word sh_entsize; |
||
101 | } __ext_Elf32_Shdr; |
||
102 | |||
103 | #if __LIBELF64 |
||
104 | typedef struct { |
||
105 | __ext_Elf64_Word sh_name; |
||
106 | __ext_Elf64_Word sh_type; |
||
107 | __ext_Elf64_Xword sh_flags; |
||
108 | __ext_Elf64_Addr sh_addr; |
||
109 | __ext_Elf64_Off sh_offset; |
||
110 | __ext_Elf64_Xword sh_size; |
||
111 | __ext_Elf64_Word sh_link; |
||
112 | __ext_Elf64_Word sh_info; |
||
113 | __ext_Elf64_Xword sh_addralign; |
||
114 | __ext_Elf64_Xword sh_entsize; |
||
115 | } __ext_Elf64_Shdr; |
||
116 | #endif /* __LIBELF64 */ |
||
117 | |||
118 | /* |
||
119 | * Symbol table |
||
120 | */ |
||
121 | typedef struct { |
||
122 | __ext_Elf32_Word st_name; |
||
123 | __ext_Elf32_Addr st_value; |
||
124 | __ext_Elf32_Word st_size; |
||
125 | unsigned char st_info; |
||
126 | unsigned char st_other; |
||
127 | __ext_Elf32_Half st_shndx; |
||
128 | } __ext_Elf32_Sym; |
||
129 | |||
130 | #if __LIBELF64 |
||
131 | typedef struct { |
||
132 | __ext_Elf64_Word st_name; |
||
133 | unsigned char st_info; |
||
134 | unsigned char st_other; |
||
135 | __ext_Elf64_Half st_shndx; |
||
136 | __ext_Elf64_Addr st_value; |
||
137 | __ext_Elf64_Xword st_size; |
||
138 | } __ext_Elf64_Sym; |
||
139 | #endif /* __LIBELF64 */ |
||
140 | |||
141 | /* |
||
142 | * Relocation |
||
143 | */ |
||
144 | typedef struct { |
||
145 | __ext_Elf32_Addr r_offset; |
||
146 | __ext_Elf32_Word r_info; |
||
147 | } __ext_Elf32_Rel; |
||
148 | |||
149 | typedef struct { |
||
150 | __ext_Elf32_Addr r_offset; |
||
151 | __ext_Elf32_Word r_info; |
||
152 | __ext_Elf32_Sword r_addend; |
||
153 | } __ext_Elf32_Rela; |
||
154 | |||
155 | #if __LIBELF64 |
||
156 | typedef struct { |
||
157 | __ext_Elf64_Addr r_offset; |
||
158 | #if __LIBELF64_IRIX |
||
159 | __ext_Elf64_Word r_sym; |
||
160 | unsigned char r_ssym; |
||
161 | unsigned char r_type3; |
||
162 | unsigned char r_type2; |
||
163 | unsigned char r_type; |
||
164 | #else /* __LIBELF64_IRIX */ |
||
165 | __ext_Elf64_Xword r_info; |
||
166 | #endif /* __LIBELF64_IRIX */ |
||
167 | } __ext_Elf64_Rel; |
||
168 | |||
169 | typedef struct { |
||
170 | __ext_Elf64_Addr r_offset; |
||
171 | #if __LIBELF64_IRIX |
||
172 | __ext_Elf64_Word r_sym; |
||
173 | unsigned char r_ssym; |
||
174 | unsigned char r_type3; |
||
175 | unsigned char r_type2; |
||
176 | unsigned char r_type; |
||
177 | #else /* __LIBELF64_IRIX */ |
||
178 | __ext_Elf64_Xword r_info; |
||
179 | #endif /* __LIBELF64_IRIX */ |
||
180 | __ext_Elf64_Sxword r_addend; |
||
181 | } __ext_Elf64_Rela; |
||
182 | #endif /* __LIBELF64 */ |
||
183 | |||
184 | /* |
||
185 | * Program header |
||
186 | */ |
||
187 | typedef struct { |
||
188 | __ext_Elf32_Word p_type; |
||
189 | __ext_Elf32_Off p_offset; |
||
190 | __ext_Elf32_Addr p_vaddr; |
||
191 | __ext_Elf32_Addr p_paddr; |
||
192 | __ext_Elf32_Word p_filesz; |
||
193 | __ext_Elf32_Word p_memsz; |
||
194 | __ext_Elf32_Word p_flags; |
||
195 | __ext_Elf32_Word p_align; |
||
196 | } __ext_Elf32_Phdr; |
||
197 | |||
198 | #if __LIBELF64 |
||
199 | typedef struct { |
||
200 | __ext_Elf64_Word p_type; |
||
201 | __ext_Elf64_Word p_flags; |
||
202 | __ext_Elf64_Off p_offset; |
||
203 | __ext_Elf64_Addr p_vaddr; |
||
204 | __ext_Elf64_Addr p_paddr; |
||
205 | __ext_Elf64_Xword p_filesz; |
||
206 | __ext_Elf64_Xword p_memsz; |
||
207 | __ext_Elf64_Xword p_align; |
||
208 | } __ext_Elf64_Phdr; |
||
209 | #endif /* __LIBELF64 */ |
||
210 | |||
211 | /* |
||
212 | * Dynamic structure |
||
213 | */ |
||
214 | typedef struct { |
||
215 | __ext_Elf32_Sword d_tag; |
||
216 | union { |
||
217 | __ext_Elf32_Word d_val; |
||
218 | __ext_Elf32_Addr d_ptr; |
||
219 | } d_un; |
||
220 | } __ext_Elf32_Dyn; |
||
221 | |||
222 | #if __LIBELF64 |
||
223 | typedef struct { |
||
224 | __ext_Elf64_Sxword d_tag; |
||
225 | union { |
||
226 | __ext_Elf64_Xword d_val; |
||
227 | __ext_Elf64_Addr d_ptr; |
||
228 | } d_un; |
||
229 | } __ext_Elf64_Dyn; |
||
230 | #endif /* __LIBELF64 */ |
||
231 | |||
232 | #ifdef __cplusplus |
||
233 | } |
||
234 | #endif /* __cplusplus */ |
||
235 | |||
236 | #endif /* _EXT_TYPES_H */ |