1 //===- llvm/BinaryFormat/ELF.cpp - The ELF format ---------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "llvm/BinaryFormat/ELF.h" 10 #include "llvm/ADT/StringSwitch.h" 11 12 using namespace llvm; 13 using namespace ELF; 14 15 /// Convert an architecture name into ELF's e_machine value. 16 uint16_t ELF::convertArchNameToEMachine(StringRef Arch) { 17 std::string LowerArch = Arch.lower(); 18 return StringSwitch<uint16_t>(LowerArch) 19 .Case("none", EM_NONE) 20 .Case("m32", EM_M32) 21 .Case("sparc", EM_SPARC) 22 .Case("386", EM_386) 23 .Case("68k", EM_68K) 24 .Case("88k", EM_88K) 25 .Case("iamcu", EM_IAMCU) 26 .Case("860", EM_860) 27 .Case("mips", EM_MIPS) 28 .Case("s370", EM_S370) 29 .Case("mips_rs3_le", EM_MIPS_RS3_LE) 30 .Case("parisc", EM_PARISC) 31 .Case("vpp500", EM_VPP500) 32 .Case("sparc32plus", EM_SPARC32PLUS) 33 .Case("960", EM_960) 34 .Case("ppc", EM_PPC) 35 .Case("ppc64", EM_PPC64) 36 .Case("s390", EM_S390) 37 .Case("spu", EM_SPU) 38 .Case("v800", EM_V800) 39 .Case("fr20", EM_FR20) 40 .Case("rh32", EM_RH32) 41 .Case("rce", EM_RCE) 42 .Case("arm", EM_ARM) 43 .Case("alpha", EM_ALPHA) 44 .Case("sh", EM_SH) 45 .Case("sparcv9", EM_SPARCV9) 46 .Case("tricore", EM_TRICORE) 47 .Case("arc", EM_ARC) 48 .Case("h8_300", EM_H8_300) 49 .Case("h8_300h", EM_H8_300H) 50 .Case("h8s", EM_H8S) 51 .Case("h8_500", EM_H8_500) 52 .Case("ia_64", EM_IA_64) 53 .Case("mips_x", EM_MIPS_X) 54 .Case("coldfire", EM_COLDFIRE) 55 .Case("68hc12", EM_68HC12) 56 .Case("mma", EM_MMA) 57 .Case("pcp", EM_PCP) 58 .Case("ncpu", EM_NCPU) 59 .Case("ndr1", EM_NDR1) 60 .Case("starcore", EM_STARCORE) 61 .Case("me16", EM_ME16) 62 .Case("st100", EM_ST100) 63 .Case("tinyj", EM_TINYJ) 64 .Case("x86_64", EM_X86_64) 65 .Case("pdsp", EM_PDSP) 66 .Case("pdp10", EM_PDP10) 67 .Case("pdp11", EM_PDP11) 68 .Case("fx66", EM_FX66) 69 .Case("st9plus", EM_ST9PLUS) 70 .Case("st7", EM_ST7) 71 .Case("68hc16", EM_68HC16) 72 .Case("68hc11", EM_68HC11) 73 .Case("68hc08", EM_68HC08) 74 .Case("68hc05", EM_68HC05) 75 .Case("svx", EM_SVX) 76 .Case("st19", EM_ST19) 77 .Case("vax", EM_VAX) 78 .Case("cris", EM_CRIS) 79 .Case("javelin", EM_JAVELIN) 80 .Case("firepath", EM_FIREPATH) 81 .Case("zsp", EM_ZSP) 82 .Case("mmix", EM_MMIX) 83 .Case("huany", EM_HUANY) 84 .Case("prism", EM_PRISM) 85 .Case("avr", EM_AVR) 86 .Case("fr30", EM_FR30) 87 .Case("d10v", EM_D10V) 88 .Case("d30v", EM_D30V) 89 .Case("v850", EM_V850) 90 .Case("m32r", EM_M32R) 91 .Case("mn10300", EM_MN10300) 92 .Case("mn10200", EM_MN10200) 93 .Case("pj", EM_PJ) 94 .Case("openrisc", EM_OPENRISC) 95 .Case("arc_compact", EM_ARC_COMPACT) 96 .Case("xtensa", EM_XTENSA) 97 .Case("videocore", EM_VIDEOCORE) 98 .Case("tmm_gpp", EM_TMM_GPP) 99 .Case("ns32k", EM_NS32K) 100 .Case("tpc", EM_TPC) 101 .Case("snp1k", EM_SNP1K) 102 .Case("st200", EM_ST200) 103 .Case("ip2k", EM_IP2K) 104 .Case("max", EM_MAX) 105 .Case("cr", EM_CR) 106 .Case("f2mc16", EM_F2MC16) 107 .Case("msp430", EM_MSP430) 108 .Case("blackfin", EM_BLACKFIN) 109 .Case("se_c33", EM_SE_C33) 110 .Case("sep", EM_SEP) 111 .Case("arca", EM_ARCA) 112 .Case("unicore", EM_UNICORE) 113 .Case("excess", EM_EXCESS) 114 .Case("dxp", EM_DXP) 115 .Case("altera_nios2", EM_ALTERA_NIOS2) 116 .Case("crx", EM_CRX) 117 .Case("xgate", EM_XGATE) 118 .Case("c166", EM_C166) 119 .Case("m16c", EM_M16C) 120 .Case("dspic30f", EM_DSPIC30F) 121 .Case("ce", EM_CE) 122 .Case("m32c", EM_M32C) 123 .Case("tsk3000", EM_TSK3000) 124 .Case("rs08", EM_RS08) 125 .Case("sharc", EM_SHARC) 126 .Case("ecog2", EM_ECOG2) 127 .Case("score7", EM_SCORE7) 128 .Case("dsp24", EM_DSP24) 129 .Case("videocore3", EM_VIDEOCORE3) 130 .Case("latticemico32", EM_LATTICEMICO32) 131 .Case("se_c17", EM_SE_C17) 132 .Case("ti_c6000", EM_TI_C6000) 133 .Case("ti_c2000", EM_TI_C2000) 134 .Case("ti_c5500", EM_TI_C5500) 135 .Case("mmdsp_plus", EM_MMDSP_PLUS) 136 .Case("cypress_m8c", EM_CYPRESS_M8C) 137 .Case("r32c", EM_R32C) 138 .Case("trimedia", EM_TRIMEDIA) 139 .Case("hexagon", EM_HEXAGON) 140 .Case("8051", EM_8051) 141 .Case("stxp7x", EM_STXP7X) 142 .Case("nds32", EM_NDS32) 143 .Case("ecog1", EM_ECOG1) 144 .Case("ecog1x", EM_ECOG1X) 145 .Case("maxq30", EM_MAXQ30) 146 .Case("ximo16", EM_XIMO16) 147 .Case("manik", EM_MANIK) 148 .Case("craynv2", EM_CRAYNV2) 149 .Case("rx", EM_RX) 150 .Case("metag", EM_METAG) 151 .Case("mcst_elbrus", EM_MCST_ELBRUS) 152 .Case("ecog16", EM_ECOG16) 153 .Case("cr16", EM_CR16) 154 .Case("etpu", EM_ETPU) 155 .Case("sle9x", EM_SLE9X) 156 .Case("l10m", EM_L10M) 157 .Case("k10m", EM_K10M) 158 .Case("aarch64", EM_AARCH64) 159 .Case("avr32", EM_AVR32) 160 .Case("stm8", EM_STM8) 161 .Case("tile64", EM_TILE64) 162 .Case("tilepro", EM_TILEPRO) 163 .Case("cuda", EM_CUDA) 164 .Case("tilegx", EM_TILEGX) 165 .Case("cloudshield", EM_CLOUDSHIELD) 166 .Case("corea_1st", EM_COREA_1ST) 167 .Case("corea_2nd", EM_COREA_2ND) 168 .Case("arc_compact2", EM_ARC_COMPACT2) 169 .Case("open8", EM_OPEN8) 170 .Case("rl78", EM_RL78) 171 .Case("videocore5", EM_VIDEOCORE5) 172 .Case("78kor", EM_78KOR) 173 .Case("56800ex", EM_56800EX) 174 .Case("ba1", EM_BA1) 175 .Case("ba2", EM_BA2) 176 .Case("xcore", EM_XCORE) 177 .Case("mchp_pic", EM_MCHP_PIC) 178 .Case("intel205", EM_INTEL205) 179 .Case("intel206", EM_INTEL206) 180 .Case("intel207", EM_INTEL207) 181 .Case("intel208", EM_INTEL208) 182 .Case("intel209", EM_INTEL209) 183 .Case("km32", EM_KM32) 184 .Case("kmx32", EM_KMX32) 185 .Case("kmx16", EM_KMX16) 186 .Case("kmx8", EM_KMX8) 187 .Case("kvarc", EM_KVARC) 188 .Case("cdp", EM_CDP) 189 .Case("coge", EM_COGE) 190 .Case("cool", EM_COOL) 191 .Case("norc", EM_NORC) 192 .Case("csr_kalimba", EM_CSR_KALIMBA) 193 .Case("amdgpu", EM_AMDGPU) 194 .Case("riscv", EM_RISCV) 195 .Case("lanai", EM_LANAI) 196 .Case("bpf", EM_BPF) 197 .Case("ve", EM_VE) 198 .Case("csky", EM_CSKY) 199 .Case("loongarch", EM_LOONGARCH) 200 .Default(EM_NONE); 201 } 202 203 uint16_t ELF::convertTripleArchTypeToEMachine(Triple::ArchType ArchType) { 204 switch (ArchType) { 205 case Triple::UnknownArch: 206 default: 207 return EM_NONE; 208 209 case Triple::arm: 210 case Triple::armeb: 211 case Triple::thumb: 212 case Triple::thumbeb: 213 return EM_ARM; 214 case Triple::aarch64: 215 case Triple::aarch64_be: 216 case Triple::aarch64_32: 217 return EM_AARCH64; 218 case Triple::arc: 219 return EM_ARC; 220 case Triple::avr: 221 return EM_AVR; 222 case Triple::bpfel: 223 case Triple::bpfeb: 224 return EM_BPF; 225 case Triple::csky: 226 return EM_CSKY; 227 case Triple::hexagon: 228 return EM_HEXAGON; 229 case Triple::loongarch32: 230 case Triple::loongarch64: 231 return EM_LOONGARCH; 232 case Triple::m68k: 233 return EM_68K; 234 case Triple::mips: 235 case Triple::mipsel: 236 case Triple::mips64: 237 case Triple::mips64el: 238 return EM_MIPS; 239 case Triple::msp430: 240 return EM_MSP430; 241 case Triple::ppc: 242 case Triple::ppcle: 243 return EM_PPC; 244 case Triple::ppc64: 245 case Triple::ppc64le: 246 return EM_PPC; 247 case Triple::riscv32: 248 case Triple::riscv64: 249 return EM_RISCV; 250 case Triple::sparc: 251 case Triple::sparcel: 252 return EM_SPARC; 253 case Triple::sparcv9: 254 return EM_SPARCV9; 255 case Triple::systemz: 256 return EM_S390; 257 case Triple::x86: 258 return EM_386; 259 case Triple::x86_64: 260 return EM_X86_64; 261 case Triple::xcore: 262 return EM_XCORE; 263 case Triple::xtensa: 264 return EM_XTENSA; 265 } 266 } 267 268 /// Convert an ELF's e_machine value into an architecture name. 269 StringRef ELF::convertEMachineToArchName(uint16_t EMachine) { 270 switch (EMachine) { 271 case EM_NONE: 272 return "None"; 273 case EM_M32: 274 return "m32"; 275 case EM_SPARC: 276 return "sparc"; 277 case EM_386: 278 return "386"; 279 case EM_68K: 280 return "68k"; 281 case EM_88K: 282 return "88k"; 283 case EM_IAMCU: 284 return "iamcu"; 285 case EM_860: 286 return "860"; 287 case EM_MIPS: 288 return "mips"; 289 case EM_S370: 290 return "s370"; 291 case EM_MIPS_RS3_LE: 292 return "mips_rs3_le"; 293 case EM_PARISC: 294 return "parisc"; 295 case EM_VPP500: 296 return "vpp500"; 297 case EM_SPARC32PLUS: 298 return "sparc32plus"; 299 case EM_960: 300 return "960"; 301 case EM_PPC: 302 return "ppc"; 303 case EM_PPC64: 304 return "ppc64"; 305 case EM_S390: 306 return "s390"; 307 case EM_SPU: 308 return "spu"; 309 case EM_V800: 310 return "v800"; 311 case EM_FR20: 312 return "fr20"; 313 case EM_RH32: 314 return "rh32"; 315 case EM_RCE: 316 return "rce"; 317 case EM_ARM: 318 return "arm"; 319 case EM_ALPHA: 320 return "alpha"; 321 case EM_SH: 322 return "sh"; 323 case EM_SPARCV9: 324 return "sparcv9"; 325 case EM_TRICORE: 326 return "tricore"; 327 case EM_ARC: 328 return "arc"; 329 case EM_H8_300: 330 return "h8_300"; 331 case EM_H8_300H: 332 return "h8_300h"; 333 case EM_H8S: 334 return "h8s"; 335 case EM_H8_500: 336 return "h8_500"; 337 case EM_IA_64: 338 return "ia_64"; 339 case EM_MIPS_X: 340 return "mips_x"; 341 case EM_COLDFIRE: 342 return "coldfire"; 343 case EM_68HC12: 344 return "68hc12"; 345 case EM_MMA: 346 return "mma"; 347 case EM_PCP: 348 return "pcp"; 349 case EM_NCPU: 350 return "ncpu"; 351 case EM_NDR1: 352 return "ndr1"; 353 case EM_STARCORE: 354 return "starcore"; 355 case EM_ME16: 356 return "me16"; 357 case EM_ST100: 358 return "st100"; 359 case EM_TINYJ: 360 return "tinyj"; 361 case EM_X86_64: 362 return "x86_64"; 363 case EM_PDSP: 364 return "pdsp"; 365 case EM_PDP10: 366 return "pdp10"; 367 case EM_PDP11: 368 return "pdp11"; 369 case EM_FX66: 370 return "fx66"; 371 case EM_ST9PLUS: 372 return "st9plus"; 373 case EM_ST7: 374 return "st7"; 375 case EM_68HC16: 376 return "68hc16"; 377 case EM_68HC11: 378 return "68hc11"; 379 case EM_68HC08: 380 return "68hc08"; 381 case EM_68HC05: 382 return "68hc05"; 383 case EM_SVX: 384 return "svx"; 385 case EM_ST19: 386 return "st19"; 387 case EM_VAX: 388 return "vax"; 389 case EM_CRIS: 390 return "cris"; 391 case EM_JAVELIN: 392 return "javelin"; 393 case EM_FIREPATH: 394 return "firepath"; 395 case EM_ZSP: 396 return "zsp"; 397 case EM_MMIX: 398 return "mmix"; 399 case EM_HUANY: 400 return "huany"; 401 case EM_PRISM: 402 return "prism"; 403 case EM_AVR: 404 return "avr"; 405 case EM_FR30: 406 return "fr30"; 407 case EM_D10V: 408 return "d10v"; 409 case EM_D30V: 410 return "d30v"; 411 case EM_V850: 412 return "v850"; 413 case EM_M32R: 414 return "m32r"; 415 case EM_MN10300: 416 return "mn10300"; 417 case EM_MN10200: 418 return "mn10200"; 419 case EM_PJ: 420 return "pj"; 421 case EM_OPENRISC: 422 return "openrisc"; 423 case EM_ARC_COMPACT: 424 return "arc_compact"; 425 case EM_XTENSA: 426 return "xtensa"; 427 case EM_VIDEOCORE: 428 return "videocore"; 429 case EM_TMM_GPP: 430 return "tmm_gpp"; 431 case EM_NS32K: 432 return "ns32k"; 433 case EM_TPC: 434 return "tpc"; 435 case EM_SNP1K: 436 return "snp1k"; 437 case EM_ST200: 438 return "st200"; 439 case EM_IP2K: 440 return "ip2k"; 441 case EM_MAX: 442 return "max"; 443 case EM_CR: 444 return "cr"; 445 case EM_F2MC16: 446 return "f2mc16"; 447 case EM_MSP430: 448 return "msp430"; 449 case EM_BLACKFIN: 450 return "blackfin"; 451 case EM_SE_C33: 452 return "se_c33"; 453 case EM_SEP: 454 return "sep"; 455 case EM_ARCA: 456 return "arca"; 457 case EM_UNICORE: 458 return "unicore"; 459 case EM_EXCESS: 460 return "excess"; 461 case EM_DXP: 462 return "dxp"; 463 case EM_ALTERA_NIOS2: 464 return "altera_nios2"; 465 case EM_CRX: 466 return "crx"; 467 case EM_XGATE: 468 return "xgate"; 469 case EM_C166: 470 return "c166"; 471 case EM_M16C: 472 return "m16c"; 473 case EM_DSPIC30F: 474 return "dspic30f"; 475 case EM_CE: 476 return "ce"; 477 case EM_M32C: 478 return "m32c"; 479 case EM_TSK3000: 480 return "tsk3000"; 481 case EM_RS08: 482 return "rs08"; 483 case EM_SHARC: 484 return "sharc"; 485 case EM_ECOG2: 486 return "ecog2"; 487 case EM_SCORE7: 488 return "score7"; 489 case EM_DSP24: 490 return "dsp24"; 491 case EM_VIDEOCORE3: 492 return "videocore3"; 493 case EM_LATTICEMICO32: 494 return "latticemico32"; 495 case EM_SE_C17: 496 return "se_c17"; 497 case EM_TI_C6000: 498 return "ti_c6000"; 499 case EM_TI_C2000: 500 return "ti_c2000"; 501 case EM_TI_C5500: 502 return "ti_c5500"; 503 case EM_MMDSP_PLUS: 504 return "mmdsp_plus"; 505 case EM_CYPRESS_M8C: 506 return "cypress_m8c"; 507 case EM_R32C: 508 return "r32c"; 509 case EM_TRIMEDIA: 510 return "trimedia"; 511 case EM_HEXAGON: 512 return "hexagon"; 513 case EM_8051: 514 return "8051"; 515 case EM_STXP7X: 516 return "stxp7x"; 517 case EM_NDS32: 518 return "nds32"; 519 case EM_ECOG1: 520 return "ecog1"; 521 case EM_MAXQ30: 522 return "maxq30"; 523 case EM_XIMO16: 524 return "ximo16"; 525 case EM_MANIK: 526 return "manik"; 527 case EM_CRAYNV2: 528 return "craynv2"; 529 case EM_RX: 530 return "rx"; 531 case EM_METAG: 532 return "metag"; 533 case EM_MCST_ELBRUS: 534 return "mcst_elbrus"; 535 case EM_ECOG16: 536 return "ecog16"; 537 case EM_CR16: 538 return "cr16"; 539 case EM_ETPU: 540 return "etpu"; 541 case EM_SLE9X: 542 return "sle9x"; 543 case EM_L10M: 544 return "l10m"; 545 case EM_K10M: 546 return "k10m"; 547 case EM_AARCH64: 548 return "AArch64"; 549 case EM_AVR32: 550 return "avr32"; 551 case EM_STM8: 552 return "stm8"; 553 case EM_TILE64: 554 return "tile64"; 555 case EM_TILEPRO: 556 return "tilepro"; 557 case EM_CUDA: 558 return "cuda"; 559 case EM_TILEGX: 560 return "tilegx"; 561 case EM_CLOUDSHIELD: 562 return "cloudshield"; 563 case EM_COREA_1ST: 564 return "corea_1st"; 565 case EM_COREA_2ND: 566 return "corea_2nd"; 567 case EM_ARC_COMPACT2: 568 return "arc_compact2"; 569 case EM_OPEN8: 570 return "open8"; 571 case EM_RL78: 572 return "rl78"; 573 case EM_VIDEOCORE5: 574 return "videocore5"; 575 case EM_78KOR: 576 return "78kor"; 577 case EM_56800EX: 578 return "56800ex"; 579 case EM_BA1: 580 return "ba1"; 581 case EM_BA2: 582 return "ba2"; 583 case EM_XCORE: 584 return "xcore"; 585 case EM_MCHP_PIC: 586 return "mchp_pic"; 587 case EM_INTEL205: 588 return "intel205"; 589 case EM_INTEL206: 590 return "intel206"; 591 case EM_INTEL207: 592 return "intel207"; 593 case EM_INTEL208: 594 return "intel208"; 595 case EM_INTEL209: 596 return "intel209"; 597 case EM_KM32: 598 return "km32"; 599 case EM_KMX32: 600 return "kmx32"; 601 case EM_KMX16: 602 return "kmx16"; 603 case EM_KMX8: 604 return "kmx8"; 605 case EM_KVARC: 606 return "kvarc"; 607 case EM_CDP: 608 return "cdp"; 609 case EM_COGE: 610 return "coge"; 611 case EM_COOL: 612 return "cool"; 613 case EM_NORC: 614 return "norc"; 615 case EM_CSR_KALIMBA: 616 return "csr_kalimba"; 617 case EM_AMDGPU: 618 return "amdgpu"; 619 case EM_RISCV: 620 return "riscv"; 621 case EM_LANAI: 622 return "lanai"; 623 case EM_BPF: 624 return "bpf"; 625 case EM_VE: 626 return "ve"; 627 case EM_CSKY: 628 return "csky"; 629 case EM_LOONGARCH: 630 return "loongarch"; 631 default: 632 return "None"; 633 } 634 } 635 636 uint8_t ELF::convertNameToOSABI(StringRef Name) { 637 return StringSwitch<uint16_t>(Name) 638 .StartsWith("hpux", ELFOSABI_HPUX) 639 .StartsWith("netbsd", ELFOSABI_NETBSD) 640 .StartsWith("gnu", ELFOSABI_GNU) 641 .StartsWith("hurd", ELFOSABI_HURD) 642 .StartsWith("solaris", ELFOSABI_SOLARIS) 643 .StartsWith("aix", ELFOSABI_AIX) 644 .StartsWith("irix", ELFOSABI_IRIX) 645 .StartsWith("freebsd", ELFOSABI_FREEBSD) 646 .StartsWith("tru64", ELFOSABI_TRU64) 647 .StartsWith("modesto", ELFOSABI_MODESTO) 648 .StartsWith("openbsd", ELFOSABI_OPENBSD) 649 .StartsWith("openvms", ELFOSABI_OPENVMS) 650 .StartsWith("nsk", ELFOSABI_NSK) 651 .StartsWith("aros", ELFOSABI_AROS) 652 .StartsWith("fenixos", ELFOSABI_FENIXOS) 653 .StartsWith("cloudabi", ELFOSABI_CLOUDABI) 654 .StartsWith("cuda", ELFOSABI_CUDA) 655 .StartsWith("amdhsa", ELFOSABI_AMDGPU_HSA) 656 .StartsWith("amdpal", ELFOSABI_AMDGPU_PAL) 657 .StartsWith("mesa3d", ELFOSABI_AMDGPU_MESA3D) 658 .StartsWith("arm", ELFOSABI_ARM) 659 .StartsWith("standalone", ELFOSABI_STANDALONE) 660 .StartsWith("none", ELFOSABI_NONE) 661 .Default(ELFOSABI_NONE); 662 } 663 664 StringRef ELF::convertOSABIToName(uint8_t OSABI) { 665 switch (OSABI) { 666 case ELFOSABI_HPUX: 667 return "hpux"; 668 case ELFOSABI_NETBSD: 669 return "netbsd"; 670 case ELFOSABI_GNU: 671 return "gnu"; 672 case ELFOSABI_HURD: 673 return "hurd"; 674 case ELFOSABI_SOLARIS: 675 return "solaris"; 676 case ELFOSABI_AIX: 677 return "aix"; 678 case ELFOSABI_IRIX: 679 return "irix"; 680 case ELFOSABI_FREEBSD: 681 return "freebsd"; 682 case ELFOSABI_TRU64: 683 return "tru64"; 684 case ELFOSABI_MODESTO: 685 return "modesto"; 686 case ELFOSABI_OPENBSD: 687 return "openbsd"; 688 case ELFOSABI_OPENVMS: 689 return "openvms"; 690 case ELFOSABI_NSK: 691 return "nsk"; 692 case ELFOSABI_AROS: 693 return "aros"; 694 case ELFOSABI_FENIXOS: 695 return "fenixos"; 696 case ELFOSABI_CLOUDABI: 697 return "cloudabi"; 698 case ELFOSABI_CUDA: 699 return "cuda"; 700 case ELFOSABI_AMDGPU_HSA: 701 return "amdhsa"; 702 case ELFOSABI_AMDGPU_PAL: 703 return "amdpal"; 704 case ELFOSABI_AMDGPU_MESA3D: 705 return "mesa3d"; 706 case ELFOSABI_ARM: 707 return "arm"; 708 case ELFOSABI_STANDALONE: 709 return "standalone"; 710 default: 711 return "none"; 712 } 713 } 714