From c17aee67f1007426fb12f4081183bb8ec5dc3d15 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Fri, 17 Jan 2020 12:52:36 -0800 Subject: [PATCH] Revert "Rename DW_AT_LLVM_isysroot to DW_AT_LLVM_sysroot" This reverts commit 12e479475a896f664fb721f98c2d6805185ac352. I accidentally landed this patch with the wrong commit message ... --- clang/lib/CodeGen/CGDebugInfo.cpp | 8 +- clang/test/CodeGen/debug-info-sysroot.c | 15 ---- clang/test/CodeGen/debug-nvptx.c | 2 +- clang/test/Modules/debug-info-moduleimport.m | 4 +- .../SymbolFile/DWARF/SymbolFileDWARF.cpp | 2 +- llvm/bindings/go/llvm/dibuilder.go | 4 - llvm/include/llvm-c/DebugInfo.h | 9 ++- llvm/include/llvm/IR/DIBuilder.h | 7 +- llvm/include/llvm/IR/DebugInfoMetadata.h | 76 ++++++++++--------- llvm/lib/AsmParser/LLParser.cpp | 15 ++-- llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 15 ++-- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 2 - llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 5 +- llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 2 + llvm/lib/IR/AsmWriter.cpp | 2 +- llvm/lib/IR/DIBuilder.cpp | 12 +-- llvm/lib/IR/DebugInfo.cpp | 23 +++--- llvm/lib/IR/DebugInfoMetadata.cpp | 16 ++-- llvm/lib/IR/LLVMContextImpl.h | 13 ++-- llvm/test/Assembler/dicompileunit.ll | 5 +- llvm/test/Assembler/dimodule.ll | 4 +- llvm/test/Bindings/llvm-c/debug_info.ll | 2 +- llvm/test/CodeGen/X86/load-combine-dbg.ll | 2 +- llvm/test/DebugInfo/X86/DIModule.ll | 10 +-- llvm/test/DebugInfo/X86/DIModuleContext.ll | 2 +- llvm/test/DebugInfo/X86/clang-module.ll | 4 +- .../test/DebugInfo/X86/split-dwarf-sysroot.ll | 34 --------- llvm/tools/llvm-c-test/debuginfo.c | 12 +-- llvm/unittests/IR/MetadataTest.cpp | 32 ++++---- 29 files changed, 147 insertions(+), 192 deletions(-) delete mode 100644 clang/test/CodeGen/debug-info-sysroot.c delete mode 100644 llvm/test/DebugInfo/X86/split-dwarf-sysroot.ll diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index ffc3870c153b..cbd524eda9d0 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -610,10 +610,6 @@ void CGDebugInfo::CreateCompileUnit() { remapDIPath(MainFileName), remapDIPath(getCurrentDirname()), CSInfo, getSource(SM, SM.getMainFileID())); - StringRef Sysroot; - if (CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::LLDB) - Sysroot = CGM.getHeaderSearchOpts().Sysroot; - // Create new compile unit. TheCU = DBuilder.createCompileUnit( LangTag, CUFile, CGOpts.EmitVersionIdentMetadata ? Producer : "", @@ -624,7 +620,7 @@ void CGDebugInfo::CreateCompileUnit() { ? llvm::DICompileUnit::DebugNameTableKind::None : static_cast( CGOpts.DebugNameTable), - CGOpts.DebugRangesBaseAddress, Sysroot); + CGOpts.DebugRangesBaseAddress); } llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) { @@ -2475,7 +2471,7 @@ CGDebugInfo::getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod, CreateSkeletonCU); llvm::DIModule *DIMod = DBuilder.createModule(Parent, Mod.getModuleName(), ConfigMacros, - Mod.getPath()); + Mod.getPath(), CGM.getHeaderSearchOpts().Sysroot); ModuleCache[M].reset(DIMod); return DIMod; } diff --git a/clang/test/CodeGen/debug-info-sysroot.c b/clang/test/CodeGen/debug-info-sysroot.c deleted file mode 100644 index bb3c0c820cee..000000000000 --- a/clang/test/CodeGen/debug-info-sysroot.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \ -// RUN: %s -isysroot /CLANG_SYSROOT -emit-llvm -o - \ -// RUN: -debugger-tuning=lldb | FileCheck %s --check-prefix=LLDB -// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \ -// RUN: %s -isysroot /CLANG_SYSROOT -emit-llvm -o - \ -// RUN: -debugger-tuning=gdb | FileCheck %s --check-prefix=GDB - -void foo() {} - -// The sysroot is an LLDB-tuning-specific attribute. - -// LLDB: distinct !DICompileUnit({{.*}}sysroot: "/CLANG_SYSROOT" -// GDB: distinct !DICompileUnit( -// GDB-NOT: sysroot: "/CLANG_SYSROOT" - diff --git a/clang/test/CodeGen/debug-nvptx.c b/clang/test/CodeGen/debug-nvptx.c index 8780c5db6801..ceff30082960 100644 --- a/clang/test/CodeGen/debug-nvptx.c +++ b/clang/test/CodeGen/debug-nvptx.c @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -triple nvptx-unknown-unknown -S -o - -debug-info-kind=limited %s -emit-llvm | FileCheck %s -// CHECK: DICompileUnit({{.*}}, nameTableKind: None +// CHECK: DICompileUnit({{.*}}, nameTableKind: None) void f1(void) { } diff --git a/clang/test/Modules/debug-info-moduleimport.m b/clang/test/Modules/debug-info-moduleimport.m index f07c6fce784d..df8a66bebfb6 100644 --- a/clang/test/Modules/debug-info-moduleimport.m +++ b/clang/test/Modules/debug-info-moduleimport.m @@ -8,14 +8,14 @@ // RUN: %clang_cc1 -debug-info-kind=limited -fmodules -DGREETING="Hello World" -UNDEBUG -fimplicit-module-maps -fmodules-cache-path=%t %s -I %S/Inputs -isysroot /tmp/.. -I %t -emit-llvm -debugger-tuning=lldb -o - | FileCheck %s // CHECK: ![[CU:.*]] = distinct !DICompileUnit -// CHECK-SAME: sysroot: "/tmp/..") @import DebugObjC; // CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: ![[CU]], // CHECK-SAME: entity: ![[MODULE:.*]], file: ![[F:[0-9]+]], // CHECK-SAME: line: [[@LINE-3]]) // CHECK: ![[MODULE]] = !DIModule(scope: null, name: "DebugObjC", // CHECK-SAME: configMacros: "\22-DGREETING=Hello World\22 \22-UNDEBUG\22", -// CHECK-SAME: includePath: "{{.*}}test{{.*}}Modules{{.*}}Inputs" +// CHECK-SAME: includePath: "{{.*}}test{{.*}}Modules{{.*}}Inputs", +// CHECK-SAME: sysroot: "/tmp/..") // CHECK: ![[F]] = !DIFile(filename: {{.*}}debug-info-moduleimport.m // RUN: %clang_cc1 -debug-info-kind=limited -fmodules -fimplicit-module-maps -fmodules-cache-path=%t \ diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 29012bdb95a9..7d0d5b16b7e5 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -970,7 +970,7 @@ bool SymbolFileDWARF::ParseImportedModules( if (const char *include_path = module_die.GetAttributeValueAsString( DW_AT_LLVM_include_path, nullptr)) module.search_path = ConstString(include_path); - if (const char *sysroot = dwarf_cu->DIE().GetAttributeValueAsString( + if (const char *sysroot = module_die.GetAttributeValueAsString( DW_AT_LLVM_sysroot, nullptr)) module.sysroot = ConstString(sysroot); imported_modules.push_back(module); diff --git a/llvm/bindings/go/llvm/dibuilder.go b/llvm/bindings/go/llvm/dibuilder.go index d7397fdb605e..caee85e2958f 100644 --- a/llvm/bindings/go/llvm/dibuilder.go +++ b/llvm/bindings/go/llvm/dibuilder.go @@ -117,7 +117,6 @@ type DICompileUnit struct { Optimized bool Flags string RuntimeVersion int - SysRoot string } // CreateCompileUnit creates compile unit debug metadata. @@ -130,8 +129,6 @@ func (d *DIBuilder) CreateCompileUnit(cu DICompileUnit) Metadata { defer C.free(unsafe.Pointer(producer)) flags := C.CString(cu.Flags) defer C.free(unsafe.Pointer(flags)) - sysroot := C.CString(cu.SysRoot) - defer C.free(unsafe.Pointer(sysroot)) result := C.LLVMDIBuilderCreateCompileUnit( d.ref, C.LLVMDWARFSourceLanguage(cu.Language), @@ -145,7 +142,6 @@ func (d *DIBuilder) CreateCompileUnit(cu DICompileUnit) Metadata { /*DWOId=*/ 0, /*SplitDebugInlining*/ C.LLVMBool(boolToCInt(true)), /*DebugInfoForProfiling*/ C.LLVMBool(boolToCInt(false)), - sysroot ) return Metadata{C: result} } diff --git a/llvm/include/llvm-c/DebugInfo.h b/llvm/include/llvm-c/DebugInfo.h index 3bb6a64ed487..e933fe4b3f92 100644 --- a/llvm/include/llvm-c/DebugInfo.h +++ b/llvm/include/llvm-c/DebugInfo.h @@ -250,8 +250,6 @@ void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder); * \param SplitDebugInlining Whether to emit inline debug info. * \param DebugInfoForProfiling Whether to emit extra debug info for * profile collection. - * \param SysRoot The Clang system root (value of -isysroot). - * \param SysRootLen The length of the C string passed to \c SysRoot. */ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang, @@ -259,7 +257,7 @@ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( LLVMBool isOptimized, const char *Flags, size_t FlagsLen, unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen, LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining, - LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen); + LLVMBool DebugInfoForProfiling); /** * Create a file descriptor to hold debugging information for a file. @@ -285,12 +283,15 @@ LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, const char *Filename, * \param ConfigMacrosLen The length of the C string passed to \c ConfigMacros. * \param IncludePath The path to the module map file. * \param IncludePathLen The length of the C string passed to \c IncludePath. + * \param SysRoot The Clang system root (value of -isysroot). + * \param SysRootLen The length of the C string passed to \c SysRoot. */ LLVMMetadataRef LLVMDIBuilderCreateModule(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope, const char *Name, size_t NameLen, const char *ConfigMacros, size_t ConfigMacrosLen, - const char *IncludePath, size_t IncludePathLen); + const char *IncludePath, size_t IncludePathLen, + const char *SysRoot, size_t SysRootLen); /** * Creates a new descriptor for a namespace with the specified parent scope. diff --git a/llvm/include/llvm/IR/DIBuilder.h b/llvm/include/llvm/IR/DIBuilder.h index cbc96a483f91..f7c242554f6a 100644 --- a/llvm/include/llvm/IR/DIBuilder.h +++ b/llvm/include/llvm/IR/DIBuilder.h @@ -135,7 +135,6 @@ namespace llvm { /// profile collection. /// \param NameTableKind Whether to emit .debug_gnu_pubnames, /// .debug_pubnames, or no pubnames at all. - /// \param SysRoot The clang system root (value of -isysroot). DICompileUnit * createCompileUnit(unsigned Lang, DIFile *File, StringRef Producer, bool isOptimized, StringRef Flags, unsigned RV, @@ -146,7 +145,7 @@ namespace llvm { bool DebugInfoForProfiling = false, DICompileUnit::DebugNameTableKind NameTableKind = DICompileUnit::DebugNameTableKind::Default, - bool RangesBaseAddress = false, StringRef SysRoot = {}); + bool RangesBaseAddress = false); /// Create a file descriptor to hold debugging information for a file. /// \param Filename File name. @@ -735,9 +734,11 @@ namespace llvm { /// A space-separated shell-quoted list of -D macro /// definitions as they would appear on a command line. /// \param IncludePath The path to the module map file. + /// \param SysRoot The clang system root (value of -isysroot). DIModule *createModule(DIScope *Scope, StringRef Name, StringRef ConfigurationMacros, - StringRef IncludePath); + StringRef IncludePath, + StringRef SysRoot); /// This creates a descriptor for a lexical block with a new file /// attached. This merely extends the existing diff --git a/llvm/include/llvm/IR/DebugInfoMetadata.h b/llvm/include/llvm/IR/DebugInfoMetadata.h index acc518445585..d6bfe504dd94 100644 --- a/llvm/include/llvm/IR/DebugInfoMetadata.h +++ b/llvm/include/llvm/IR/DebugInfoMetadata.h @@ -1172,16 +1172,16 @@ private: DIGlobalVariableExpressionArray GlobalVariables, DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, - unsigned NameTableKind, bool RangesBaseAddress, StringRef SysRoot, - 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, NameTableKind, RangesBaseAddress, - getCanonicalMDString(Context, SysRoot), Storage, ShouldCreate); + unsigned NameTableKind, bool RangesBaseAddress, 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, + NameTableKind, RangesBaseAddress, Storage, ShouldCreate); } static DICompileUnit * getImpl(LLVMContext &Context, unsigned SourceLanguage, Metadata *File, @@ -1191,8 +1191,7 @@ private: Metadata *GlobalVariables, Metadata *ImportedEntities, Metadata *Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, unsigned NameTableKind, - bool RangesBaseAddress, MDString *SysRoot, StorageType Storage, - bool ShouldCreate = true); + bool RangesBaseAddress, StorageType Storage, bool ShouldCreate = true); TempDICompileUnit cloneImpl() const { return getTemporary( @@ -1201,7 +1200,7 @@ private: getEmissionKind(), getEnumTypes(), getRetainedTypes(), getGlobalVariables(), getImportedEntities(), getMacros(), DWOId, getSplitDebugInlining(), getDebugInfoForProfiling(), getNameTableKind(), - getRangesBaseAddress(), getSysRoot()); + getRangesBaseAddress()); } public: @@ -1217,13 +1216,11 @@ public: DIGlobalVariableExpressionArray GlobalVariables, DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, - DebugNameTableKind NameTableKind, bool RangesBaseAddress, - StringRef SysRoot), + DebugNameTableKind NameTableKind, bool RangesBaseAddress), (SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining, - DebugInfoForProfiling, (unsigned)NameTableKind, RangesBaseAddress, - SysRoot)) + DebugInfoForProfiling, (unsigned)NameTableKind, RangesBaseAddress)) DEFINE_MDNODE_GET_DISTINCT_TEMPORARY( DICompileUnit, (unsigned SourceLanguage, Metadata *File, MDString *Producer, @@ -1232,11 +1229,11 @@ public: Metadata *RetainedTypes, Metadata *GlobalVariables, Metadata *ImportedEntities, Metadata *Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, - unsigned NameTableKind, bool RangesBaseAddress, MDString *SysRoot), + unsigned NameTableKind, bool RangesBaseAddress), (SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining, - DebugInfoForProfiling, NameTableKind, RangesBaseAddress, SysRoot)) + DebugInfoForProfiling, NameTableKind, RangesBaseAddress)) TempDICompileUnit clone() const { return cloneImpl(); } @@ -1253,10 +1250,14 @@ public: DebugNameTableKind getNameTableKind() const { return (DebugNameTableKind)NameTableKind; } - bool getRangesBaseAddress() const { return RangesBaseAddress; } - StringRef getProducer() const { return getStringOperand(1); } - StringRef getFlags() const { return getStringOperand(2); } - StringRef getSplitDebugFilename() const { return getStringOperand(3); } + bool getRangesBaseAddress() const { + return RangesBaseAddress; } + StringRef getProducer() const { + return getStringOperand(1); } + StringRef getFlags() const { + return getStringOperand(2); } + StringRef getSplitDebugFilename() const { + return getStringOperand(3); } DICompositeTypeArray getEnumTypes() const { return cast_or_null(getRawEnumTypes()); } @@ -1278,7 +1279,6 @@ public: void setSplitDebugInlining(bool SplitDebugInlining) { this->SplitDebugInlining = SplitDebugInlining; } - StringRef getSysRoot() const { return getStringOperand(9); } MDString *getRawProducer() const { return getOperandAs(1); } MDString *getRawFlags() const { return getOperandAs(2); } @@ -1290,7 +1290,6 @@ public: Metadata *getRawGlobalVariables() const { return getOperand(6); } Metadata *getRawImportedEntities() const { return getOperand(7); } Metadata *getRawMacros() const { return getOperand(8); } - MDString *getRawSysRoot() const { return getOperandAs(9); } /// Replace arrays. /// @@ -2083,33 +2082,36 @@ class DIModule : public DIScope { : DIScope(Context, DIModuleKind, Storage, dwarf::DW_TAG_module, Ops) {} ~DIModule() = default; - static DIModule *getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name, - StringRef ConfigurationMacros, StringRef IncludePath, + static DIModule *getImpl(LLVMContext &Context, DIScope *Scope, + StringRef Name, StringRef ConfigurationMacros, + StringRef IncludePath, StringRef SysRoot, StorageType Storage, bool ShouldCreate = true) { return getImpl(Context, Scope, getCanonicalMDString(Context, Name), getCanonicalMDString(Context, ConfigurationMacros), getCanonicalMDString(Context, IncludePath), + getCanonicalMDString(Context, SysRoot), Storage, ShouldCreate); } static DIModule *getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name, MDString *ConfigurationMacros, - MDString *IncludePath, StorageType Storage, - bool ShouldCreate = true); + MDString *IncludePath, MDString *SysRoot, + StorageType Storage, bool ShouldCreate = true); TempDIModule cloneImpl() const { return getTemporary(getContext(), getScope(), getName(), - getConfigurationMacros(), getIncludePath()); + getConfigurationMacros(), getIncludePath(), + getSysRoot()); } public: - DEFINE_MDNODE_GET(DIModule, - (DIScope * Scope, StringRef Name, - StringRef ConfigurationMacros, StringRef IncludePath), - (Scope, Name, ConfigurationMacros, IncludePath)) + DEFINE_MDNODE_GET(DIModule, (DIScope *Scope, StringRef Name, + StringRef ConfigurationMacros, StringRef IncludePath, + StringRef SysRoot), + (Scope, Name, ConfigurationMacros, IncludePath, SysRoot)) DEFINE_MDNODE_GET(DIModule, (Metadata *Scope, MDString *Name, MDString *ConfigurationMacros, - MDString *IncludePath), - (Scope, Name, ConfigurationMacros, IncludePath)) + MDString *IncludePath, MDString *SysRoot), + (Scope, Name, ConfigurationMacros, IncludePath, SysRoot)) TempDIModule clone() const { return cloneImpl(); } @@ -2117,11 +2119,13 @@ public: StringRef getName() const { return getStringOperand(1); } StringRef getConfigurationMacros() const { return getStringOperand(2); } StringRef getIncludePath() const { return getStringOperand(3); } + StringRef getSysRoot() const { return getStringOperand(4); } Metadata *getRawScope() const { return getOperand(0); } MDString *getRawName() const { return getOperandAs(1); } MDString *getRawConfigurationMacros() const { return getOperandAs(2); } MDString *getRawIncludePath() const { return getOperandAs(3); } + MDString *getRawSysRoot() const { return getOperandAs(4); } static bool classof(const Metadata *MD) { return MD->getMetadataID() == DIModuleKind; diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index a5a6ecae9803..d0d0b948316e 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -4633,8 +4633,7 @@ bool LLParser::ParseDIFile(MDNode *&Result, bool IsDistinct) { /// isOptimized: true, flags: "-O2", runtimeVersion: 1, /// splitDebugFilename: "abc.debug", /// emissionKind: FullDebug, enums: !1, retainedTypes: !2, -/// globals: !4, imports: !5, macros: !6, dwoId: 0x0abcd, -/// sysroot: "/") +/// globals: !4, imports: !5, macros: !6, dwoId: 0x0abcd) bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) { if (!IsDistinct) return Lex.Error("missing 'distinct', required for !DICompileUnit"); @@ -4657,8 +4656,7 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) { OPTIONAL(splitDebugInlining, MDBoolField, = true); \ OPTIONAL(debugInfoForProfiling, MDBoolField, = false); \ OPTIONAL(nameTableKind, NameTableKindField, ); \ - OPTIONAL(debugBaseAddress, MDBoolField, = false); \ - OPTIONAL(sysroot, MDStringField, ); + OPTIONAL(debugBaseAddress, MDBoolField, = false); PARSE_MD_FIELDS(); #undef VISIT_MD_FIELDS @@ -4667,7 +4665,7 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) { runtimeVersion.Val, splitDebugFilename.Val, emissionKind.Val, enums.Val, retainedTypes.Val, globals.Val, imports.Val, macros.Val, dwoId.Val, splitDebugInlining.Val, debugInfoForProfiling.Val, nameTableKind.Val, - debugBaseAddress.Val, sysroot.Val); + debugBaseAddress.Val); return false; } @@ -4823,18 +4821,19 @@ bool LLParser::ParseDIMacroFile(MDNode *&Result, bool IsDistinct) { /// ParseDIModule: /// ::= !DIModule(scope: !0, name: "SomeModule", configMacros: "-DNDEBUG", -/// includePath: "/usr/include") +/// includePath: "/usr/include", sysroot: "/") bool LLParser::ParseDIModule(MDNode *&Result, bool IsDistinct) { #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ REQUIRED(scope, MDField, ); \ REQUIRED(name, MDStringField, ); \ OPTIONAL(configMacros, MDStringField, ); \ - OPTIONAL(includePath, MDStringField, ); + OPTIONAL(includePath, MDStringField, ); \ + OPTIONAL(sysroot, MDStringField, ); PARSE_MD_FIELDS(); #undef VISIT_MD_FIELDS Result = GET_OR_DISTINCT(DIModule, (Context, scope.Val, name.Val, - configMacros.Val, includePath.Val)); + configMacros.Val, includePath.Val, sysroot.Val)); return false; } diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 3cff468dca89..d16c3b0ff59d 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -1418,14 +1418,15 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( } case bitc::METADATA_MODULE: { - if (Record.size() < 5 || Record.size() > 6) + if (Record.size() != 6) return error("Invalid record"); IsDistinct = Record[0]; MetadataList.assignValue( - GET_OR_DISTINCT( - DIModule, (Context, getMDOrNull(Record[1]), getMDString(Record[2]), - getMDString(Record[3]), getMDString(Record[4]))), + GET_OR_DISTINCT(DIModule, + (Context, getMDOrNull(Record[1]), + getMDString(Record[2]), getMDString(Record[3]), + getMDString(Record[4]), getMDString(Record[5]))), NextMetadataNo); NextMetadataNo++; break; @@ -1456,7 +1457,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( break; } case bitc::METADATA_COMPILE_UNIT: { - if (Record.size() < 14 || Record.size() > 21) + if (Record.size() < 14 || Record.size() > 19) return error("Invalid record"); // Ignore Record[0], which indicates whether this compile unit is @@ -1472,9 +1473,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( Record.size() <= 16 ? true : Record[16], Record.size() <= 17 ? false : Record[17], Record.size() <= 18 ? 0 : Record[18], - false, // FIXME: https://reviews.llvm.org/rGc51b45e32ef7f35c11891f60871aa9c2c04cd991 - // Record.size() <= 19 ? 0 : Record[19], - Record.size() <= 20 ? nullptr : getMDString(Record[20])); + Record.size() <= 19 ? 0 : Record[19]); MetadataList.assignValue(CU, NextMetadataNo); NextMetadataNo++; diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 956bbcd0c430..ef92bc2c91c7 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -1662,8 +1662,6 @@ void ModuleBitcodeWriter::writeDICompileUnit(const DICompileUnit *N, Record.push_back(N->getSplitDebugInlining()); Record.push_back(N->getDebugInfoForProfiling()); Record.push_back((unsigned)N->getNameTableKind()); - Record.push_back(N->getRangesBaseAddress()); - Record.push_back(VE.getMetadataOrNullID(N->getRawSysRoot())); Stream.EmitRecord(bitc::METADATA_COMPILE_UNIT, Record, Abbrev); Record.clear(); diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 922c43881d22..4c96f0aff819 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -836,9 +836,6 @@ void DwarfDebug::finishUnitAttributes(const DICompileUnit *DIUnit, NewCU.addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2, DIUnit->getSourceLanguage()); NewCU.addString(Die, dwarf::DW_AT_name, FN); - StringRef SysRoot = DIUnit->getSysRoot(); - if (!SysRoot.empty()) - NewCU.addString(Die, dwarf::DW_AT_LLVM_sysroot, SysRoot); // Add DW_str_offsets_base to the unit DIE, except for split units. if (useSegmentedStringOffsetsTable() && !useSplitDwarf()) @@ -851,6 +848,7 @@ void DwarfDebug::finishUnitAttributes(const DICompileUnit *DIUnit, // skeleton CU and so we don't need to duplicate it here. if (!CompilationDir.empty()) NewCU.addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); + addGnuPubAttributes(NewCU, Die); } @@ -2824,6 +2822,7 @@ void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die, if (!CompilationDir.empty()) NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); + addGnuPubAttributes(*NewU, Die); SkeletonHolder.addUnit(std::move(NewU)); diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 85f3ee408189..1aba956c48de 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1122,6 +1122,8 @@ DIE *DwarfUnit::getOrCreateModule(const DIModule *M) { M->getConfigurationMacros()); if (!M->getIncludePath().empty()) addString(MDie, dwarf::DW_AT_LLVM_include_path, M->getIncludePath()); + if (!M->getSysRoot().empty()) + addString(MDie, dwarf::DW_AT_LLVM_sysroot, M->getSysRoot()); return &MDie; } diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp index 1c57508b5867..71d97755d661 100644 --- a/llvm/lib/IR/AsmWriter.cpp +++ b/llvm/lib/IR/AsmWriter.cpp @@ -1945,7 +1945,6 @@ static void writeDICompileUnit(raw_ostream &Out, const DICompileUnit *N, false); Printer.printNameTableKind("nameTableKind", N->getNameTableKind()); Printer.printBool("rangesBaseAddress", N->getRangesBaseAddress(), false); - Printer.printString("sysroot", N->getSysRoot()); Out << ")"; } @@ -2058,6 +2057,7 @@ static void writeDIModule(raw_ostream &Out, const DIModule *N, Printer.printString("name", N->getName()); Printer.printString("configMacros", N->getConfigurationMacros()); Printer.printString("includePath", N->getIncludePath()); + Printer.printString("sysroot", N->getSysRoot()); Out << ")"; } diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp index 0fcac7d402cf..c89f404e4296 100644 --- a/llvm/lib/IR/DIBuilder.cpp +++ b/llvm/lib/IR/DIBuilder.cpp @@ -140,8 +140,7 @@ DICompileUnit *DIBuilder::createCompileUnit( StringRef Flags, unsigned RunTimeVer, StringRef SplitName, DICompileUnit::DebugEmissionKind Kind, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, - DICompileUnit::DebugNameTableKind NameTableKind, bool RangesBaseAddress, - StringRef SysRoot) { + DICompileUnit::DebugNameTableKind NameTableKind, bool RangesBaseAddress) { assert(((Lang <= dwarf::DW_LANG_Fortran08 && Lang >= dwarf::DW_LANG_C89) || (Lang <= dwarf::DW_LANG_hi_user && Lang >= dwarf::DW_LANG_lo_user)) && @@ -152,7 +151,7 @@ DICompileUnit *DIBuilder::createCompileUnit( VMContext, Lang, File, Producer, isOptimized, Flags, RunTimeVer, SplitName, Kind, nullptr, nullptr, nullptr, nullptr, nullptr, DWOId, SplitDebugInlining, DebugInfoForProfiling, NameTableKind, - RangesBaseAddress, SysRoot); + RangesBaseAddress); // Create a named metadata so that it is easier to find cu in a module. NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.cu"); @@ -830,9 +829,10 @@ DINamespace *DIBuilder::createNameSpace(DIScope *Scope, StringRef Name, DIModule *DIBuilder::createModule(DIScope *Scope, StringRef Name, StringRef ConfigurationMacros, - StringRef IncludePath) { - return DIModule::get(VMContext, getNonCompileUnitScope(Scope), Name, - ConfigurationMacros, IncludePath); + StringRef IncludePath, + StringRef SysRoot) { + return DIModule::get(VMContext, getNonCompileUnitScope(Scope), Name, + ConfigurationMacros, IncludePath, SysRoot); } DILexicalBlockFile *DIBuilder::createLexicalBlockFile(DIScope *Scope, diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index 1e9675473730..868bcf68ae83 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -514,7 +514,7 @@ private: RetainedTypes, GlobalVariables, ImportedEntities, CU->getMacros(), CU->getDWOId(), CU->getSplitDebugInlining(), CU->getDebugInfoForProfiling(), CU->getNameTableKind(), - CU->getRangesBaseAddress(), CU->getSysRoot()); + CU->getRangesBaseAddress()); } DILocation *getReplacementMDLocation(DILocation *MLD) { @@ -782,17 +782,16 @@ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( LLVMBool isOptimized, const char *Flags, size_t FlagsLen, unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen, LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining, - LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen) { + LLVMBool DebugInfoForProfiling) { auto File = unwrapDI(FileRef); return wrap(unwrap(Builder)->createCompileUnit( - map_from_llvmDWARFsourcelanguage(Lang), File, - StringRef(Producer, ProducerLen), isOptimized, StringRef(Flags, FlagsLen), - RuntimeVer, StringRef(SplitName, SplitNameLen), - static_cast(Kind), DWOId, - SplitDebugInlining, DebugInfoForProfiling, - DICompileUnit::DebugNameTableKind::Default, false, - StringRef(SysRoot, SysRootLen))); + map_from_llvmDWARFsourcelanguage(Lang), File, + StringRef(Producer, ProducerLen), isOptimized, + StringRef(Flags, FlagsLen), RuntimeVer, + StringRef(SplitName, SplitNameLen), + static_cast(Kind), DWOId, + SplitDebugInlining, DebugInfoForProfiling)); } LLVMMetadataRef @@ -807,11 +806,13 @@ LLVMMetadataRef LLVMDIBuilderCreateModule(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope, const char *Name, size_t NameLen, const char *ConfigMacros, size_t ConfigMacrosLen, - const char *IncludePath, size_t IncludePathLen) { + const char *IncludePath, size_t IncludePathLen, + const char *SysRoot, size_t SysRootLen) { return wrap(unwrap(Builder)->createModule( unwrapDI(ParentScope), StringRef(Name, NameLen), StringRef(ConfigMacros, ConfigMacrosLen), - StringRef(IncludePath, IncludePathLen))); + StringRef(IncludePath, IncludePathLen), + StringRef(SysRoot, SysRootLen))); } LLVMMetadataRef LLVMDIBuilderCreateNameSpace(LLVMDIBuilderRef Builder, diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp index c470a9696c3d..d3ecd9b0e03d 100644 --- a/llvm/lib/IR/DebugInfoMetadata.cpp +++ b/llvm/lib/IR/DebugInfoMetadata.cpp @@ -520,8 +520,8 @@ DICompileUnit *DICompileUnit::getImpl( unsigned EmissionKind, Metadata *EnumTypes, Metadata *RetainedTypes, Metadata *GlobalVariables, Metadata *ImportedEntities, Metadata *Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, - unsigned NameTableKind, bool RangesBaseAddress, MDString *SysRoot, - StorageType Storage, bool ShouldCreate) { + unsigned NameTableKind, bool RangesBaseAddress, StorageType Storage, + bool ShouldCreate) { assert(Storage != Uniqued && "Cannot unique DICompileUnit"); assert(isCanonical(Producer) && "Expected canonical MDString"); assert(isCanonical(Flags) && "Expected canonical MDString"); @@ -530,7 +530,7 @@ DICompileUnit *DICompileUnit::getImpl( Metadata *Ops[] = { File, Producer, Flags, SplitDebugFilename, EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, - Macros, SysRoot}; + Macros}; return storeImpl(new (array_lengthof(Ops)) DICompileUnit( Context, Storage, SourceLanguage, IsOptimized, RuntimeVersion, EmissionKind, DWOId, SplitDebugInlining, @@ -715,12 +715,12 @@ DICommonBlock *DICommonBlock::getImpl(LLVMContext &Context, Metadata *Scope, DIModule *DIModule::getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name, MDString *ConfigurationMacros, - MDString *IncludePath, StorageType Storage, - bool ShouldCreate) { + MDString *IncludePath, MDString *SysRoot, + StorageType Storage, bool ShouldCreate) { assert(isCanonical(Name) && "Expected canonical MDString"); - DEFINE_GETIMPL_LOOKUP(DIModule, - (Scope, Name, ConfigurationMacros, IncludePath)); - Metadata *Ops[] = {Scope, Name, ConfigurationMacros, IncludePath}; + DEFINE_GETIMPL_LOOKUP( + DIModule, (Scope, Name, ConfigurationMacros, IncludePath, SysRoot)); + Metadata *Ops[] = {Scope, Name, ConfigurationMacros, IncludePath, SysRoot}; DEFINE_GETIMPL_STORE_NO_CONSTRUCTOR_ARGS(DIModule, Ops); } diff --git a/llvm/lib/IR/LLVMContextImpl.h b/llvm/lib/IR/LLVMContextImpl.h index bcdb50e4c326..6f5d5752b38d 100644 --- a/llvm/lib/IR/LLVMContextImpl.h +++ b/llvm/lib/IR/LLVMContextImpl.h @@ -819,24 +819,27 @@ template <> struct MDNodeKeyImpl { MDString *Name; MDString *ConfigurationMacros; MDString *IncludePath; + MDString *SysRoot; MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *ConfigurationMacros, - MDString *IncludePath) + MDString *IncludePath, MDString *SysRoot) : Scope(Scope), Name(Name), ConfigurationMacros(ConfigurationMacros), - IncludePath(IncludePath) {} + IncludePath(IncludePath), SysRoot(SysRoot) {} MDNodeKeyImpl(const DIModule *N) : Scope(N->getRawScope()), Name(N->getRawName()), ConfigurationMacros(N->getRawConfigurationMacros()), - IncludePath(N->getRawIncludePath()) {} + IncludePath(N->getRawIncludePath()), SysRoot(N->getRawSysRoot()) {} bool isKeyOf(const DIModule *RHS) const { return Scope == RHS->getRawScope() && Name == RHS->getRawName() && ConfigurationMacros == RHS->getRawConfigurationMacros() && - IncludePath == RHS->getRawIncludePath(); + IncludePath == RHS->getRawIncludePath() && + SysRoot == RHS->getRawSysRoot(); } unsigned getHashValue() const { - return hash_combine(Scope, Name, ConfigurationMacros, IncludePath); + return hash_combine(Scope, Name, + ConfigurationMacros, IncludePath, SysRoot); } }; diff --git a/llvm/test/Assembler/dicompileunit.ll b/llvm/test/Assembler/dicompileunit.ll index cca284fc41c4..c1683e2d630b 100644 --- a/llvm/test/Assembler/dicompileunit.ll +++ b/llvm/test/Assembler/dicompileunit.ll @@ -16,14 +16,13 @@ !6 = distinct !{} !7 = distinct !{} -; CHECK: !8 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", isOptimized: true, flags: "-O2", runtimeVersion: 2, splitDebugFilename: "abc.debug", emissionKind: FullDebug, enums: !2, retainedTypes: !3, globals: !5, imports: !6, macros: !7, dwoId: 42, sysroot: "/") +; CHECK: !8 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", isOptimized: true, flags: "-O2", runtimeVersion: 2, splitDebugFilename: "abc.debug", emissionKind: FullDebug, enums: !2, retainedTypes: !3, globals: !5, imports: !6, macros: !7, dwoId: 42) !8 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", isOptimized: true, flags: "-O2", runtimeVersion: 2, splitDebugFilename: "abc.debug", emissionKind: FullDebug, enums: !2, retainedTypes: !3, - globals: !5, imports: !6, macros: !7, dwoId: 42, - splitDebugInlining: true, sysroot: "/") + globals: !5, imports: !6, macros: !7, dwoId: 42, splitDebugInlining: true) ; CHECK: !9 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug) !9 = distinct !DICompileUnit(language: 12, file: !1, producer: "", diff --git a/llvm/test/Assembler/dimodule.ll b/llvm/test/Assembler/dimodule.ll index cc5f013472c9..6337bffb3a22 100644 --- a/llvm/test/Assembler/dimodule.ll +++ b/llvm/test/Assembler/dimodule.ll @@ -9,7 +9,7 @@ ; CHECK: !1 = !DIModule(scope: !0, name: "Module") !1 = !DIModule(scope: !0, name: "Module") -; CHECK: !2 = !DIModule(scope: !0, name: "Module", configMacros: "-DNDEBUG", includePath: "/usr/include") -!2 = !DIModule(scope: !0, name: "Module", configMacros: "-DNDEBUG", includePath: "/usr/include") +; CHECK: !2 = !DIModule(scope: !0, name: "Module", configMacros: "-DNDEBUG", includePath: "/usr/include", sysroot: "/") +!2 = !DIModule(scope: !0, name: "Module", configMacros: "-DNDEBUG", includePath: "/usr/include", sysroot: "/") !3 = !DIModule(scope: !0, name: "Module", configMacros: "") diff --git a/llvm/test/Bindings/llvm-c/debug_info.ll b/llvm/test/Bindings/llvm-c/debug_info.ll index 59d9628ff009..af682fdf1942 100644 --- a/llvm/test/Bindings/llvm-c/debug_info.ll +++ b/llvm/test/Bindings/llvm-c/debug_info.ll @@ -24,7 +24,7 @@ ; CHECK-NEXT: !FooType = !{!28} ; CHECK-NEXT: !EnumTest = !{!3} -; CHECK: !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "llvm-c-test", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !11, imports: !19, macros: !23, splitDebugInlining: false, sysroot: "/") +; CHECK: !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "llvm-c-test", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !11, imports: !19, macros: !23, splitDebugInlining: false) ; CHECK-NEXT: !1 = !DIFile(filename: "debuginfo.c", directory: ".") ; CHECK-NEXT: !2 = !{!3} ; CHECK-NEXT: !3 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EnumTest", scope: !4, file: !1, baseType: !6, size: 64, elements: !7) diff --git a/llvm/test/CodeGen/X86/load-combine-dbg.ll b/llvm/test/CodeGen/X86/load-combine-dbg.ll index 1385cd6f99d6..5982589df9d2 100644 --- a/llvm/test/CodeGen/X86/load-combine-dbg.ll +++ b/llvm/test/CodeGen/X86/load-combine-dbg.ll @@ -25,7 +25,7 @@ define i32 @zext_load(i32* %arg) !dbg !30 { !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_Swift, file: !3, isOptimized: false, emissionKind: FullDebug) -!2 = !DIModule(scope: null, name: "test", includePath: "") +!2 = !DIModule(scope: null, name: "test", includePath: "", sysroot: "/") !3 = !DIFile(filename: "main.swift", directory: "/") !30 = distinct !DISubprogram(name: "main", scope: !2, file: !3, line: 1, type: !31, isLocal: false, isDefinition: true, isOptimized: false, unit: !1) diff --git a/llvm/test/DebugInfo/X86/DIModule.ll b/llvm/test/DebugInfo/X86/DIModule.ll index 4aa785abefbc..888343d41d81 100644 --- a/llvm/test/DebugInfo/X86/DIModule.ll +++ b/llvm/test/DebugInfo/X86/DIModule.ll @@ -2,13 +2,11 @@ ; RUN: llc %s -accel-tables=Dwarf -o %t -filetype=obj ; RUN: llvm-dwarfdump -debug-info %t | FileCheck %s ; RUN: llvm-dwarfdump -verify %t -; CHECK: DW_TAG_compile_unit -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_LLVM_sysroot {{.*}}"/" -; CHECK: DW_TAG_module +; CHECK: DW_TAG_module ; CHECK-NEXT: DW_AT_name {{.*}}"DebugModule" ; CHECK-NEXT: DW_AT_LLVM_config_macros {{.*}}"-DMODULES=0" ; CHECK-NEXT: DW_AT_LLVM_include_path {{.*}}"/llvm/tools/clang/test/Modules/Inputs" +; CHECK-NEXT: DW_AT_LLVM_sysroot {{.*}}"/" target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx" @@ -17,12 +15,12 @@ target triple = "x86_64-apple-macosx" !llvm.module.flags = !{!6, !7} !llvm.ident = !{!8} -!0 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !1, producer: "LLVM version 3.7.0", isOptimized: false, runtimeVersion: 2, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !3, sysroot: "/") +!0 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !1, producer: "LLVM version 3.7.0", isOptimized: false, runtimeVersion: 2, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !3) !1 = !DIFile(filename: "/llvm/tools/clang/test/Modules/", directory: "/") !2 = !{} !3 = !{!4} !4 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: !5, file: !1, line: 5) -!5 = !DIModule(scope: null, name: "DebugModule", configMacros: "-DMODULES=0", includePath: "/llvm/tools/clang/test/Modules/Inputs") +!5 = !DIModule(scope: null, name: "DebugModule", configMacros: "-DMODULES=0", includePath: "/llvm/tools/clang/test/Modules/Inputs", sysroot: "/") !6 = !{i32 2, !"Dwarf Version", i32 4} !7 = !{i32 2, !"Debug Info Version", i32 3} !8 = !{!"LLVM version 3.7.0"} diff --git a/llvm/test/DebugInfo/X86/DIModuleContext.ll b/llvm/test/DebugInfo/X86/DIModuleContext.ll index e9dd9116b393..c058b3cb7de0 100644 --- a/llvm/test/DebugInfo/X86/DIModuleContext.ll +++ b/llvm/test/DebugInfo/X86/DIModuleContext.ll @@ -25,7 +25,7 @@ target triple = "x86_64-apple-macosx" !5 = !{!0} !6 = !{!7} !7 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !2, entity: !8, file: !3, line: 11) -!8 = !DIModule(scope: null, name: "Module", includePath: ".") +!8 = !DIModule(scope: null, name: "Module", includePath: ".", sysroot: "/") !9 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !10, size: 64, align: 64) !10 = !DICompositeType(tag: DW_TAG_structure_type, name: "s", scope: !8, file: !3, line: 1, flags: DIFlagFwdDecl) !11 = !{i32 2, !"Dwarf Version", i32 2} diff --git a/llvm/test/DebugInfo/X86/clang-module.ll b/llvm/test/DebugInfo/X86/clang-module.ll index 5e80ed2e4b8c..5f83a64488d0 100644 --- a/llvm/test/DebugInfo/X86/clang-module.ll +++ b/llvm/test/DebugInfo/X86/clang-module.ll @@ -20,11 +20,11 @@ target triple = "x86_64-apple-macosx10.12.0" !llvm.module.flags = !{!15, !16} !llvm.linker.options = !{} -!0 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !1, producer: "clang version 5.0.0 (trunk 308357) (llvm/trunk 308379)", emissionKind: FullDebug, imports: !3, sysroot: "/") +!0 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !1, producer: "clang version 5.0.0 (trunk 308357) (llvm/trunk 308379)", emissionKind: FullDebug, imports: !3) !1 = !DIFile(filename: "modules.m", directory: "/") !3 = !{!4} !4 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: !5, line: 122) -!5 = !DIModule(scope: null, name: "Foo", includePath: ".") +!5 = !DIModule(scope: null, name: "Foo", includePath: ".", sysroot: "/") !6 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !7, producer: "clang version 5.0.0 (trunk 308357) (llvm/trunk 308379)", isOptimized: true, runtimeVersion: 0, splitDebugFilename: "/Foo.pcm", emissionKind: FullDebug, dwoId: 1234) !7 = !DIFile(filename: "Foo", directory: ".") !15 = !{i32 2, !"Dwarf Version", i32 4} diff --git a/llvm/test/DebugInfo/X86/split-dwarf-sysroot.ll b/llvm/test/DebugInfo/X86/split-dwarf-sysroot.ll deleted file mode 100644 index 8b504bc6752f..000000000000 --- a/llvm/test/DebugInfo/X86/split-dwarf-sysroot.ll +++ /dev/null @@ -1,34 +0,0 @@ -; RUN: %llc_dwarf -split-dwarf-file=foo.dwo %s -filetype=obj -o - | llvm-dwarfdump -debug-info - | FileCheck %s - -; DW_AT_LLVM_sysroot goes into the .dwo, not in the skeleton. - -; CHECK: DW_TAG_skeleton_unit -; CHECK-NOT: DW_AT_LLVM_sysroot -; CHECK: DW_TAG_compile_unit -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_LLVM_sysroot ("/opt/clang-root") - -target triple = "x86_64-pc-linux" - -declare void @_Z2f1v() - -; Function Attrs: noinline norecurse uwtable -define i32 @main() !dbg !9 { -entry: - ret i32 0, !dbg !18 -} - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!6, !7, !8} - -!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, emissionKind: FullDebug, enums: !2, sysroot: "/opt/clang-root") -!1 = !DIFile(filename: "a.c", directory: "/") -!2 = !{} -!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: 2, type: !10, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2) -!10 = !DISubroutineType(types: !11) -!11 = !{!12} -!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!18 = !DILocation(line: 4, column: 1, scope: !9) diff --git a/llvm/tools/llvm-c-test/debuginfo.c b/llvm/tools/llvm-c-test/debuginfo.c index 8102e9a27ad8..b5080f01193b 100644 --- a/llvm/tools/llvm-c-test/debuginfo.c +++ b/llvm/tools/llvm-c-test/debuginfo.c @@ -36,21 +36,23 @@ int llvm_test_dibuilder(void) { LLVMMetadataRef File = LLVMDIBuilderCreateFile(DIB, Filename, strlen(Filename), ".", 1); - LLVMMetadataRef CompileUnit = LLVMDIBuilderCreateCompileUnit( - DIB, LLVMDWARFSourceLanguageC, File, "llvm-c-test", 11, 0, NULL, 0, 0, - NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0, "/", 1); + LLVMMetadataRef CompileUnit = LLVMDIBuilderCreateCompileUnit(DIB, + LLVMDWARFSourceLanguageC, File, "llvm-c-test", 11, 0, NULL, 0, 0, + NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0); LLVMMetadataRef Module = LLVMDIBuilderCreateModule(DIB, CompileUnit, "llvm-c-test", 11, "", 0, - "/test/include/llvm-c-test.h", 27); + "/test/include/llvm-c-test.h", 27, + "", 0); LLVMMetadataRef OtherModule = LLVMDIBuilderCreateModule(DIB, CompileUnit, "llvm-c-test-import", 18, "", 0, - "/test/include/llvm-c-test-import.h", 34); + "/test/include/llvm-c-test-import.h", 34, + "", 0); LLVMMetadataRef ImportedModule = LLVMDIBuilderCreateImportedModuleFromModule(DIB, Module, OtherModule, File, 42); diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp index 6c06af8bd71e..927d8069c77a 100644 --- a/llvm/unittests/IR/MetadataTest.cpp +++ b/llvm/unittests/IR/MetadataTest.cpp @@ -96,7 +96,7 @@ protected: Context, 1, getFile(), "clang", false, "-g", 2, "", DICompileUnit::FullDebug, getTuple(), getTuple(), getTuple(), getTuple(), getTuple(), 0, true, false, - DICompileUnit::DebugNameTableKind::Default, false, "/"); + DICompileUnit::DebugNameTableKind::Default, false); } DIType *getBasicType(StringRef Name) { return DIBasicType::get(Context, dwarf::DW_TAG_unspecified_type, Name); @@ -1709,12 +1709,11 @@ TEST_F(DICompileUnitTest, get) { MDTuple *ImportedEntities = getTuple(); uint64_t DWOId = 0x10000000c0ffee; MDTuple *Macros = getTuple(); - StringRef SysRoot = "/"; auto *N = DICompileUnit::getDistinct( Context, SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, true, - false, DICompileUnit::DebugNameTableKind::Default, false, SysRoot); + false, DICompileUnit::DebugNameTableKind::Default, false); EXPECT_EQ(dwarf::DW_TAG_compile_unit, N->getTag()); EXPECT_EQ(SourceLanguage, N->getSourceLanguage()); @@ -1731,7 +1730,6 @@ TEST_F(DICompileUnitTest, get) { EXPECT_EQ(ImportedEntities, N->getImportedEntities().get()); EXPECT_EQ(Macros, N->getMacros().get()); EXPECT_EQ(DWOId, N->getDWOId()); - EXPECT_EQ(SysRoot, N->getSysRoot()); TempDICompileUnit Temp = N->clone(); EXPECT_EQ(dwarf::DW_TAG_compile_unit, Temp->getTag()); @@ -1748,7 +1746,7 @@ TEST_F(DICompileUnitTest, get) { EXPECT_EQ(GlobalVariables, Temp->getGlobalVariables().get()); EXPECT_EQ(ImportedEntities, Temp->getImportedEntities().get()); EXPECT_EQ(Macros, Temp->getMacros().get()); - EXPECT_EQ(SysRoot, Temp->getSysRoot()); + EXPECT_EQ(DWOId, Temp->getDWOId()); auto *TempAddress = Temp.get(); auto *Clone = MDNode::replaceWithPermanent(std::move(Temp)); @@ -1769,12 +1767,11 @@ TEST_F(DICompileUnitTest, replaceArrays) { MDTuple *RetainedTypes = MDTuple::getDistinct(Context, None); MDTuple *ImportedEntities = MDTuple::getDistinct(Context, None); uint64_t DWOId = 0xc0ffee; - StringRef SysRoot = "/"; auto *N = DICompileUnit::getDistinct( Context, SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, nullptr, ImportedEntities, nullptr, DWOId, true, false, - DICompileUnit::DebugNameTableKind::Default, false, SysRoot); + DICompileUnit::DebugNameTableKind::Default, false); auto *GlobalVariables = MDTuple::getDistinct(Context, None); EXPECT_EQ(nullptr, N->getGlobalVariables().get()); @@ -2053,19 +2050,28 @@ TEST_F(DIModuleTest, get) { StringRef Name = "module"; StringRef ConfigMacro = "-DNDEBUG"; StringRef Includes = "-I."; + StringRef Sysroot = "/"; - auto *N = DIModule::get(Context, Scope, Name, ConfigMacro, Includes); + auto *N = DIModule::get(Context, Scope, Name, ConfigMacro, Includes, Sysroot); EXPECT_EQ(dwarf::DW_TAG_module, N->getTag()); EXPECT_EQ(Scope, N->getScope()); EXPECT_EQ(Name, N->getName()); EXPECT_EQ(ConfigMacro, N->getConfigurationMacros()); EXPECT_EQ(Includes, N->getIncludePath()); - EXPECT_EQ(N, DIModule::get(Context, Scope, Name, ConfigMacro, Includes)); - EXPECT_NE(N, DIModule::get(Context, getFile(), Name, ConfigMacro, Includes)); - EXPECT_NE(N, DIModule::get(Context, Scope, "other", ConfigMacro, Includes)); - EXPECT_NE(N, DIModule::get(Context, Scope, Name, "other", Includes)); - EXPECT_NE(N, DIModule::get(Context, Scope, Name, ConfigMacro, "other")); + EXPECT_EQ(Sysroot, N->getSysRoot()); + EXPECT_EQ(N, DIModule::get(Context, Scope, Name, + ConfigMacro, Includes, Sysroot)); + EXPECT_NE(N, DIModule::get(Context, getFile(), Name, + ConfigMacro, Includes, Sysroot)); + EXPECT_NE(N, DIModule::get(Context, Scope, "other", + ConfigMacro, Includes, Sysroot)); + EXPECT_NE(N, DIModule::get(Context, Scope, Name, + "other", Includes, Sysroot)); + EXPECT_NE(N, DIModule::get(Context, Scope, Name, + ConfigMacro, "other", Sysroot)); + EXPECT_NE(N, DIModule::get(Context, Scope, Name, + ConfigMacro, Includes, "other")); TempDIModule Temp = N->clone(); EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));