Author: adrian Date: Tue Sep 22 18:26:43 2015 New Revision: 248345 URL: http://llvm.org/viewvc/llvm-project?rev=248345&view=rev Log: Module Debugging: Use the clang module signature as the module's dwo_id when building a module. Clang already records the module signature when building a skeleton CU to reference a clang module.
Matching the id in the skeleton with the one in the module allows a DWARF consumer to verify that they found the correct version of the module without them needing to know about the clang module format. Modified: cfe/trunk/include/clang/Frontend/PCHContainerOperations.h cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/lib/CodeGen/CGDebugInfo.h cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp cfe/trunk/lib/Serialization/GeneratePCH.cpp cfe/trunk/test/Modules/DebugInfoTransitiveImport.m cfe/trunk/test/Modules/ModuleDebugInfo.cpp cfe/trunk/test/Modules/ModuleDebugInfo.m Modified: cfe/trunk/include/clang/Frontend/PCHContainerOperations.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PCHContainerOperations.h?rev=248345&r1=248344&r2=248345&view=diff ============================================================================== --- cfe/trunk/include/clang/Frontend/PCHContainerOperations.h (original) +++ cfe/trunk/include/clang/Frontend/PCHContainerOperations.h Tue Sep 22 18:26:43 2015 @@ -30,8 +30,9 @@ class DiagnosticsEngine; class CompilerInstance; struct PCHBuffer { - bool IsComplete; + uint64_t Signature; llvm::SmallVector<char, 0> Data; + bool IsComplete; }; /// This abstract interface provides operations for creating Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=248345&r1=248344&r2=248345&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Tue Sep 22 18:26:43 2015 @@ -3453,6 +3453,12 @@ CGDebugInfo::getOrCreateNameSpace(const return NS; } +void CGDebugInfo::setDwoId(uint64_t Signature) { + assert(TheCU && "no main compile unit"); + TheCU->setDWOId(Signature); +} + + void CGDebugInfo::finalize() { // Creating types might create further types - invalidating the current // element and the size(), so don't cache/reference them. Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=248345&r1=248344&r2=248345&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original) +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Tue Sep 22 18:26:43 2015 @@ -276,6 +276,9 @@ public: void finalize(); + /// Set the main CU's DwoId field to \p Signature. + void setDwoId(uint64_t Signature); + /// When generating debug information for a clang module or /// precompiled header, this module map will be used to determine /// the module of origin of each Decl. Modified: cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp?rev=248345&r1=248344&r2=248345&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp (original) +++ cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp Tue Sep 22 18:26:43 2015 @@ -142,7 +142,6 @@ public: CodeGenOpts.ThreadModel = "single"; CodeGenOpts.DebugTypeExtRefs = true; CodeGenOpts.setDebugInfo(CodeGenOptions::FullDebugInfo); - CodeGenOpts.SplitDwarfFile = OutputFileName; } ~PCHContainerGenerator() override = default; @@ -201,6 +200,7 @@ public: M->setTargetTriple(Ctx.getTargetInfo().getTriple().getTriple()); M->setDataLayout(Ctx.getTargetInfo().getDataLayoutString()); + Builder->getModuleDebugInfo()->setDwoId(Buffer->Signature); // Finalize the Builder. if (Builder) Modified: cfe/trunk/lib/Serialization/GeneratePCH.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/GeneratePCH.cpp?rev=248345&r1=248344&r2=248345&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/GeneratePCH.cpp (original) +++ cfe/trunk/lib/Serialization/GeneratePCH.cpp Tue Sep 22 18:26:43 2015 @@ -48,7 +48,8 @@ void PCHGenerator::HandleTranslationUnit // Emit the PCH file to the Buffer. assert(SemaPtr && "No Sema?"); - Writer.WriteAST(*SemaPtr, OutputFile, Module, isysroot, hasErrors); + Buffer->Signature = + Writer.WriteAST(*SemaPtr, OutputFile, Module, isysroot, hasErrors); Buffer->IsComplete = true; } Modified: cfe/trunk/test/Modules/DebugInfoTransitiveImport.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/DebugInfoTransitiveImport.m?rev=248345&r1=248344&r2=248345&view=diff ============================================================================== --- cfe/trunk/test/Modules/DebugInfoTransitiveImport.m (original) +++ cfe/trunk/test/Modules/DebugInfoTransitiveImport.m Tue Sep 22 18:26:43 2015 @@ -6,10 +6,17 @@ @import diamond_left; -// CHECK: ![[TOP_DEF:.*]] = distinct !DICompileUnit({{.*}}diamond_top -// CHECK: ![[LEFT_DEF:.*]] = distinct !DICompileUnit({{.*}}diamond_left +// Definition of top: +// CHECK: !DICompileUnit({{.*}}dwoId: +// CHECK: !DIFile({{.*}}diamond_top.h + +// Definition of left: +// CHECK: !DICompileUnit({{.*}}dwoId: +// CHECK: !DIFile({{.*}}diamond_left // CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, // CHECK-SAME: entity: ![[MODULE:.*]], line: 3) // CHECK: ![[MODULE]] = !DIModule(scope: null, name: "diamond_top" -// CHECK: ![[TOP_SKEL_CU:.*]] = distinct !DICompileUnit({{.*}}diamond_top{{.*}}dwoId: + +// Skeleton for top: +// CHECK: !DICompileUnit({{.*}}splitDebugFilename: {{.*}}diamond_top{{.*}}dwoId: Modified: cfe/trunk/test/Modules/ModuleDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ModuleDebugInfo.cpp?rev=248345&r1=248344&r2=248345&view=diff ============================================================================== --- cfe/trunk/test/Modules/ModuleDebugInfo.cpp (original) +++ cfe/trunk/test/Modules/ModuleDebugInfo.cpp Tue Sep 22 18:26:43 2015 @@ -8,6 +8,7 @@ // RUN: %clang_cc1 -triple %itanium_abi_triple -x objective-c++ -std=c++11 -g -fmodules -fmodule-format=obj -fimplicit-module-maps -DMODULES -fmodules-cache-path=%t %s -I %S/Inputs -I %t -emit-llvm -o %t.ll -mllvm -debug-only=pchcontainer &>%t-mod.ll // RUN: cat %t-mod.ll | FileCheck %s // RUN: cat %t-mod.ll | FileCheck --check-prefix=CHECK-NEG %s +// RUN: cat %t-mod.ll | FileCheck --check-prefix=CHECK-DWO %s // PCH: // RUN: %clang_cc1 -triple %itanium_abi_triple -x c++ -std=c++11 -emit-pch -fmodule-format=obj -I %S/Inputs -o %t.pch %S/Inputs/DebugCXX.h -mllvm -debug-only=pchcontainer &>%t-pch.ll @@ -20,7 +21,8 @@ // CHECK: distinct !DICompileUnit(language: DW_LANG_{{.*}}C_plus_plus, // CHECK-SAME: isOptimized: false, -// CHECK-SAME: splitDebugFilename: +// CHECK-SAME-NOT: splitDebugFilename: +// CHECK-DWO: dwoId: // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "Enum" // CHECK-SAME: identifier: "_ZTSN8DebugCXX4EnumE") // CHECK: !DINamespace(name: "DebugCXX" Modified: cfe/trunk/test/Modules/ModuleDebugInfo.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ModuleDebugInfo.m?rev=248345&r1=248344&r2=248345&view=diff ============================================================================== --- cfe/trunk/test/Modules/ModuleDebugInfo.m (original) +++ cfe/trunk/test/Modules/ModuleDebugInfo.m Tue Sep 22 18:26:43 2015 @@ -18,7 +18,6 @@ // CHECK: distinct !DICompileUnit(language: DW_LANG_ObjC // CHECK-SAME: isOptimized: false, -// CHECK-SAME: splitDebugFilename: // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ObjCClass" // CHECK: !DIObjCProperty(name: "property", // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "ivar" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits