Importing rustc-1.78.0
Bug: 333887339
Test: ./build.py --lto=thin
Change-Id: I70466db5e03cbd71cc5874ebae0a6d6c9fece91c
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp b/src/llvm-project/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
index ef77d4b..b77839c 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
@@ -171,6 +171,7 @@
{0xff, 0xe8, 1, &Decoder::opcode_trap_frame},
{0xff, 0xe9, 1, &Decoder::opcode_machine_frame},
{0xff, 0xea, 1, &Decoder::opcode_context},
+ {0xff, 0xeb, 1, &Decoder::opcode_ec_context},
{0xff, 0xec, 1, &Decoder::opcode_clear_unwound_to_call},
{0xff, 0xfc, 1, &Decoder::opcode_pac_sign_lr},
};
@@ -969,6 +970,13 @@
return false;
}
+bool Decoder::opcode_ec_context(const uint8_t *OC, unsigned &Offset,
+ unsigned Length, bool Prologue) {
+ SW.startLine() << format("0x%02x ; EC context\n", OC[Offset]);
+ ++Offset;
+ return false;
+}
+
bool Decoder::opcode_clear_unwound_to_call(const uint8_t *OC, unsigned &Offset,
unsigned Length, bool Prologue) {
SW.startLine() << format("0x%02x ; clear unwound to call\n",
@@ -1468,7 +1476,7 @@
if (!NameOrErr)
return NameOrErr.takeError();
- if (NameOrErr->startswith(".pdata"))
+ if (NameOrErr->starts_with(".pdata"))
dumpProcedureData(COFF, Section);
}
return Error::success();
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/ARMWinEHPrinter.h b/src/llvm-project/llvm/tools/llvm-readobj/ARMWinEHPrinter.h
index 0ffebe5..fa5b31d 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/ARMWinEHPrinter.h
+++ b/src/llvm-project/llvm/tools/llvm-readobj/ARMWinEHPrinter.h
@@ -129,6 +129,8 @@
unsigned Length, bool Prologue);
bool opcode_context(const uint8_t *Opcodes, unsigned &Offset, unsigned Length,
bool Prologue);
+ bool opcode_ec_context(const uint8_t *Opcodes, unsigned &Offset,
+ unsigned Length, bool Prologue);
bool opcode_clear_unwound_to_call(const uint8_t *Opcodes, unsigned &Offset,
unsigned Length, bool Prologue);
bool opcode_pac_sign_lr(const uint8_t *Opcodes, unsigned &Offset,
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/COFFDumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/COFFDumper.cpp
index 79fef8b..32b1d6a2 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -110,7 +110,7 @@
private:
StringRef getSymbolName(uint32_t Index);
- void printSymbols() override;
+ void printSymbols(bool ExtraSymInfo) override;
void printDynamicSymbols() override;
void printSymbol(const SymbolRef &Sym);
void printRelocation(const SectionRef &Section, const RelocationRef &Reloc,
@@ -854,17 +854,17 @@
reportError(std::move(E), Obj->getFileName());
auto CodeMap = reinterpret_cast<const chpe_range_entry *>(CodeMapInt);
for (uint32_t i = 0; i < CHPE->CodeMapCount; i++) {
- uint32_t Start = CodeMap[i].StartOffset & ~3;
+ uint32_t Start = CodeMap[i].getStart();
W.startLine() << W.hex(Start) << " - "
<< W.hex(Start + CodeMap[i].Length) << " ";
- switch (CodeMap[i].StartOffset & 3) {
- case CHPE_RANGE_ARM64:
+ switch (CodeMap[i].getType()) {
+ case chpe_range_type::Arm64:
W.getOStream() << "ARM64\n";
break;
- case CHPE_RANGE_ARM64EC:
+ case chpe_range_type::Arm64EC:
W.getOStream() << "ARM64EC\n";
break;
- case CHPE_RANGE_AMD64:
+ case chpe_range_type::Amd64:
W.getOStream() << "X64\n";
break;
default:
@@ -1106,7 +1106,7 @@
if (Error E = Reader.readFixedString(Contents, SubSectionSize))
reportError(std::move(E), Obj->getFileName());
- BinaryStreamRef ST(Contents, support::little);
+ BinaryStreamRef ST(Contents, llvm::endianness::little);
switch (DebugSubsectionKind(SubType)) {
case DebugSubsectionKind::FileChecksums:
if (Error E = CVFileChecksumTable.initialize(ST))
@@ -1148,7 +1148,7 @@
reportError(errorCodeToError(object_error::parse_failed),
Obj->getFileName());
- BinaryStreamReader FSReader(Data, support::little);
+ BinaryStreamReader FSReader(Data, llvm::endianness::little);
initializeFileAndStringTables(FSReader);
// TODO: Convert this over to using ModuleSubstreamVisitor.
@@ -1237,7 +1237,7 @@
}
case DebugSubsectionKind::FrameData: {
// First four bytes is a relocation against the function.
- BinaryStreamReader SR(Contents, llvm::support::little);
+ BinaryStreamReader SR(Contents, llvm::endianness::little);
DebugFrameDataSubsectionRef FrameData;
if (Error E = FrameData.initialize(SR))
@@ -1302,7 +1302,8 @@
ListScope S(W, "FunctionLineTable");
W.printString("LinkageName", Name);
- BinaryStreamReader Reader(FunctionLineTables[Name], support::little);
+ BinaryStreamReader Reader(FunctionLineTables[Name],
+ llvm::endianness::little);
DebugLinesSubsectionRef LineInfo;
if (Error E = LineInfo.initialize(Reader))
@@ -1354,7 +1355,7 @@
CVSymbolDumper CVSD(W, Types, CodeViewContainer::ObjectFile, std::move(CODD),
CompilationCPUType, opts::CodeViewSubsectionBytes);
CVSymbolArray Symbols;
- BinaryStreamReader Reader(BinaryData, llvm::support::little);
+ BinaryStreamReader Reader(BinaryData, llvm::endianness::little);
if (Error E = Reader.readArray(Symbols, Reader.getLength())) {
W.flush();
reportError(std::move(E), Obj->getFileName());
@@ -1369,7 +1370,7 @@
}
void COFFDumper::printCodeViewFileChecksums(StringRef Subsection) {
- BinaryStreamRef Stream(Subsection, llvm::support::little);
+ BinaryStreamRef Stream(Subsection, llvm::endianness::little);
DebugChecksumsSubsectionRef Checksums;
if (Error E = Checksums.initialize(Stream))
reportError(std::move(E), Obj->getFileName());
@@ -1389,7 +1390,7 @@
}
void COFFDumper::printCodeViewInlineeLines(StringRef Subsection) {
- BinaryStreamReader SR(Subsection, llvm::support::little);
+ BinaryStreamReader SR(Subsection, llvm::endianness::little);
DebugInlineeLinesSubsectionRef Lines;
if (Error E = Lines.initialize(SR))
reportError(std::move(E), Obj->getFileName());
@@ -1449,7 +1450,7 @@
Obj->getFileName());
CVTypeArray Types;
- BinaryStreamReader Reader(Data, llvm::support::little);
+ BinaryStreamReader Reader(Data, llvm::endianness::little);
if (auto EC = Reader.readArray(Types, Reader.getLength())) {
consumeError(std::move(EC));
W.flush();
@@ -1609,7 +1610,7 @@
}
}
-void COFFDumper::printSymbols() {
+void COFFDumper::printSymbols(bool /*ExtraSymInfo*/) {
ListScope Group(W, "Symbols");
for (const SymbolRef &Symbol : Obj->symbols())
@@ -1945,7 +1946,7 @@
ListScope ResourcesD(W, "Resources");
for (const SectionRef &S : Obj->sections()) {
StringRef Name = unwrapOrError(Obj->getFileName(), S.getName());
- if (!Name.startswith(".rsrc"))
+ if (!Name.starts_with(".rsrc"))
continue;
StringRef Ref = unwrapOrError(Obj->getFileName(), S.getContents());
@@ -2091,10 +2092,10 @@
if (Obj->isLittleEndian())
prettyPrintStackMap(
- W, StackMapParser<support::little>(StackMapContentsArray));
+ W, StackMapParser<llvm::endianness::little>(StackMapContentsArray));
else
prettyPrintStackMap(
- W, StackMapParser<support::big>(StackMapContentsArray));
+ W, StackMapParser<llvm::endianness::big>(StackMapContentsArray));
}
void COFFDumper::printAddrsig() {
@@ -2125,7 +2126,7 @@
const uint8_t *End = AddrsigContents.bytes_end();
while (Cur != End) {
unsigned Size;
- const char *Err;
+ const char *Err = nullptr;
uint64_t SymIndex = decodeULEB128(Cur, &Size, End, &Err);
if (Err)
reportError(createError(Err), Obj->getFileName());
@@ -2150,7 +2151,7 @@
StringRef CGProfileContents =
unwrapOrError(Obj->getFileName(), CGProfileSection.getContents());
- BinaryStreamReader Reader(CGProfileContents, llvm::support::little);
+ BinaryStreamReader Reader(CGProfileContents, llvm::endianness::little);
ListScope L(W, "CGProfile");
while (!Reader.empty()) {
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/COFFImportDumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/COFFImportDumper.cpp
index c9d5e82..0ab2a17 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/COFFImportDumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/COFFImportDumper.cpp
@@ -23,7 +23,7 @@
void dumpCOFFImportFile(const COFFImportFile *File, ScopedPrinter &Writer) {
Writer.startLine() << '\n';
Writer.printString("File", File->getFileName());
- Writer.printString("Format", "COFF-import-file");
+ Writer.printString("Format", File->getFileFormatName());
const coff_import_header *H = File->getCOFFImportHeader();
switch (H->getType()) {
@@ -45,8 +45,14 @@
case COFF::IMPORT_NAME_UNDECORATE:
Writer.printString("Name type", "undecorate");
break;
+ case COFF::IMPORT_NAME_EXPORTAS:
+ Writer.printString("Name type", "export as");
+ break;
}
+ if (H->getNameType() != COFF::IMPORT_ORDINAL)
+ Writer.printString("Export name", File->getExportName());
+
for (const object::BasicSymbolRef &Sym : File->symbols()) {
raw_ostream &OS = Writer.startLine();
OS << "Symbol: ";
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h b/src/llvm-project/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
index 365a598..687d97a 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
+++ b/src/llvm-project/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
@@ -113,8 +113,7 @@
if (!Content)
reportError(Content.takeError(), ObjF.getFileName());
- DataExtractor DE(*Content,
- ELFT::TargetEndianness == support::endianness::little,
+ DataExtractor DE(*Content, ELFT::TargetEndianness == llvm::endianness::little,
ELFT::Is64Bits ? 8 : 4);
DictScope D(W, "Header");
@@ -189,7 +188,7 @@
ObjF, DWARFContext::ProcessDebugRelocations::Process, nullptr);
DWARFDataExtractor DE(DICtx->getDWARFObj(),
DICtx->getDWARFObj().getEHFrameSection(),
- ELFT::TargetEndianness == support::endianness::little,
+ ELFT::TargetEndianness == llvm::endianness::little,
ELFT::Is64Bits ? 8 : 4);
DWARFDebugFrame EHFrame(Triple::ArchType(ObjF.getArch()), /*IsEH=*/true,
/*EHFrameAddress=*/Address);
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/ELFDumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/ELFDumper.cpp
index bc8e041..387124a 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -21,7 +21,6 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/MapVector.h"
-#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
@@ -58,6 +57,7 @@
#include "llvm/Support/RISCVAttributeParser.h"
#include "llvm/Support/RISCVAttributes.h"
#include "llvm/Support/ScopedPrinter.h"
+#include "llvm/Support/SystemZ/zOSSupport.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cinttypes>
@@ -298,11 +298,13 @@
llvm::function_ref<void(const Elf_Relr &)> RelrFn);
virtual void printSymtabMessage(const Elf_Shdr *Symtab, size_t Offset,
- bool NonVisibilityBitsUsed) const {};
+ bool NonVisibilityBitsUsed,
+ bool ExtraSymInfo) const {};
virtual void printSymbol(const Elf_Sym &Symbol, unsigned SymIndex,
DataRegion<Elf_Word> ShndxTable,
std::optional<StringRef> StrTable, bool IsDynamic,
- bool NonVisibilityBitsUsed) const = 0;
+ bool NonVisibilityBitsUsed,
+ bool ExtraSymInfo) const = 0;
virtual void printMipsABIFlags() = 0;
virtual void printMipsGOT(const MipsGOTParser<ELFT> &Parser) = 0;
@@ -361,7 +363,7 @@
}
void printAttributes(unsigned, std::unique_ptr<ELFAttributeParser>,
- support::endianness);
+ llvm::endianness);
void printMipsReginfo();
void printMipsOptions();
@@ -406,7 +408,7 @@
std::string getStaticSymbolName(uint32_t Index) const;
StringRef getDynamicString(uint64_t Value) const;
- void printSymbolsHelper(bool IsDynamic) const;
+ void printSymbolsHelper(bool IsDynamic, bool ExtraSymInfo) const;
std::string getDynamicEntry(uint64_t Type, uint64_t Value) const;
Expected<RelSymbol<ELFT>> getRelocationTarget(const Relocation<ELFT> &R,
@@ -508,7 +510,8 @@
}
template <class ELFT>
-void ELFDumper<ELFT>::printSymbolsHelper(bool IsDynamic) const {
+void ELFDumper<ELFT>::printSymbolsHelper(bool IsDynamic,
+ bool ExtraSymInfo) const {
std::optional<StringRef> StrTable;
size_t Entries = 0;
Elf_Sym_Range Syms(nullptr, nullptr);
@@ -549,10 +552,10 @@
this->getElfObject().getELFFile().end())
: DataRegion<Elf_Word>(this->getShndxTable(SymtabSec));
- printSymtabMessage(SymtabSec, Entries, NonVisibilityBitsUsed);
+ printSymtabMessage(SymtabSec, Entries, NonVisibilityBitsUsed, ExtraSymInfo);
for (const Elf_Sym &Sym : Syms)
printSymbol(Sym, &Sym - Syms.begin(), ShndxTable, StrTable, IsDynamic,
- NonVisibilityBitsUsed);
+ NonVisibilityBitsUsed, ExtraSymInfo);
}
template <typename ELFT> class GNUELFDumper : public ELFDumper<ELFT> {
@@ -574,14 +577,16 @@
void printGroupSections() override;
void printRelocations() override;
void printSectionHeaders() override;
- void printSymbols(bool PrintSymbols, bool PrintDynamicSymbols) override;
+ void printSymbols(bool PrintSymbols, bool PrintDynamicSymbols,
+ bool ExtraSymInfo) override;
void printHashSymbols() override;
void printSectionDetails() override;
void printDependentLibs() override;
void printDynamicTable() override;
void printDynamicRelocations() override;
void printSymtabMessage(const Elf_Shdr *Symtab, size_t Offset,
- bool NonVisibilityBitsUsed) const override;
+ bool NonVisibilityBitsUsed,
+ bool ExtraSymInfo) const override;
void printProgramHeaders(bool PrintProgramHeaders,
cl::boolOrDefault PrintSectionMapping) override;
void printVersionSymbolSection(const Elf_Shdr *Sec) override;
@@ -656,12 +661,14 @@
void printSymbol(const Elf_Sym &Symbol, unsigned SymIndex,
DataRegion<Elf_Word> ShndxTable,
std::optional<StringRef> StrTable, bool IsDynamic,
- bool NonVisibilityBitsUsed) const override;
+ bool NonVisibilityBitsUsed,
+ bool ExtraSymInfo) const override;
void printDynamicRelocHeader(unsigned Type, StringRef Name,
const DynRegionInfo &Reg) override;
std::string getSymbolSectionNdx(const Elf_Sym &Symbol, unsigned SymIndex,
- DataRegion<Elf_Word> ShndxTable) const;
+ DataRegion<Elf_Word> ShndxTable,
+ bool ExtraSymInfo = false) const;
void printProgramHeaders() override;
void printSectionMapping() override;
void printGNUVersionSectionProlog(const typename ELFT::Shdr &Sec,
@@ -686,7 +693,8 @@
void printGroupSections() override;
void printRelocations() override;
void printSectionHeaders() override;
- void printSymbols(bool PrintSymbols, bool PrintDynamicSymbols) override;
+ void printSymbols(bool PrintSymbols, bool PrintDynamicSymbols,
+ bool ExtraSymInfo) override;
void printDependentLibs() override;
void printDynamicTable() override;
void printDynamicRelocations() override;
@@ -719,7 +727,8 @@
void printSymbol(const Elf_Sym &Symbol, unsigned SymIndex,
DataRegion<Elf_Word> ShndxTable,
std::optional<StringRef> StrTable, bool IsDynamic,
- bool /*NonVisibilityBitsUsed*/) const override;
+ bool /*NonVisibilityBitsUsed*/,
+ bool /*ExtraSymInfo*/) const override;
void printProgramHeaders() override;
void printSectionMapping() override {}
void printStackSizeEntry(uint64_t Size,
@@ -1075,6 +1084,7 @@
{"AROS", "AROS", ELF::ELFOSABI_AROS},
{"FenixOS", "FenixOS", ELF::ELFOSABI_FENIXOS},
{"CloudABI", "CloudABI", ELF::ELFOSABI_CLOUDABI},
+ {"CUDA", "NVIDIA - CUDA", ELF::ELFOSABI_CUDA},
{"Standalone", "Standalone App", ELF::ELFOSABI_STANDALONE}
};
@@ -1467,6 +1477,8 @@
LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_MUTABLE);
LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_RANDOMIZE);
LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_WXNEEDED);
+ LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_NOBTCFI);
+ LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_SYSCALLS);
LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_BOOTDATA);
default:
return "";
@@ -1491,7 +1503,7 @@
return Seg.str();
// E.g. "PT_LOAD" -> "LOAD".
- assert(Seg.startswith("PT_"));
+ assert(Seg.starts_with("PT_"));
return Seg.drop_front(3).str();
}
@@ -1548,135 +1560,152 @@
};
const EnumEntry<unsigned> ElfHeaderAMDGPUFlagsABIVersion3[] = {
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_NONE),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_R600),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_R630),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RS880),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV670),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV710),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV730),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV770),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CEDAR),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CYPRESS),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_JUNIPER),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_REDWOOD),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_SUMO),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_BARTS),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CAICOS),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CAYMAN),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_TURKS),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX600),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX601),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX602),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX700),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX701),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX702),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX703),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX704),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX705),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX801),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX802),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX803),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX805),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX810),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX900),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX902),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX904),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX906),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX908),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX909),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX90A),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX90C),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX940),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX941),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX942),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1010),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1011),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1012),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1013),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1030),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1031),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1032),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1033),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1034),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1035),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1036),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1100),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1101),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1102),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1103),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1150),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1151),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_XNACK_V3),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_SRAMECC_V3)
+ ENUM_ENT(EF_AMDGPU_MACH_NONE, "none"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_R600, "r600"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_R630, "r630"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RS880, "rs880"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RV670, "rv670"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RV710, "rv710"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RV730, "rv730"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RV770, "rv770"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_CEDAR, "cedar"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_CYPRESS, "cypress"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_JUNIPER, "juniper"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_REDWOOD, "redwood"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_SUMO, "sumo"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_BARTS, "barts"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_CAICOS, "caicos"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_CAYMAN, "cayman"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_TURKS, "turks"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX600, "gfx600"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX601, "gfx601"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX602, "gfx602"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX700, "gfx700"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX701, "gfx701"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX702, "gfx702"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX703, "gfx703"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX704, "gfx704"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX705, "gfx705"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX801, "gfx801"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX802, "gfx802"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX803, "gfx803"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX805, "gfx805"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX810, "gfx810"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX900, "gfx900"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX902, "gfx902"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX904, "gfx904"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX906, "gfx906"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX908, "gfx908"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX909, "gfx909"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX90A, "gfx90a"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX90C, "gfx90c"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX940, "gfx940"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX941, "gfx941"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX942, "gfx942"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1010, "gfx1010"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1011, "gfx1011"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1012, "gfx1012"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1013, "gfx1013"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1030, "gfx1030"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1031, "gfx1031"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1032, "gfx1032"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1033, "gfx1033"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1034, "gfx1034"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1035, "gfx1035"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1036, "gfx1036"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1100, "gfx1100"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1101, "gfx1101"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1102, "gfx1102"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1103, "gfx1103"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1150, "gfx1150"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1151, "gfx1151"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1200, "gfx1200"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1201, "gfx1201"),
+ ENUM_ENT(EF_AMDGPU_FEATURE_XNACK_V3, "xnack"),
+ ENUM_ENT(EF_AMDGPU_FEATURE_SRAMECC_V3, "sramecc"),
};
const EnumEntry<unsigned> ElfHeaderAMDGPUFlagsABIVersion4[] = {
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_NONE),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_R600),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_R630),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RS880),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV670),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV710),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV730),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV770),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CEDAR),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CYPRESS),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_JUNIPER),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_REDWOOD),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_SUMO),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_BARTS),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CAICOS),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CAYMAN),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_TURKS),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX600),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX601),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX602),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX700),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX701),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX702),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX703),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX704),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX705),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX801),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX802),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX803),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX805),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX810),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX900),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX902),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX904),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX906),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX908),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX909),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX90A),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX90C),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX940),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX941),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX942),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1010),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1011),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1012),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1013),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1030),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1031),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1032),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1033),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1034),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1035),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1036),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1100),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1101),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1102),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1103),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1150),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1151),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_XNACK_ANY_V4),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_XNACK_OFF_V4),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_XNACK_ON_V4),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_SRAMECC_ANY_V4),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_SRAMECC_OFF_V4),
- LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_SRAMECC_ON_V4)
+ ENUM_ENT(EF_AMDGPU_MACH_NONE, "none"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_R600, "r600"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_R630, "r630"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RS880, "rs880"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RV670, "rv670"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RV710, "rv710"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RV730, "rv730"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_RV770, "rv770"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_CEDAR, "cedar"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_CYPRESS, "cypress"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_JUNIPER, "juniper"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_REDWOOD, "redwood"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_SUMO, "sumo"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_BARTS, "barts"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_CAICOS, "caicos"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_CAYMAN, "cayman"),
+ ENUM_ENT(EF_AMDGPU_MACH_R600_TURKS, "turks"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX600, "gfx600"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX601, "gfx601"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX602, "gfx602"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX700, "gfx700"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX701, "gfx701"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX702, "gfx702"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX703, "gfx703"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX704, "gfx704"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX705, "gfx705"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX801, "gfx801"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX802, "gfx802"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX803, "gfx803"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX805, "gfx805"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX810, "gfx810"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX900, "gfx900"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX902, "gfx902"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX904, "gfx904"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX906, "gfx906"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX908, "gfx908"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX909, "gfx909"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX90A, "gfx90a"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX90C, "gfx90c"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX940, "gfx940"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX941, "gfx941"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX942, "gfx942"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1010, "gfx1010"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1011, "gfx1011"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1012, "gfx1012"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1013, "gfx1013"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1030, "gfx1030"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1031, "gfx1031"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1032, "gfx1032"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1033, "gfx1033"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1034, "gfx1034"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1035, "gfx1035"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1036, "gfx1036"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1100, "gfx1100"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1101, "gfx1101"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1102, "gfx1102"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1103, "gfx1103"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1150, "gfx1150"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1151, "gfx1151"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1200, "gfx1200"),
+ ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX1201, "gfx1201"),
+ ENUM_ENT(EF_AMDGPU_FEATURE_XNACK_ANY_V4, "xnack"),
+ ENUM_ENT(EF_AMDGPU_FEATURE_XNACK_OFF_V4, "xnack-"),
+ ENUM_ENT(EF_AMDGPU_FEATURE_XNACK_ON_V4, "xnack+"),
+ ENUM_ENT(EF_AMDGPU_FEATURE_SRAMECC_ANY_V4, "sramecc"),
+ ENUM_ENT(EF_AMDGPU_FEATURE_SRAMECC_OFF_V4, "sramecc-"),
+ ENUM_ENT(EF_AMDGPU_FEATURE_SRAMECC_ON_V4, "sramecc+"),
+};
+
+const EnumEntry<unsigned> ElfHeaderNVPTXFlags[] = {
+ ENUM_ENT(EF_CUDA_SM20, "sm_20"), ENUM_ENT(EF_CUDA_SM21, "sm_21"),
+ ENUM_ENT(EF_CUDA_SM30, "sm_30"), ENUM_ENT(EF_CUDA_SM32, "sm_32"),
+ ENUM_ENT(EF_CUDA_SM35, "sm_35"), ENUM_ENT(EF_CUDA_SM37, "sm_37"),
+ ENUM_ENT(EF_CUDA_SM50, "sm_50"), ENUM_ENT(EF_CUDA_SM52, "sm_52"),
+ ENUM_ENT(EF_CUDA_SM53, "sm_53"), ENUM_ENT(EF_CUDA_SM60, "sm_60"),
+ ENUM_ENT(EF_CUDA_SM61, "sm_61"), ENUM_ENT(EF_CUDA_SM62, "sm_62"),
+ ENUM_ENT(EF_CUDA_SM70, "sm_70"), ENUM_ENT(EF_CUDA_SM72, "sm_72"),
+ ENUM_ENT(EF_CUDA_SM75, "sm_75"), ENUM_ENT(EF_CUDA_SM80, "sm_80"),
+ ENUM_ENT(EF_CUDA_SM86, "sm_86"), ENUM_ENT(EF_CUDA_SM87, "sm_87"),
+ ENUM_ENT(EF_CUDA_SM89, "sm_89"), ENUM_ENT(EF_CUDA_SM90, "sm_90"),
};
const EnumEntry<unsigned> ElfHeaderRISCVFlags[] = {
@@ -2014,6 +2043,18 @@
uint64_t StringTableSize = 0;
std::optional<DynRegionInfo> DynSymFromTable;
for (const Elf_Dyn &Dyn : dynamic_table()) {
+ if (Obj.getHeader().e_machine == EM_AARCH64) {
+ switch (Dyn.d_tag) {
+ case ELF::DT_AARCH64_AUTH_RELRSZ:
+ DynRelrRegion.Size = Dyn.getVal();
+ DynRelrRegion.SizePrintName = "DT_AARCH64_AUTH_RELRSZ value";
+ continue;
+ case ELF::DT_AARCH64_AUTH_RELRENT:
+ DynRelrRegion.EntSize = Dyn.getVal();
+ DynRelrRegion.EntSizePrintName = "DT_AARCH64_AUTH_RELRENT value";
+ continue;
+ }
+ }
switch (Dyn.d_tag) {
case ELF::DT_HASH:
HashTable = reinterpret_cast<const Elf_Hash *>(
@@ -2077,10 +2118,12 @@
break;
case ELF::DT_RELR:
case ELF::DT_ANDROID_RELR:
+ case ELF::DT_AARCH64_AUTH_RELR:
DynRelrRegion.Addr = toMappedAddr(Dyn.getTag(), Dyn.getPtr());
break;
case ELF::DT_RELRSZ:
case ELF::DT_ANDROID_RELRSZ:
+ case ELF::DT_AARCH64_AUTH_RELRSZ:
DynRelrRegion.Size = Dyn.getVal();
DynRelrRegion.SizePrintName = Dyn.d_tag == ELF::DT_RELRSZ
? "DT_RELRSZ value"
@@ -2088,6 +2131,7 @@
break;
case ELF::DT_RELRENT:
case ELF::DT_ANDROID_RELRENT:
+ case ELF::DT_AARCH64_AUTH_RELRENT:
DynRelrRegion.EntSize = Dyn.getVal();
DynRelrRegion.EntSizePrintName = Dyn.d_tag == ELF::DT_RELRENT
? "DT_RELRENT value"
@@ -2454,6 +2498,8 @@
case DT_PREINIT_ARRAYSZ:
case DT_RELRSZ:
case DT_RELRENT:
+ case DT_AARCH64_AUTH_RELRSZ:
+ case DT_AARCH64_AUTH_RELRENT:
case DT_ANDROID_RELSZ:
case DT_ANDROID_RELASZ:
return std::to_string(Value) + " (bytes)";
@@ -2551,7 +2597,7 @@
llvm::sort(Libs);
for (StringRef L : Libs)
- W.startLine() << L << "\n";
+ W.printString(L);
}
template <class ELFT>
@@ -2741,7 +2787,7 @@
return;
std::vector<size_t> ChainLen(NBucket, 0);
- // Go over all buckets and and note chain lengths of each bucket (total
+ // Go over all buckets and note chain lengths of each bucket (total
// unique chain lengths).
for (size_t B = 0; B < NBucket; ++B) {
BitVector Visited(NChain);
@@ -2832,7 +2878,7 @@
if (Obj.isLE())
printAttributes(ELF::SHT_ARM_ATTRIBUTES,
std::make_unique<ARMAttributeParser>(&W),
- support::little);
+ llvm::endianness::little);
else
reportUniqueWarning("attribute printing not implemented for big-endian "
"ARM objects");
@@ -2841,7 +2887,7 @@
if (Obj.isLE())
printAttributes(ELF::SHT_RISCV_ATTRIBUTES,
std::make_unique<RISCVAttributeParser>(&W),
- support::little);
+ llvm::endianness::little);
else
reportUniqueWarning("attribute printing not implemented for big-endian "
"RISC-V objects");
@@ -2849,7 +2895,7 @@
case EM_MSP430:
printAttributes(ELF::SHT_MSP430_ATTRIBUTES,
std::make_unique<MSP430AttributeParser>(&W),
- support::little);
+ llvm::endianness::little);
break;
case EM_MIPS: {
printMipsABIFlags();
@@ -2875,7 +2921,7 @@
template <class ELFT>
void ELFDumper<ELFT>::printAttributes(
unsigned AttrShType, std::unique_ptr<ELFAttributeParser> AttrParser,
- support::endianness Endianness) {
+ llvm::endianness Endianness) {
assert((AttrShType != ELF::SHT_NULL) && AttrParser &&
"Incomplete ELF attribute implementation");
DictScope BA(W, "BuildAttributes");
@@ -3555,7 +3601,18 @@
if (e.e_version == ELF::EV_CURRENT)
OS << " (current)";
OS << "\n";
- Str = enumToString(e.e_ident[ELF::EI_OSABI], ArrayRef(ElfOSABI));
+ auto OSABI = ArrayRef(ElfOSABI);
+ if (e.e_ident[ELF::EI_OSABI] >= ELF::ELFOSABI_FIRST_ARCH &&
+ e.e_ident[ELF::EI_OSABI] <= ELF::ELFOSABI_LAST_ARCH) {
+ switch (e.e_machine) {
+ case ELF::EM_AMDGPU:
+ OSABI = ArrayRef(AMDGPUElfOSABI);
+ break;
+ default:
+ break;
+ }
+ }
+ Str = enumToString(e.e_ident[ELF::EI_OSABI], OSABI);
printFields(OS, "OS/ABI:", Str);
printFields(OS,
"ABI Version:", std::to_string(e.e_ident[ELF::EI_ABIVERSION]));
@@ -3599,6 +3656,31 @@
else if (e.e_machine == EM_XTENSA)
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderXtensaFlags),
unsigned(ELF::EF_XTENSA_MACH));
+ else if (e.e_machine == EM_CUDA)
+ ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderNVPTXFlags),
+ unsigned(ELF::EF_CUDA_SM));
+ else if (e.e_machine == EM_AMDGPU) {
+ switch (e.e_ident[ELF::EI_ABIVERSION]) {
+ default:
+ break;
+ case 0:
+ // ELFOSABI_AMDGPU_PAL, ELFOSABI_AMDGPU_MESA3D support *_V3 flags.
+ [[fallthrough]];
+ case ELF::ELFABIVERSION_AMDGPU_HSA_V3:
+ ElfFlags =
+ printFlags(e.e_flags, ArrayRef(ElfHeaderAMDGPUFlagsABIVersion3),
+ unsigned(ELF::EF_AMDGPU_MACH));
+ break;
+ case ELF::ELFABIVERSION_AMDGPU_HSA_V4:
+ case ELF::ELFABIVERSION_AMDGPU_HSA_V5:
+ ElfFlags =
+ printFlags(e.e_flags, ArrayRef(ElfHeaderAMDGPUFlagsABIVersion4),
+ unsigned(ELF::EF_AMDGPU_MACH),
+ unsigned(ELF::EF_AMDGPU_FEATURE_XNACK_V4),
+ unsigned(ELF::EF_AMDGPU_FEATURE_SRAMECC_V4));
+ break;
+ }
+ }
Str = "0x" + utohexstr(e.e_flags);
if (!ElfFlags.empty())
Str = Str + ", " + ElfFlags;
@@ -3786,9 +3868,12 @@
}
template <class ELFT>
-static void printRelocHeaderFields(formatted_raw_ostream &OS, unsigned SType) {
+static void printRelocHeaderFields(formatted_raw_ostream &OS, unsigned SType,
+ const typename ELFT::Ehdr &EHeader) {
bool IsRela = SType == ELF::SHT_RELA || SType == ELF::SHT_ANDROID_RELA;
- bool IsRelr = SType == ELF::SHT_RELR || SType == ELF::SHT_ANDROID_RELR;
+ bool IsRelr =
+ SType == ELF::SHT_RELR || SType == ELF::SHT_ANDROID_RELR ||
+ (EHeader.e_machine == EM_AARCH64 && SType == ELF::SHT_AARCH64_AUTH_RELR);
if (ELFT::Is64Bits)
OS << " ";
else
@@ -3813,15 +3898,18 @@
uint64_t Offset = Reg.Addr - this->Obj.base();
OS << "\n'" << Name.str().c_str() << "' relocation section at offset 0x"
<< utohexstr(Offset, /*LowerCase=*/true) << " contains " << Reg.Size << " bytes:\n";
- printRelocHeaderFields<ELFT>(OS, Type);
+ printRelocHeaderFields<ELFT>(OS, Type, this->Obj.getHeader());
}
template <class ELFT>
-static bool isRelocationSec(const typename ELFT::Shdr &Sec) {
+static bool isRelocationSec(const typename ELFT::Shdr &Sec,
+ const typename ELFT::Ehdr &EHeader) {
return Sec.sh_type == ELF::SHT_REL || Sec.sh_type == ELF::SHT_RELA ||
Sec.sh_type == ELF::SHT_RELR || Sec.sh_type == ELF::SHT_ANDROID_REL ||
Sec.sh_type == ELF::SHT_ANDROID_RELA ||
- Sec.sh_type == ELF::SHT_ANDROID_RELR;
+ Sec.sh_type == ELF::SHT_ANDROID_RELR ||
+ (EHeader.e_machine == EM_AARCH64 &&
+ Sec.sh_type == ELF::SHT_AARCH64_AUTH_RELR);
}
template <class ELFT> void GNUELFDumper<ELFT>::printRelocations() {
@@ -3837,8 +3925,10 @@
return RelasOrErr->size();
}
- if (!opts::RawRelr && (Sec.sh_type == ELF::SHT_RELR ||
- Sec.sh_type == ELF::SHT_ANDROID_RELR)) {
+ if (!opts::RawRelr &&
+ (Sec.sh_type == ELF::SHT_RELR || Sec.sh_type == ELF::SHT_ANDROID_RELR ||
+ (this->Obj.getHeader().e_machine == EM_AARCH64 &&
+ Sec.sh_type == ELF::SHT_AARCH64_AUTH_RELR))) {
Expected<Elf_Relr_Range> RelrsOrErr = this->Obj.relrs(Sec);
if (!RelrsOrErr)
return RelrsOrErr.takeError();
@@ -3850,7 +3940,7 @@
bool HasRelocSections = false;
for (const Elf_Shdr &Sec : cantFail(this->Obj.sections())) {
- if (!isRelocationSec<ELFT>(Sec))
+ if (!isRelocationSec<ELFT>(Sec, this->Obj.getHeader()))
continue;
HasRelocSections = true;
@@ -3867,7 +3957,7 @@
OS << "\nRelocation section '" << Name << "' at offset 0x"
<< utohexstr(Offset, /*LowerCase=*/true) << " contains " << EntriesNum
<< " entries:\n";
- printRelocHeaderFields<ELFT>(OS, Sec.sh_type);
+ printRelocHeaderFields<ELFT>(OS, Sec.sh_type, this->Obj.getHeader());
this->printRelocationsHelper(Sec);
}
if (!HasRelocSections)
@@ -3998,7 +4088,8 @@
template <class ELFT>
void GNUELFDumper<ELFT>::printSymtabMessage(const Elf_Shdr *Symtab,
size_t Entries,
- bool NonVisibilityBitsUsed) const {
+ bool NonVisibilityBitsUsed,
+ bool ExtraSymInfo) const {
StringRef Name;
if (Symtab)
Name = this->getPrintableSectionName(*Symtab);
@@ -4008,21 +4099,27 @@
OS << "\nSymbol table for image";
OS << " contains " << Entries << " entries:\n";
- if (ELFT::Is64Bits)
+ if (ELFT::Is64Bits) {
OS << " Num: Value Size Type Bind Vis";
- else
+ if (ExtraSymInfo)
+ OS << "+Other";
+ } else {
OS << " Num: Value Size Type Bind Vis";
+ if (ExtraSymInfo)
+ OS << "+Other";
+ }
- if (NonVisibilityBitsUsed)
- OS << " ";
- OS << " Ndx Name\n";
+ OS.PadToColumn((ELFT::Is64Bits ? 56 : 48) + (NonVisibilityBitsUsed ? 13 : 0));
+ if (ExtraSymInfo)
+ OS << "Ndx(SecName) Name [+ Version Info]\n";
+ else
+ OS << "Ndx Name\n";
}
template <class ELFT>
-std::string
-GNUELFDumper<ELFT>::getSymbolSectionNdx(const Elf_Sym &Symbol,
- unsigned SymIndex,
- DataRegion<Elf_Word> ShndxTable) const {
+std::string GNUELFDumper<ELFT>::getSymbolSectionNdx(
+ const Elf_Sym &Symbol, unsigned SymIndex, DataRegion<Elf_Word> ShndxTable,
+ bool ExtraSymInfo) const {
unsigned SectionIndex = Symbol.st_shndx;
switch (SectionIndex) {
case ELF::SHN_UNDEF:
@@ -4041,7 +4138,8 @@
this->reportUniqueWarning(IndexOrErr.takeError());
return "RSV[0xffff]";
}
- return to_string(format_decimal(*IndexOrErr, 3));
+ SectionIndex = *IndexOrErr;
+ break;
}
default:
// Find if:
@@ -4058,17 +4156,31 @@
SectionIndex <= ELF::SHN_HIRESERVE)
return std::string("RSV[0x") +
to_string(format_hex_no_prefix(SectionIndex, 4)) + "]";
- // A normal section with an index
- return to_string(format_decimal(SectionIndex, 3));
+ break;
}
+
+ std::string Extra;
+ if (ExtraSymInfo) {
+ auto Sec = this->Obj.getSection(SectionIndex);
+ if (!Sec) {
+ this->reportUniqueWarning(Sec.takeError());
+ } else {
+ auto SecName = this->Obj.getSectionName(**Sec);
+ if (!SecName)
+ this->reportUniqueWarning(SecName.takeError());
+ else
+ Extra = Twine(" (" + *SecName + ")").str();
+ }
+ }
+ return to_string(format_decimal(SectionIndex, 3)) + Extra;
}
template <class ELFT>
void GNUELFDumper<ELFT>::printSymbol(const Elf_Sym &Symbol, unsigned SymIndex,
DataRegion<Elf_Word> ShndxTable,
std::optional<StringRef> StrTable,
- bool IsDynamic,
- bool NonVisibilityBitsUsed) const {
+ bool IsDynamic, bool NonVisibilityBitsUsed,
+ bool ExtraSymInfo) const {
unsigned Bias = ELFT::Is64Bits ? 8 : 0;
Field Fields[8] = {0, 8, 17 + Bias, 23 + Bias,
31 + Bias, 38 + Bias, 48 + Bias, 51 + Bias};
@@ -4115,8 +4227,10 @@
}
Fields[6].Column += NonVisibilityBitsUsed ? 13 : 0;
- Fields[6].Str = getSymbolSectionNdx(Symbol, SymIndex, ShndxTable);
+ Fields[6].Str =
+ getSymbolSectionNdx(Symbol, SymIndex, ShndxTable, ExtraSymInfo);
+ Fields[7].Column += ExtraSymInfo ? 10 : 0;
Fields[7].Str = this->getFullSymbolName(Symbol, SymIndex, ShndxTable,
StrTable, IsDynamic);
for (const Field &Entry : Fields)
@@ -4162,13 +4276,14 @@
template <class ELFT>
void GNUELFDumper<ELFT>::printSymbols(bool PrintSymbols,
- bool PrintDynamicSymbols) {
+ bool PrintDynamicSymbols,
+ bool ExtraSymInfo) {
if (!PrintSymbols && !PrintDynamicSymbols)
return;
// GNU readelf prints both the .dynsym and .symtab with --symbols.
- this->printSymbolsHelper(true);
+ this->printSymbolsHelper(true, ExtraSymInfo);
if (PrintSymbols)
- this->printSymbolsHelper(false);
+ this->printSymbolsHelper(false, ExtraSymInfo);
}
template <class ELFT>
@@ -4474,43 +4589,6 @@
}
template <class ELFT>
-static bool checkOffsets(const typename ELFT::Phdr &Phdr,
- const typename ELFT::Shdr &Sec) {
- // SHT_NOBITS sections don't need to have an offset inside the segment.
- if (Sec.sh_type == ELF::SHT_NOBITS)
- return true;
-
- if (Sec.sh_offset < Phdr.p_offset)
- return false;
-
- // Only non-empty sections can be at the end of a segment.
- if (Sec.sh_size == 0)
- return (Sec.sh_offset + 1 <= Phdr.p_offset + Phdr.p_filesz);
- return Sec.sh_offset + Sec.sh_size <= Phdr.p_offset + Phdr.p_filesz;
-}
-
-// Check that an allocatable section belongs to a virtual address
-// space of a segment.
-template <class ELFT>
-static bool checkVMA(const typename ELFT::Phdr &Phdr,
- const typename ELFT::Shdr &Sec) {
- if (!(Sec.sh_flags & ELF::SHF_ALLOC))
- return true;
-
- if (Sec.sh_addr < Phdr.p_vaddr)
- return false;
-
- bool IsTbss =
- (Sec.sh_type == ELF::SHT_NOBITS) && ((Sec.sh_flags & ELF::SHF_TLS) != 0);
- // .tbss is special, it only has memory in PT_TLS and has NOBITS properties.
- bool IsTbssInNonTLS = IsTbss && Phdr.p_type != ELF::PT_TLS;
- // Only non-empty sections can be at the end of a segment.
- if (Sec.sh_size == 0 || IsTbssInNonTLS)
- return Sec.sh_addr + 1 <= Phdr.p_vaddr + Phdr.p_memsz;
- return Sec.sh_addr + Sec.sh_size <= Phdr.p_vaddr + Phdr.p_memsz;
-}
-
-template <class ELFT>
static bool checkPTDynamic(const typename ELFT::Phdr &Phdr,
const typename ELFT::Shdr &Sec) {
if (Phdr.p_type != ELF::PT_DYNAMIC || Phdr.p_memsz == 0 || Sec.sh_size != 0)
@@ -4641,8 +4719,9 @@
// readelf additionally makes sure it does not print zero sized sections
// at end of segments and for PT_DYNAMIC both start and end of section
// .tbss must only be shown in PT_TLS section.
- if (checkTLSSections<ELFT>(Phdr, Sec) && checkOffsets<ELFT>(Phdr, Sec) &&
- checkVMA<ELFT>(Phdr, Sec) && checkPTDynamic<ELFT>(Phdr, Sec)) {
+ if (isSectionInSegment<ELFT>(Phdr, Sec) &&
+ checkTLSSections<ELFT>(Phdr, Sec) &&
+ checkPTDynamic<ELFT>(Phdr, Sec)) {
Sections +=
unwrapOrError(this->FileName, this->Obj.getSectionName(Sec)).str() +
" ";
@@ -5002,7 +5081,7 @@
const uint8_t *End = Data.end();
while (Cur != End) {
unsigned Size;
- const char *Err;
+ const char *Err = nullptr;
Ret.push_back(decodeULEB128(Cur, &Size, End, &Err));
if (Err)
return createError(Err);
@@ -5102,6 +5181,7 @@
if (Type == GNU_PROPERTY_AARCH64_FEATURE_1_AND) {
DumpBit(GNU_PROPERTY_AARCH64_FEATURE_1_BTI, "BTI");
DumpBit(GNU_PROPERTY_AARCH64_FEATURE_1_PAC, "PAC");
+ DumpBit(GNU_PROPERTY_AARCH64_FEATURE_1_GCS, "GCS");
} else {
DumpBit(GNU_PROPERTY_X86_FEATURE_1_IBT, "IBT");
DumpBit(GNU_PROPERTY_X86_FEATURE_1_SHSTK, "SHSTK");
@@ -5311,6 +5391,31 @@
}
template <class ELFT>
+static bool printAArch64Note(raw_ostream &OS, uint32_t NoteType,
+ ArrayRef<uint8_t> Desc) {
+ if (NoteType != NT_ARM_TYPE_PAUTH_ABI_TAG)
+ return false;
+
+ OS << " AArch64 PAuth ABI tag: ";
+ if (Desc.size() < 16) {
+ OS << format("<corrupted size: expected at least 16, got %d>", Desc.size());
+ return false;
+ }
+
+ uint64_t Platform =
+ support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 0);
+ uint64_t Version =
+ support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 8);
+ OS << format("platform 0x%" PRIx64 ", version 0x%" PRIx64, Platform, Version);
+
+ if (Desc.size() > 16)
+ OS << ", additional info 0x"
+ << toHex(ArrayRef<uint8_t>(Desc.data() + 16, Desc.size() - 16));
+
+ return true;
+}
+
+template <class ELFT>
void GNUELFDumper<ELFT>::printMemtag(
const ArrayRef<std::pair<std::string, std::string>> DynamicEntries,
const ArrayRef<uint8_t> AndroidNoteDesc,
@@ -5416,8 +5521,8 @@
return {"", ""};
case ELF::NT_AMD_HSA_CODE_OBJECT_VERSION: {
struct CodeObjectVersion {
- uint32_t MajorVersion;
- uint32_t MinorVersion;
+ support::aligned_ulittle32_t MajorVersion;
+ support::aligned_ulittle32_t MinorVersion;
};
if (Desc.size() != sizeof(CodeObjectVersion))
return {"AMD HSA Code Object Version",
@@ -5431,8 +5536,8 @@
}
case ELF::NT_AMD_HSA_HSAIL: {
struct HSAILProperties {
- uint32_t HSAILMajorVersion;
- uint32_t HSAILMinorVersion;
+ support::aligned_ulittle32_t HSAILMajorVersion;
+ support::aligned_ulittle32_t HSAILMinorVersion;
uint8_t Profile;
uint8_t MachineModel;
uint8_t DefaultFloatRound;
@@ -5452,11 +5557,11 @@
}
case ELF::NT_AMD_HSA_ISA_VERSION: {
struct IsaVersion {
- uint16_t VendorNameSize;
- uint16_t ArchitectureNameSize;
- uint32_t Major;
- uint32_t Minor;
- uint32_t Stepping;
+ support::aligned_ulittle16_t VendorNameSize;
+ support::aligned_ulittle16_t ArchitectureNameSize;
+ support::aligned_ulittle32_t Major;
+ support::aligned_ulittle32_t Minor;
+ support::aligned_ulittle32_t Stepping;
};
if (Desc.size() < sizeof(IsaVersion))
return {"AMD HSA ISA Version", "Invalid AMD HSA ISA Version"};
@@ -5492,8 +5597,8 @@
}
case ELF::NT_AMD_PAL_METADATA: {
struct PALMetadata {
- uint32_t Key;
- uint32_t Value;
+ support::aligned_ulittle32_t Key;
+ support::aligned_ulittle32_t Value;
};
if (Desc.size() % sizeof(PALMetadata) != 0)
return {"AMD PAL Metadata", "Invalid AMD PAL Metadata"};
@@ -5530,7 +5635,7 @@
// FIXME: Metadata Verifier only works with AMDHSA.
// This is an ugly workaround to avoid the verifier for other MD
// formats (e.g. amdpal)
- if (MsgPackString.find("amdhsa.") != StringRef::npos) {
+ if (MsgPackString.contains("amdhsa.")) {
AMDGPU::HSAMD::V3::MetadataVerifier Verifier(true);
if (!Verifier.verify(MsgPackDoc.getRoot()))
MetadataString = "Invalid AMDGPU Metadata\n";
@@ -5709,6 +5814,10 @@
"NT_ANDROID_TYPE_MEMTAG (Android memory tagging information)"},
};
+const NoteType ARMNoteTypes[] = {
+ {ELF::NT_ARM_TYPE_PAUTH_ABI_TAG, "NT_ARM_TYPE_PAUTH_ABI_TAG"},
+};
+
const NoteType CoreNoteTypes[] = {
{ELF::NT_PRSTATUS, "NT_PRSTATUS (prstatus structure)"},
{ELF::NT_FPREGSET, "NT_FPREGSET (floating point registers)"},
@@ -5771,6 +5880,8 @@
{ELF::NT_ARM_SVE, "NT_ARM_SVE (AArch64 SVE registers)"},
{ELF::NT_ARM_PAC_MASK,
"NT_ARM_PAC_MASK (AArch64 Pointer Authentication code masks)"},
+ {ELF::NT_ARM_TAGGED_ADDR_CTRL,
+ "NT_ARM_TAGGED_ADDR_CTRL (AArch64 Tagged Address Control)"},
{ELF::NT_ARM_SSVE, "NT_ARM_SSVE (AArch64 Streaming SVE registers)"},
{ELF::NT_ARM_ZA, "NT_ARM_ZA (AArch64 SME ZA registers)"},
{ELF::NT_ARM_ZT, "NT_ARM_ZT (AArch64 SME ZT registers)"},
@@ -5804,13 +5915,13 @@
return FindNote(FreeBSDNoteTypes);
}
}
- if (ELFType == ELF::ET_CORE && Name.startswith("NetBSD-CORE")) {
+ if (ELFType == ELF::ET_CORE && Name.starts_with("NetBSD-CORE")) {
StringRef Result = FindNote(NetBSDCoreNoteTypes);
if (!Result.empty())
return Result;
return FindNote(CoreNoteTypes);
}
- if (ELFType == ELF::ET_CORE && Name.startswith("OpenBSD")) {
+ if (ELFType == ELF::ET_CORE && Name.starts_with("OpenBSD")) {
// OpenBSD also places the generic core notes in the OpenBSD namespace.
StringRef Result = FindNote(OpenBSDCoreNoteTypes);
if (!Result.empty())
@@ -5825,6 +5936,8 @@
return FindNote(LLVMOMPOFFLOADNoteTypes);
if (Name == "Android")
return FindNote(AndroidNoteTypes);
+ if (Name == "ARM")
+ return FindNote(ARMNoteTypes);
if (ELFType == ELF::ET_CORE)
return FindNote(CoreNoteTypes);
@@ -5967,9 +6080,9 @@
return Error::success();
} else if (Name == "CORE") {
if (Type == ELF::NT_FILE) {
- DataExtractor DescExtractor(Descriptor,
- ELFT::TargetEndianness == support::little,
- sizeof(Elf_Addr));
+ DataExtractor DescExtractor(
+ Descriptor, ELFT::TargetEndianness == llvm::endianness::little,
+ sizeof(Elf_Addr));
if (Expected<CoreNote> NoteOrErr = readCoreNote(DescExtractor)) {
printCoreNote<ELFT>(OS, *NoteOrErr);
return Error::success();
@@ -5980,6 +6093,9 @@
} else if (Name == "Android") {
if (printAndroidNote(OS, Type, Descriptor))
return Error::success();
+ } else if (Name == "ARM") {
+ if (printAArch64Note<ELFT>(OS, Type, Descriptor))
+ return Error::success();
}
if (!Descriptor.empty()) {
OS << " description data:";
@@ -6172,11 +6288,13 @@
toString(std::move(E)));
};
- // SHT_RELR/SHT_ANDROID_RELR sections do not have an associated symbol table.
- // For them we should not treat the value of the sh_link field as an index of
- // a symbol table.
+ // SHT_RELR/SHT_ANDROID_RELR/SHT_AARCH64_AUTH_RELR sections do not have an
+ // associated symbol table. For them we should not treat the value of the
+ // sh_link field as an index of a symbol table.
const Elf_Shdr *SymTab;
- if (Sec.sh_type != ELF::SHT_RELR && Sec.sh_type != ELF::SHT_ANDROID_RELR) {
+ if (Sec.sh_type != ELF::SHT_RELR && Sec.sh_type != ELF::SHT_ANDROID_RELR &&
+ !(Obj.getHeader().e_machine == EM_AARCH64 &&
+ Sec.sh_type == ELF::SHT_AARCH64_AUTH_RELR)) {
Expected<const Elf_Shdr *> SymTabOrErr = Obj.getSection(Sec.sh_link);
if (!SymTabOrErr) {
Warn(SymTabOrErr.takeError(), "unable to locate a symbol table for");
@@ -6204,6 +6322,10 @@
Warn(RangeOrErr.takeError());
}
break;
+ case ELF::SHT_AARCH64_AUTH_RELR:
+ if (Obj.getHeader().e_machine != EM_AARCH64)
+ break;
+ [[fallthrough]];
case ELF::SHT_RELR:
case ELF::SHT_ANDROID_RELR: {
Expected<Elf_Relr_Range> RangeOrErr = Obj.relrs(Sec);
@@ -6841,6 +6963,9 @@
else if (E.e_machine == EM_XTENSA)
W.printFlags("Flags", E.e_flags, ArrayRef(ElfHeaderXtensaFlags),
unsigned(ELF::EF_XTENSA_MACH));
+ else if (E.e_machine == EM_CUDA)
+ W.printFlags("Flags", E.e_flags, ArrayRef(ElfHeaderNVPTXFlags),
+ unsigned(ELF::EF_CUDA_SM));
else
W.printFlags("Flags", E.e_flags);
W.printNumber("HeaderSize", E.e_ehsize);
@@ -6900,7 +7025,7 @@
ListScope D(W, "Relocations");
for (const Elf_Shdr &Sec : cantFail(this->Obj.sections())) {
- if (!isRelocationSec<ELFT>(Sec))
+ if (!isRelocationSec<ELFT>(Sec, this->Obj.getHeader()))
continue;
StringRef Name = this->getPrintableSectionName(Sec);
@@ -7011,7 +7136,8 @@
this->Obj.getSection(Sym, this->DotSymtabSec, ShndxTable));
if (SymSec == &Sec)
printSymbol(Sym, &Sym - &Symbols[0], ShndxTable, StrTable, false,
- false);
+ /*NonVisibilityBitsUsed=*/false,
+ /*ExtraSymInfo=*/false);
}
}
}
@@ -7098,7 +7224,8 @@
DataRegion<Elf_Word> ShndxTable,
std::optional<StringRef> StrTable,
bool IsDynamic,
- bool /*NonVisibilityBitsUsed*/) const {
+ bool /*NonVisibilityBitsUsed*/,
+ bool /*ExtraSymInfo*/) const {
std::string FullSymbolName = this->getFullSymbolName(
Symbol, SymIndex, ShndxTable, StrTable, IsDynamic);
unsigned char SymbolType = Symbol.getType();
@@ -7122,14 +7249,15 @@
template <class ELFT>
void LLVMELFDumper<ELFT>::printSymbols(bool PrintSymbols,
- bool PrintDynamicSymbols) {
+ bool PrintDynamicSymbols,
+ bool ExtraSymInfo) {
if (PrintSymbols) {
ListScope Group(W, "Symbols");
- this->printSymbolsHelper(false);
+ this->printSymbolsHelper(false, ExtraSymInfo);
}
if (PrintDynamicSymbols) {
ListScope Group(W, "DynamicSymbols");
- this->printSymbolsHelper(true);
+ this->printSymbolsHelper(true, ExtraSymInfo);
}
}
@@ -7471,7 +7599,7 @@
W.printBoolean("HasTailCall", BBE.hasTailCall());
W.printBoolean("IsEHPad", BBE.isEHPad());
W.printBoolean("CanFallThrough", BBE.canFallThrough());
- W.printBoolean("HasIndirectBranch", BBE.MD.HasIndirectBranch);
+ W.printBoolean("HasIndirectBranch", BBE.hasIndirectBranch());
}
}
}
@@ -7539,6 +7667,29 @@
}
template <class ELFT>
+static bool printAarch64NoteLLVMStyle(uint32_t NoteType, ArrayRef<uint8_t> Desc,
+ ScopedPrinter &W) {
+ if (NoteType != NT_ARM_TYPE_PAUTH_ABI_TAG)
+ return false;
+
+ if (Desc.size() < 16)
+ return false;
+
+ uint64_t platform =
+ support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 0);
+ uint64_t version =
+ support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 8);
+ W.printNumber("Platform", platform);
+ W.printNumber("Version", version);
+
+ if (Desc.size() > 16)
+ W.printString("Additional info",
+ toHex(ArrayRef<uint8_t>(Desc.data() + 16, Desc.size() - 16)));
+
+ return true;
+}
+
+template <class ELFT>
void LLVMELFDumper<ELFT>::printMemtag(
const ArrayRef<std::pair<std::string, std::string>> DynamicEntries,
const ArrayRef<uint8_t> AndroidNoteDesc,
@@ -7661,9 +7812,9 @@
return Error::success();
} else if (Name == "CORE") {
if (Type == ELF::NT_FILE) {
- DataExtractor DescExtractor(Descriptor,
- ELFT::TargetEndianness == support::little,
- sizeof(Elf_Addr));
+ DataExtractor DescExtractor(
+ Descriptor, ELFT::TargetEndianness == llvm::endianness::little,
+ sizeof(Elf_Addr));
if (Expected<CoreNote> N = readCoreNote(DescExtractor)) {
printCoreNoteLLVMStyle(*N, W);
return Error::success();
@@ -7674,6 +7825,9 @@
} else if (Name == "Android") {
if (printAndroidNoteLLVMStyle(Type, Descriptor, W))
return Error::success();
+ } else if (Name == "ARM") {
+ if (printAarch64NoteLLVMStyle<ELFT>(Type, Descriptor, W))
+ return Error::success();
}
if (!Descriptor.empty()) {
W.printBinaryBlock("Description data", Descriptor);
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp
index 5b38501..0a23ad7 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp
@@ -59,7 +59,7 @@
StringRef getSymbolName(const SymbolRef &Symbol) const;
uint8_t getSymbolType(const SymbolRef &Symbol) const;
- void printSymbols() override;
+ void printSymbols(bool ExtraSymInfo) override;
void printSymbols(std::optional<SymbolComparator> SymComp) override;
void printDynamicSymbols() override;
void printDynamicSymbols(std::optional<SymbolComparator> SymComp) override;
@@ -632,7 +632,9 @@
return getSymbolType(LHS) < getSymbolType(RHS);
}
-void MachODumper::printSymbols() { printSymbols(std::nullopt); }
+void MachODumper::printSymbols(bool /*ExtraSymInfo*/) {
+ printSymbols(std::nullopt);
+}
void MachODumper::printSymbols(std::optional<SymbolComparator> SymComp) {
ListScope Group(W, "Symbols");
@@ -732,10 +734,10 @@
if (Obj->isLittleEndian())
prettyPrintStackMap(
- W, StackMapParser<support::little>(StackMapContentsArray));
+ W, StackMapParser<llvm::endianness::little>(StackMapContentsArray));
else
prettyPrintStackMap(
- W, StackMapParser<support::big>(StackMapContentsArray));
+ W, StackMapParser<llvm::endianness::big>(StackMapContentsArray));
}
void MachODumper::printCGProfile() {
@@ -758,8 +760,8 @@
StringRef CGProfileContents =
unwrapOrError(Obj->getFileName(), CGProfileSection.getContents());
BinaryStreamReader Reader(CGProfileContents, Obj->isLittleEndian()
- ? llvm::support::little
- : llvm::support::big);
+ ? llvm::endianness::little
+ : llvm::endianness::big);
ListScope L(W, "CGProfile");
while (!Reader.empty()) {
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/ObjDumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/ObjDumper.cpp
index 6dde372..0d3fea7 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/ObjDumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/ObjDumper.cpp
@@ -14,10 +14,12 @@
#include "ObjDumper.h"
#include "llvm-readobj.h"
#include "llvm/Object/Archive.h"
+#include "llvm/Object/Decompressor.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/ScopedPrinter.h"
+#include "llvm/Support/SystemZ/zOSSupport.h"
#include "llvm/Support/raw_ostream.h"
#include <map>
@@ -141,8 +143,23 @@
return Ret;
}
+static void maybeDecompress(const object::ObjectFile &Obj,
+ StringRef SectionName, StringRef &SectionContent,
+ SmallString<0> &Out) {
+ Expected<object::Decompressor> Decompressor = object::Decompressor::create(
+ SectionName, SectionContent, Obj.isLittleEndian(), Obj.is64Bit());
+ if (!Decompressor)
+ reportWarning(Decompressor.takeError(), Obj.getFileName());
+ else if (auto Err = Decompressor->resizeAndDecompress(Out))
+ reportWarning(std::move(Err), Obj.getFileName());
+ else
+ SectionContent = Out;
+}
+
void ObjDumper::printSectionsAsString(const object::ObjectFile &Obj,
- ArrayRef<std::string> Sections) {
+ ArrayRef<std::string> Sections,
+ bool Decompress) {
+ SmallString<0> Out;
bool First = true;
for (object::SectionRef Section :
getSectionRefsByNameOrIndex(Obj, Sections)) {
@@ -155,12 +172,16 @@
StringRef SectionContent =
unwrapOrError(Obj.getFileName(), Section.getContents());
+ if (Decompress && Section.isCompressed())
+ maybeDecompress(Obj, SectionName, SectionContent, Out);
printAsStringList(SectionContent);
}
}
void ObjDumper::printSectionsAsHex(const object::ObjectFile &Obj,
- ArrayRef<std::string> Sections) {
+ ArrayRef<std::string> Sections,
+ bool Decompress) {
+ SmallString<0> Out;
bool First = true;
for (object::SectionRef Section :
getSectionRefsByNameOrIndex(Obj, Sections)) {
@@ -173,6 +194,8 @@
StringRef SectionContent =
unwrapOrError(Obj.getFileName(), Section.getContents());
+ if (Decompress && Section.isCompressed())
+ maybeDecompress(Obj, SectionName, SectionContent, Out);
const uint8_t *SecContent = SectionContent.bytes_begin();
const uint8_t *SecEnd = SecContent + SectionContent.size();
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/ObjDumper.h b/src/llvm-project/llvm/tools/llvm-readobj/ObjDumper.h
index 921792f..3958dd3 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/ObjDumper.h
+++ b/src/llvm-project/llvm/tools/llvm-readobj/ObjDumper.h
@@ -13,9 +13,7 @@
#include <memory>
#include <system_error>
-#include "llvm/ADT/STLFunctionalExtras.h"
#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Support/CommandLine.h"
@@ -77,13 +75,15 @@
virtual void printFileHeaders() = 0;
virtual void printSectionHeaders() = 0;
virtual void printRelocations() = 0;
- virtual void printSymbols(bool PrintSymbols, bool PrintDynamicSymbols) {
+ virtual void printSymbols(bool PrintSymbols, bool PrintDynamicSymbols,
+ bool ExtraSymInfo) {
if (PrintSymbols)
- printSymbols();
+ printSymbols(ExtraSymInfo);
if (PrintDynamicSymbols)
printDynamicSymbols();
}
virtual void printSymbols(bool PrintSymbols, bool PrintDynamicSymbols,
+ bool ExtraSymInfo,
std::optional<SymbolComparator> SymComp) {
if (SymComp) {
if (PrintSymbols)
@@ -91,7 +91,7 @@
if (PrintDynamicSymbols)
printDynamicSymbols(SymComp);
} else {
- printSymbols(PrintSymbols, PrintDynamicSymbols);
+ printSymbols(PrintSymbols, PrintDynamicSymbols, ExtraSymInfo);
}
}
virtual void printProgramHeaders(bool PrintProgramHeaders,
@@ -175,9 +175,9 @@
void printAsStringList(StringRef StringContent, size_t StringDataOffset = 0);
void printSectionsAsString(const object::ObjectFile &Obj,
- ArrayRef<std::string> Sections);
+ ArrayRef<std::string> Sections, bool Decompress);
void printSectionsAsHex(const object::ObjectFile &Obj,
- ArrayRef<std::string> Sections);
+ ArrayRef<std::string> Sections, bool Decompress);
std::function<Error(const Twine &Msg)> WarningHandler;
void reportUniqueWarning(Error Err) const;
@@ -187,7 +187,7 @@
ScopedPrinter &W;
private:
- virtual void printSymbols() {}
+ virtual void printSymbols(bool ExtraSymInfo) {}
virtual void printSymbols(std::optional<SymbolComparator> Comp) {}
virtual void printDynamicSymbols() {}
virtual void printDynamicSymbols(std::optional<SymbolComparator> Comp) {}
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/Opts.td b/src/llvm-project/llvm/tools/llvm-readobj/Opts.td
index fec0adb..018facc 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/Opts.td
+++ b/src/llvm-project/llvm/tools/llvm-readobj/Opts.td
@@ -20,11 +20,13 @@
def arch_specific : FF<"arch-specific", "Display architecture-specific information">;
def bb_addr_map : FF<"bb-addr-map", "Display the BB address map section">;
def cg_profile : FF<"cg-profile", "Display call graph profile section">;
+def decompress : FF<"decompress", "Dump decompressed section content when used with -x or -p">;
defm demangle : BB<"demangle", "Demangle symbol names", "Do not demangle symbol names (default)">;
def dependent_libraries : FF<"dependent-libraries", "Display the dependent libraries section">;
def dyn_relocations : FF<"dyn-relocations", "Display the dynamic relocation entries in the file">;
def dyn_syms : FF<"dyn-syms", "Display the dynamic symbol table">;
def expand_relocs : FF<"expand-relocs", "Expand each shown relocation to multiple lines">;
+def extra_sym_info : FF<"extra-sym-info", "Display extra information when showing symbols">;
def file_header : FF<"file-header", "Display file header">;
def headers : FF<"headers", "Equivalent to setting: --file-header, --program-headers, --section-headers">;
defm hex_dump : Eq<"hex-dump", "Display the specified section(s) as hexadecimal bytes">, MetaVarName<"<name or index>">;
@@ -135,5 +137,7 @@
def : F<"s", "Alias for --symbols">, Alias<symbols>;
def : F<"t", "Alias for --section-details">, Alias<section_details>;
def : F<"u", "Alias for --unwind">, Alias<unwind>;
+def : F<"X", "Alias for --extra-sym-info">, Alias<extra_sym_info>, Group<grp_elf>;
def : F<"V", "Alias for --version-info">, Alias<version_info>, Group<grp_elf>;
def : JoinedOrSeparate<["-"], "x">, Alias<hex_dump_EQ>, HelpText<"Alias for --hex-dump">, MetaVarName<"<name or index>">;
+def : F<"z", "Alias for --decompress">, Alias<decompress>;
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/WasmDumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/WasmDumper.cpp
index e6f0ac7..5d7639b 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/WasmDumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/WasmDumper.cpp
@@ -70,7 +70,7 @@
void printRelocation(const SectionRef &Section, const RelocationRef &Reloc);
private:
- void printSymbols() override;
+ void printSymbols(bool ExtraSymInfo) override;
void printDynamicSymbols() override { llvm_unreachable("unimplemented"); }
const WasmObjectFile *Obj;
@@ -144,7 +144,7 @@
}
}
-void WasmDumper::printSymbols() {
+void WasmDumper::printSymbols(bool /*ExtraSymInfo*/) {
ListScope Group(W, "Symbols");
for (const SymbolRef &Symbol : Obj->symbols())
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/Win64EHDumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/Win64EHDumper.cpp
index 2896f20..e4bd772 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/Win64EHDumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/Win64EHDumper.cpp
@@ -397,7 +397,7 @@
else
consumeError(NameOrErr.takeError());
- if (Name != ".pdata" && !Name.startswith(".pdata$"))
+ if (Name != ".pdata" && !Name.starts_with(".pdata$"))
continue;
const coff_section *PData = Ctx.COFF.getCOFFSection(Section);
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/WindowsResourceDumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/WindowsResourceDumper.cpp
index fb085ec..5337005 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/WindowsResourceDumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/WindowsResourceDumper.cpp
@@ -26,7 +26,7 @@
for (UTF16 Ch : UTF16Str) {
// UTF16Str will have swapped byte order in case of big-endian machines.
// Swap it back in such a case.
- uint16_t ChValue = support::endian::byte_swap(Ch, support::little);
+ uint16_t ChValue = support::endian::byte_swap(Ch, llvm::endianness::little);
if (ChValue <= 0xFF)
Result += ChValue;
else
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/XCOFFDumper.cpp b/src/llvm-project/llvm/tools/llvm-readobj/XCOFFDumper.cpp
index 74ebcc4..8ebd670 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/XCOFFDumper.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/XCOFFDumper.cpp
@@ -33,7 +33,7 @@
void printAuxiliaryHeader() override;
void printSectionHeaders() override;
void printRelocations() override;
- void printSymbols() override;
+ void printSymbols(bool ExtraSymInfo) override;
void printDynamicSymbols() override;
void printUnwindInfo() override;
void printStackMap() const override;
@@ -903,7 +903,7 @@
}
}
-void XCOFFDumper::printSymbols() {
+void XCOFFDumper::printSymbols(bool /*ExtraSymInfo*/) {
ListScope Group(W, "Symbols");
for (const SymbolRef &S : Obj.symbols())
printSymbol(S);
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/llvm-readobj.cpp b/src/llvm-project/llvm/tools/llvm-readobj/llvm-readobj.cpp
index d72eec0..979433d 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/llvm-readobj.cpp
+++ b/src/llvm-project/llvm/tools/llvm-readobj/llvm-readobj.cpp
@@ -42,7 +42,6 @@
#include "llvm/Support/Errc.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/FormatVariadic.h"
-#include "llvm/Support/InitLLVM.h"
#include "llvm/Support/LLVMDriver.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/ScopedPrinter.h"
@@ -55,9 +54,7 @@
using namespace llvm::opt; // for HelpHidden in Opts.inc
enum ID {
OPT_INVALID = 0, // This is not an option ID.
-#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
- HELPTEXT, METAVAR, VALUES) \
- OPT_##ID,
+#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
#include "Opts.inc"
#undef OPTION
};
@@ -70,13 +67,7 @@
#undef PREFIX
static constexpr opt::OptTable::Info InfoTable[] = {
-#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
- HELPTEXT, METAVAR, VALUES) \
- { \
- PREFIX, NAME, HELPTEXT, \
- METAVAR, OPT_##ID, opt::Option::KIND##Class, \
- PARAM, FLAGS, OPT_##GROUP, \
- OPT_##ALIAS, ALIASARGS, VALUES},
+#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
#include "Opts.inc"
#undef OPTION
};
@@ -106,10 +97,12 @@
static bool BBAddrMap;
bool ExpandRelocs;
static bool CGProfile;
+static bool Decompress;
bool Demangle;
static bool DependentLibraries;
static bool DynRelocs;
static bool DynamicSymbols;
+static bool ExtraSymInfo;
static bool FileHeaders;
static bool Headers;
static std::vector<std::string> HexDump;
@@ -220,11 +213,13 @@
opts::ArchSpecificInfo = Args.hasArg(OPT_arch_specific);
opts::BBAddrMap = Args.hasArg(OPT_bb_addr_map);
opts::CGProfile = Args.hasArg(OPT_cg_profile);
+ opts::Decompress = Args.hasArg(OPT_decompress);
opts::Demangle = Args.hasFlag(OPT_demangle, OPT_no_demangle, false);
opts::DependentLibraries = Args.hasArg(OPT_dependent_libraries);
opts::DynRelocs = Args.hasArg(OPT_dyn_relocations);
opts::DynamicSymbols = Args.hasArg(OPT_dyn_syms);
opts::ExpandRelocs = Args.hasArg(OPT_expand_relocs);
+ opts::ExtraSymInfo = Args.hasArg(OPT_extra_sym_info);
opts::FileHeaders = Args.hasArg(OPT_file_header);
opts::Headers = Args.hasArg(OPT_headers);
opts::HexDump = Args.getAllArgValues(OPT_hex_dump_EQ);
@@ -443,11 +438,12 @@
if (opts::UnwindInfo)
Dumper->printUnwindInfo();
if (opts::Symbols || opts::DynamicSymbols)
- Dumper->printSymbols(opts::Symbols, opts::DynamicSymbols, SymComp);
+ Dumper->printSymbols(opts::Symbols, opts::DynamicSymbols,
+ opts::ExtraSymInfo, SymComp);
if (!opts::StringDump.empty())
- Dumper->printSectionsAsString(Obj, opts::StringDump);
+ Dumper->printSectionsAsString(Obj, opts::StringDump, opts::Decompress);
if (!opts::HexDump.empty())
- Dumper->printSectionsAsHex(Obj, opts::HexDump);
+ Dumper->printSectionsAsHex(Obj, opts::HexDump, opts::Decompress);
if (opts::HashTable)
Dumper->printHashTable();
if (opts::GnuHashTable)
@@ -638,7 +634,6 @@
}
int llvm_readobj_main(int argc, char **argv, const llvm::ToolContext &) {
- InitLLVM X(argc, argv);
BumpPtrAllocator A;
StringSaver Saver(A);
ReadobjOptTable Tbl;
diff --git a/src/llvm-project/llvm/tools/llvm-readobj/llvm-readobj.h b/src/llvm-project/llvm/tools/llvm-readobj/llvm-readobj.h
index 5a9fe28..532e43d 100644
--- a/src/llvm-project/llvm/tools/llvm-readobj/llvm-readobj.h
+++ b/src/llvm-project/llvm/tools/llvm-readobj/llvm-readobj.h
@@ -16,7 +16,6 @@
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorOr.h"
-#include <string>
namespace llvm {
namespace object {