1260684Skaiw/*-
2260684Skaiw * Copyright (c) 2008,2009 Kai Wang
3260684Skaiw * All rights reserved.
4260684Skaiw *
5260684Skaiw * Redistribution and use in source and binary forms, with or without
6260684Skaiw * modification, are permitted provided that the following conditions
7260684Skaiw * are met:
8260684Skaiw * 1. Redistributions of source code must retain the above copyright
9260684Skaiw *    notice, this list of conditions and the following disclaimer
10260684Skaiw *    in this position and unchanged.
11260684Skaiw * 2. Redistributions in binary form must reproduce the above copyright
12260684Skaiw *    notice, this list of conditions and the following disclaimer in the
13260684Skaiw *    documentation and/or other materials provided with the distribution.
14260684Skaiw *
15260684Skaiw * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
16260684Skaiw * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17260684Skaiw * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18260684Skaiw * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
19260684Skaiw * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20260684Skaiw * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21260684Skaiw * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22260684Skaiw * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23260684Skaiw * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24260684Skaiw * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25260684Skaiw */
26260684Skaiw
27260684Skaiw#include <sys/param.h>
28260684Skaiw#include <libelf.h>
29260684Skaiw#include <libelftc.h>
30260684Skaiw
31260684Skaiw#include "_libelftc.h"
32260684Skaiw
33295577SemasteELFTC_VCSID("$Id: libelftc_bfdtarget.c 3309 2016-01-10 09:10:51Z kaiwang27 $");
34260684Skaiw
35260684Skaiwstruct _Elftc_Bfd_Target _libelftc_targets[] = {
36260684Skaiw
37260684Skaiw	{
38260684Skaiw		.bt_name = "binary",
39260684Skaiw		.bt_type = ETF_BINARY,
40260684Skaiw	},
41260684Skaiw
42260684Skaiw	{
43260684Skaiw		.bt_name      = "elf32-avr",
44260684Skaiw		.bt_type      = ETF_ELF,
45260684Skaiw		.bt_byteorder = ELFDATA2LSB,
46260684Skaiw		.bt_elfclass  = ELFCLASS32,
47260684Skaiw		.bt_machine   = EM_AVR,
48260684Skaiw	},
49260684Skaiw
50260684Skaiw	{
51260684Skaiw		.bt_name      = "elf32-big",
52260684Skaiw		.bt_type      = ETF_ELF,
53260684Skaiw		.bt_byteorder = ELFDATA2MSB,
54260684Skaiw		.bt_elfclass  = ELFCLASS32,
55260684Skaiw	},
56260684Skaiw
57260684Skaiw	{
58260684Skaiw		.bt_name      = "elf32-bigarm",
59260684Skaiw		.bt_type      = ETF_ELF,
60260684Skaiw		.bt_byteorder = ELFDATA2MSB,
61260684Skaiw		.bt_elfclass  = ELFCLASS32,
62260684Skaiw		.bt_machine   = EM_ARM,
63260684Skaiw	},
64260684Skaiw
65260684Skaiw	{
66260684Skaiw		.bt_name      = "elf32-bigmips",
67260684Skaiw		.bt_type      = ETF_ELF,
68260684Skaiw		.bt_byteorder = ELFDATA2MSB,
69260684Skaiw		.bt_elfclass  = ELFCLASS32,
70260684Skaiw		.bt_machine   = EM_MIPS,
71260684Skaiw	},
72260684Skaiw
73260684Skaiw	{
74260684Skaiw		.bt_name      = "elf32-i386",
75260684Skaiw		.bt_type      = ETF_ELF,
76260684Skaiw		.bt_byteorder = ELFDATA2LSB,
77260684Skaiw		.bt_elfclass  = ELFCLASS32,
78260684Skaiw		.bt_machine   = EM_386,
79260684Skaiw	},
80260684Skaiw
81260684Skaiw	{
82260684Skaiw		.bt_name      = "elf32-i386-freebsd",
83260684Skaiw		.bt_type      = ETF_ELF,
84260684Skaiw		.bt_byteorder = ELFDATA2LSB,
85260684Skaiw		.bt_elfclass  = ELFCLASS32,
86260684Skaiw		.bt_machine   = EM_386,
87260684Skaiw		.bt_osabi     = ELFOSABI_FREEBSD,
88260684Skaiw	},
89260684Skaiw
90260684Skaiw	{
91260684Skaiw		.bt_name      = "elf32-ia64-big",
92260684Skaiw		.bt_type      = ETF_ELF,
93260684Skaiw		.bt_byteorder = ELFDATA2MSB,
94260684Skaiw		.bt_elfclass  = ELFCLASS32,
95260684Skaiw		.bt_machine   = EM_IA_64,
96260684Skaiw	},
97260684Skaiw
98260684Skaiw	{
99260684Skaiw		.bt_name      = "elf32-little",
100260684Skaiw		.bt_type      = ETF_ELF,
101260684Skaiw		.bt_byteorder = ELFDATA2LSB,
102260684Skaiw		.bt_elfclass  = ELFCLASS32,
103260684Skaiw	},
104260684Skaiw
105260684Skaiw	{
106260684Skaiw		.bt_name      = "elf32-littlearm",
107260684Skaiw		.bt_type      = ETF_ELF,
108260684Skaiw		.bt_byteorder = ELFDATA2LSB,
109260684Skaiw		.bt_elfclass  = ELFCLASS32,
110260684Skaiw		.bt_machine   = EM_ARM,
111260684Skaiw	},
112260684Skaiw
113260684Skaiw	{
114260684Skaiw		.bt_name      = "elf32-littlemips",
115260684Skaiw		.bt_type      = ETF_ELF,
116260684Skaiw		.bt_byteorder = ELFDATA2LSB,
117260684Skaiw		.bt_elfclass  = ELFCLASS32,
118260684Skaiw		.bt_machine   = EM_MIPS,
119260684Skaiw	},
120260684Skaiw
121260684Skaiw	{
122260684Skaiw		.bt_name      = "elf32-powerpc",
123260684Skaiw		.bt_type      = ETF_ELF,
124260684Skaiw		.bt_byteorder = ELFDATA2MSB,
125260684Skaiw		.bt_elfclass  = ELFCLASS32,
126260684Skaiw		.bt_machine   = EM_PPC,
127260684Skaiw	},
128260684Skaiw
129260684Skaiw	{
130260684Skaiw		.bt_name      = "elf32-powerpcle",
131260684Skaiw		.bt_type      = ETF_ELF,
132260684Skaiw		.bt_byteorder = ELFDATA2LSB,
133260684Skaiw		.bt_elfclass  = ELFCLASS32,
134260684Skaiw		.bt_machine   = EM_PPC,
135260684Skaiw	},
136260684Skaiw
137260684Skaiw	{
138260684Skaiw		.bt_name      = "elf32-sh",
139260684Skaiw		.bt_type      = ETF_ELF,
140260684Skaiw		.bt_byteorder = ELFDATA2MSB,
141260684Skaiw		.bt_elfclass  = ELFCLASS32,
142260684Skaiw		.bt_machine   = EM_SH,
143260684Skaiw	},
144260684Skaiw
145260684Skaiw	{
146260684Skaiw		.bt_name      = "elf32-shl",
147260684Skaiw		.bt_type      = ETF_ELF,
148260684Skaiw		.bt_byteorder = ELFDATA2LSB,
149260684Skaiw		.bt_elfclass  = ELFCLASS32,
150260684Skaiw		.bt_machine   = EM_SH,
151260684Skaiw	},
152260684Skaiw
153260684Skaiw	{
154260684Skaiw		.bt_name      = "elf32-sh-nbsd",
155260684Skaiw		.bt_type      = ETF_ELF,
156260684Skaiw		.bt_byteorder = ELFDATA2MSB,
157260684Skaiw		.bt_elfclass  = ELFCLASS32,
158260684Skaiw		.bt_machine   = EM_SH,
159260684Skaiw		.bt_osabi     = ELFOSABI_NETBSD,
160260684Skaiw	},
161260684Skaiw
162260684Skaiw	{
163260684Skaiw		.bt_name      = "elf32-shl-nbsd",
164260684Skaiw		.bt_type      = ETF_ELF,
165260684Skaiw		.bt_byteorder = ELFDATA2LSB,
166260684Skaiw		.bt_elfclass  = ELFCLASS32,
167260684Skaiw		.bt_machine   = EM_SH,
168260684Skaiw		.bt_osabi     = ELFOSABI_NETBSD,
169260684Skaiw	},
170260684Skaiw
171260684Skaiw	{
172260684Skaiw		.bt_name      = "elf32-shbig-linux",
173260684Skaiw		.bt_type      = ETF_ELF,
174260684Skaiw		.bt_byteorder = ELFDATA2MSB,
175260684Skaiw		.bt_elfclass  = ELFCLASS32,
176260684Skaiw		.bt_machine   = EM_SH,
177260684Skaiw		.bt_osabi     = ELFOSABI_LINUX,
178260684Skaiw	},
179260684Skaiw
180260684Skaiw	{
181260684Skaiw		.bt_name      = "elf32-sh-linux",
182260684Skaiw		.bt_type      = ETF_ELF,
183260684Skaiw		.bt_byteorder = ELFDATA2LSB,
184260684Skaiw		.bt_elfclass  = ELFCLASS32,
185260684Skaiw		.bt_machine   = EM_SH,
186260684Skaiw		.bt_osabi     = ELFOSABI_LINUX,
187260684Skaiw	},
188260684Skaiw
189260684Skaiw	{
190260684Skaiw		.bt_name      = "elf32-sparc",
191260684Skaiw		.bt_type      = ETF_ELF,
192260684Skaiw		.bt_byteorder = ELFDATA2MSB,
193260684Skaiw		.bt_elfclass  = ELFCLASS32,
194260684Skaiw		.bt_machine   = EM_SPARC,
195260684Skaiw	},
196260684Skaiw
197260684Skaiw	{
198260684Skaiw		.bt_name      = "elf64-alpha",
199260684Skaiw		.bt_type      = ETF_ELF,
200260684Skaiw		.bt_byteorder = ELFDATA2LSB,
201260684Skaiw		.bt_elfclass  = ELFCLASS64,
202260684Skaiw		.bt_machine   = EM_ALPHA,
203260684Skaiw	},
204260684Skaiw
205260684Skaiw	{
206260684Skaiw		.bt_name      = "elf64-alpha-freebsd",
207260684Skaiw		.bt_type      = ETF_ELF,
208260684Skaiw		.bt_byteorder = ELFDATA2LSB,
209260684Skaiw		.bt_elfclass  = ELFCLASS64,
210260684Skaiw		.bt_machine   = EM_ALPHA,
211260684Skaiw		.bt_osabi     = ELFOSABI_FREEBSD
212260684Skaiw	},
213260684Skaiw
214260684Skaiw	{
215260684Skaiw		.bt_name      = "elf64-big",
216260684Skaiw		.bt_type      = ETF_ELF,
217260684Skaiw		.bt_byteorder = ELFDATA2MSB,
218260684Skaiw		.bt_elfclass  = ELFCLASS64,
219260684Skaiw	},
220260684Skaiw
221260684Skaiw	{
222260684Skaiw		.bt_name      = "elf64-bigmips",
223260684Skaiw		.bt_type      = ETF_ELF,
224260684Skaiw		.bt_byteorder = ELFDATA2MSB,
225260684Skaiw		.bt_elfclass  = ELFCLASS64,
226260684Skaiw		.bt_machine   = EM_MIPS,
227260684Skaiw	},
228260684Skaiw
229260684Skaiw	{
230260684Skaiw		.bt_name      = "elf64-ia64-big",
231260684Skaiw		.bt_type      = ETF_ELF,
232260684Skaiw		.bt_byteorder = ELFDATA2MSB,
233260684Skaiw		.bt_elfclass  = ELFCLASS64,
234260684Skaiw		.bt_machine   = EM_IA_64,
235260684Skaiw	},
236260684Skaiw
237260684Skaiw	{
238260684Skaiw		.bt_name      = "elf64-ia64-little",
239260684Skaiw		.bt_type      = ETF_ELF,
240260684Skaiw		.bt_byteorder = ELFDATA2LSB,
241260684Skaiw		.bt_elfclass  = ELFCLASS64,
242260684Skaiw		.bt_machine   = EM_IA_64,
243260684Skaiw	},
244260684Skaiw
245260684Skaiw	{
246260684Skaiw		.bt_name      = "elf64-little",
247260684Skaiw		.bt_type      = ETF_ELF,
248260684Skaiw		.bt_byteorder = ELFDATA2LSB,
249260684Skaiw		.bt_elfclass  = ELFCLASS64,
250260684Skaiw	},
251260684Skaiw
252260684Skaiw	{
253260684Skaiw		.bt_name      = "elf64-littlemips",
254260684Skaiw		.bt_type      = ETF_ELF,
255260684Skaiw		.bt_byteorder = ELFDATA2LSB,
256260684Skaiw		.bt_elfclass  = ELFCLASS64,
257260684Skaiw		.bt_machine   = EM_MIPS,
258260684Skaiw	},
259260684Skaiw
260260684Skaiw	{
261260684Skaiw		.bt_name      = "elf64-powerpc",
262260684Skaiw		.bt_type      = ETF_ELF,
263260684Skaiw		.bt_byteorder = ELFDATA2MSB,
264260684Skaiw		.bt_elfclass  = ELFCLASS64,
265260684Skaiw		.bt_machine   = EM_PPC64,
266260684Skaiw	},
267260684Skaiw
268260684Skaiw	{
269260684Skaiw		.bt_name      = "elf64-powerpcle",
270260684Skaiw		.bt_type      = ETF_ELF,
271260684Skaiw		.bt_byteorder = ELFDATA2LSB,
272260684Skaiw		.bt_elfclass  = ELFCLASS64,
273260684Skaiw		.bt_machine   = EM_PPC64,
274260684Skaiw	},
275260684Skaiw
276260684Skaiw	{
277260684Skaiw		.bt_name      = "elf64-sh64",
278260684Skaiw		.bt_type      = ETF_ELF,
279260684Skaiw		.bt_byteorder = ELFDATA2MSB,
280260684Skaiw		.bt_elfclass  = ELFCLASS64,
281260684Skaiw		.bt_machine   = EM_SH,
282260684Skaiw	},
283260684Skaiw
284260684Skaiw	{
285260684Skaiw		.bt_name      = "elf64-sh64l",
286260684Skaiw		.bt_type      = ETF_ELF,
287260684Skaiw		.bt_byteorder = ELFDATA2LSB,
288260684Skaiw		.bt_elfclass  = ELFCLASS64,
289260684Skaiw		.bt_machine   = EM_SH,
290260684Skaiw	},
291260684Skaiw
292260684Skaiw	{
293260684Skaiw		.bt_name      = "elf64-sh64-nbsd",
294260684Skaiw		.bt_type      = ETF_ELF,
295260684Skaiw		.bt_byteorder = ELFDATA2MSB,
296260684Skaiw		.bt_elfclass  = ELFCLASS64,
297260684Skaiw		.bt_machine   = EM_SH,
298260684Skaiw		.bt_osabi     = ELFOSABI_NETBSD,
299260684Skaiw	},
300260684Skaiw
301260684Skaiw	{
302260684Skaiw		.bt_name      = "elf64-sh64l-nbsd",
303260684Skaiw		.bt_type      = ETF_ELF,
304260684Skaiw		.bt_byteorder = ELFDATA2LSB,
305260684Skaiw		.bt_elfclass  = ELFCLASS64,
306260684Skaiw		.bt_machine   = EM_SH,
307260684Skaiw		.bt_osabi     = ELFOSABI_NETBSD,
308260684Skaiw	},
309260684Skaiw
310260684Skaiw	{
311260684Skaiw		.bt_name      = "elf64-sh64big-linux",
312260684Skaiw		.bt_type      = ETF_ELF,
313260684Skaiw		.bt_byteorder = ELFDATA2MSB,
314260684Skaiw		.bt_elfclass  = ELFCLASS64,
315260684Skaiw		.bt_machine   = EM_SH,
316260684Skaiw		.bt_osabi     = ELFOSABI_LINUX,
317260684Skaiw	},
318260684Skaiw
319260684Skaiw	{
320260684Skaiw		.bt_name      = "elf64-sh64-linux",
321260684Skaiw		.bt_type      = ETF_ELF,
322260684Skaiw		.bt_byteorder = ELFDATA2LSB,
323260684Skaiw		.bt_elfclass  = ELFCLASS64,
324260684Skaiw		.bt_machine   = EM_SH,
325260684Skaiw		.bt_osabi     = ELFOSABI_LINUX,
326260684Skaiw	},
327260684Skaiw
328260684Skaiw	{
329260684Skaiw		.bt_name      = "elf64-sparc",
330260684Skaiw		.bt_type      = ETF_ELF,
331260684Skaiw		.bt_byteorder = ELFDATA2MSB,
332260684Skaiw		.bt_elfclass  = ELFCLASS64,
333260684Skaiw		.bt_machine   = EM_SPARCV9,
334260684Skaiw	},
335260684Skaiw
336260684Skaiw	{
337260684Skaiw		.bt_name      = "elf64-sparc-freebsd",
338260684Skaiw		.bt_type      = ETF_ELF,
339260684Skaiw		.bt_byteorder = ELFDATA2MSB,
340260684Skaiw		.bt_elfclass  = ELFCLASS64,
341260684Skaiw		.bt_machine   = EM_SPARCV9,
342260684Skaiw		.bt_osabi     = ELFOSABI_FREEBSD
343260684Skaiw	},
344260684Skaiw
345260684Skaiw	{
346260684Skaiw		.bt_name      = "elf64-x86-64",
347260684Skaiw		.bt_type      = ETF_ELF,
348260684Skaiw		.bt_byteorder =	ELFDATA2LSB,
349260684Skaiw		.bt_elfclass  = ELFCLASS64,
350260684Skaiw		.bt_machine   = EM_X86_64,
351260684Skaiw	},
352260684Skaiw
353260684Skaiw	{
354260684Skaiw		.bt_name      = "elf64-x86-64-freebsd",
355260684Skaiw		.bt_type      = ETF_ELF,
356260684Skaiw		.bt_byteorder = ELFDATA2LSB,
357260684Skaiw		.bt_elfclass  = ELFCLASS64,
358260684Skaiw		.bt_machine   = EM_X86_64,
359260684Skaiw		.bt_osabi     = ELFOSABI_FREEBSD
360260684Skaiw	},
361260684Skaiw
362260684Skaiw	{
363260684Skaiw		.bt_name = "ihex",
364260684Skaiw		.bt_type = ETF_IHEX,
365260684Skaiw	},
366260684Skaiw
367260684Skaiw	{
368260684Skaiw		.bt_name = "srec",
369260684Skaiw		.bt_type = ETF_SREC,
370260684Skaiw	},
371260684Skaiw
372260684Skaiw	{
373260684Skaiw		.bt_name = "symbolsrec",
374260684Skaiw		.bt_type = ETF_SREC,
375260684Skaiw	},
376260684Skaiw
377260684Skaiw	{
378295577Semaste		.bt_name    = "efi-app-ia32",
379295577Semaste		.bt_type    = ETF_EFI,
380295577Semaste		.bt_machine = EM_386,
381295577Semaste	},
382295577Semaste
383295577Semaste	{
384295577Semaste		.bt_name    = "efi-app-x86_64",
385295577Semaste		.bt_type    = ETF_EFI,
386295577Semaste		.bt_machine = EM_X86_64,
387295577Semaste	},
388295577Semaste
389295577Semaste	{
390295577Semaste		.bt_name    = "pei-i386",
391295577Semaste		.bt_type    = ETF_PE,
392295577Semaste		.bt_machine = EM_386,
393295577Semaste	},
394295577Semaste
395295577Semaste	{
396295577Semaste		.bt_name    = "pei-x86-64",
397295577Semaste		.bt_type    = ETF_PE,
398295577Semaste		.bt_machine = EM_X86_64,
399295577Semaste	},
400295577Semaste
401295577Semaste	{
402260684Skaiw		.bt_name = NULL,
403260684Skaiw		.bt_type = ETF_NONE,
404260684Skaiw	},
405260684Skaiw};
406