diff options
Diffstat (limited to 'contrib/llvm-project/llvm/tools')
10 files changed, 361 insertions, 229 deletions
diff --git a/contrib/llvm-project/llvm/tools/llc/llc.cpp b/contrib/llvm-project/llvm/tools/llc/llc.cpp index 8d906cf37287..4a1957588a22 100644 --- a/contrib/llvm-project/llvm/tools/llc/llc.cpp +++ b/contrib/llvm-project/llvm/tools/llc/llc.cpp @@ -307,16 +307,12 @@ static std::unique_ptr<ToolOutputFile> GetOutputStream(const char *TargetName, } struct LLCDiagnosticHandler : public DiagnosticHandler { - bool *HasError; - LLCDiagnosticHandler(bool *HasErrorPtr) : HasError(HasErrorPtr) {} bool handleDiagnostics(const DiagnosticInfo &DI) override { + DiagnosticHandler::handleDiagnostics(DI); if (DI.getKind() == llvm::DK_SrcMgr) { const auto &DISM = cast<DiagnosticInfoSrcMgr>(DI); const SMDiagnostic &SMD = DISM.getSMDiag(); - if (SMD.getKind() == SourceMgr::DK_Error) - *HasError = true; - SMD.print(nullptr, errs()); // For testing purposes, we print the LocCookie here. @@ -326,9 +322,6 @@ struct LLCDiagnosticHandler : public DiagnosticHandler { return true; } - if (DI.getSeverity() == DS_Error) - *HasError = true; - if (auto *Remark = dyn_cast<DiagnosticInfoOptimizationBase>(&DI)) if (!Remark->isEnabled()) return true; @@ -413,9 +406,7 @@ int main(int argc, char **argv) { Context.setDiscardValueNames(DiscardValueNames); // Set a diagnostic handler that doesn't exit on the first error - bool HasError = false; - Context.setDiagnosticHandler( - std::make_unique<LLCDiagnosticHandler>(&HasError)); + Context.setDiagnosticHandler(std::make_unique<LLCDiagnosticHandler>()); Expected<std::unique_ptr<ToolOutputFile>> RemarksFileOrErr = setupLLVMOptimizationRemarks(Context, RemarksFilename, RemarksPasses, @@ -757,9 +748,7 @@ static int compileModule(char **argv, LLVMContext &Context) { PM.run(*M); - auto HasError = - ((const LLCDiagnosticHandler *)(Context.getDiagHandlerPtr()))->HasError; - if (*HasError) + if (Context.getDiagHandlerPtr()->HasErrors) return 1; // Compare the two outputs and make sure they're the same diff --git a/contrib/llvm-project/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp b/contrib/llvm-project/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp index b43e9e64231e..abc4c49ecae9 100644 --- a/contrib/llvm-project/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp @@ -130,10 +130,14 @@ table { .light-row { background: #ffffff; border: 1px solid #dbdbdb; + border-left: none; + border-right: none; } .light-row-bold { background: #ffffff; border: 1px solid #dbdbdb; + border-left: none; + border-right: none; font-weight: bold; } .column-entry { @@ -147,21 +151,28 @@ table { text-align: left; background-color: #ffffd0; } -.column-entry-yellow:hover { +.column-entry-yellow:hover, tr:hover .column-entry-yellow { background-color: #fffff0; } .column-entry-red { text-align: left; background-color: #ffd0d0; } -.column-entry-red:hover { +.column-entry-red:hover, tr:hover .column-entry-red { background-color: #fff0f0; } +.column-entry-gray { + text-align: left; + background-color: #fbfbfb; +} +.column-entry-gray:hover, tr:hover .column-entry-gray { + background-color: #f0f0f0; +} .column-entry-green { text-align: left; background-color: #d0ffd0; } -.column-entry-green:hover { +.column-entry-green:hover, tr:hover .column-entry-green { background-color: #f0fff0; } .line-number { @@ -232,6 +243,9 @@ td:last-child { tr:hover { background-color: #f0f0f0; } +tr:last-child { + border-bottom: none; +} )"; const char *EndHeader = "</head>"; @@ -309,7 +323,9 @@ void emitTableRow(raw_ostream &OS, const CoverageViewOptions &Opts, RSO << '(' << Hit << '/' << Total << ')'; } const char *CellClass = "column-entry-yellow"; - if (Pctg >= Opts.HighCovWatermark) + if (!Total) + CellClass = "column-entry-gray"; + else if (Pctg >= Opts.HighCovWatermark) CellClass = "column-entry-green"; else if (Pctg < Opts.LowCovWatermark) CellClass = "column-entry-red"; diff --git a/contrib/llvm-project/llvm/tools/llvm-dwp/Opts.td b/contrib/llvm-project/llvm/tools/llvm-dwp/Opts.td index 75b56fdb670c..46593bc40eba 100644 --- a/contrib/llvm-project/llvm/tools/llvm-dwp/Opts.td +++ b/contrib/llvm-project/llvm/tools/llvm-dwp/Opts.td @@ -9,7 +9,10 @@ def version : F<"version", "Display the version of this program">; def execFileNames : S<"e", "Specify the executable/library files to get the list of *.dwo from.">, MetaVarName<"<filename>">; def outputFileName : S<"o", "Specify the output file.">, MetaVarName<"<filename>">; -def continueOnCuIndexOverflow : S<"continue-on-cu-index-overflow", "default = continue, This turns an error when offset " - "for .debug_*.dwo sections overfolws into a warning. = soft-stop, This produces a " - "truncated but valid DWP file, discarding any DWO files that would not fit within " - "the 32 bit/4GB limits of the format.">, MetaVarName<"<filename>">;
\ No newline at end of file +def continueOnCuIndexOverflow : Flag<["-", "--"], "continue-on-cu-index-overflow">; +def continueOnCuIndexOverflow_EQ : Joined<["-", "--"], "continue-on-cu-index-overflow=">, + HelpText<"default = continue, This turns an error when offset \n" + "\t\tfor .debug_*.dwo sections overfolws into a warning. = soft-stop, This produces a \n" + "\t\ttruncated but valid DWP file, discarding any DWO files that would not fit within \n" + "\t\tthe 32 bit/4GB limits of the format.">, + Values<"continue,soft-stop">; diff --git a/contrib/llvm-project/llvm/tools/llvm-dwp/llvm-dwp.cpp b/contrib/llvm-project/llvm/tools/llvm-dwp/llvm-dwp.cpp index 5cd4c0078a45..a6b8643a5903 100644 --- a/contrib/llvm-project/llvm/tools/llvm-dwp/llvm-dwp.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-dwp/llvm-dwp.cpp @@ -144,13 +144,21 @@ int llvm_dwp_main(int argc, char **argv, const llvm::ToolContext &) { } OutputFilename = Args.getLastArgValue(OPT_outputFileName, ""); - if (Args.hasArg(OPT_continueOnCuIndexOverflow)) { - ContinueOption = - Args.getLastArgValue(OPT_continueOnCuIndexOverflow, "continue"); - if (ContinueOption == "soft-stop") { - OverflowOptValue = OnCuIndexOverflow::SoftStop; - } else { + if (Arg *Arg = Args.getLastArg(OPT_continueOnCuIndexOverflow, + OPT_continueOnCuIndexOverflow_EQ)) { + if (Arg->getOption().matches(OPT_continueOnCuIndexOverflow)) { OverflowOptValue = OnCuIndexOverflow::Continue; + } else { + ContinueOption = Arg->getValue(); + if (ContinueOption == "soft-stop") { + OverflowOptValue = OnCuIndexOverflow::SoftStop; + } else if (ContinueOption == "continue") { + OverflowOptValue = OnCuIndexOverflow::Continue; + } else { + llvm::errs() << "invalid value for --continue-on-cu-index-overflow" + << ContinueOption << '\n'; + exit(1); + } } } diff --git a/contrib/llvm-project/llvm/tools/llvm-objdump/ObjdumpOpts.td b/contrib/llvm-project/llvm/tools/llvm-objdump/ObjdumpOpts.td index 100a95d3d925..c1dec5ced89d 100644 --- a/contrib/llvm-project/llvm/tools/llvm-objdump/ObjdumpOpts.td +++ b/contrib/llvm-project/llvm/tools/llvm-objdump/ObjdumpOpts.td @@ -137,6 +137,9 @@ def mattr_EQ : Joined<["--"], "mattr=">, MetaVarName<"a1,+a2,-a3,...">, HelpText<"Target specific attributes (--mattr=help for details)">; +def mllvm : Separate<["-"], "mllvm">, HelpText<"Specify an argument to forward to LLVM's CommandLine library">, MetaVarName<"<arg>">; +def : Joined<["-"], "mllvm=">, Alias<mllvm>; + def no_show_raw_insn : Flag<["--"], "no-show-raw-insn">, HelpText<"When disassembling instructions, " "do not print the instruction bytes.">; diff --git a/contrib/llvm-project/llvm/tools/llvm-objdump/XCOFFDump.cpp b/contrib/llvm-project/llvm/tools/llvm-objdump/XCOFFDump.cpp index 0f6147924f8a..d9c00c096209 100644 --- a/contrib/llvm-project/llvm/tools/llvm-objdump/XCOFFDump.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-objdump/XCOFFDump.cpp @@ -43,6 +43,7 @@ objdump::createXCOFFDumper(const object::XCOFFObjectFile &Obj) { Error objdump::getXCOFFRelocationValueString(const XCOFFObjectFile &Obj, const RelocationRef &Rel, + bool SymbolDescription, SmallVectorImpl<char> &Result) { symbol_iterator SymI = Rel.getSymbol(); if (SymI == Obj.symbol_end()) diff --git a/contrib/llvm-project/llvm/tools/llvm-objdump/XCOFFDump.h b/contrib/llvm-project/llvm/tools/llvm-objdump/XCOFFDump.h index cf5b19f910ea..0ba6ba4cdaaa 100644 --- a/contrib/llvm-project/llvm/tools/llvm-objdump/XCOFFDump.h +++ b/contrib/llvm-project/llvm/tools/llvm-objdump/XCOFFDump.h @@ -33,6 +33,7 @@ std::string getXCOFFSymbolDescription(const SymbolInfoTy &SymbolInfo, Error getXCOFFRelocationValueString(const object::XCOFFObjectFile &Obj, const object::RelocationRef &RelRef, + bool SymbolDescription, llvm::SmallVectorImpl<char> &Result); void dumpTracebackTable(ArrayRef<uint8_t> Bytes, uint64_t Address, diff --git a/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp b/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp index 12bb70d5537d..7467a6062b5a 100644 --- a/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -424,6 +424,7 @@ bool objdump::isRelocAddressLess(RelocationRef A, RelocationRef B) { } static Error getRelocationValueString(const RelocationRef &Rel, + bool SymbolDescription, SmallVectorImpl<char> &Result) { const ObjectFile *Obj = Rel.getObject(); if (auto *ELF = dyn_cast<ELFObjectFileBase>(Obj)) @@ -435,7 +436,8 @@ static Error getRelocationValueString(const RelocationRef &Rel, if (auto *MachO = dyn_cast<MachOObjectFile>(Obj)) return getMachORelocationValueString(MachO, Rel, Result); if (auto *XCOFF = dyn_cast<XCOFFObjectFile>(Obj)) - return getXCOFFRelocationValueString(*XCOFF, Rel, Result); + return getXCOFFRelocationValueString(*XCOFF, Rel, SymbolDescription, + Result); llvm_unreachable("unknown object file format"); } @@ -527,7 +529,7 @@ static void printRelocation(formatted_raw_ostream &OS, StringRef FileName, SmallString<16> Name; SmallString<32> Val; Rel.getTypeName(Name); - if (Error E = getRelocationValueString(Rel, Val)) + if (Error E = getRelocationValueString(Rel, SymbolDescription, Val)) reportError(std::move(E), FileName); OS << (Is64Bits || !LeadingAddr ? "\t\t" : "\t\t\t"); if (LeadingAddr) @@ -1289,7 +1291,8 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, MCInstrAnalysis *MIA, uint64_t Start, uint64_t End, std::unordered_map<uint64_t, std::string> &Labels) { // So far only supports PowerPC and X86. - if (!STI->getTargetTriple().isPPC() && !STI->getTargetTriple().isX86()) + const bool isPPC = STI->getTargetTriple().isPPC(); + if (!isPPC && !STI->getTargetTriple().isX86()) return; if (MIA) @@ -1299,8 +1302,8 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, MCInstrAnalysis *MIA, unsigned LabelCount = 0; Start += SectionAddr; End += SectionAddr; - uint64_t Index = Start; - while (Index < End) { + const bool isXCOFF = STI->getTargetTriple().isOSBinFormatXCOFF(); + for (uint64_t Index = Start; Index < End;) { // Disassemble a real instruction and record function-local branch labels. MCInst Inst; uint64_t Size; @@ -1311,18 +1314,22 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, MCInstrAnalysis *MIA, Size = std::min<uint64_t>(ThisBytes.size(), DisAsm->suggestBytesToSkip(ThisBytes, Index)); - if (Disassembled && MIA) { - uint64_t Target; - bool TargetKnown = MIA->evaluateBranch(Inst, Index, Size, Target); - // On PowerPC, if the address of a branch is the same as the target, it - // means that it's a function call. Do not mark the label for this case. - if (TargetKnown && (Target >= Start && Target < End) && - !Labels.count(Target) && - !(STI->getTargetTriple().isPPC() && Target == Index)) - Labels[Target] = ("L" + Twine(LabelCount++)).str(); - MIA->updateState(Inst, Index); - } else if (!Disassembled && MIA) { - MIA->resetState(); + if (MIA) { + if (Disassembled) { + uint64_t Target; + bool TargetKnown = MIA->evaluateBranch(Inst, Index, Size, Target); + if (TargetKnown && (Target >= Start && Target < End) && + !Labels.count(Target)) { + // On PowerPC and AIX, a function call is encoded as a branch to 0. + // On other PowerPC platforms (ELF), a function call is encoded as + // a branch to self. Do not add a label for these cases. + if (!(isPPC && + ((Target == 0 && isXCOFF) || (Target == Index && !isXCOFF)))) + Labels[Target] = ("L" + Twine(LabelCount++)).str(); + } + MIA->updateState(Inst, Index); + } else + MIA->resetState(); } Index += Size; } @@ -1486,7 +1493,7 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, } std::map<SectionRef, std::vector<RelocationRef>> RelocMap; - if (InlineRelocs) + if (InlineRelocs || Obj.isXCOFF()) RelocMap = getRelocsMap(Obj); bool Is64Bits = Obj.getBytesInAddress() > 4; @@ -1948,6 +1955,13 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, continue; } + // Skip relocations from symbols that are not dumped. + for (; RelCur != RelEnd; ++RelCur) { + uint64_t Offset = RelCur->getOffset() - RelAdjustment; + if (Index <= Offset) + break; + } + bool DumpARMELFData = false; bool DumpTracebackTableForXCOFFFunction = Obj.isXCOFF() && Section.isText() && TracebackTable && @@ -1978,6 +1992,8 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, DT->InstrAnalysis->resetState(); while (Index < End) { + uint64_t RelOffset; + // ARM and AArch64 ELF binaries can interleave data and text in the // same section. We rely on the markers introduced to understand what // we need to dump. If the data marker is within a function, it is @@ -2012,6 +2028,26 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, } } + auto findRel = [&]() { + while (RelCur != RelEnd) { + RelOffset = RelCur->getOffset() - RelAdjustment; + // If this relocation is hidden, skip it. + if (getHidden(*RelCur) || SectionAddr + RelOffset < StartAddress) { + ++RelCur; + continue; + } + + // Stop when RelCur's offset is past the disassembled + // instruction/data. + if (RelOffset >= Index + Size) + return false; + if (RelOffset >= Index) + return true; + ++RelCur; + } + return false; + }; + if (DumpARMELFData) { Size = dumpARMELFData(SectionAddr, Index, End, Obj, Bytes, MappingSymbols, *DT->SubtargetInfo, FOS); @@ -2022,7 +2058,7 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, uint64_t MaxOffset = End - Index; // For --reloc: print zero blocks patched by relocations, so that // relocations can be shown in the dump. - if (RelCur != RelEnd) + if (InlineRelocs && RelCur != RelEnd) MaxOffset = std::min(RelCur->getOffset() - RelAdjustment - Index, MaxOffset); @@ -2080,17 +2116,19 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, DT->InstPrinter->setCommentStream(llvm::nulls()); - // If disassembly has failed, avoid analysing invalid/incomplete - // instruction information. Otherwise, try to resolve the target - // address (jump target or memory operand address) and print it on the + // If disassembly succeeds, we try to resolve the target address + // (jump target or memory operand address) and print it to the // right of the instruction. + // + // Otherwise, we don't print anything else so that we avoid + // analyzing invalid or incomplete instruction information. if (Disassembled && DT->InstrAnalysis) { - // Branch targets are printed just after the instructions. llvm::raw_ostream *TargetOS = &FOS; uint64_t Target; bool PrintTarget = DT->InstrAnalysis->evaluateBranch( Inst, SectionAddr + Index, Size, Target); - if (!PrintTarget) + + if (!PrintTarget) { if (std::optional<uint64_t> MaybeTarget = DT->InstrAnalysis->evaluateMemoryOperandAddress( Inst, DT->SubtargetInfo.get(), SectionAddr + Index, @@ -2104,6 +2142,8 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, *TargetOS << "0x" << Twine::utohexstr(Target); } } + } + if (PrintTarget) { // In a relocatable object, the target's section must reside in // the same section as the call instruction or it is accessed @@ -2113,7 +2153,8 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, // In that case, locate the section(s) containing the target // address and find the symbol in one of those, if possible. // - // N.B. We don't walk the relocations in the relocatable case yet. + // N.B. Except for XCOFF, we don't walk the relocations in the + // relocatable case yet. std::vector<const SectionSymbolsTy *> TargetSectionSymbols; if (!Obj.isRelocatableObject()) { auto It = llvm::partition_point( @@ -2159,19 +2200,65 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, break; } + // Branch targets are printed just after the instructions. // Print the labels corresponding to the target if there's any. bool BBAddrMapLabelAvailable = BBAddrMapLabels.count(Target); bool LabelAvailable = AllLabels.count(Target); + if (TargetSym != nullptr) { uint64_t TargetAddress = TargetSym->Addr; uint64_t Disp = Target - TargetAddress; std::string TargetName = Demangle ? demangle(TargetSym->Name) : TargetSym->Name.str(); + bool RelFixedUp = false; + SmallString<32> Val; *TargetOS << " <"; - if (!Disp) { - // Always Print the binary symbol precisely corresponding to - // the target address. + // On XCOFF, we use relocations, even without -r, so we + // can print the correct name for an extern function call. + if (Obj.isXCOFF() && findRel()) { + // Check for possible branch relocations and + // branches to fixup code. + bool BranchRelocationType = true; + XCOFF::RelocationType RelocType; + if (Obj.is64Bit()) { + const XCOFFRelocation64 *Reloc = + reinterpret_cast<XCOFFRelocation64 *>( + RelCur->getRawDataRefImpl().p); + RelFixedUp = Reloc->isFixupIndicated(); + RelocType = Reloc->Type; + } else { + const XCOFFRelocation32 *Reloc = + reinterpret_cast<XCOFFRelocation32 *>( + RelCur->getRawDataRefImpl().p); + RelFixedUp = Reloc->isFixupIndicated(); + RelocType = Reloc->Type; + } + BranchRelocationType = + RelocType == XCOFF::R_BA || RelocType == XCOFF::R_BR || + RelocType == XCOFF::R_RBA || RelocType == XCOFF::R_RBR; + + // If we have a valid relocation, try to print its + // corresponding symbol name. Multiple relocations on the + // same instruction are not handled. + // Branches to fixup code will have the RelFixedUp flag set in + // the RLD. For these instructions, we print the correct + // branch target, but print the referenced symbol as a + // comment. + if (Error E = getRelocationValueString(*RelCur, false, Val)) { + // If -r was used, this error will be printed later. + // Otherwise, we ignore the error and print what + // would have been printed without using relocations. + consumeError(std::move(E)); + *TargetOS << TargetName; + RelFixedUp = false; // Suppress comment for RLD sym name + } else if (BranchRelocationType && !RelFixedUp) + *TargetOS << Val; + else + *TargetOS << TargetName; + if (Disp) + *TargetOS << "+0x" << Twine::utohexstr(Disp); + } else if (!Disp) { *TargetOS << TargetName; } else if (BBAddrMapLabelAvailable) { *TargetOS << BBAddrMapLabels[Target].front(); @@ -2183,6 +2270,12 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, *TargetOS << TargetName << "+0x" << Twine::utohexstr(Disp); } *TargetOS << ">"; + if (RelFixedUp && !InlineRelocs) { + // We have fixup code for a relocation. We print the + // referenced symbol as a comment. + *TargetOS << "\t# " << Val; + } + } else if (BBAddrMapLabelAvailable) { *TargetOS << " <" << BBAddrMapLabels[Target].front() << ">"; } else if (LabelAvailable) { @@ -2208,36 +2301,20 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, if (BTF) printBTFRelocation(FOS, *BTF, {Index, Section.getIndex()}, LVP); - // Hexagon does this in pretty printer - if (Obj.getArch() != Triple::hexagon) { - // Print relocation for instruction and data. - while (RelCur != RelEnd) { - uint64_t Offset = RelCur->getOffset() - RelAdjustment; - // If this relocation is hidden, skip it. - if (getHidden(*RelCur) || SectionAddr + Offset < StartAddress) { - ++RelCur; - continue; - } - - // Stop when RelCur's offset is past the disassembled - // instruction/data. Note that it's possible the disassembled data - // is not the complete data: we might see the relocation printed in - // the middle of the data, but this matches the binutils objdump - // output. - if (Offset >= Index + Size) - break; - + // Hexagon handles relocs in pretty printer + if (InlineRelocs && Obj.getArch() != Triple::hexagon) { + while (findRel()) { // When --adjust-vma is used, update the address printed. if (RelCur->getSymbol() != Obj.symbol_end()) { Expected<section_iterator> SymSI = RelCur->getSymbol()->getSection(); if (SymSI && *SymSI != Obj.section_end() && shouldAdjustVA(**SymSI)) - Offset += AdjustVMA; + RelOffset += AdjustVMA; } printRelocation(FOS, Obj.getFileName(), *RelCur, - SectionAddr + Offset, Is64Bits); + SectionAddr + RelOffset, Is64Bits); LVP.printAfterOtherLine(FOS, true); ++RelCur; } @@ -2421,7 +2498,8 @@ void Dumper::printRelocations() { if (Address < StartAddress || Address > StopAddress || getHidden(Reloc)) continue; Reloc.getTypeName(RelocName); - if (Error E = getRelocationValueString(Reloc, ValueStr)) + if (Error E = + getRelocationValueString(Reloc, SymbolDescription, ValueStr)) reportUniqueWarning(std::move(E)); outs() << format(Fmt.data(), Address) << " " @@ -3313,10 +3391,13 @@ static void parseObjdumpOptions(const llvm::opt::InputArgList &InputArgs) { DisassemblerOptions.push_back(V.str()); } } - if (AsmSyntax) { - const char *Argv[] = {"llvm-objdump", AsmSyntax}; - llvm::cl::ParseCommandLineOptions(2, Argv); - } + SmallVector<const char *> Args = {"llvm-objdump"}; + for (const opt::Arg *A : InputArgs.filtered(OBJDUMP_mllvm)) + Args.push_back(A->getValue()); + if (AsmSyntax) + Args.push_back(AsmSyntax); + if (Args.size() > 1) + llvm::cl::ParseCommandLineOptions(Args.size(), Args.data()); // Look up any provided build IDs, then append them to the input filenames. for (const opt::Arg *A : InputArgs.filtered(OBJDUMP_build_id)) { diff --git a/contrib/llvm-project/llvm/tools/llvm-profdata/llvm-profdata.cpp b/contrib/llvm-project/llvm/tools/llvm-profdata/llvm-profdata.cpp index 322b7da2678f..12b81d411cfa 100644 --- a/contrib/llvm-project/llvm/tools/llvm-profdata/llvm-profdata.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-profdata/llvm-profdata.cpp @@ -1651,10 +1651,10 @@ struct SampleOverlapStats { namespace { struct FuncSampleStats { - uint64_t SampleSum; - uint64_t MaxSample; - uint64_t HotBlockCount; - FuncSampleStats() : SampleSum(0), MaxSample(0), HotBlockCount(0) {} + uint64_t SampleSum = 0; + uint64_t MaxSample = 0; + uint64_t HotBlockCount = 0; + FuncSampleStats() = default; FuncSampleStats(uint64_t SampleSum, uint64_t MaxSample, uint64_t HotBlockCount) : SampleSum(SampleSum), MaxSample(MaxSample), @@ -2563,12 +2563,10 @@ static int overlap_main(int argc, const char *argv[]) { namespace { struct ValueSitesStats { - ValueSitesStats() - : TotalNumValueSites(0), TotalNumValueSitesWithValueProfile(0), - TotalNumValues(0) {} - uint64_t TotalNumValueSites; - uint64_t TotalNumValueSitesWithValueProfile; - uint64_t TotalNumValues; + ValueSitesStats() = default; + uint64_t TotalNumValueSites = 0; + uint64_t TotalNumValueSitesWithValueProfile = 0; + uint64_t TotalNumValues = 0; std::vector<unsigned> ValueSitesHistogram; }; } // namespace @@ -2867,13 +2865,12 @@ static void showSectionInfo(sampleprof::SampleProfileReader *Reader, namespace { struct HotFuncInfo { std::string FuncName; - uint64_t TotalCount; - double TotalCountPercent; - uint64_t MaxCount; - uint64_t EntryCount; + uint64_t TotalCount = 0; + double TotalCountPercent = 0.0f; + uint64_t MaxCount = 0; + uint64_t EntryCount = 0; - HotFuncInfo() - : TotalCount(0), TotalCountPercent(0.0f), MaxCount(0), EntryCount(0) {} + HotFuncInfo() = default; HotFuncInfo(StringRef FN, uint64_t TS, double TSP, uint64_t MS, uint64_t ES) : FuncName(FN.begin(), FN.end()), TotalCount(TS), TotalCountPercent(TSP), diff --git a/contrib/llvm-project/llvm/tools/llvm-readobj/ELFDumper.cpp b/contrib/llvm-project/llvm/tools/llvm-readobj/ELFDumper.cpp index f2851a52671b..abf7ba6ba1c3 100644 --- a/contrib/llvm-project/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -1558,139 +1558,139 @@ const EnumEntry<unsigned> ElfHeaderMipsFlags[] = { }; 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_MACH_AMDGCN_GFX1200), - LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1201), - 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_MACH_AMDGCN_GFX1200), - LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX1201), - 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[] = { @@ -3599,7 +3599,18 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() { 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])); @@ -3646,6 +3657,28 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() { 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; |