LLVM: lib/Object/ELFObjectFile.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

29#include

30#include

31#include

32#include

33#include

34#include

35#include

36

37using namespace llvm;

38using namespace object;

39

48 {"Unknown", ": 7", 7},

49 {"Unknown", ": 8", 8},

50 {"Unknown", ": 9", 9},

52 {"OS Specific", ": 11", 11},

53 {"OS Specific", ": 12", 12},

54 {"Proc Specific", ": 13", 13},

55 {"Proc Specific", ": 14", 14},

56 {"Proc Specific", ": 15", 15}

57};

58

61

62template

66 if (Error E = Ret.takeError())

67 return std::move(E);

68 return std::make_unique<ELFObjectFile>(std::move(*Ret));

69}

70

71Expected<std::unique_ptr>

73 std::pair<unsigned char, unsigned char> Ident =

75 std::size_t MaxAlignment =

77 reinterpret_cast<uintptr_t>(Obj.getBufferStart()));

78

79 if (MaxAlignment < 2)

80 return createError("Insufficient alignment");

81

87 else

94 else

96 }

98}

99

103

106 break;

109 break;

112 break;

115 break;

118 break;

121 break;

124 break;

127 break;

130 break;

133 break;

136 break;

137 default:

139 }

140

143

144 break;

147 break;

148 default:

150 }

151

156

157 return Features;

158}

159

160SubtargetFeatures ELFObjectFileBase::getARMFeatures() const {

161 SubtargetFeatures Features;

165 return SubtargetFeatures();

166 }

167

168

169 bool isV7 = false;

170 std::optional Attr =

172 if (Attr)

174

176 if (Attr) {

177 switch (*Attr) {

180 break;

183 if (isV7)

185 break;

188 if (isV7)

190 break;

191 }

192 }

193

195 if (Attr) {

196 switch (*Attr) {

197 default:

198 break;

201 Features.AddFeature("thumb2", false);

202 break;

205 break;

206 }

207 }

208

210 if (Attr) {

211 switch (*Attr) {

212 default:

213 break;

215 Features.AddFeature("vfp2sp", false);

216 Features.AddFeature("vfp3d16sp", false);

217 Features.AddFeature("vfp4d16sp", false);

218 break;

221 break;

225 break;

229 break;

230 }

231 }

232

234 if (Attr) {

235 switch (*Attr) {

236 default:

237 break;

241 break;

244 break;

248 break;

249 }

250 }

251

253 if (Attr) {

254 switch (*Attr) {

255 default:

256 break;

259 Features.AddFeature("mve.fp", false);

260 break;

262 Features.AddFeature("mve.fp", false);

264 break;

267 break;

268 }

269 }

270

272 if (Attr) {

273 switch (*Attr) {

274 default:

275 break;

278 Features.AddFeature("hwdiv-arm", false);

279 break;

283 break;

284 }

285 }

286

287 return Features;

288}

289

291 switch (Attr) {

292 case 5:

293 return "v5";

294 case 55:

295 return "v55";

296 case 60:

297 return "v60";

298 case 62:

299 return "v62";

300 case 65:

301 return "v65";

302 case 67:

303 return "v67";

304 case 68:

305 return "v68";

306 case 69:

307 return "v69";

308 case 71:

309 return "v71";

310 case 73:

311 return "v73";

312 case 75:

313 return "v75";

314 case 79:

315 return "v79";

316 case 81:

317 return "v81";

318 default:

319 return {};

320 }

321}

322

323SubtargetFeatures ELFObjectFileBase::getHexagonFeatures() const {

324 SubtargetFeatures Features;

325 HexagonAttributeParser Parser;

327

328

330 return Features;

331 }

332 std::optional Attr;

333

335 if (std::optionalstd::string FeatureString =

338 }

339

341 std::optionalstd::string FeatureString =

343

344 if (FeatureString && *Attr >= 60)

345 Features.AddFeature("hvx" + *FeatureString);

346 }

347

349 if (*Attr)

351

353 if (*Attr)

355

357 if (*Attr)

359

361 if (*Attr)

363

365 if (*Attr)

367

368 return Features;

369}

370

371Expected ELFObjectFileBase::getRISCVFeatures() const {

372 SubtargetFeatures Features;

374

377 }

378

381 return std::move(E);

382 }

383

384 std::optional Attr =

386 if (Attr) {

388 if (!ParseResult)

389 return ParseResult.takeError();

390 auto &ISAInfo = *ParseResult;

391

392 if (ISAInfo->getXLen() == 32)

394 else if (ISAInfo->getXLen() == 64)

396 else

398

400 }

401

402 return Features;

403}

404

405SubtargetFeatures ELFObjectFileBase::getLoongArchFeatures() const {

406 SubtargetFeatures Features;

407

410 break;

413

414 [[fallthrough]];

417 break;

418 }

419

420 return Features;

421}

422

426 return getMIPSFeatures();

428 return getARMFeatures();

430 return getRISCVFeatures();

432 return getLoongArchFeatures();

434 return getHexagonFeatures();

435 default:

437 }

438}

439

443 return getAMDGPUCPUName();

445 return getNVPTXCPUName();

451 default:

452 return std::nullopt;

453 }

454}

455

456StringRef ELFObjectFileBase::getAMDGPUCPUName() const {

459

460 switch (CPU) {

461

463 return "r600";

465 return "r630";

467 return "rs880";

469 return "rv670";

470

471

473 return "rv710";

475 return "rv730";

477 return "rv770";

478

479

481 return "cedar";

483 return "cypress";

485 return "juniper";

487 return "redwood";

489 return "sumo";

490

491

493 return "barts";

495 return "caicos";

497 return "cayman";

499 return "turks";

500

501

503 return "gfx600";

505 return "gfx601";

507 return "gfx602";

508

509

511 return "gfx700";

513 return "gfx701";

515 return "gfx702";

517 return "gfx703";

519 return "gfx704";

521 return "gfx705";

522

523

525 return "gfx801";

527 return "gfx802";

529 return "gfx803";

531 return "gfx805";

533 return "gfx810";

534

535

537 return "gfx900";

539 return "gfx902";

541 return "gfx904";

543 return "gfx906";

545 return "gfx908";

547 return "gfx909";

549 return "gfx90a";

551 return "gfx90c";

553 return "gfx942";

555 return "gfx950";

556

557

559 return "gfx1010";

561 return "gfx1011";

563 return "gfx1012";

565 return "gfx1013";

567 return "gfx1030";

569 return "gfx1031";

571 return "gfx1032";

573 return "gfx1033";

575 return "gfx1034";

577 return "gfx1035";

579 return "gfx1036";

580

581

583 return "gfx1100";

585 return "gfx1101";

587 return "gfx1102";

589 return "gfx1103";

591 return "gfx1150";

593 return "gfx1151";

595 return "gfx1152";

597 return "gfx1153";

598

599

601 return "gfx1200";

603 return "gfx1201";

605 return "gfx1250";

607 return "gfx1251";

608

609

611 return "gfx9-generic";

613 return "gfx9-4-generic";

615 return "gfx10-1-generic";

617 return "gfx10-3-generic";

619 return "gfx11-generic";

621 return "gfx12-generic";

622 default:

624 }

625}

626

627StringRef ELFObjectFileBase::getNVPTXCPUName() const {

633

634 switch (SM) {

635

637 return "sm_20";

639 return "sm_21";

640

641

643 return "sm_30";

645 return "sm_32";

647 return "sm_35";

649 return "sm_37";

650

651

653 return "sm_50";

655 return "sm_52";

657 return "sm_53";

658

659

661 return "sm_60";

663 return "sm_61";

665 return "sm_62";

666

667

669 return "sm_70";

671 return "sm_72";

672

673

675 return "sm_75";

676

677

679 return "sm_80";

681 return "sm_86";

683 return "sm_87";

685 return "sm_88";

686

687

689 return "sm_89";

690

691

694 : "sm_90";

695

696

699 : "sm_100";

702 : "sm_101";

705 : "sm_103";

708 : "sm_110";

709

710

713 : "sm_120";

716 : "sm_121";

717 default:

719 }

720}

721

722

725 return;

726

729

731 return;

732 }

733

735

738 else

740

741 std::optional Attr =

743 if (Attr) {

744 switch (*Attr) {

747 break;

750 break;

753 break;

756 break;

759 break;

762 break;

765 break;

768 break;

771 break;

773 std::optional ArchProfileAttr =

777 else

779 break;

780 }

783 break;

786 break;

789 break;

792 break;

795 break;

797 Triple += "v8m.base";

798 break;

800 Triple += "v8m.main";

801 break;

803 Triple += "v8.1m.main";

804 break;

807 break;

808 }

809 }

812

814}

815

816std::vector

818 std::string Err;

821 if (T)

822 return {};

823 uint32_t JumpSlotReloc = 0, GlobDatReloc = 0;

826 JumpSlotReloc = ELF::R_386_JUMP_SLOT;

827 GlobDatReloc = ELF::R_386_GLOB_DAT;

828 break;

830 JumpSlotReloc = ELF::R_X86_64_JUMP_SLOT;

831 GlobDatReloc = ELF::R_X86_64_GLOB_DAT;

832 break;

835 JumpSlotReloc = ELF::R_AARCH64_JUMP_SLOT;

836 break;

841 JumpSlotReloc = ELF::R_ARM_JUMP_SLOT;

842 break;

844 JumpSlotReloc = ELF::R_HEX_JMP_SLOT;

845 GlobDatReloc = ELF::R_HEX_GLOB_DAT;

846 break;

849 JumpSlotReloc = ELF::R_RISCV_JUMP_SLOT;

850 break;

851 default:

852 return {};

853 }

854 std::unique_ptr MII(T->createMCInstrInfo());

855 std::unique_ptr MIA(

856 T->createMCInstrAnalysis(MII.get()));

857 if (!MIA)

858 return {};

859 std::vector<std::pair<uint64_t, uint64_t>> PltEntries;

860 std::optional RelaPlt, RelaDyn;

864 if (!NameOrErr) {

866 continue;

867 }

869

870 if (Name == ".rela.plt" || Name == ".rel.plt") {

871 RelaPlt = Section;

872 } else if (Name == ".rela.dyn" || Name == ".rel.dyn") {

873 RelaDyn = Section;

874 } else if (Name == ".got.plt") {

875 GotBaseVA = Section.getAddress();

876 } else if (Name == ".plt" || Name == ".plt.got") {

878 if (!PltContents) {

880 return {};

881 }

883 PltEntries,

884 MIA->findPltEntries(Section.getAddress(),

886 }

887 }

888

889

891 for (auto [Plt, GotPlt] : PltEntries) {

892 uint64_t GotPltEntry = GotPlt;

893

894

895

897 GotPltEntry = static_cast<int32_t>(GotPltEntry) + GotBaseVA;

898 GotToPlt.insert(std::make_pair(GotPltEntry, Plt));

899 }

900

901

902

903 std::vector Result;

906 for (const auto &R : Rels) {

907 if (R.getType() != RelType)

908 continue;

909 auto PltEntryIter = GotToPlt.find(R.getOffset());

910 if (PltEntryIter != GotToPlt.end()) {

913 Result.push_back(

914 ELFPltEntry{PltSec, std::nullopt, PltEntryIter->second});

915 else

917 PltEntryIter->second});

918 }

919 }

920 };

921

922 if (RelaPlt)

923 handleRels(RelaPlt->relocations(), JumpSlotReloc, ".plt");

924

925

926

927 if (RelaDyn)

928 handleRels(RelaDyn->relocations(), GlobDatReloc, ".plt.got");

929

930 return Result;

931}

932

933template

935 const ELFFile &EF, std::optional TextSectionIndex,

936 std::vector *PGOAnalyses) {

937 using Elf_Shdr = typename ELFT::Shdr;

939 std::vector BBAddrMaps;

940 if (PGOAnalyses)

941 PGOAnalyses->clear();

942

944 auto IsMatch = [&](const Elf_Shdr &Sec) -> Expected {

946 return false;

947 if (!TextSectionIndex)

948 return true;

950 if (!TextSecOrErr)

951 return createError("unable to get the linked-to section for " +

954 assert(*TextSecOrErr >= Sections.begin() &&

955 "Text section pointer outside of bounds");

956 if (*TextSectionIndex !=

957 (unsigned)std::distance(Sections.begin(), *TextSecOrErr))

958 return false;

959 return true;

960 };

961

964 if (!SectionRelocMapOrErr)

965 return SectionRelocMapOrErr.takeError();

966

967 for (auto const &[Sec, RelocSec] : *SectionRelocMapOrErr) {

968 if (IsRelocatable && !RelocSec)

969 return createError("unable to get relocation section for " +

973 if (!BBAddrMapOrErr) {

974 if (PGOAnalyses)

975 PGOAnalyses->clear();

978 }

979 std::move(BBAddrMapOrErr->begin(), BBAddrMapOrErr->end(),

980 std::back_inserter(BBAddrMaps));

981 }

982 if (PGOAnalyses)

983 assert(PGOAnalyses->size() == BBAddrMaps.size() &&

984 "The same number of BBAddrMaps and PGOAnalysisMaps should be "

985 "returned when PGO information is requested");

986 return BBAddrMaps;

987}

988

989template

990static Expected<std::vector>

993 using Elf_Shdr = typename ELFT::Shdr;

994 const Elf_Shdr *VerSec = nullptr;

995 const Elf_Shdr *VerNeedSec = nullptr;

996 const Elf_Shdr *VerDefSec = nullptr;

997

1000 VerSec = &Sec;

1002 VerDefSec = &Sec;

1004 VerNeedSec = &Sec;

1005 }

1006 if (!VerSec)

1007 return std::vector();

1008

1011 if (!MapOrErr)

1013

1014 std::vector Ret;

1015 size_t I = 0;

1017 ++I;

1019 EF.template getEntry(*VerSec, I);

1020 if (!VerEntryOrErr)

1021 return createError("unable to read an entry with index " + Twine(I) +

1022 " from " + describe(EF, *VerSec) + ": " +

1024

1026 if (!FlagsOrErr)

1027 return createError("unable to read flags for symbol with index " +

1029

1030 bool IsDefault;

1032 (*VerEntryOrErr)->vs_index, IsDefault, *MapOrErr,

1034 if (!VerOrErr)

1035 return createError("unable to get a version for entry " + Twine(I) +

1036 " of " + describe(EF, *VerSec) + ": " +

1038

1039 Ret.push_back({(*VerOrErr).str(), IsDefault});

1040 }

1041

1042 return Ret;

1043}

1044

1045Expected<std::vector>

1057

1059 std::optional TextSectionIndex,

1060 std::vector *PGOAnalyses) const {

1062 return readBBAddrMapImpl(Obj->getELFFile(), TextSectionIndex, PGOAnalyses);

1064 return readBBAddrMapImpl(Obj->getELFFile(), TextSectionIndex, PGOAnalyses);

1066 return readBBAddrMapImpl(Obj->getELFFile(), TextSectionIndex, PGOAnalyses);

1068 TextSectionIndex, PGOAnalyses);

1069}

1070

1074 return Obj->getCrelDecodeProblem(Data);

1076 return Obj->getCrelDecodeProblem(Data);

1078 return Obj->getCrelDecodeProblem(Data);

1080}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")

static Expected< std::unique_ptr< ELFObjectFile< ELFT > > > createPtr(MemoryBufferRef Object, bool InitContent)

Definition ELFObjectFile.cpp:64

static Expected< std::vector< BBAddrMap > > readBBAddrMapImpl(const ELFFile< ELFT > &EF, std::optional< unsigned > TextSectionIndex, std::vector< PGOAnalysisMap > *PGOAnalyses)

Definition ELFObjectFile.cpp:934

static std::optional< std::string > hexagonAttrToFeatureString(unsigned Attr)

Definition ELFObjectFile.cpp:290

static Expected< std::vector< VersionEntry > > readDynsymVersionsImpl(const ELFFile< ELFT > &EF, ELFObjectFileBase::elf_symbol_iterator_range Symbols)

Definition ELFObjectFile.cpp:991

iterator find(const_arg_type_t< KeyT > Val)

std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)

std::optional< unsigned > getAttributeValue(unsigned tag) const override

Lightweight error class with error context and mandatory checking.

Tagged union holding either a T or a Error.

Error takeError()

Take ownership of the stored error.

Generic base class for all target subtargets.

static LLVM_ABI llvm::Expected< std::unique_ptr< RISCVISAInfo > > parseNormalizedArchString(StringRef Arch)

Parse RISC-V ISA info from an arch string that is already in normalized form (as defined in the psABI...

StringRef - Represent a constant reference to a string, i.e.

Manages the enabling and disabling of subtarget specific features.

LLVM_ABI void AddFeature(StringRef String, bool Enable=true)

Adds Features.

LLVM_ABI void addFeaturesVector(const ArrayRef< std::string > OtherFeatures)

Triple - Helper class for working with autoconf configuration names.

LLVM_ABI void setArchName(StringRef Str)

Set the architecture (first) component of the triple by name.

bool isThumb() const

Tests whether the target is Thumb (little and big endian).

SubArchType getSubArch() const

get the parsed subarchitecture type for this triple.

ArchType getArch() const

Get the parsed architecture type of this triple.

Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...

The instances of the Type class are immutable: once they are created, they are never changed.

A range adaptor for a pair of iterators.

DataRefImpl getRawDataRefImpl() const

bool isLittleEndian() const

const Elf_Ehdr & getHeader() const

Expected< std::vector< BBAddrMap > > decodeBBAddrMap(const Elf_Shdr &Sec, const Elf_Shdr *RelaSec=nullptr, std::vector< PGOAnalysisMap > *PGOAnalyses=nullptr) const

Returns a vector of BBAddrMap structs corresponding to each function within the text section that the...

Expected< StringRef > getSymbolVersionByIndex(uint32_t SymbolVersionIndex, bool &IsDefault, SmallVector< std::optional< VersionEntry >, 0 > &VersionMap, std::optional< bool > IsSymHidden) const

Expected< Elf_Shdr_Range > sections() const

Expected< MapVector< const Elf_Shdr *, const Elf_Shdr * > > getSectionAndRelocations(std::function< Expected< bool >(const Elf_Shdr &)> IsMatch) const

Returns a map from every section matching IsMatch to its relocation section, or nullptr if it has no ...

Expected< SmallVector< std::optional< VersionEntry >, 0 > > loadVersionMap(const Elf_Shdr *VerNeedSec, const Elf_Shdr *VerDefSec) const

Expected< const Elf_Shdr * > getSection(const Elf_Sym &Sym, const Elf_Shdr *SymTab, DataRegion< Elf_Word > ShndxTable) const

virtual uint8_t getEIdentABIVersion() const =0

virtual Error getBuildAttributes(ELFAttributeParser &Attributes) const =0

std::vector< ELFPltEntry > getPltEntries(const MCSubtargetInfo &STI) const

Definition ELFObjectFile.cpp:817

Expected< std::vector< VersionEntry > > readDynsymVersions() const

Returns a vector containing a symbol version for each dynamic symbol.

Definition ELFObjectFile.cpp:1046

virtual elf_symbol_iterator_range getDynamicSymbolIterators() const =0

StringRef getCrelDecodeProblem(SectionRef Sec) const

Definition ELFObjectFile.cpp:1071

Expected< SubtargetFeatures > getFeatures() const override

Definition ELFObjectFile.cpp:423

std::optional< StringRef > tryGetCPUName() const override

Definition ELFObjectFile.cpp:440

iterator_range< elf_symbol_iterator > elf_symbol_iterator_range

virtual uint16_t getEMachine() const =0

virtual unsigned getPlatformFlags() const =0

Returns platform-specific object flags, if any.

ELFObjectFileBase(unsigned int Type, MemoryBufferRef Source)

Definition ELFObjectFile.cpp:59

void setARMSubArch(Triple &TheTriple) const override

Definition ELFObjectFile.cpp:723

Expected< std::vector< BBAddrMap > > readBBAddrMap(std::optional< unsigned > TextSectionIndex=std::nullopt, std::vector< PGOAnalysisMap > *PGOAnalyses=nullptr) const

Returns a vector of all BB address maps in the object file.

Definition ELFObjectFile.cpp:1058

static Expected< ELFObjectFile< ELFT > > create(MemoryBufferRef Object, bool InitContent=true)

static Expected< std::unique_ptr< ObjectFile > > createELFObjectFile(MemoryBufferRef Object, bool InitContent=true)

Definition ELFObjectFile.cpp:72

Triple makeTriple() const

Create a triple from the data in this object file.

section_iterator_range sections() const

ObjectFile(unsigned int Type, MemoryBufferRef Source)

DataRefImpl getRawDataRefImpl() const

virtual basic_symbol_iterator symbol_end() const =0

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

@ AllowMVEIntegerAndFloat

@ EF_LOONGARCH_ABI_SINGLE_FLOAT

@ EF_LOONGARCH_ABI_DOUBLE_FLOAT

@ EF_LOONGARCH_ABI_SOFT_FLOAT

@ EF_LOONGARCH_ABI_MODIFIER_MASK

@ EF_CUDA_ACCELERATORS_V1

@ EF_AMDGPU_MACH_AMDGCN_GFX703

@ EF_AMDGPU_MACH_AMDGCN_GFX1035

@ EF_AMDGPU_MACH_AMDGCN_GFX1031

@ EF_AMDGPU_MACH_R600_CAYMAN

@ EF_AMDGPU_MACH_AMDGCN_GFX704

@ EF_AMDGPU_MACH_AMDGCN_GFX902

@ EF_AMDGPU_MACH_AMDGCN_GFX810

@ EF_AMDGPU_MACH_AMDGCN_GFX950

@ EF_AMDGPU_MACH_AMDGCN_GFX1036

@ EF_AMDGPU_MACH_AMDGCN_GFX1102

@ EF_AMDGPU_MACH_R600_RV730

@ EF_AMDGPU_MACH_R600_RV710

@ EF_AMDGPU_MACH_AMDGCN_GFX908

@ EF_AMDGPU_MACH_AMDGCN_GFX1011

@ EF_AMDGPU_MACH_R600_CYPRESS

@ EF_AMDGPU_MACH_AMDGCN_GFX1032

@ EF_AMDGPU_MACH_R600_R600

@ EF_AMDGPU_MACH_AMDGCN_GFX1250

@ EF_AMDGPU_MACH_R600_TURKS

@ EF_AMDGPU_MACH_R600_JUNIPER

@ EF_AMDGPU_MACH_AMDGCN_GFX601

@ EF_AMDGPU_MACH_AMDGCN_GFX942

@ EF_AMDGPU_MACH_AMDGCN_GFX1152

@ EF_AMDGPU_MACH_R600_R630

@ EF_AMDGPU_MACH_R600_REDWOOD

@ EF_AMDGPU_MACH_R600_RV770

@ EF_AMDGPU_MACH_AMDGCN_GFX600

@ EF_AMDGPU_MACH_AMDGCN_GFX602

@ EF_AMDGPU_MACH_AMDGCN_GFX1101

@ EF_AMDGPU_MACH_AMDGCN_GFX1100

@ EF_AMDGPU_MACH_AMDGCN_GFX1033

@ EF_AMDGPU_MACH_AMDGCN_GFX801

@ EF_AMDGPU_MACH_AMDGCN_GFX705

@ EF_AMDGPU_MACH_AMDGCN_GFX9_4_GENERIC

@ EF_AMDGPU_MACH_AMDGCN_GFX1153

@ EF_AMDGPU_MACH_AMDGCN_GFX1010

@ EF_AMDGPU_MACH_R600_RV670

@ EF_AMDGPU_MACH_AMDGCN_GFX701

@ EF_AMDGPU_MACH_AMDGCN_GFX10_3_GENERIC

@ EF_AMDGPU_MACH_AMDGCN_GFX1012

@ EF_AMDGPU_MACH_AMDGCN_GFX1151

@ EF_AMDGPU_MACH_AMDGCN_GFX1030

@ EF_AMDGPU_MACH_R600_CEDAR

@ EF_AMDGPU_MACH_AMDGCN_GFX1200

@ EF_AMDGPU_MACH_AMDGCN_GFX700

@ EF_AMDGPU_MACH_AMDGCN_GFX11_GENERIC

@ EF_AMDGPU_MACH_AMDGCN_GFX803

@ EF_AMDGPU_MACH_AMDGCN_GFX802

@ EF_AMDGPU_MACH_AMDGCN_GFX90C

@ EF_AMDGPU_MACH_AMDGCN_GFX900

@ EF_AMDGPU_MACH_AMDGCN_GFX909

@ EF_AMDGPU_MACH_AMDGCN_GFX906

@ EF_AMDGPU_MACH_AMDGCN_GFX9_GENERIC

@ EF_AMDGPU_MACH_AMDGCN_GFX1103

@ EF_AMDGPU_MACH_R600_CAICOS

@ EF_AMDGPU_MACH_AMDGCN_GFX90A

@ EF_AMDGPU_MACH_AMDGCN_GFX1034

@ EF_AMDGPU_MACH_AMDGCN_GFX1013

@ EF_AMDGPU_MACH_AMDGCN_GFX12_GENERIC

@ EF_AMDGPU_MACH_AMDGCN_GFX10_1_GENERIC

@ EF_AMDGPU_MACH_AMDGCN_GFX904

@ EF_AMDGPU_MACH_AMDGCN_GFX1251

@ EF_AMDGPU_MACH_R600_RS880

@ EF_AMDGPU_MACH_AMDGCN_GFX805

@ EF_AMDGPU_MACH_AMDGCN_GFX1201

@ EF_AMDGPU_MACH_AMDGCN_GFX1150

@ EF_AMDGPU_MACH_R600_SUMO

@ EF_AMDGPU_MACH_R600_BARTS

@ EF_AMDGPU_MACH_AMDGCN_GFX702

Error createError(const Twine &Err)

constexpr int NumElfSymbolTypes

static std::string describe(const ELFFile< ELFT > &Obj, const typename ELFT::Shdr &Sec)

std::pair< unsigned char, unsigned char > getElfArchType(StringRef Object)

LLVM_ABI const llvm::EnumEntry< unsigned > ElfSymbolTypes[NumElfSymbolTypes]

Definition ELFObjectFile.cpp:40

This is an optimization pass for GlobalISel generic memory operations.

ArrayRef< CharT > arrayRefFromStringRef(StringRef Input)

Construct a string ref from an array ref of unsigned chars.

decltype(auto) dyn_cast(const From &Val)

dyn_cast - Return the argument parameter cast to the specified type.

void append_range(Container &C, Range &&R)

Wrapper function to append range R to container C.

int countr_zero(T Val)

Count number of 0's from the least significant bit to the most stopping at the first 1.

void cantFail(Error Err, const char *Msg=nullptr)

Report a fatal error if Err is a failure value.

std::string toString(const APInt &I, unsigned Radix, bool Signed, bool formatAsCLiteral=false, bool UpperCase=true, bool InsertSeparators=false)

decltype(auto) cast(const From &Val)

cast - Return the argument parameter cast to the specified type.

void consumeError(Error Err)

Consume a Error without doing anything.

static const Target * lookupTarget(StringRef TripleStr, std::string &Error)

lookupTarget - Lookup a target based on a target triple.