1 /*-
2  * Copyright (c) 2008,2009 Kai Wang
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer
10  *    in this position and unchanged.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #include <sys/param.h>
28 #include <libelf.h>
29 #include <libelftc.h>
30 
31 #include "_libelftc.h"
32 
33 ELFTC_VCSID("$Id: libelftc_bfdtarget.c 3174 2015-03-27 17:13:41Z emaste $");
34 
35 struct _Elftc_Bfd_Target _libelftc_targets[] = {
36 
37 	{
38 		.bt_name = "binary",
39 		.bt_type = ETF_BINARY,
40 	},
41 
42 	{
43 		.bt_name      = "elf32-avr",
44 		.bt_type      = ETF_ELF,
45 		.bt_byteorder = ELFDATA2LSB,
46 		.bt_elfclass  = ELFCLASS32,
47 		.bt_machine   = EM_AVR,
48 	},
49 
50 	{
51 		.bt_name      = "elf32-big",
52 		.bt_type      = ETF_ELF,
53 		.bt_byteorder = ELFDATA2MSB,
54 		.bt_elfclass  = ELFCLASS32,
55 	},
56 
57 	{
58 		.bt_name      = "elf32-bigarm",
59 		.bt_type      = ETF_ELF,
60 		.bt_byteorder = ELFDATA2MSB,
61 		.bt_elfclass  = ELFCLASS32,
62 		.bt_machine   = EM_ARM,
63 	},
64 
65 	{
66 		.bt_name      = "elf32-bigmips",
67 		.bt_type      = ETF_ELF,
68 		.bt_byteorder = ELFDATA2MSB,
69 		.bt_elfclass  = ELFCLASS32,
70 		.bt_machine   = EM_MIPS,
71 	},
72 
73 	{
74 		.bt_name      = "elf32-i386",
75 		.bt_type      = ETF_ELF,
76 		.bt_byteorder = ELFDATA2LSB,
77 		.bt_elfclass  = ELFCLASS32,
78 		.bt_machine   = EM_386,
79 	},
80 
81 	{
82 		.bt_name      = "elf32-i386-freebsd",
83 		.bt_type      = ETF_ELF,
84 		.bt_byteorder = ELFDATA2LSB,
85 		.bt_elfclass  = ELFCLASS32,
86 		.bt_machine   = EM_386,
87 		.bt_osabi     = ELFOSABI_FREEBSD,
88 	},
89 
90 	{
91 		.bt_name      = "elf32-ia64-big",
92 		.bt_type      = ETF_ELF,
93 		.bt_byteorder = ELFDATA2MSB,
94 		.bt_elfclass  = ELFCLASS32,
95 		.bt_machine   = EM_IA_64,
96 	},
97 
98 	{
99 		.bt_name      = "elf32-little",
100 		.bt_type      = ETF_ELF,
101 		.bt_byteorder = ELFDATA2LSB,
102 		.bt_elfclass  = ELFCLASS32,
103 	},
104 
105 	{
106 		.bt_name      = "elf32-littlearm",
107 		.bt_type      = ETF_ELF,
108 		.bt_byteorder = ELFDATA2LSB,
109 		.bt_elfclass  = ELFCLASS32,
110 		.bt_machine   = EM_ARM,
111 	},
112 
113 	{
114 		.bt_name      = "elf32-littlemips",
115 		.bt_type      = ETF_ELF,
116 		.bt_byteorder = ELFDATA2LSB,
117 		.bt_elfclass  = ELFCLASS32,
118 		.bt_machine   = EM_MIPS,
119 	},
120 
121 	{
122 		.bt_name      = "elf32-powerpc",
123 		.bt_type      = ETF_ELF,
124 		.bt_byteorder = ELFDATA2MSB,
125 		.bt_elfclass  = ELFCLASS32,
126 		.bt_machine   = EM_PPC,
127 	},
128 
129 	{
130 		.bt_name      = "elf32-powerpcle",
131 		.bt_type      = ETF_ELF,
132 		.bt_byteorder = ELFDATA2LSB,
133 		.bt_elfclass  = ELFCLASS32,
134 		.bt_machine   = EM_PPC,
135 	},
136 
137 	{
138 		.bt_name      = "elf32-sh",
139 		.bt_type      = ETF_ELF,
140 		.bt_byteorder = ELFDATA2MSB,
141 		.bt_elfclass  = ELFCLASS32,
142 		.bt_machine   = EM_SH,
143 	},
144 
145 	{
146 		.bt_name      = "elf32-shl",
147 		.bt_type      = ETF_ELF,
148 		.bt_byteorder = ELFDATA2LSB,
149 		.bt_elfclass  = ELFCLASS32,
150 		.bt_machine   = EM_SH,
151 	},
152 
153 	{
154 		.bt_name      = "elf32-sh-nbsd",
155 		.bt_type      = ETF_ELF,
156 		.bt_byteorder = ELFDATA2MSB,
157 		.bt_elfclass  = ELFCLASS32,
158 		.bt_machine   = EM_SH,
159 		.bt_osabi     = ELFOSABI_NETBSD,
160 	},
161 
162 	{
163 		.bt_name      = "elf32-shl-nbsd",
164 		.bt_type      = ETF_ELF,
165 		.bt_byteorder = ELFDATA2LSB,
166 		.bt_elfclass  = ELFCLASS32,
167 		.bt_machine   = EM_SH,
168 		.bt_osabi     = ELFOSABI_NETBSD,
169 	},
170 
171 	{
172 		.bt_name      = "elf32-shbig-linux",
173 		.bt_type      = ETF_ELF,
174 		.bt_byteorder = ELFDATA2MSB,
175 		.bt_elfclass  = ELFCLASS32,
176 		.bt_machine   = EM_SH,
177 		.bt_osabi     = ELFOSABI_LINUX,
178 	},
179 
180 	{
181 		.bt_name      = "elf32-sh-linux",
182 		.bt_type      = ETF_ELF,
183 		.bt_byteorder = ELFDATA2LSB,
184 		.bt_elfclass  = ELFCLASS32,
185 		.bt_machine   = EM_SH,
186 		.bt_osabi     = ELFOSABI_LINUX,
187 	},
188 
189 	{
190 		.bt_name      = "elf32-sparc",
191 		.bt_type      = ETF_ELF,
192 		.bt_byteorder = ELFDATA2MSB,
193 		.bt_elfclass  = ELFCLASS32,
194 		.bt_machine   = EM_SPARC,
195 	},
196 
197 	{
198 		.bt_name      = "elf64-alpha",
199 		.bt_type      = ETF_ELF,
200 		.bt_byteorder = ELFDATA2LSB,
201 		.bt_elfclass  = ELFCLASS64,
202 		.bt_machine   = EM_ALPHA,
203 	},
204 
205 	{
206 		.bt_name      = "elf64-alpha-freebsd",
207 		.bt_type      = ETF_ELF,
208 		.bt_byteorder = ELFDATA2LSB,
209 		.bt_elfclass  = ELFCLASS64,
210 		.bt_machine   = EM_ALPHA,
211 		.bt_osabi     = ELFOSABI_FREEBSD
212 	},
213 
214 	{
215 		.bt_name      = "elf64-big",
216 		.bt_type      = ETF_ELF,
217 		.bt_byteorder = ELFDATA2MSB,
218 		.bt_elfclass  = ELFCLASS64,
219 	},
220 
221 	{
222 		.bt_name      = "elf64-bigmips",
223 		.bt_type      = ETF_ELF,
224 		.bt_byteorder = ELFDATA2MSB,
225 		.bt_elfclass  = ELFCLASS64,
226 		.bt_machine   = EM_MIPS,
227 	},
228 
229 	{
230 		.bt_name      = "elf64-ia64-big",
231 		.bt_type      = ETF_ELF,
232 		.bt_byteorder = ELFDATA2MSB,
233 		.bt_elfclass  = ELFCLASS64,
234 		.bt_machine   = EM_IA_64,
235 	},
236 
237 	{
238 		.bt_name      = "elf64-ia64-little",
239 		.bt_type      = ETF_ELF,
240 		.bt_byteorder = ELFDATA2LSB,
241 		.bt_elfclass  = ELFCLASS64,
242 		.bt_machine   = EM_IA_64,
243 	},
244 
245 	{
246 		.bt_name      = "elf64-little",
247 		.bt_type      = ETF_ELF,
248 		.bt_byteorder = ELFDATA2LSB,
249 		.bt_elfclass  = ELFCLASS64,
250 	},
251 
252 	{
253 		.bt_name      = "elf64-littlemips",
254 		.bt_type      = ETF_ELF,
255 		.bt_byteorder = ELFDATA2LSB,
256 		.bt_elfclass  = ELFCLASS64,
257 		.bt_machine   = EM_MIPS,
258 	},
259 
260 	{
261 		.bt_name      = "elf64-powerpc",
262 		.bt_type      = ETF_ELF,
263 		.bt_byteorder = ELFDATA2MSB,
264 		.bt_elfclass  = ELFCLASS64,
265 		.bt_machine   = EM_PPC64,
266 	},
267 
268 	{
269 		.bt_name      = "elf64-powerpcle",
270 		.bt_type      = ETF_ELF,
271 		.bt_byteorder = ELFDATA2LSB,
272 		.bt_elfclass  = ELFCLASS64,
273 		.bt_machine   = EM_PPC64,
274 	},
275 
276 	{
277 		.bt_name      = "elf64-sh64",
278 		.bt_type      = ETF_ELF,
279 		.bt_byteorder = ELFDATA2MSB,
280 		.bt_elfclass  = ELFCLASS64,
281 		.bt_machine   = EM_SH,
282 	},
283 
284 	{
285 		.bt_name      = "elf64-sh64l",
286 		.bt_type      = ETF_ELF,
287 		.bt_byteorder = ELFDATA2LSB,
288 		.bt_elfclass  = ELFCLASS64,
289 		.bt_machine   = EM_SH,
290 	},
291 
292 	{
293 		.bt_name      = "elf64-sh64-nbsd",
294 		.bt_type      = ETF_ELF,
295 		.bt_byteorder = ELFDATA2MSB,
296 		.bt_elfclass  = ELFCLASS64,
297 		.bt_machine   = EM_SH,
298 		.bt_osabi     = ELFOSABI_NETBSD,
299 	},
300 
301 	{
302 		.bt_name      = "elf64-sh64l-nbsd",
303 		.bt_type      = ETF_ELF,
304 		.bt_byteorder = ELFDATA2LSB,
305 		.bt_elfclass  = ELFCLASS64,
306 		.bt_machine   = EM_SH,
307 		.bt_osabi     = ELFOSABI_NETBSD,
308 	},
309 
310 	{
311 		.bt_name      = "elf64-sh64big-linux",
312 		.bt_type      = ETF_ELF,
313 		.bt_byteorder = ELFDATA2MSB,
314 		.bt_elfclass  = ELFCLASS64,
315 		.bt_machine   = EM_SH,
316 		.bt_osabi     = ELFOSABI_LINUX,
317 	},
318 
319 	{
320 		.bt_name      = "elf64-sh64-linux",
321 		.bt_type      = ETF_ELF,
322 		.bt_byteorder = ELFDATA2LSB,
323 		.bt_elfclass  = ELFCLASS64,
324 		.bt_machine   = EM_SH,
325 		.bt_osabi     = ELFOSABI_LINUX,
326 	},
327 
328 	{
329 		.bt_name      = "elf64-sparc",
330 		.bt_type      = ETF_ELF,
331 		.bt_byteorder = ELFDATA2MSB,
332 		.bt_elfclass  = ELFCLASS64,
333 		.bt_machine   = EM_SPARCV9,
334 	},
335 
336 	{
337 		.bt_name      = "elf64-sparc-freebsd",
338 		.bt_type      = ETF_ELF,
339 		.bt_byteorder = ELFDATA2MSB,
340 		.bt_elfclass  = ELFCLASS64,
341 		.bt_machine   = EM_SPARCV9,
342 		.bt_osabi     = ELFOSABI_FREEBSD
343 	},
344 
345 	{
346 		.bt_name      = "elf64-x86-64",
347 		.bt_type      = ETF_ELF,
348 		.bt_byteorder =	ELFDATA2LSB,
349 		.bt_elfclass  = ELFCLASS64,
350 		.bt_machine   = EM_X86_64,
351 	},
352 
353 	{
354 		.bt_name      = "elf64-x86-64-freebsd",
355 		.bt_type      = ETF_ELF,
356 		.bt_byteorder = ELFDATA2LSB,
357 		.bt_elfclass  = ELFCLASS64,
358 		.bt_machine   = EM_X86_64,
359 		.bt_osabi     = ELFOSABI_FREEBSD
360 	},
361 
362 	{
363 		.bt_name = "ihex",
364 		.bt_type = ETF_IHEX,
365 	},
366 
367 	{
368 		.bt_name = "srec",
369 		.bt_type = ETF_SREC,
370 	},
371 
372 	{
373 		.bt_name = "symbolsrec",
374 		.bt_type = ETF_SREC,
375 	},
376 
377 	{
378 		.bt_name = NULL,
379 		.bt_type = ETF_NONE,
380 	},
381 };
382