xref: /minix3/external/bsd/elftoolchain/dist/libelf/elf_types.m4 (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1/*	$NetBSD: elf_types.m4,v 1.2 2014/03/09 16:58:04 christos Exp $	*/
2
3/*-
4 * Copyright (c) 2006,2008 Joseph Koshy
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 * Id: elf_types.m4 321 2009-03-07 16:59:14Z jkoshy
29 */
30
31/*
32 * ELF types, defined in the "enum Elf_Type" API.
33 *
34 * The members of the list form a 2-tuple: (name, C-type-suffix).
35 * + `name' is an Elf_Type symbol without the `ELF_T_' prefix.
36 * + `C-type-suffix' is the suffix for Elf32_ and Elf64_ type names.
37 */
38
39define(`ELF_TYPE_LIST',
40	``ADDR,		Addr',
41	`BYTE,		Byte',
42	`CAP,		Cap',
43	`DYN,		Dyn',
44	`EHDR,		Ehdr',
45	`GNUHASH,	-',
46	`HALF,		Half',
47	`LWORD,		Lword',
48	`MOVE,		Move',
49	`MOVEP,		MoveP',
50	`NOTE,		Note',
51	`OFF,		Off',
52	`PHDR,		Phdr',
53	`REL,		Rel',
54	`RELA,		Rela',
55	`SHDR,		Shdr',
56	`SWORD,		Sword',
57	`SXWORD,	Sxword',
58	`SYMINFO,	Syminfo',
59	`SYM,		Sym',
60	`VDEF,		Verdef',
61	`VNEED,		Verneed',
62	`WORD,		Word',
63	`XWORD,		Xword',
64	`NUM,		_'')
65
66/*
67 * DEFINE_STRUCT(NAME,MEMBERLIST...)
68 *
69 * Map a type name to its members.
70 *
71 * Each member-list element comprises of pairs of (field name, type),
72 * in the sequence used in the file representation of `NAME'.
73 *
74 * Each member list element comprises a pair containing a field name
75 * and a basic type.  Basic types include IDENT, HALF, WORD, LWORD,
76 * ADDR{32,64}, OFF{32,64}, SWORD, XWORD, SXWORD.
77 *
78 * The last element of a member list is the null element: `_,_'.
79 */
80
81define(`DEFINE_STRUCT',`define(`$1_DEF',shift($@))dnl')
82
83DEFINE_STRUCT(`Elf32_Cap',
84	``c_tag,	WORD',
85	`c_un.c_val,	WORD',
86	`_,_'')
87
88DEFINE_STRUCT(`Elf64_Cap',
89	``c_tag,	XWORD',
90	`c_un.c_val,	XWORD',
91	`_,_'')
92
93DEFINE_STRUCT(`Elf32_Dyn',
94	``d_tag,	SWORD',
95	`d_un.d_ptr,	WORD',
96	`_,_'')
97
98DEFINE_STRUCT(`Elf64_Dyn',
99	``d_tag,	SXWORD',
100	`d_un.d_ptr,	XWORD',
101	`_,_'')
102
103DEFINE_STRUCT(`Elf32_Ehdr',
104	``e_ident,	IDENT',
105	`e_type, 	HALF',
106	`e_machine,	HALF',
107	`e_version,	WORD',
108	`e_entry,	ADDR',
109	`e_phoff,	OFF',
110	`e_shoff,	OFF',
111	`e_flags,	WORD',
112	`e_ehsize,	HALF',
113	`e_phentsize,	HALF',
114	`e_phnum,	HALF',
115	`e_shentsize,	HALF',
116	`e_shnum,	HALF',
117	`e_shstrndx,	HALF',
118	`_,_'')
119
120DEFINE_STRUCT(`Elf64_Ehdr',
121	``e_ident,	IDENT',
122	`e_type, 	HALF',
123	`e_machine,	HALF',
124	`e_version,	WORD',
125	`e_entry,	ADDR',
126	`e_phoff,	OFF',
127	`e_shoff,	OFF',
128	`e_flags,	WORD',
129	`e_ehsize,	HALF',
130	`e_phentsize,	HALF',
131	`e_phnum,	HALF',
132	`e_shentsize,	HALF',
133	`e_shnum,	HALF',
134	`e_shstrndx,	HALF',
135	`_,_'')
136
137DEFINE_STRUCT(`Elf32_Move',
138	``m_value,	LWORD',
139	`m_info,	WORD',
140	`m_poffset,	WORD',
141	`m_repeat,	HALF',
142	`m_stride,	HALF',
143	`_,_'')
144
145DEFINE_STRUCT(`Elf64_Move',
146	``m_value,	LWORD',
147	`m_info,	XWORD',
148	`m_poffset,	XWORD',
149	`m_repeat,	HALF',
150	`m_stride,	HALF',
151	`_,_'')
152
153DEFINE_STRUCT(`Elf32_Phdr',
154	``p_type,	WORD',
155	`p_offset,	OFF',
156	`p_vaddr,	ADDR',
157	`p_paddr,	ADDR',
158	`p_filesz,	WORD',
159	`p_memsz,	WORD',
160	`p_flags,	WORD',
161	`p_align,	WORD',
162	`_,_'')
163
164DEFINE_STRUCT(`Elf64_Phdr',
165	``p_type,	WORD',
166	`p_flags,	WORD',
167	`p_offset,	OFF',
168	`p_vaddr,	ADDR',
169	`p_paddr,	ADDR',
170	`p_filesz,	XWORD',
171	`p_memsz,	XWORD',
172	`p_align,	XWORD',
173	`_,_'')
174
175DEFINE_STRUCT(`Elf32_Rel',
176	``r_offset,	ADDR',
177	`r_info,	WORD',
178	`_,_'')
179
180DEFINE_STRUCT(`Elf64_Rel',
181	``r_offset,	ADDR',
182	`r_info,	XWORD',
183	`_,_'')
184
185DEFINE_STRUCT(`Elf32_Rela',
186	``r_offset,	ADDR',
187	`r_info,	WORD',
188	`r_addend,	SWORD',
189	`_,_'')
190
191DEFINE_STRUCT(`Elf64_Rela',
192	``r_offset,	ADDR',
193	`r_info,	XWORD',
194	`r_addend,	SXWORD',
195	`_,_'')
196
197DEFINE_STRUCT(`Elf32_Shdr',
198	``sh_name,	WORD',
199	`sh_type,	WORD',
200	`sh_flags,	WORD',
201	`sh_addr,	ADDR',
202	`sh_offset,	OFF',
203	`sh_size,	WORD',
204	`sh_link,	WORD',
205	`sh_info,	WORD',
206	`sh_addralign,	WORD',
207	`sh_entsize,	WORD',
208	`_,_'')
209
210DEFINE_STRUCT(`Elf64_Shdr',
211	``sh_name,	WORD',
212	`sh_type,	WORD',
213	`sh_flags,	XWORD',
214	`sh_addr,	ADDR',
215	`sh_offset,	OFF',
216	`sh_size,	XWORD',
217	`sh_link,	WORD',
218	`sh_info,	WORD',
219	`sh_addralign,	XWORD',
220	`sh_entsize,	XWORD',
221	`_,_'')
222
223DEFINE_STRUCT(`Elf32_Sym',
224	``st_name,	WORD',
225	`st_value,	ADDR',
226	`st_size,	WORD',
227	`st_info,	BYTE',
228	`st_other,	BYTE',
229	`st_shndx,	HALF',
230	`_,_'')
231
232DEFINE_STRUCT(`Elf64_Sym',
233	``st_name,	WORD',
234	`st_info,	BYTE',
235	`st_other,	BYTE',
236	`st_shndx,	HALF',
237	`st_value,	ADDR',
238	`st_size,	XWORD',
239	`_,_'')
240
241DEFINE_STRUCT(`Elf32_Syminfo',
242	``si_boundto,	HALF',
243	`si_flags,	HALF',
244	`_,_'')
245
246DEFINE_STRUCT(`Elf64_Syminfo',
247	``si_boundto,	HALF',
248	`si_flags,	HALF',
249	`_,_'')
250
251DEFINE_STRUCT(`Elf32_Verdaux',
252	``vda_name,	WORD',
253	`vda_next,	WORD',
254	`_,_'')
255
256DEFINE_STRUCT(`Elf64_Verdaux',
257	``vda_name,	WORD',
258	`vda_next,	WORD',
259	`_,_'')
260
261DEFINE_STRUCT(`Elf32_Verdef',
262	``vd_version,	HALF',
263	`vd_flags,	HALF',
264	`vd_ndx,	HALF',
265	`vd_cnt,	HALF',
266	`vd_hash,	WORD',
267	`vd_aux,	WORD',
268	`vd_next,	WORD',
269	`_,_'')
270
271DEFINE_STRUCT(`Elf64_Verdef',
272	``vd_version,	HALF',
273	`vd_flags,	HALF',
274	`vd_ndx,	HALF',
275	`vd_cnt,	HALF',
276	`vd_hash,	WORD',
277	`vd_aux,	WORD',
278	`vd_next,	WORD',
279	`_,_'')
280
281DEFINE_STRUCT(`Elf32_Verneed',
282	``vn_version,	HALF',
283	`vn_cnt,	HALF',
284	`vn_file,	WORD',
285	`vn_aux,	WORD',
286	`vn_next,	WORD',
287	`_,_'')
288
289DEFINE_STRUCT(`Elf64_Verneed',
290	``vn_version,	HALF',
291	`vn_cnt,	HALF',
292	`vn_file,	WORD',
293	`vn_aux,	WORD',
294	`vn_next,	WORD',
295	`_,_'')
296
297DEFINE_STRUCT(`Elf32_Vernaux',
298	``vna_hash,	WORD',
299	`vna_flags,	HALF',
300	`vna_other,	HALF',
301	`vna_name,	WORD',
302	`vna_next,	WORD',
303	`_,_'')
304
305DEFINE_STRUCT(`Elf64_Vernaux',
306	``vna_hash,	WORD',
307	`vna_flags,	HALF',
308	`vna_other,	HALF',
309	`vna_name,	WORD',
310	`vna_next,	WORD',
311	`_,_'')
312