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 33367466SdimELFTC_VCSID("$Id: libelftc_bfdtarget.c 3752 2019-06-28 01:12:53Z emaste $"); 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 { 130317721Semaste .bt_name = "elf32-powerpc-freebsd", 131317721Semaste .bt_type = ETF_ELF, 132317721Semaste .bt_byteorder = ELFDATA2MSB, 133317721Semaste .bt_elfclass = ELFCLASS32, 134317721Semaste .bt_machine = EM_PPC, 135317721Semaste .bt_osabi = ELFOSABI_FREEBSD, 136317721Semaste }, 137317721Semaste 138317721Semaste { 139260684Skaiw .bt_name = "elf32-powerpcle", 140260684Skaiw .bt_type = ETF_ELF, 141260684Skaiw .bt_byteorder = ELFDATA2LSB, 142260684Skaiw .bt_elfclass = ELFCLASS32, 143260684Skaiw .bt_machine = EM_PPC, 144260684Skaiw }, 145260684Skaiw 146260684Skaiw { 147260684Skaiw .bt_name = "elf32-sh", 148260684Skaiw .bt_type = ETF_ELF, 149260684Skaiw .bt_byteorder = ELFDATA2MSB, 150260684Skaiw .bt_elfclass = ELFCLASS32, 151260684Skaiw .bt_machine = EM_SH, 152260684Skaiw }, 153260684Skaiw 154260684Skaiw { 155260684Skaiw .bt_name = "elf32-shl", 156260684Skaiw .bt_type = ETF_ELF, 157260684Skaiw .bt_byteorder = ELFDATA2LSB, 158260684Skaiw .bt_elfclass = ELFCLASS32, 159260684Skaiw .bt_machine = EM_SH, 160260684Skaiw }, 161260684Skaiw 162260684Skaiw { 163260684Skaiw .bt_name = "elf32-sh-nbsd", 164260684Skaiw .bt_type = ETF_ELF, 165260684Skaiw .bt_byteorder = ELFDATA2MSB, 166260684Skaiw .bt_elfclass = ELFCLASS32, 167260684Skaiw .bt_machine = EM_SH, 168260684Skaiw .bt_osabi = ELFOSABI_NETBSD, 169260684Skaiw }, 170260684Skaiw 171260684Skaiw { 172260684Skaiw .bt_name = "elf32-shl-nbsd", 173260684Skaiw .bt_type = ETF_ELF, 174260684Skaiw .bt_byteorder = ELFDATA2LSB, 175260684Skaiw .bt_elfclass = ELFCLASS32, 176260684Skaiw .bt_machine = EM_SH, 177260684Skaiw .bt_osabi = ELFOSABI_NETBSD, 178260684Skaiw }, 179260684Skaiw 180260684Skaiw { 181260684Skaiw .bt_name = "elf32-shbig-linux", 182260684Skaiw .bt_type = ETF_ELF, 183260684Skaiw .bt_byteorder = ELFDATA2MSB, 184260684Skaiw .bt_elfclass = ELFCLASS32, 185260684Skaiw .bt_machine = EM_SH, 186260684Skaiw .bt_osabi = ELFOSABI_LINUX, 187260684Skaiw }, 188260684Skaiw 189260684Skaiw { 190260684Skaiw .bt_name = "elf32-sh-linux", 191260684Skaiw .bt_type = ETF_ELF, 192260684Skaiw .bt_byteorder = ELFDATA2LSB, 193260684Skaiw .bt_elfclass = ELFCLASS32, 194260684Skaiw .bt_machine = EM_SH, 195260684Skaiw .bt_osabi = ELFOSABI_LINUX, 196260684Skaiw }, 197260684Skaiw 198260684Skaiw { 199260684Skaiw .bt_name = "elf32-sparc", 200260684Skaiw .bt_type = ETF_ELF, 201260684Skaiw .bt_byteorder = ELFDATA2MSB, 202260684Skaiw .bt_elfclass = ELFCLASS32, 203260684Skaiw .bt_machine = EM_SPARC, 204260684Skaiw }, 205260684Skaiw 206260684Skaiw { 207313506Semaste .bt_name = "elf32-tradbigmips", 208313506Semaste .bt_type = ETF_ELF, 209313506Semaste .bt_byteorder = ELFDATA2MSB, 210313506Semaste .bt_elfclass = ELFCLASS32, 211313506Semaste .bt_machine = EM_MIPS, 212313506Semaste }, 213313506Semaste 214313506Semaste { 215313506Semaste .bt_name = "elf32-tradlittlemips", 216313506Semaste .bt_type = ETF_ELF, 217313506Semaste .bt_byteorder = ELFDATA2LSB, 218313506Semaste .bt_elfclass = ELFCLASS32, 219313506Semaste .bt_machine = EM_MIPS, 220313506Semaste }, 221313506Semaste 222313506Semaste { 223260684Skaiw .bt_name = "elf64-alpha", 224260684Skaiw .bt_type = ETF_ELF, 225260684Skaiw .bt_byteorder = ELFDATA2LSB, 226260684Skaiw .bt_elfclass = ELFCLASS64, 227260684Skaiw .bt_machine = EM_ALPHA, 228260684Skaiw }, 229260684Skaiw 230260684Skaiw { 231260684Skaiw .bt_name = "elf64-alpha-freebsd", 232260684Skaiw .bt_type = ETF_ELF, 233260684Skaiw .bt_byteorder = ELFDATA2LSB, 234260684Skaiw .bt_elfclass = ELFCLASS64, 235260684Skaiw .bt_machine = EM_ALPHA, 236260684Skaiw .bt_osabi = ELFOSABI_FREEBSD 237260684Skaiw }, 238260684Skaiw 239260684Skaiw { 240260684Skaiw .bt_name = "elf64-big", 241260684Skaiw .bt_type = ETF_ELF, 242260684Skaiw .bt_byteorder = ELFDATA2MSB, 243260684Skaiw .bt_elfclass = ELFCLASS64, 244260684Skaiw }, 245260684Skaiw 246260684Skaiw { 247260684Skaiw .bt_name = "elf64-bigmips", 248260684Skaiw .bt_type = ETF_ELF, 249260684Skaiw .bt_byteorder = ELFDATA2MSB, 250260684Skaiw .bt_elfclass = ELFCLASS64, 251260684Skaiw .bt_machine = EM_MIPS, 252260684Skaiw }, 253260684Skaiw 254260684Skaiw { 255260684Skaiw .bt_name = "elf64-ia64-big", 256260684Skaiw .bt_type = ETF_ELF, 257260684Skaiw .bt_byteorder = ELFDATA2MSB, 258260684Skaiw .bt_elfclass = ELFCLASS64, 259260684Skaiw .bt_machine = EM_IA_64, 260260684Skaiw }, 261260684Skaiw 262260684Skaiw { 263260684Skaiw .bt_name = "elf64-ia64-little", 264260684Skaiw .bt_type = ETF_ELF, 265260684Skaiw .bt_byteorder = ELFDATA2LSB, 266260684Skaiw .bt_elfclass = ELFCLASS64, 267260684Skaiw .bt_machine = EM_IA_64, 268260684Skaiw }, 269260684Skaiw 270260684Skaiw { 271260684Skaiw .bt_name = "elf64-little", 272260684Skaiw .bt_type = ETF_ELF, 273260684Skaiw .bt_byteorder = ELFDATA2LSB, 274260684Skaiw .bt_elfclass = ELFCLASS64, 275260684Skaiw }, 276260684Skaiw 277260684Skaiw { 278305839Semaste .bt_name = "elf64-littleaarch64", 279305839Semaste .bt_type = ETF_ELF, 280305839Semaste .bt_byteorder = ELFDATA2LSB, 281305839Semaste .bt_elfclass = ELFCLASS64, 282305839Semaste .bt_machine = EM_AARCH64, 283305839Semaste }, 284305839Semaste 285305839Semaste { 286260684Skaiw .bt_name = "elf64-littlemips", 287260684Skaiw .bt_type = ETF_ELF, 288260684Skaiw .bt_byteorder = ELFDATA2LSB, 289260684Skaiw .bt_elfclass = ELFCLASS64, 290260684Skaiw .bt_machine = EM_MIPS, 291260684Skaiw }, 292260684Skaiw 293260684Skaiw { 294260684Skaiw .bt_name = "elf64-powerpc", 295260684Skaiw .bt_type = ETF_ELF, 296260684Skaiw .bt_byteorder = ELFDATA2MSB, 297260684Skaiw .bt_elfclass = ELFCLASS64, 298260684Skaiw .bt_machine = EM_PPC64, 299260684Skaiw }, 300260684Skaiw 301260684Skaiw { 302317721Semaste .bt_name = "elf64-powerpc-freebsd", 303317721Semaste .bt_type = ETF_ELF, 304317721Semaste .bt_byteorder = ELFDATA2MSB, 305317721Semaste .bt_elfclass = ELFCLASS64, 306317721Semaste .bt_machine = EM_PPC64, 307317721Semaste .bt_osabi = ELFOSABI_FREEBSD, 308317721Semaste }, 309317721Semaste 310317721Semaste { 311260684Skaiw .bt_name = "elf64-powerpcle", 312260684Skaiw .bt_type = ETF_ELF, 313260684Skaiw .bt_byteorder = ELFDATA2LSB, 314260684Skaiw .bt_elfclass = ELFCLASS64, 315260684Skaiw .bt_machine = EM_PPC64, 316260684Skaiw }, 317260684Skaiw 318260684Skaiw { 319367466Sdim .bt_name = "elf32-riscv", 320367466Sdim .bt_type = ETF_ELF, 321367466Sdim .bt_byteorder = ELFDATA2LSB, 322367466Sdim .bt_elfclass = ELFCLASS32, 323367466Sdim .bt_machine = EM_RISCV, 324367466Sdim }, 325367466Sdim 326367466Sdim { 327367466Sdim .bt_name = "elf64-riscv", 328367466Sdim .bt_type = ETF_ELF, 329367466Sdim .bt_byteorder = ELFDATA2LSB, 330367466Sdim .bt_elfclass = ELFCLASS64, 331367466Sdim .bt_machine = EM_RISCV, 332367466Sdim }, 333367466Sdim 334367466Sdim { 335367466Sdim .bt_name = "elf64-riscv-freebsd", 336367466Sdim .bt_type = ETF_ELF, 337367466Sdim .bt_byteorder = ELFDATA2MSB, 338367466Sdim .bt_elfclass = ELFCLASS64, 339367466Sdim .bt_machine = EM_RISCV, 340367466Sdim .bt_osabi = ELFOSABI_FREEBSD, 341367466Sdim }, 342367466Sdim 343367466Sdim { 344260684Skaiw .bt_name = "elf64-sh64", 345260684Skaiw .bt_type = ETF_ELF, 346260684Skaiw .bt_byteorder = ELFDATA2MSB, 347260684Skaiw .bt_elfclass = ELFCLASS64, 348260684Skaiw .bt_machine = EM_SH, 349260684Skaiw }, 350260684Skaiw 351260684Skaiw { 352260684Skaiw .bt_name = "elf64-sh64l", 353260684Skaiw .bt_type = ETF_ELF, 354260684Skaiw .bt_byteorder = ELFDATA2LSB, 355260684Skaiw .bt_elfclass = ELFCLASS64, 356260684Skaiw .bt_machine = EM_SH, 357260684Skaiw }, 358260684Skaiw 359260684Skaiw { 360260684Skaiw .bt_name = "elf64-sh64-nbsd", 361260684Skaiw .bt_type = ETF_ELF, 362260684Skaiw .bt_byteorder = ELFDATA2MSB, 363260684Skaiw .bt_elfclass = ELFCLASS64, 364260684Skaiw .bt_machine = EM_SH, 365260684Skaiw .bt_osabi = ELFOSABI_NETBSD, 366260684Skaiw }, 367260684Skaiw 368260684Skaiw { 369260684Skaiw .bt_name = "elf64-sh64l-nbsd", 370260684Skaiw .bt_type = ETF_ELF, 371260684Skaiw .bt_byteorder = ELFDATA2LSB, 372260684Skaiw .bt_elfclass = ELFCLASS64, 373260684Skaiw .bt_machine = EM_SH, 374260684Skaiw .bt_osabi = ELFOSABI_NETBSD, 375260684Skaiw }, 376260684Skaiw 377260684Skaiw { 378260684Skaiw .bt_name = "elf64-sh64big-linux", 379260684Skaiw .bt_type = ETF_ELF, 380260684Skaiw .bt_byteorder = ELFDATA2MSB, 381260684Skaiw .bt_elfclass = ELFCLASS64, 382260684Skaiw .bt_machine = EM_SH, 383260684Skaiw .bt_osabi = ELFOSABI_LINUX, 384260684Skaiw }, 385260684Skaiw 386260684Skaiw { 387260684Skaiw .bt_name = "elf64-sh64-linux", 388260684Skaiw .bt_type = ETF_ELF, 389260684Skaiw .bt_byteorder = ELFDATA2LSB, 390260684Skaiw .bt_elfclass = ELFCLASS64, 391260684Skaiw .bt_machine = EM_SH, 392260684Skaiw .bt_osabi = ELFOSABI_LINUX, 393260684Skaiw }, 394260684Skaiw 395260684Skaiw { 396260684Skaiw .bt_name = "elf64-sparc", 397260684Skaiw .bt_type = ETF_ELF, 398260684Skaiw .bt_byteorder = ELFDATA2MSB, 399260684Skaiw .bt_elfclass = ELFCLASS64, 400260684Skaiw .bt_machine = EM_SPARCV9, 401260684Skaiw }, 402260684Skaiw 403260684Skaiw { 404260684Skaiw .bt_name = "elf64-sparc-freebsd", 405260684Skaiw .bt_type = ETF_ELF, 406260684Skaiw .bt_byteorder = ELFDATA2MSB, 407260684Skaiw .bt_elfclass = ELFCLASS64, 408260684Skaiw .bt_machine = EM_SPARCV9, 409260684Skaiw .bt_osabi = ELFOSABI_FREEBSD 410260684Skaiw }, 411260684Skaiw 412260684Skaiw { 413313506Semaste .bt_name = "elf64-tradbigmips", 414313506Semaste .bt_type = ETF_ELF, 415313506Semaste .bt_byteorder = ELFDATA2MSB, 416313506Semaste .bt_elfclass = ELFCLASS64, 417313506Semaste .bt_machine = EM_MIPS, 418313506Semaste }, 419313506Semaste 420313506Semaste { 421313506Semaste .bt_name = "elf64-tradlittlemips", 422313506Semaste .bt_type = ETF_ELF, 423313506Semaste .bt_byteorder = ELFDATA2LSB, 424313506Semaste .bt_elfclass = ELFCLASS64, 425313506Semaste .bt_machine = EM_MIPS, 426313506Semaste }, 427313506Semaste 428313506Semaste { 429260684Skaiw .bt_name = "elf64-x86-64", 430260684Skaiw .bt_type = ETF_ELF, 431260684Skaiw .bt_byteorder = ELFDATA2LSB, 432260684Skaiw .bt_elfclass = ELFCLASS64, 433260684Skaiw .bt_machine = EM_X86_64, 434260684Skaiw }, 435260684Skaiw 436260684Skaiw { 437260684Skaiw .bt_name = "elf64-x86-64-freebsd", 438260684Skaiw .bt_type = ETF_ELF, 439260684Skaiw .bt_byteorder = ELFDATA2LSB, 440260684Skaiw .bt_elfclass = ELFCLASS64, 441260684Skaiw .bt_machine = EM_X86_64, 442260684Skaiw .bt_osabi = ELFOSABI_FREEBSD 443260684Skaiw }, 444260684Skaiw 445260684Skaiw { 446260684Skaiw .bt_name = "ihex", 447260684Skaiw .bt_type = ETF_IHEX, 448260684Skaiw }, 449260684Skaiw 450260684Skaiw { 451260684Skaiw .bt_name = "srec", 452260684Skaiw .bt_type = ETF_SREC, 453260684Skaiw }, 454260684Skaiw 455260684Skaiw { 456260684Skaiw .bt_name = "symbolsrec", 457260684Skaiw .bt_type = ETF_SREC, 458260684Skaiw }, 459260684Skaiw 460260684Skaiw { 461295577Semaste .bt_name = "efi-app-ia32", 462295577Semaste .bt_type = ETF_EFI, 463295577Semaste .bt_machine = EM_386, 464295577Semaste }, 465295577Semaste 466295577Semaste { 467295577Semaste .bt_name = "efi-app-x86_64", 468295577Semaste .bt_type = ETF_EFI, 469295577Semaste .bt_machine = EM_X86_64, 470295577Semaste }, 471295577Semaste 472295577Semaste { 473295577Semaste .bt_name = "pei-i386", 474295577Semaste .bt_type = ETF_PE, 475295577Semaste .bt_machine = EM_386, 476295577Semaste }, 477295577Semaste 478295577Semaste { 479295577Semaste .bt_name = "pei-x86-64", 480295577Semaste .bt_type = ETF_PE, 481295577Semaste .bt_machine = EM_X86_64, 482295577Semaste }, 483295577Semaste 484295577Semaste { 485260684Skaiw .bt_name = NULL, 486260684Skaiw .bt_type = ETF_NONE, 487260684Skaiw }, 488260684Skaiw}; 489