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-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-littleaarch64", 254 .bt_type = ETF_ELF, 255 .bt_byteorder = ELFDATA2LSB, 256 .bt_elfclass = ELFCLASS64, 257 .bt_machine = EM_AARCH64, 258 }, 259 260 { 261 .bt_name = "elf64-littlemips", 262 .bt_type = ETF_ELF, 263 .bt_byteorder = ELFDATA2LSB, 264 .bt_elfclass = ELFCLASS64, 265 .bt_machine = EM_MIPS, 266 }, 267 268 { 269 .bt_name = "elf64-powerpc", 270 .bt_type = ETF_ELF, 271 .bt_byteorder = ELFDATA2MSB, 272 .bt_elfclass = ELFCLASS64, 273 .bt_machine = EM_PPC64, 274 }, 275 276 { 277 .bt_name = "elf64-powerpcle", 278 .bt_type = ETF_ELF, 279 .bt_byteorder = ELFDATA2LSB, 280 .bt_elfclass = ELFCLASS64, 281 .bt_machine = EM_PPC64, 282 }, 283 284 { 285 .bt_name = "elf64-sh64", 286 .bt_type = ETF_ELF, 287 .bt_byteorder = ELFDATA2MSB, 288 .bt_elfclass = ELFCLASS64, 289 .bt_machine = EM_SH, 290 }, 291 292 { 293 .bt_name = "elf64-sh64l", 294 .bt_type = ETF_ELF, 295 .bt_byteorder = ELFDATA2LSB, 296 .bt_elfclass = ELFCLASS64, 297 .bt_machine = EM_SH, 298 }, 299 300 { 301 .bt_name = "elf64-sh64-nbsd", 302 .bt_type = ETF_ELF, 303 .bt_byteorder = ELFDATA2MSB, 304 .bt_elfclass = ELFCLASS64, 305 .bt_machine = EM_SH, 306 .bt_osabi = ELFOSABI_NETBSD, 307 }, 308 309 { 310 .bt_name = "elf64-sh64l-nbsd", 311 .bt_type = ETF_ELF, 312 .bt_byteorder = ELFDATA2LSB, 313 .bt_elfclass = ELFCLASS64, 314 .bt_machine = EM_SH, 315 .bt_osabi = ELFOSABI_NETBSD, 316 }, 317 318 { 319 .bt_name = "elf64-sh64big-linux", 320 .bt_type = ETF_ELF, 321 .bt_byteorder = ELFDATA2MSB, 322 .bt_elfclass = ELFCLASS64, 323 .bt_machine = EM_SH, 324 .bt_osabi = ELFOSABI_LINUX, 325 }, 326 327 { 328 .bt_name = "elf64-sh64-linux", 329 .bt_type = ETF_ELF, 330 .bt_byteorder = ELFDATA2LSB, 331 .bt_elfclass = ELFCLASS64, 332 .bt_machine = EM_SH, 333 .bt_osabi = ELFOSABI_LINUX, 334 }, 335 336 { 337 .bt_name = "elf64-sparc", 338 .bt_type = ETF_ELF, 339 .bt_byteorder = ELFDATA2MSB, 340 .bt_elfclass = ELFCLASS64, 341 .bt_machine = EM_SPARCV9, 342 }, 343 344 { 345 .bt_name = "elf64-sparc-freebsd", 346 .bt_type = ETF_ELF, 347 .bt_byteorder = ELFDATA2MSB, 348 .bt_elfclass = ELFCLASS64, 349 .bt_machine = EM_SPARCV9, 350 .bt_osabi = ELFOSABI_FREEBSD 351 }, 352 353 { 354 .bt_name = "elf64-x86-64", 355 .bt_type = ETF_ELF, 356 .bt_byteorder = ELFDATA2LSB, 357 .bt_elfclass = ELFCLASS64, 358 .bt_machine = EM_X86_64, 359 }, 360 361 { 362 .bt_name = "elf64-x86-64-freebsd", 363 .bt_type = ETF_ELF, 364 .bt_byteorder = ELFDATA2LSB, 365 .bt_elfclass = ELFCLASS64, 366 .bt_machine = EM_X86_64, 367 .bt_osabi = ELFOSABI_FREEBSD 368 }, 369 370 { 371 .bt_name = "ihex", 372 .bt_type = ETF_IHEX, 373 }, 374 375 { 376 .bt_name = "srec", 377 .bt_type = ETF_SREC, 378 }, 379 380 { 381 .bt_name = "symbolsrec", 382 .bt_type = ETF_SREC, 383 }, 384 385 { 386 .bt_name = "efi-app-ia32", 387 .bt_type = ETF_EFI, 388 .bt_machine = EM_386, 389 }, 390 391 { 392 .bt_name = "efi-app-x86_64", 393 .bt_type = ETF_EFI, 394 .bt_machine = EM_X86_64, 395 }, 396 397 { 398 .bt_name = "pei-i386", 399 .bt_type = ETF_PE, 400 .bt_machine = EM_386, 401 }, 402 403 { 404 .bt_name = "pei-x86-64", 405 .bt_type = ETF_PE, 406 .bt_machine = EM_X86_64, 407 }, 408 409 { 410 .bt_name = NULL, 411 .bt_type = ETF_NONE, 412 }, 413 }; 414