[llvm] r339939 - DebugInfo: Add metadata support for disabling DWARF pub sections
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 16 14:29:56 PDT 2018
Author: dblaikie
Date: Thu Aug 16 14:29:55 2018
New Revision: 339939
URL: http://llvm.org/viewvc/llvm-project?rev=339939&view=rev
Log:
DebugInfo: Add metadata support for disabling DWARF pub sections
In cases where the debugger load time is a worthwhile tradeoff (or less
costly - such as loading from a DWP instead of a variety of DWOs
(possibly over a high-latency/distributed filesystem)) against object
file size, it can be reasonable to disable pubnames and corresponding
gdb-index creation in the linker.
A backend-flag version of this was implemented for NVPTX in
D44385/r327994 - which was fine for NVPTX which wouldn't mix-and-match
CUs. Now that it's going to be a user-facing option (likely powered by
"-gno-pubnames", the same as GCC) it should be encoded in the
DICompileUnit so it can vary per-CU.
After this, likely the NVPTX support should be migrated to the metadata
& the previous flag implementation should be removed.
Reviewers: aprantl
Differential Revision: https://reviews.llvm.org/D50213
Added:
llvm/trunk/test/DebugInfo/X86/debug-names-ir-disabled.ll
llvm/trunk/test/DebugInfo/X86/debug-names-partial.ll
llvm/trunk/test/DebugInfo/X86/no-public-sections-metadata.ll
- copied, changed from r339931, llvm/trunk/test/DebugInfo/X86/no-public-sections.ll
Modified:
llvm/trunk/include/llvm/IR/DIBuilder.h
llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
llvm/trunk/lib/AsmParser/LLLexer.cpp
llvm/trunk/lib/AsmParser/LLParser.cpp
llvm/trunk/lib/AsmParser/LLToken.h
llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp
llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/AccelTable.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
llvm/trunk/lib/IR/AsmWriter.cpp
llvm/trunk/lib/IR/DIBuilder.cpp
llvm/trunk/lib/IR/DebugInfo.cpp
llvm/trunk/lib/IR/DebugInfoMetadata.cpp
llvm/trunk/test/Bitcode/dicompileunit-gnu-pubnames.ll
llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll
llvm/trunk/test/DebugInfo/X86/gnu-public-names-gmlt.ll
llvm/trunk/test/DebugInfo/X86/gnu-public-names-multiple-cus.ll
llvm/trunk/test/DebugInfo/X86/gnu-public-names-tu.ll
llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll
llvm/trunk/test/DebugInfo/X86/no-public-sections.ll
llvm/trunk/unittests/IR/MetadataTest.cpp
Modified: llvm/trunk/include/llvm/IR/DIBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DIBuilder.h?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/DIBuilder.h (original)
+++ llvm/trunk/include/llvm/IR/DIBuilder.h Thu Aug 16 14:29:55 2018
@@ -134,8 +134,8 @@ namespace llvm {
/// \param SplitDebugInlining Whether to emit inline debug info.
/// \param DebugInfoForProfiling Whether to emit extra debug info for
/// profile collection.
- /// \param GnuPubnames Whether to emit .debug_gnu_pubnames section instead
- /// of .debug_pubnames.
+ /// \param nameTableKind Whether to emit .debug_gnu_pubnames,
+ /// .debug_pubnames, or no pubnames at all.
DICompileUnit *
createCompileUnit(unsigned Lang, DIFile *File, StringRef Producer,
bool isOptimized, StringRef Flags, unsigned RV,
@@ -144,7 +144,8 @@ namespace llvm {
DICompileUnit::DebugEmissionKind::FullDebug,
uint64_t DWOId = 0, bool SplitDebugInlining = true,
bool DebugInfoForProfiling = false,
- bool GnuPubnames = false);
+ DICompileUnit::DebugNameTableKind NameTableKind =
+ DICompileUnit::DebugNameTableKind::Default);
/// Create a file descriptor to hold debugging information for a file.
/// \param Filename File name.
Modified: llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfoMetadata.h?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/DebugInfoMetadata.h (original)
+++ llvm/trunk/include/llvm/IR/DebugInfoMetadata.h Thu Aug 16 14:29:55 2018
@@ -1171,8 +1171,17 @@ public:
LastEmissionKind = DebugDirectivesOnly
};
+ enum class DebugNameTableKind : unsigned {
+ Default = 0,
+ GNU = 1,
+ None = 2,
+ LastDebugNameTableKind = None
+ };
+
static Optional<DebugEmissionKind> getEmissionKind(StringRef Str);
static const char *emissionKindString(DebugEmissionKind EK);
+ static Optional<DebugNameTableKind> getNameTableKind(StringRef Str);
+ static const char *nameTableKindString(DebugNameTableKind PK);
private:
unsigned SourceLanguage;
@@ -1182,17 +1191,19 @@ private:
uint64_t DWOId;
bool SplitDebugInlining;
bool DebugInfoForProfiling;
- bool GnuPubnames;
+ unsigned NameTableKind;
DICompileUnit(LLVMContext &C, StorageType Storage, unsigned SourceLanguage,
bool IsOptimized, unsigned RuntimeVersion,
unsigned EmissionKind, uint64_t DWOId, bool SplitDebugInlining,
- bool DebugInfoForProfiling, bool GnuPubnames, ArrayRef<Metadata *> Ops)
+ bool DebugInfoForProfiling, unsigned NameTableKind,
+ ArrayRef<Metadata *> Ops)
: DIScope(C, DICompileUnitKind, Storage, dwarf::DW_TAG_compile_unit, Ops),
SourceLanguage(SourceLanguage), IsOptimized(IsOptimized),
RuntimeVersion(RuntimeVersion), EmissionKind(EmissionKind),
DWOId(DWOId), SplitDebugInlining(SplitDebugInlining),
- DebugInfoForProfiling(DebugInfoForProfiling), GnuPubnames(GnuPubnames) {
+ DebugInfoForProfiling(DebugInfoForProfiling),
+ NameTableKind(NameTableKind) {
assert(Storage != Uniqued);
}
~DICompileUnit() = default;
@@ -1206,14 +1217,15 @@ private:
DIGlobalVariableExpressionArray GlobalVariables,
DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros,
uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling,
- bool GnuPubnames, StorageType Storage, bool ShouldCreate = true) {
+ unsigned NameTableKind, StorageType Storage,
+ bool ShouldCreate = true) {
return getImpl(
Context, SourceLanguage, File, getCanonicalMDString(Context, Producer),
IsOptimized, getCanonicalMDString(Context, Flags), RuntimeVersion,
getCanonicalMDString(Context, SplitDebugFilename), EmissionKind,
EnumTypes.get(), RetainedTypes.get(), GlobalVariables.get(),
ImportedEntities.get(), Macros.get(), DWOId, SplitDebugInlining,
- DebugInfoForProfiling, GnuPubnames, Storage, ShouldCreate);
+ DebugInfoForProfiling, NameTableKind, Storage, ShouldCreate);
}
static DICompileUnit *
getImpl(LLVMContext &Context, unsigned SourceLanguage, Metadata *File,
@@ -1222,8 +1234,8 @@ private:
unsigned EmissionKind, Metadata *EnumTypes, Metadata *RetainedTypes,
Metadata *GlobalVariables, Metadata *ImportedEntities,
Metadata *Macros, uint64_t DWOId, bool SplitDebugInlining,
- bool DebugInfoForProfiling, bool GnuPubnames, StorageType Storage,
- bool ShouldCreate = true);
+ bool DebugInfoForProfiling, unsigned NameTableKind,
+ StorageType Storage, bool ShouldCreate = true);
TempDICompileUnit cloneImpl() const {
return getTemporary(getContext(), getSourceLanguage(), getFile(),
@@ -1232,7 +1244,7 @@ private:
getEmissionKind(), getEnumTypes(), getRetainedTypes(),
getGlobalVariables(), getImportedEntities(),
getMacros(), DWOId, getSplitDebugInlining(),
- getDebugInfoForProfiling(), getGnuPubnames());
+ getDebugInfoForProfiling(), getNameTableKind());
}
public:
@@ -1248,11 +1260,11 @@ public:
DIGlobalVariableExpressionArray GlobalVariables,
DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros,
uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling,
- bool GnuPubnames),
+ DebugNameTableKind NameTableKind),
(SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion,
SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes,
GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining,
- DebugInfoForProfiling, GnuPubnames))
+ DebugInfoForProfiling, (unsigned)NameTableKind))
DEFINE_MDNODE_GET_DISTINCT_TEMPORARY(
DICompileUnit,
(unsigned SourceLanguage, Metadata *File, MDString *Producer,
@@ -1260,11 +1272,12 @@ public:
MDString *SplitDebugFilename, unsigned EmissionKind, Metadata *EnumTypes,
Metadata *RetainedTypes, Metadata *GlobalVariables,
Metadata *ImportedEntities, Metadata *Macros, uint64_t DWOId,
- bool SplitDebugInlining, bool DebugInfoForProfiling, bool GnuPubnames),
+ bool SplitDebugInlining, bool DebugInfoForProfiling,
+ unsigned NameTableKind),
(SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion,
SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes,
GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining,
- DebugInfoForProfiling, GnuPubnames))
+ DebugInfoForProfiling, NameTableKind))
TempDICompileUnit clone() const { return cloneImpl(); }
@@ -1278,7 +1291,9 @@ public:
return EmissionKind == DebugDirectivesOnly;
}
bool getDebugInfoForProfiling() const { return DebugInfoForProfiling; }
- bool getGnuPubnames() const { return GnuPubnames; }
+ DebugNameTableKind getNameTableKind() const {
+ return (DebugNameTableKind)NameTableKind;
+ }
StringRef getProducer() const { return getStringOperand(1); }
StringRef getFlags() const { return getStringOperand(2); }
StringRef getSplitDebugFilename() const { return getStringOperand(3); }
Modified: llvm/trunk/lib/AsmParser/LLLexer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLLexer.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/LLLexer.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLLexer.cpp Thu Aug 16 14:29:55 2018
@@ -910,6 +910,11 @@ lltok::Kind LLLexer::LexIdentifier() {
return lltok::EmissionKind;
}
+ if (Keyword == "GNU" || Keyword == "None" || Keyword == "Default") {
+ StrVal.assign(Keyword.begin(), Keyword.end());
+ return lltok::NameTableKind;
+ }
+
// Check for [us]0x[0-9A-Fa-f]+ which are Hexadecimal constant generated by
// the CFE to avoid forcing it to deal with 64-bit numbers.
if ((TokStart[0] == 'u' || TokStart[0] == 's') &&
Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Thu Aug 16 14:29:55 2018
@@ -3718,6 +3718,13 @@ struct EmissionKindField : public MDUnsi
EmissionKindField() : MDUnsignedField(0, DICompileUnit::LastEmissionKind) {}
};
+struct NameTableKindField : public MDUnsignedField {
+ NameTableKindField()
+ : MDUnsignedField(
+ 0, (unsigned)
+ DICompileUnit::DebugNameTableKind::LastDebugNameTableKind) {}
+};
+
struct DIFlagField : public MDFieldImpl<DINode::DIFlags> {
DIFlagField() : MDFieldImpl(DINode::FlagZero) {}
};
@@ -3938,6 +3945,25 @@ bool LLParser::ParseMDField(LocTy Loc, S
template <>
bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
+ NameTableKindField &Result) {
+ if (Lex.getKind() == lltok::APSInt)
+ return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result));
+
+ if (Lex.getKind() != lltok::NameTableKind)
+ return TokError("expected nameTable kind");
+
+ auto Kind = DICompileUnit::getNameTableKind(Lex.getStrVal());
+ if (!Kind)
+ return TokError("invalid nameTable kind" + Twine(" '") + Lex.getStrVal() +
+ "'");
+ assert(((unsigned)*Kind) <= Result.Max && "Expected valid nameTable kind");
+ Result.assign((unsigned)*Kind);
+ Lex.Lex();
+ return false;
+}
+
+template <>
+bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
DwarfAttEncodingField &Result) {
if (Lex.getKind() == lltok::APSInt)
return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result));
@@ -4448,7 +4474,7 @@ bool LLParser::ParseDICompileUnit(MDNode
OPTIONAL(dwoId, MDUnsignedField, ); \
OPTIONAL(splitDebugInlining, MDBoolField, = true); \
OPTIONAL(debugInfoForProfiling, MDBoolField, = false); \
- OPTIONAL(gnuPubnames, MDBoolField, = false);
+ OPTIONAL(nameTableKind, NameTableKindField, );
PARSE_MD_FIELDS();
#undef VISIT_MD_FIELDS
@@ -4456,7 +4482,7 @@ bool LLParser::ParseDICompileUnit(MDNode
Context, language.Val, file.Val, producer.Val, isOptimized.Val, flags.Val,
runtimeVersion.Val, splitDebugFilename.Val, emissionKind.Val, enums.Val,
retainedTypes.Val, globals.Val, imports.Val, macros.Val, dwoId.Val,
- splitDebugInlining.Val, debugInfoForProfiling.Val, gnuPubnames.Val);
+ splitDebugInlining.Val, debugInfoForProfiling.Val, nameTableKind.Val);
return false;
}
Modified: llvm/trunk/lib/AsmParser/LLToken.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLToken.h?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/LLToken.h (original)
+++ llvm/trunk/lib/AsmParser/LLToken.h Thu Aug 16 14:29:55 2018
@@ -434,6 +434,7 @@ enum Kind {
DwarfLang, // DW_LANG_foo
DwarfCC, // DW_CC_foo
EmissionKind, // lineTablesOnly
+ NameTableKind, // GNU
DwarfOp, // DW_OP_foo
DIFlag, // DIFlagFoo
DwarfMacinfo, // DW_MACINFO_foo
Modified: llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp Thu Aug 16 14:29:55 2018
@@ -1393,7 +1393,7 @@ Error MetadataLoader::MetadataLoaderImpl
Record.size() <= 14 ? 0 : Record[14],
Record.size() <= 16 ? true : Record[16],
Record.size() <= 17 ? false : Record[17],
- Record.size() <= 18 ? false : Record[18]);
+ Record.size() <= 18 ? 0 : Record[18]);
MetadataList.assignValue(CU, NextMetadataNo);
NextMetadataNo++;
Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Thu Aug 16 14:29:55 2018
@@ -1603,7 +1603,7 @@ void ModuleBitcodeWriter::writeDICompile
Record.push_back(VE.getMetadataOrNullID(N->getMacros().get()));
Record.push_back(N->getSplitDebugInlining());
Record.push_back(N->getDebugInfoForProfiling());
- Record.push_back(N->getGnuPubnames());
+ Record.push_back((unsigned)N->getNameTableKind());
Stream.EmitRecord(bitc::METADATA_COMPILE_UNIT, Record, Abbrev);
Record.clear();
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AccelTable.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AccelTable.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/AccelTable.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AccelTable.cpp Thu Aug 16 14:29:55 2018
@@ -23,6 +23,7 @@
#include "llvm/MC/MCStreamer.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/Target/TargetLoweringObjectFile.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
@@ -554,12 +555,21 @@ void llvm::emitDWARF5AccelTable(
const DwarfDebug &DD, ArrayRef<std::unique_ptr<DwarfCompileUnit>> CUs) {
std::vector<MCSymbol *> CompUnits;
for (const auto &CU : enumerate(CUs)) {
+ if (CU.value()->getCUNode()->getNameTableKind() ==
+ DICompileUnit::DebugNameTableKind::None)
+ continue;
assert(CU.index() == CU.value()->getUniqueID());
const DwarfCompileUnit *MainCU =
DD.useSplitDwarf() ? CU.value()->getSkeleton() : CU.value().get();
CompUnits.push_back(MainCU->getLabelBegin());
}
+ if (CompUnits.empty())
+ return;
+
+ Asm->OutStreamer->SwitchSection(
+ Asm->getObjFileLowering().getDwarfDebugNamesSection());
+
Contents.finalize(Asm, "names");
Dwarf5AccelTableWriter<DWARF5AccelTableData>(
Asm, Contents, CompUnits,
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Thu Aug 16 14:29:55 2018
@@ -249,13 +249,13 @@ DIE *DwarfCompileUnit::getOrCreateGlobal
addLinkageName(*VariableDIE, GV->getLinkageName());
if (addToAccelTable) {
- DD->addAccelName(GV->getName(), *VariableDIE);
+ DD->addAccelName(*CUNode, GV->getName(), *VariableDIE);
// If the linkage name is different than the name, go ahead and output
// that as well into the name table.
if (GV->getLinkageName() != "" && GV->getName() != GV->getLinkageName() &&
DD->useAllLinkageNames())
- DD->addAccelName(GV->getLinkageName(), *VariableDIE);
+ DD->addAccelName(*CUNode, GV->getLinkageName(), *VariableDIE);
}
return VariableDIE;
@@ -348,7 +348,7 @@ DIE &DwarfCompileUnit::updateSubprogramS
// Add name to the name table, we do this here because we're guaranteed
// to have concrete versions of our DW_TAG_subprogram nodes.
- DD->addSubprogramNames(SP, *SPDie);
+ DD->addSubprogramNames(*CUNode, SP, *SPDie);
return *SPDie;
}
@@ -486,7 +486,7 @@ DIE *DwarfCompileUnit::constructInlinedS
// Add name to the name table, we do this here because we're guaranteed
// to have concrete versions of our DW_TAG_inlined_subprogram nodes.
- DD->addSubprogramNames(InlinedSP, *ScopeDIE);
+ DD->addSubprogramNames(*CUNode, InlinedSP, *ScopeDIE);
return ScopeDIE;
}
@@ -883,13 +883,17 @@ void DwarfCompileUnit::emitHeader(bool U
}
bool DwarfCompileUnit::hasDwarfPubSections() const {
- // Opting in to GNU Pubnames/types overrides the default to ensure these are
- // generated for things like Gold's gdb_index generation.
- if (CUNode->getGnuPubnames())
+ switch (CUNode->getNameTableKind()) {
+ case DICompileUnit::DebugNameTableKind::None:
+ return false;
+ // Opting in to GNU Pubnames/types overrides the default to ensure these are
+ // generated for things like Gold's gdb_index generation.
+ case DICompileUnit::DebugNameTableKind::GNU:
return true;
-
- return DD->tuneForGDB() && DD->usePubSections() &&
- !includeMinimalInlineScopes() && !CUNode->isDebugDirectivesOnly();
+ case DICompileUnit::DebugNameTableKind::Default:
+ return DD->tuneForGDB() && DD->usePubSections() &&
+ !includeMinimalInlineScopes() && !CUNode->isDebugDirectivesOnly();
+ }
}
/// addGlobalName - Add a new global name to the compile unit.
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Thu Aug 16 14:29:55 2018
@@ -421,30 +421,35 @@ static StringRef getObjCMethodName(Strin
}
// Add the various names to the Dwarf accelerator table names.
-void DwarfDebug::addSubprogramNames(const DISubprogram *SP, DIE &Die) {
+void DwarfDebug::addSubprogramNames(const DICompileUnit &CU,
+ const DISubprogram *SP, DIE &Die) {
+ if (getAccelTableKind() != AccelTableKind::Apple &&
+ CU.getNameTableKind() == DICompileUnit::DebugNameTableKind::None)
+ return;
+
if (!SP->isDefinition())
return;
if (SP->getName() != "")
- addAccelName(SP->getName(), Die);
+ addAccelName(CU, SP->getName(), Die);
// If the linkage name is different than the name, go ahead and output that as
// well into the name table. Only do that if we are going to actually emit
// that name.
if (SP->getLinkageName() != "" && SP->getName() != SP->getLinkageName() &&
(useAllLinkageNames() || InfoHolder.getAbstractSPDies().lookup(SP)))
- addAccelName(SP->getLinkageName(), Die);
+ addAccelName(CU, SP->getLinkageName(), Die);
// If this is an Objective-C selector name add it to the ObjC accelerator
// too.
if (isObjCClass(SP->getName())) {
StringRef Class, Category;
getObjCClassCategory(SP->getName(), Class, Category);
- addAccelObjC(Class, Die);
+ addAccelObjC(CU, Class, Die);
if (Category != "")
- addAccelObjC(Category, Die);
+ addAccelObjC(CU, Category, Die);
// Also add the base method name to the name table.
- addAccelName(getObjCMethodName(SP->getName()), Die);
+ addAccelName(CU, getObjCMethodName(SP->getName()), Die);
}
}
@@ -1537,8 +1542,6 @@ void DwarfDebug::emitAccelDebugNames() {
if (getUnits().empty())
return;
- Asm->OutStreamer->SwitchSection(
- Asm->getObjFileLowering().getDwarfDebugNamesSection());
emitDWARF5AccelTable(Asm, AccelDebugNames, *this, getUnits());
}
@@ -1643,7 +1646,8 @@ void DwarfDebug::emitDebugPubSections()
if (!TheU->hasDwarfPubSections())
continue;
- bool GnuStyle = TheU->getCUNode()->getGnuPubnames();
+ bool GnuStyle = TheU->getCUNode()->getNameTableKind() ==
+ DICompileUnit::DebugNameTableKind::GNU;
Asm->OutStreamer->SwitchSection(
GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
@@ -2431,11 +2435,16 @@ void DwarfDebug::addDwarfTypeUnitType(Dw
// AccelTableKind::Apple, we use the table we got as an argument). If
// accelerator tables are disabled, this function does nothing.
template <typename DataT>
-void DwarfDebug::addAccelNameImpl(AccelTable<DataT> &AppleAccel, StringRef Name,
+void DwarfDebug::addAccelNameImpl(const DICompileUnit &CU,
+ AccelTable<DataT> &AppleAccel, StringRef Name,
const DIE &Die) {
if (getAccelTableKind() == AccelTableKind::None)
return;
+ if (getAccelTableKind() != AccelTableKind::Apple &&
+ CU.getNameTableKind() == DICompileUnit::DebugNameTableKind::None)
+ return;
+
DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
DwarfStringPoolEntryRef Ref = Holder.getStringPool().getEntry(*Asm, Name);
@@ -2453,22 +2462,26 @@ void DwarfDebug::addAccelNameImpl(AccelT
}
}
-void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) {
- addAccelNameImpl(AccelNames, Name, Die);
+void DwarfDebug::addAccelName(const DICompileUnit &CU, StringRef Name,
+ const DIE &Die) {
+ addAccelNameImpl(CU, AccelNames, Name, Die);
}
-void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) {
+void DwarfDebug::addAccelObjC(const DICompileUnit &CU, StringRef Name,
+ const DIE &Die) {
// ObjC names go only into the Apple accelerator tables.
if (getAccelTableKind() == AccelTableKind::Apple)
- addAccelNameImpl(AccelObjC, Name, Die);
+ addAccelNameImpl(CU, AccelObjC, Name, Die);
}
-void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) {
- addAccelNameImpl(AccelNamespace, Name, Die);
+void DwarfDebug::addAccelNamespace(const DICompileUnit &CU, StringRef Name,
+ const DIE &Die) {
+ addAccelNameImpl(CU, AccelNamespace, Name, Die);
}
-void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) {
- addAccelNameImpl(AccelTypes, Name, Die);
+void DwarfDebug::addAccelType(const DICompileUnit &CU, StringRef Name,
+ const DIE &Die, char Flags) {
+ addAccelNameImpl(CU, AccelTypes, Name, Die);
}
uint16_t DwarfDebug::getDwarfVersion() const {
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Thu Aug 16 14:29:55 2018
@@ -346,8 +346,8 @@ class DwarfDebug : public DebugHandlerBa
void constructAbstractSubprogramScopeDIE(DwarfCompileUnit &SrcCU, LexicalScope *Scope);
template <typename DataT>
- void addAccelNameImpl(AccelTable<DataT> &AppleAccel, StringRef Name,
- const DIE &Die);
+ void addAccelNameImpl(const DICompileUnit &CU, AccelTable<DataT> &AppleAccel,
+ StringRef Name, const DIE &Die);
void finishVariableDefinitions();
@@ -608,17 +608,20 @@ public:
return Ref.resolve();
}
- void addSubprogramNames(const DISubprogram *SP, DIE &Die);
+ void addSubprogramNames(const DICompileUnit &CU, const DISubprogram *SP,
+ DIE &Die);
AddressPool &getAddressPool() { return AddrPool; }
- void addAccelName(StringRef Name, const DIE &Die);
+ void addAccelName(const DICompileUnit &CU, StringRef Name, const DIE &Die);
- void addAccelObjC(StringRef Name, const DIE &Die);
+ void addAccelObjC(const DICompileUnit &CU, StringRef Name, const DIE &Die);
- void addAccelNamespace(StringRef Name, const DIE &Die);
+ void addAccelNamespace(const DICompileUnit &CU, StringRef Name,
+ const DIE &Die);
- void addAccelType(StringRef Name, const DIE &Die, char Flags);
+ void addAccelType(const DICompileUnit &CU, StringRef Name, const DIE &Die,
+ char Flags);
const MachineFunction *getCurrentFunction() const { return CurFn; }
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Thu Aug 16 14:29:55 2018
@@ -795,7 +795,7 @@ void DwarfUnit::updateAcceleratorTables(
IsImplementation = CT->getRuntimeLang() == 0 || CT->isObjcClassComplete();
}
unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
- DD->addAccelType(Ty->getName(), TyDIE, Flags);
+ DD->addAccelType(*CUNode, Ty->getName(), TyDIE, Flags);
if (!Context || isa<DICompileUnit>(Context) || isa<DIFile>(Context) ||
isa<DINamespace>(Context))
@@ -1168,7 +1168,7 @@ DIE *DwarfUnit::getOrCreateNameSpace(con
addString(NDie, dwarf::DW_AT_name, NS->getName());
else
Name = "(anonymous namespace)";
- DD->addAccelNamespace(Name, NDie);
+ DD->addAccelNamespace(*CUNode, Name, NDie);
addGlobalName(Name, NDie, NS->getScope());
if (NS->getExportSymbols())
addFlag(NDie, dwarf::DW_AT_export_symbols);
@@ -1417,7 +1417,7 @@ DIE *DwarfUnit::getIndexTyDie() {
addUInt(*IndexTyDie, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
addUInt(*IndexTyDie, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
dwarf::DW_ATE_unsigned);
- DD->addAccelType(Name, *IndexTyDie, /*Flags*/ 0);
+ DD->addAccelType(*CUNode, Name, *IndexTyDie, /*Flags*/ 0);
return IndexTyDie;
}
Modified: llvm/trunk/lib/IR/AsmWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWriter.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/IR/AsmWriter.cpp (original)
+++ llvm/trunk/lib/IR/AsmWriter.cpp Thu Aug 16 14:29:55 2018
@@ -1604,6 +1604,8 @@ struct MDFieldPrinter {
void printDwarfEnum(StringRef Name, IntTy Value, Stringifier toString,
bool ShouldSkipZero = true);
void printEmissionKind(StringRef Name, DICompileUnit::DebugEmissionKind EK);
+ void printNameTableKind(StringRef Name,
+ DICompileUnit::DebugNameTableKind NTK);
};
} // end anonymous namespace
@@ -1701,6 +1703,13 @@ void MDFieldPrinter::printEmissionKind(S
Out << FS << Name << ": " << DICompileUnit::emissionKindString(EK);
}
+void MDFieldPrinter::printNameTableKind(StringRef Name,
+ DICompileUnit::DebugNameTableKind NTK) {
+ if (NTK == DICompileUnit::DebugNameTableKind::Default)
+ return;
+ Out << FS << Name << ": " << DICompileUnit::nameTableKindString(NTK);
+}
+
template <class IntTy, class Stringifier>
void MDFieldPrinter::printDwarfEnum(StringRef Name, IntTy Value,
Stringifier toString, bool ShouldSkipZero) {
@@ -1891,7 +1900,7 @@ static void writeDICompileUnit(raw_ostre
Printer.printBool("splitDebugInlining", N->getSplitDebugInlining(), true);
Printer.printBool("debugInfoForProfiling", N->getDebugInfoForProfiling(),
false);
- Printer.printBool("gnuPubnames", N->getGnuPubnames(), false);
+ Printer.printNameTableKind("nameTableKind", N->getNameTableKind());
Out << ")";
}
Modified: llvm/trunk/lib/IR/DIBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuilder.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DIBuilder.cpp (original)
+++ llvm/trunk/lib/IR/DIBuilder.cpp Thu Aug 16 14:29:55 2018
@@ -139,7 +139,8 @@ DICompileUnit *DIBuilder::createCompileU
unsigned Lang, DIFile *File, StringRef Producer, bool isOptimized,
StringRef Flags, unsigned RunTimeVer, StringRef SplitName,
DICompileUnit::DebugEmissionKind Kind, uint64_t DWOId,
- bool SplitDebugInlining, bool DebugInfoForProfiling, bool GnuPubnames) {
+ bool SplitDebugInlining, bool DebugInfoForProfiling,
+ DICompileUnit::DebugNameTableKind NameTableKind) {
assert(((Lang <= dwarf::DW_LANG_Fortran08 && Lang >= dwarf::DW_LANG_C89) ||
(Lang <= dwarf::DW_LANG_hi_user && Lang >= dwarf::DW_LANG_lo_user)) &&
@@ -149,7 +150,7 @@ DICompileUnit *DIBuilder::createCompileU
CUNode = DICompileUnit::getDistinct(
VMContext, Lang, File, Producer, isOptimized, Flags, RunTimeVer,
SplitName, Kind, nullptr, nullptr, nullptr, nullptr, nullptr, DWOId,
- SplitDebugInlining, DebugInfoForProfiling, GnuPubnames);
+ SplitDebugInlining, DebugInfoForProfiling, NameTableKind);
// Create a named metadata so that it is easier to find cu in a module.
NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.cu");
Modified: llvm/trunk/lib/IR/DebugInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DebugInfo.cpp (original)
+++ llvm/trunk/lib/IR/DebugInfo.cpp Thu Aug 16 14:29:55 2018
@@ -491,7 +491,7 @@ private:
CU->getSplitDebugFilename(), DICompileUnit::LineTablesOnly, EnumTypes,
RetainedTypes, GlobalVariables, ImportedEntities, CU->getMacros(),
CU->getDWOId(), CU->getSplitDebugInlining(),
- CU->getDebugInfoForProfiling(), CU->getGnuPubnames());
+ CU->getDebugInfoForProfiling(), CU->getNameTableKind());
}
DILocation *getReplacementMDLocation(DILocation *MLD) {
Modified: llvm/trunk/lib/IR/DebugInfoMetadata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfoMetadata.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DebugInfoMetadata.cpp (original)
+++ llvm/trunk/lib/IR/DebugInfoMetadata.cpp Thu Aug 16 14:29:55 2018
@@ -450,7 +450,7 @@ DICompileUnit *DICompileUnit::getImpl(
unsigned EmissionKind, Metadata *EnumTypes, Metadata *RetainedTypes,
Metadata *GlobalVariables, Metadata *ImportedEntities, Metadata *Macros,
uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling,
- bool GnuPubnames, StorageType Storage, bool ShouldCreate) {
+ unsigned NameTableKind, StorageType Storage, bool ShouldCreate) {
assert(Storage != Uniqued && "Cannot unique DICompileUnit");
assert(isCanonical(Producer) && "Expected canonical MDString");
assert(isCanonical(Flags) && "Expected canonical MDString");
@@ -463,7 +463,7 @@ DICompileUnit *DICompileUnit::getImpl(
return storeImpl(new (array_lengthof(Ops)) DICompileUnit(
Context, Storage, SourceLanguage, IsOptimized,
RuntimeVersion, EmissionKind, DWOId, SplitDebugInlining,
- DebugInfoForProfiling, GnuPubnames, Ops),
+ DebugInfoForProfiling, NameTableKind, Ops),
Storage);
}
@@ -477,6 +477,15 @@ DICompileUnit::getEmissionKind(StringRef
.Default(None);
}
+Optional<DICompileUnit::DebugNameTableKind>
+DICompileUnit::getNameTableKind(StringRef Str) {
+ return StringSwitch<Optional<DebugNameTableKind>>(Str)
+ .Case("Default", DebugNameTableKind::Default)
+ .Case("GNU", DebugNameTableKind::GNU)
+ .Case("None", DebugNameTableKind::None)
+ .Default(None);
+}
+
const char *DICompileUnit::emissionKindString(DebugEmissionKind EK) {
switch (EK) {
case NoDebug: return "NoDebug";
@@ -486,6 +495,18 @@ const char *DICompileUnit::emissionKindS
}
return nullptr;
}
+
+const char *DICompileUnit::nameTableKindString(DebugNameTableKind NTK) {
+ switch (NTK) {
+ case DebugNameTableKind::Default:
+ return nullptr;
+ case DebugNameTableKind::GNU:
+ return "GNU";
+ case DebugNameTableKind::None:
+ return "None";
+ }
+ return nullptr;
+}
DISubprogram *DILocalScope::getSubprogram() const {
if (auto *Block = dyn_cast<DILexicalBlockBase>(this))
Modified: llvm/trunk/test/Bitcode/dicompileunit-gnu-pubnames.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/dicompileunit-gnu-pubnames.ll?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/test/Bitcode/dicompileunit-gnu-pubnames.ll (original)
+++ llvm/trunk/test/Bitcode/dicompileunit-gnu-pubnames.ll Thu Aug 16 14:29:55 2018
@@ -1,6 +1,6 @@
; RUN: llvm-as -disable-verify -o - %s | llvm-dis | FileCheck %s
!named = !{!0}
-; CHECK: !DICompileUnit({{.*}}, gnuPubnames: true)
-!0 = distinct !DICompileUnit(language: 12, file: !1, gnuPubnames: true)
+; CHECK: !DICompileUnit({{.*}}, nameTableKind: GNU)
+!0 = distinct !DICompileUnit(language: 12, file: !1, nameTableKind: GNU)
!1 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
Added: llvm/trunk/test/DebugInfo/X86/debug-names-ir-disabled.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/debug-names-ir-disabled.ll?rev=339939&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/debug-names-ir-disabled.ll (added)
+++ llvm/trunk/test/DebugInfo/X86/debug-names-ir-disabled.ll Thu Aug 16 14:29:55 2018
@@ -0,0 +1,29 @@
+; REQUIRES: object-emission
+
+; Verify that no DWARF v5 names section is emitted when all CUs disable name tables.
+; RUN: llc -mtriple x86_64-pc-linux -filetype=obj < %s \
+; RUN: | llvm-objdump -h - | FileCheck %s
+
+; CHECK-NOT: debug_names
+
+define dso_local i32 @main() !dbg !7 {
+entry:
+ ret i32 0, !dbg !11
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3, !4, !5}
+!llvm.ident = !{!6}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 8.0.0 (trunk 339438) (llvm/trunk 339448)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
+!1 = !DIFile(filename: "foo.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch", checksumkind: CSK_MD5, checksum: "f881137628fc8dd673b761eb7a1e2432")
+!2 = !{}
+!3 = !{i32 2, !"Dwarf Version", i32 5}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = !{i32 1, !"wchar_size", i32 4}
+!6 = !{!"clang version 8.0.0 (trunk 339438) (llvm/trunk 339448)"}
+!7 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
+!8 = !DISubroutineType(types: !9)
+!9 = !{!10}
+!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!11 = !DILocation(line: 1, column: 13, scope: !7)
Added: llvm/trunk/test/DebugInfo/X86/debug-names-partial.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/debug-names-partial.ll?rev=339939&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/debug-names-partial.ll (added)
+++ llvm/trunk/test/DebugInfo/X86/debug-names-partial.ll Thu Aug 16 14:29:55 2018
@@ -0,0 +1,46 @@
+; REQUIRES: object-emission
+
+; Verify that DWARF v5 debug_names omit names from CUs that opt-out.
+; RUN: llc -mtriple x86_64-pc-linux -filetype=obj < %s \
+; RUN: | llvm-dwarfdump -debug-names - | FileCheck %s
+
+; CHECK: CU count: 1
+
+; Check that the one CU that is indexed has a non-zero.
+; Avoid checking for a specific offset to make the test more resilient.
+; CHECK: Compilation Unit offsets [
+; CHECK-NEXT: CU[0]: 0x{{[0-9]*[1-9][0-9]*}}
+; CHECK-NEXT: ]
+
+define dso_local i32 @main() !dbg !9 {
+entry:
+ ret i32 0, !dbg !13
+}
+
+define dso_local void @_Z2f1v() !dbg !14 {
+entry:
+ ret void, !dbg !17
+}
+
+!llvm.dbg.cu = !{!0, !3}
+!llvm.ident = !{!5, !5}
+!llvm.module.flags = !{!6, !7, !8}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 8.0.0 (trunk 339438) (llvm/trunk 339448)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
+!1 = !DIFile(filename: "foo.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch", checksumkind: CSK_MD5, checksum: "f881137628fc8dd673b761eb7a1e2432")
+!2 = !{}
+!3 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !4, producer: "clang version 8.0.0 (trunk 339438) (llvm/trunk 339448)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
+!4 = !DIFile(filename: "bar.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch", checksumkind: CSK_MD5, checksum: "ba8dae3bceaf6ef87728337164565a87")
+!5 = !{!"clang version 8.0.0 (trunk 339438) (llvm/trunk 339448)"}
+!6 = !{i32 2, !"Dwarf Version", i32 5}
+!7 = !{i32 2, !"Debug Info Version", i32 3}
+!8 = !{i32 1, !"wchar_size", i32 4}
+!9 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 1, type: !10, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
+!10 = !DISubroutineType(types: !11)
+!11 = !{!12}
+!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!13 = !DILocation(line: 1, column: 13, scope: !9)
+!14 = distinct !DISubprogram(name: "f1", linkageName: "_Z2f1v", scope: !4, file: !4, line: 1, type: !15, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !3, retainedNodes: !2)
+!15 = !DISubroutineType(types: !16)
+!16 = !{null}
+!17 = !DILocation(line: 1, column: 12, scope: !14)
Modified: llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll Thu Aug 16 14:29:55 2018
@@ -17,7 +17,7 @@
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3, !4}
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.4 (trunk 191846) (llvm/trunk 191866)", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !5, globals: !2, imports: !2, gnuPubnames: true)
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.4 (trunk 191846) (llvm/trunk 191866)", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !5, globals: !2, imports: !2, nameTableKind: GNU)
!1 = !DIFile(filename: "foo.c", directory: "/usr/local/google/home/echristo/tmp")
!2 = !{}
!3 = !{i32 2, !"Dwarf Version", i32 4}
Modified: llvm/trunk/test/DebugInfo/X86/gnu-public-names-gmlt.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/gnu-public-names-gmlt.ll?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/gnu-public-names-gmlt.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/gnu-public-names-gmlt.ll Thu Aug 16 14:29:55 2018
@@ -1,4 +1,4 @@
-; RUN: sed -e 's/gnuPubnames: false/gnuPubnames: true/' %s | llc -mtriple=x86_64-pc-linux-gnu -filetype=obj | llvm-dwarfdump -v - | FileCheck --check-prefix=GPUB %s
+; RUN: sed -e 's/nameTableKind: Default/nameTableKind: GNU/' %s | llc -mtriple=x86_64-pc-linux-gnu -filetype=obj | llvm-dwarfdump -v - | FileCheck --check-prefix=GPUB %s
; RUN: llc -mtriple=x86_64-pc-linux-gnu -filetype=obj < %s | llvm-dwarfdump -v - | FileCheck --check-prefix=NONE %s
; Generated from:
@@ -46,7 +46,7 @@ attributes #1 = { "correctly-rounded-div
!llvm.module.flags = !{!3, !4, !5}
!llvm.ident = !{!6}
-!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 5.0.0 (trunk 303768) (llvm/trunk 303774)", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !2, gnuPubnames: false)
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 5.0.0 (trunk 303768) (llvm/trunk 303774)", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !2, nameTableKind: Default)
!1 = !DIFile(filename: "gnu-public-names-gmlt.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch")
!2 = !{}
!3 = !{i32 2, !"Dwarf Version", i32 4}
Modified: llvm/trunk/test/DebugInfo/X86/gnu-public-names-multiple-cus.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/gnu-public-names-multiple-cus.ll?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/gnu-public-names-multiple-cus.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/gnu-public-names-multiple-cus.ll Thu Aug 16 14:29:55 2018
@@ -23,4 +23,4 @@ target triple = "x86_64-unknown-linux-gn
!8 = !DIGlobalVariableExpression(var: !9, expr: !DIExpression())
!9 = !DIGlobalVariable(name: "b", scope: null, file: !2, line: 2, type: !3, isLocal: false, isDefinition: true)
!10 = !{!8}
-!11 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !5, retainedTypes: !5, globals: !10, gnuPubnames: true)
+!11 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !5, retainedTypes: !5, globals: !10, nameTableKind: GNU)
Modified: llvm/trunk/test/DebugInfo/X86/gnu-public-names-tu.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/gnu-public-names-tu.ll?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/gnu-public-names-tu.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/gnu-public-names-tu.ll Thu Aug 16 14:29:55 2018
@@ -39,7 +39,7 @@
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "b", scope: !2, file: !3, line: 8, type: !6, isLocal: false, isDefinition: true)
-!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 5.0.0 (trunk 293904) (llvm/trunk 293908)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, gnuPubnames: true)
+!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 5.0.0 (trunk 293904) (llvm/trunk 293908)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: GNU)
!3 = !DIFile(filename: "type.cpp", directory: "/tmp/dbginfo")
!4 = !{}
!5 = !{!0}
Modified: llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll Thu Aug 16 14:29:55 2018
@@ -302,7 +302,7 @@ attributes #1 = { nounwind readnone }
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", scope: !2, file: !3, line: 7, type: !9, isLocal: false, isDefinition: true, declaration: !8)
-!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 3.7.0 (trunk 234897) (llvm/trunk 234911)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !5, globals: !21, imports: !44, gnuPubnames: true)
+!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 3.7.0 (trunk 234897) (llvm/trunk 234911)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !5, globals: !21, imports: !44, nameTableKind: GNU)
!3 = !DIFile(filename: "gnu-public-names.cpp", directory: "/tmp/dbginfo")
!4 = !{}
!5 = !{!6, !17}
Copied: llvm/trunk/test/DebugInfo/X86/no-public-sections-metadata.ll (from r339931, llvm/trunk/test/DebugInfo/X86/no-public-sections.ll)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/no-public-sections-metadata.ll?p2=llvm/trunk/test/DebugInfo/X86/no-public-sections-metadata.ll&p1=llvm/trunk/test/DebugInfo/X86/no-public-sections.ll&r1=339931&r2=339939&rev=339939&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/no-public-sections.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/no-public-sections-metadata.ll Thu Aug 16 14:29:55 2018
@@ -1,9 +1,6 @@
-; RUN: llc -mtriple=x86_64-pc-linux-gnu -debugger-tune=gdb -filetype=asm < %s -no-dwarf-pub-sections | FileCheck %s --check-prefix=DISABLED
-; RUN: llc -mtriple=x86_64-pc-linux-gnu -debugger-tune=gdb -filetype=asm < %s | FileCheck %s
+; RUN: llc -mtriple=x86_64-pc-linux-gnu -debugger-tune=gdb -filetype=asm < %s | FileCheck %s --check-prefix=DISABLED
-; DISABLED-NOT: {{.debug_pubnames|.debug_pubtypes}}
-; CHECK-DAG: .section .debug_pubnames
-; CHECK-DAG: .section .debug_pubtypes
+; DISABLED-NOT: pub{{names|types}}
%struct.bar = type { %"struct.ns::foo" }
%"struct.ns::foo" = type { i8 }
@@ -16,7 +13,7 @@
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "b", scope: !2, file: !3, line: 8, type: !6, isLocal: false, isDefinition: true)
-!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, gnuPubnames: false)
+!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: None)
!3 = !DIFile(filename: "type.cpp", directory: "/tmp/dbginfo")
!4 = !{}
!5 = !{!0}
Modified: llvm/trunk/test/DebugInfo/X86/no-public-sections.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/no-public-sections.ll?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/no-public-sections.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/no-public-sections.ll Thu Aug 16 14:29:55 2018
@@ -16,7 +16,7 @@
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "b", scope: !2, file: !3, line: 8, type: !6, isLocal: false, isDefinition: true)
-!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, gnuPubnames: false)
+!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: Default)
!3 = !DIFile(filename: "type.cpp", directory: "/tmp/dbginfo")
!4 = !{}
!5 = !{!0}
Modified: llvm/trunk/unittests/IR/MetadataTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/MetadataTest.cpp?rev=339939&r1=339938&r2=339939&view=diff
==============================================================================
--- llvm/trunk/unittests/IR/MetadataTest.cpp (original)
+++ llvm/trunk/unittests/IR/MetadataTest.cpp Thu Aug 16 14:29:55 2018
@@ -95,7 +95,8 @@ protected:
return DICompileUnit::getDistinct(
Context, 1, getFile(), "clang", false, "-g", 2, "",
DICompileUnit::FullDebug, getTuple(), getTuple(), getTuple(),
- getTuple(), getTuple(), 0, true, false, false);
+ getTuple(), getTuple(), 0, true, false,
+ DICompileUnit::DebugNameTableKind::Default);
}
DIType *getBasicType(StringRef Name) {
return DIBasicType::get(Context, dwarf::DW_TAG_unspecified_type, Name);
@@ -1507,7 +1508,7 @@ TEST_F(DICompileUnitTest, get) {
Context, SourceLanguage, File, Producer, IsOptimized, Flags,
RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, true,
- false, false);
+ false, DICompileUnit::DebugNameTableKind::Default);
EXPECT_EQ(dwarf::DW_TAG_compile_unit, N->getTag());
EXPECT_EQ(SourceLanguage, N->getSourceLanguage());
@@ -1565,7 +1566,7 @@ TEST_F(DICompileUnitTest, replaceArrays)
Context, SourceLanguage, File, Producer, IsOptimized, Flags,
RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes,
RetainedTypes, nullptr, ImportedEntities, nullptr, DWOId, true, false,
- false);
+ DICompileUnit::DebugNameTableKind::Default);
auto *GlobalVariables = MDTuple::getDistinct(Context, None);
EXPECT_EQ(nullptr, N->getGlobalVariables().get());
More information about the llvm-commits
mailing list