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 3488 2016-08-24 18:15:57Z 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-powerpc-freebsd",
131 		.bt_type      = ETF_ELF,
132 		.bt_byteorder = ELFDATA2MSB,
133 		.bt_elfclass  = ELFCLASS32,
134 		.bt_machine   = EM_PPC,
135 		.bt_osabi     = ELFOSABI_FREEBSD,
136 	},
137 
138 	{
139 		.bt_name      = "elf32-powerpcle",
140 		.bt_type      = ETF_ELF,
141 		.bt_byteorder = ELFDATA2LSB,
142 		.bt_elfclass  = ELFCLASS32,
143 		.bt_machine   = EM_PPC,
144 	},
145 
146 	{
147 		.bt_name      = "elf32-sh",
148 		.bt_type      = ETF_ELF,
149 		.bt_byteorder = ELFDATA2MSB,
150 		.bt_elfclass  = ELFCLASS32,
151 		.bt_machine   = EM_SH,
152 	},
153 
154 	{
155 		.bt_name      = "elf32-shl",
156 		.bt_type      = ETF_ELF,
157 		.bt_byteorder = ELFDATA2LSB,
158 		.bt_elfclass  = ELFCLASS32,
159 		.bt_machine   = EM_SH,
160 	},
161 
162 	{
163 		.bt_name      = "elf32-sh-nbsd",
164 		.bt_type      = ETF_ELF,
165 		.bt_byteorder = ELFDATA2MSB,
166 		.bt_elfclass  = ELFCLASS32,
167 		.bt_machine   = EM_SH,
168 		.bt_osabi     = ELFOSABI_NETBSD,
169 	},
170 
171 	{
172 		.bt_name      = "elf32-shl-nbsd",
173 		.bt_type      = ETF_ELF,
174 		.bt_byteorder = ELFDATA2LSB,
175 		.bt_elfclass  = ELFCLASS32,
176 		.bt_machine   = EM_SH,
177 		.bt_osabi     = ELFOSABI_NETBSD,
178 	},
179 
180 	{
181 		.bt_name      = "elf32-shbig-linux",
182 		.bt_type      = ETF_ELF,
183 		.bt_byteorder = ELFDATA2MSB,
184 		.bt_elfclass  = ELFCLASS32,
185 		.bt_machine   = EM_SH,
186 		.bt_osabi     = ELFOSABI_LINUX,
187 	},
188 
189 	{
190 		.bt_name      = "elf32-sh-linux",
191 		.bt_type      = ETF_ELF,
192 		.bt_byteorder = ELFDATA2LSB,
193 		.bt_elfclass  = ELFCLASS32,
194 		.bt_machine   = EM_SH,
195 		.bt_osabi     = ELFOSABI_LINUX,
196 	},
197 
198 	{
199 		.bt_name      = "elf32-sparc",
200 		.bt_type      = ETF_ELF,
201 		.bt_byteorder = ELFDATA2MSB,
202 		.bt_elfclass  = ELFCLASS32,
203 		.bt_machine   = EM_SPARC,
204 	},
205 
206 	{
207 		.bt_name      = "elf32-tradbigmips",
208 		.bt_type      = ETF_ELF,
209 		.bt_byteorder = ELFDATA2MSB,
210 		.bt_elfclass  = ELFCLASS32,
211 		.bt_machine   = EM_MIPS,
212 	},
213 
214 	{
215 		.bt_name      = "elf32-tradlittlemips",
216 		.bt_type      = ETF_ELF,
217 		.bt_byteorder = ELFDATA2LSB,
218 		.bt_elfclass  = ELFCLASS32,
219 		.bt_machine   = EM_MIPS,
220 	},
221 
222 	{
223 		.bt_name      = "elf64-alpha",
224 		.bt_type      = ETF_ELF,
225 		.bt_byteorder = ELFDATA2LSB,
226 		.bt_elfclass  = ELFCLASS64,
227 		.bt_machine   = EM_ALPHA,
228 	},
229 
230 	{
231 		.bt_name      = "elf64-alpha-freebsd",
232 		.bt_type      = ETF_ELF,
233 		.bt_byteorder = ELFDATA2LSB,
234 		.bt_elfclass  = ELFCLASS64,
235 		.bt_machine   = EM_ALPHA,
236 		.bt_osabi     = ELFOSABI_FREEBSD
237 	},
238 
239 	{
240 		.bt_name      = "elf64-big",
241 		.bt_type      = ETF_ELF,
242 		.bt_byteorder = ELFDATA2MSB,
243 		.bt_elfclass  = ELFCLASS64,
244 	},
245 
246 	{
247 		.bt_name      = "elf64-bigmips",
248 		.bt_type      = ETF_ELF,
249 		.bt_byteorder = ELFDATA2MSB,
250 		.bt_elfclass  = ELFCLASS64,
251 		.bt_machine   = EM_MIPS,
252 	},
253 
254 	{
255 		.bt_name      = "elf64-ia64-big",
256 		.bt_type      = ETF_ELF,
257 		.bt_byteorder = ELFDATA2MSB,
258 		.bt_elfclass  = ELFCLASS64,
259 		.bt_machine   = EM_IA_64,
260 	},
261 
262 	{
263 		.bt_name      = "elf64-ia64-little",
264 		.bt_type      = ETF_ELF,
265 		.bt_byteorder = ELFDATA2LSB,
266 		.bt_elfclass  = ELFCLASS64,
267 		.bt_machine   = EM_IA_64,
268 	},
269 
270 	{
271 		.bt_name      = "elf64-little",
272 		.bt_type      = ETF_ELF,
273 		.bt_byteorder = ELFDATA2LSB,
274 		.bt_elfclass  = ELFCLASS64,
275 	},
276 
277 	{
278 		.bt_name      = "elf64-littleaarch64",
279 		.bt_type      = ETF_ELF,
280 		.bt_byteorder = ELFDATA2LSB,
281 		.bt_elfclass  = ELFCLASS64,
282 		.bt_machine   = EM_AARCH64,
283 	},
284 
285 	{
286 		.bt_name      = "elf64-littlemips",
287 		.bt_type      = ETF_ELF,
288 		.bt_byteorder = ELFDATA2LSB,
289 		.bt_elfclass  = ELFCLASS64,
290 		.bt_machine   = EM_MIPS,
291 	},
292 
293 	{
294 		.bt_name      = "elf64-powerpc",
295 		.bt_type      = ETF_ELF,
296 		.bt_byteorder = ELFDATA2MSB,
297 		.bt_elfclass  = ELFCLASS64,
298 		.bt_machine   = EM_PPC64,
299 	},
300 
301 	{
302 		.bt_name      = "elf64-powerpc-freebsd",
303 		.bt_type      = ETF_ELF,
304 		.bt_byteorder = ELFDATA2MSB,
305 		.bt_elfclass  = ELFCLASS64,
306 		.bt_machine   = EM_PPC64,
307 		.bt_osabi     = ELFOSABI_FREEBSD,
308 	},
309 
310 	{
311 		.bt_name      = "elf64-powerpcle",
312 		.bt_type      = ETF_ELF,
313 		.bt_byteorder = ELFDATA2LSB,
314 		.bt_elfclass  = ELFCLASS64,
315 		.bt_machine   = EM_PPC64,
316 	},
317 
318 	{
319 		.bt_name      = "elf64-sh64",
320 		.bt_type      = ETF_ELF,
321 		.bt_byteorder = ELFDATA2MSB,
322 		.bt_elfclass  = ELFCLASS64,
323 		.bt_machine   = EM_SH,
324 	},
325 
326 	{
327 		.bt_name      = "elf64-sh64l",
328 		.bt_type      = ETF_ELF,
329 		.bt_byteorder = ELFDATA2LSB,
330 		.bt_elfclass  = ELFCLASS64,
331 		.bt_machine   = EM_SH,
332 	},
333 
334 	{
335 		.bt_name      = "elf64-sh64-nbsd",
336 		.bt_type      = ETF_ELF,
337 		.bt_byteorder = ELFDATA2MSB,
338 		.bt_elfclass  = ELFCLASS64,
339 		.bt_machine   = EM_SH,
340 		.bt_osabi     = ELFOSABI_NETBSD,
341 	},
342 
343 	{
344 		.bt_name      = "elf64-sh64l-nbsd",
345 		.bt_type      = ETF_ELF,
346 		.bt_byteorder = ELFDATA2LSB,
347 		.bt_elfclass  = ELFCLASS64,
348 		.bt_machine   = EM_SH,
349 		.bt_osabi     = ELFOSABI_NETBSD,
350 	},
351 
352 	{
353 		.bt_name      = "elf64-sh64big-linux",
354 		.bt_type      = ETF_ELF,
355 		.bt_byteorder = ELFDATA2MSB,
356 		.bt_elfclass  = ELFCLASS64,
357 		.bt_machine   = EM_SH,
358 		.bt_osabi     = ELFOSABI_LINUX,
359 	},
360 
361 	{
362 		.bt_name      = "elf64-sh64-linux",
363 		.bt_type      = ETF_ELF,
364 		.bt_byteorder = ELFDATA2LSB,
365 		.bt_elfclass  = ELFCLASS64,
366 		.bt_machine   = EM_SH,
367 		.bt_osabi     = ELFOSABI_LINUX,
368 	},
369 
370 	{
371 		.bt_name      = "elf64-sparc",
372 		.bt_type      = ETF_ELF,
373 		.bt_byteorder = ELFDATA2MSB,
374 		.bt_elfclass  = ELFCLASS64,
375 		.bt_machine   = EM_SPARCV9,
376 	},
377 
378 	{
379 		.bt_name      = "elf64-sparc-freebsd",
380 		.bt_type      = ETF_ELF,
381 		.bt_byteorder = ELFDATA2MSB,
382 		.bt_elfclass  = ELFCLASS64,
383 		.bt_machine   = EM_SPARCV9,
384 		.bt_osabi     = ELFOSABI_FREEBSD
385 	},
386 
387 	{
388 		.bt_name      = "elf64-tradbigmips",
389 		.bt_type      = ETF_ELF,
390 		.bt_byteorder = ELFDATA2MSB,
391 		.bt_elfclass  = ELFCLASS64,
392 		.bt_machine   = EM_MIPS,
393 	},
394 
395 	{
396 		.bt_name      = "elf64-tradlittlemips",
397 		.bt_type      = ETF_ELF,
398 		.bt_byteorder = ELFDATA2LSB,
399 		.bt_elfclass  = ELFCLASS64,
400 		.bt_machine   = EM_MIPS,
401 	},
402 
403 	{
404 		.bt_name      = "elf64-x86-64",
405 		.bt_type      = ETF_ELF,
406 		.bt_byteorder =	ELFDATA2LSB,
407 		.bt_elfclass  = ELFCLASS64,
408 		.bt_machine   = EM_X86_64,
409 	},
410 
411 	{
412 		.bt_name      = "elf64-x86-64-freebsd",
413 		.bt_type      = ETF_ELF,
414 		.bt_byteorder = ELFDATA2LSB,
415 		.bt_elfclass  = ELFCLASS64,
416 		.bt_machine   = EM_X86_64,
417 		.bt_osabi     = ELFOSABI_FREEBSD
418 	},
419 
420 	{
421 		.bt_name = "ihex",
422 		.bt_type = ETF_IHEX,
423 	},
424 
425 	{
426 		.bt_name = "srec",
427 		.bt_type = ETF_SREC,
428 	},
429 
430 	{
431 		.bt_name = "symbolsrec",
432 		.bt_type = ETF_SREC,
433 	},
434 
435 	{
436 		.bt_name    = "efi-app-ia32",
437 		.bt_type    = ETF_EFI,
438 		.bt_machine = EM_386,
439 	},
440 
441 	{
442 		.bt_name    = "efi-app-x86_64",
443 		.bt_type    = ETF_EFI,
444 		.bt_machine = EM_X86_64,
445 	},
446 
447 	{
448 		.bt_name    = "pei-i386",
449 		.bt_type    = ETF_PE,
450 		.bt_machine = EM_386,
451 	},
452 
453 	{
454 		.bt_name    = "pei-x86-64",
455 		.bt_type    = ETF_PE,
456 		.bt_machine = EM_X86_64,
457 	},
458 
459 	{
460 		.bt_name = NULL,
461 		.bt_type = ETF_NONE,
462 	},
463 };
464