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
33ELFTC_VCSID("$Id: libelftc_bfdtarget.c 3752 2019-06-28 01:12:53Z emaste $");
34
35struct _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      = "elf32-riscv",
320		.bt_type      = ETF_ELF,
321		.bt_byteorder = ELFDATA2LSB,
322		.bt_elfclass  = ELFCLASS32,
323		.bt_machine   = EM_RISCV,
324	},
325
326	{
327		.bt_name      = "elf64-riscv",
328		.bt_type      = ETF_ELF,
329		.bt_byteorder = ELFDATA2LSB,
330		.bt_elfclass  = ELFCLASS64,
331		.bt_machine   = EM_RISCV,
332	},
333
334	{
335		.bt_name      = "elf64-riscv-freebsd",
336		.bt_type      = ETF_ELF,
337		.bt_byteorder = ELFDATA2MSB,
338		.bt_elfclass  = ELFCLASS64,
339		.bt_machine   = EM_RISCV,
340		.bt_osabi     = ELFOSABI_FREEBSD,
341	},
342
343	{
344		.bt_name      = "elf64-sh64",
345		.bt_type      = ETF_ELF,
346		.bt_byteorder = ELFDATA2MSB,
347		.bt_elfclass  = ELFCLASS64,
348		.bt_machine   = EM_SH,
349	},
350
351	{
352		.bt_name      = "elf64-sh64l",
353		.bt_type      = ETF_ELF,
354		.bt_byteorder = ELFDATA2LSB,
355		.bt_elfclass  = ELFCLASS64,
356		.bt_machine   = EM_SH,
357	},
358
359	{
360		.bt_name      = "elf64-sh64-nbsd",
361		.bt_type      = ETF_ELF,
362		.bt_byteorder = ELFDATA2MSB,
363		.bt_elfclass  = ELFCLASS64,
364		.bt_machine   = EM_SH,
365		.bt_osabi     = ELFOSABI_NETBSD,
366	},
367
368	{
369		.bt_name      = "elf64-sh64l-nbsd",
370		.bt_type      = ETF_ELF,
371		.bt_byteorder = ELFDATA2LSB,
372		.bt_elfclass  = ELFCLASS64,
373		.bt_machine   = EM_SH,
374		.bt_osabi     = ELFOSABI_NETBSD,
375	},
376
377	{
378		.bt_name      = "elf64-sh64big-linux",
379		.bt_type      = ETF_ELF,
380		.bt_byteorder = ELFDATA2MSB,
381		.bt_elfclass  = ELFCLASS64,
382		.bt_machine   = EM_SH,
383		.bt_osabi     = ELFOSABI_LINUX,
384	},
385
386	{
387		.bt_name      = "elf64-sh64-linux",
388		.bt_type      = ETF_ELF,
389		.bt_byteorder = ELFDATA2LSB,
390		.bt_elfclass  = ELFCLASS64,
391		.bt_machine   = EM_SH,
392		.bt_osabi     = ELFOSABI_LINUX,
393	},
394
395	{
396		.bt_name      = "elf64-sparc",
397		.bt_type      = ETF_ELF,
398		.bt_byteorder = ELFDATA2MSB,
399		.bt_elfclass  = ELFCLASS64,
400		.bt_machine   = EM_SPARCV9,
401	},
402
403	{
404		.bt_name      = "elf64-sparc-freebsd",
405		.bt_type      = ETF_ELF,
406		.bt_byteorder = ELFDATA2MSB,
407		.bt_elfclass  = ELFCLASS64,
408		.bt_machine   = EM_SPARCV9,
409		.bt_osabi     = ELFOSABI_FREEBSD
410	},
411
412	{
413		.bt_name      = "elf64-tradbigmips",
414		.bt_type      = ETF_ELF,
415		.bt_byteorder = ELFDATA2MSB,
416		.bt_elfclass  = ELFCLASS64,
417		.bt_machine   = EM_MIPS,
418	},
419
420	{
421		.bt_name      = "elf64-tradlittlemips",
422		.bt_type      = ETF_ELF,
423		.bt_byteorder = ELFDATA2LSB,
424		.bt_elfclass  = ELFCLASS64,
425		.bt_machine   = EM_MIPS,
426	},
427
428	{
429		.bt_name      = "elf64-x86-64",
430		.bt_type      = ETF_ELF,
431		.bt_byteorder =	ELFDATA2LSB,
432		.bt_elfclass  = ELFCLASS64,
433		.bt_machine   = EM_X86_64,
434	},
435
436	{
437		.bt_name      = "elf64-x86-64-freebsd",
438		.bt_type      = ETF_ELF,
439		.bt_byteorder = ELFDATA2LSB,
440		.bt_elfclass  = ELFCLASS64,
441		.bt_machine   = EM_X86_64,
442		.bt_osabi     = ELFOSABI_FREEBSD
443	},
444
445	{
446		.bt_name = "ihex",
447		.bt_type = ETF_IHEX,
448	},
449
450	{
451		.bt_name = "srec",
452		.bt_type = ETF_SREC,
453	},
454
455	{
456		.bt_name = "symbolsrec",
457		.bt_type = ETF_SREC,
458	},
459
460	{
461		.bt_name    = "efi-app-ia32",
462		.bt_type    = ETF_EFI,
463		.bt_machine = EM_386,
464	},
465
466	{
467		.bt_name    = "efi-app-x86_64",
468		.bt_type    = ETF_EFI,
469		.bt_machine = EM_X86_64,
470	},
471
472	{
473		.bt_name    = "pei-i386",
474		.bt_type    = ETF_PE,
475		.bt_machine = EM_386,
476	},
477
478	{
479		.bt_name    = "pei-x86-64",
480		.bt_type    = ETF_PE,
481		.bt_machine = EM_X86_64,
482	},
483
484	{
485		.bt_name = NULL,
486		.bt_type = ETF_NONE,
487	},
488};
489