On Mon, Sep 21, 2015 at 12:25 PM, Adrian Prantl <apra...@apple.com> wrote:
> > On Sep 21, 2015, at 11:25 AM, David Blaikie <dblai...@gmail.com> wrote: > > > > On Mon, Sep 21, 2015 at 11:18 AM, Adrian Prantl <apra...@apple.com> wrote: > >> >> On Sep 21, 2015, at 10:59 AM, David Blaikie <dblai...@gmail.com> wrote: >> >> >> >> On Mon, Sep 21, 2015 at 10:48 AM, Adrian Prantl via cfe-commits < >> cfe-commits@lists.llvm.org> wrote: >> >>> Author: adrian >>> Date: Mon Sep 21 12:48:37 2015 >>> New Revision: 248184 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=248184&view=rev >>> Log: >>> Debug Info: When building a module, emit skeleton CUs for imported >>> modules. >>> >> >> This seems like it might add a reasonable amount more debug info - is it >> necessary? Or could the debugger use the list of modules from the >> referencing/original compilation unit as the dependency set to search? >> >> >> The advantage of having this info in the modules is that it makes >> llvm-dsymutil’s life much easier because the dependency graph is explicit. >> > > Why is the graph particularly helpful to dsymutil? > > > dsymutil does a single pass over the debug info. To support module > debugging (I’ll post a patch implementing this for review very soon), we > can hijack the existing ODR type-uniquing code to resolve references to > module type forward declarations to point to the type's definition in the > module, but only if we visited the module where the type is defined before. > Ah, rightio, thanks for the explanation. > > > >> The size of a skeleton CU is 11 bytes + the length of the name + 8 bytes >> of dwo_id, (the producer string is shared with the main CU) so I’m not sure >> if the savings are worth the extra complexity. >> > > Depends how many modules you have, I guess... > > > Sure :-) > > > - Dave > > >> >> -- adrian >> >> >> >>> >>> Added: >>> cfe/trunk/test/Modules/DebugInfoTransitiveImport.m >>> Modified: >>> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >>> cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp >>> >>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=248184&r1=248183&r2=248184&view=diff >>> >>> ============================================================================== >>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) >>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Sep 21 12:48:37 2015 >>> @@ -2161,7 +2161,14 @@ ObjCInterfaceDecl *CGDebugInfo::getObjCI >>> >>> llvm::DIModule *CGDebugInfo::getParentModuleOrNull(const Decl *D) { >>> ExternalASTSource::ASTSourceDescriptor Info; >>> - if (ClangModuleMap) { >>> + if (DebugTypeExtRefs && D->isFromASTFile()) { >>> + // Record a reference to an imported clang module or precompiled >>> header. >>> + auto *Reader = CGM.getContext().getExternalSource(); >>> + auto Idx = D->getOwningModuleID(); >>> + auto Info = Reader->getSourceDescriptor(Idx); >>> + if (Info) >>> + return getOrCreateModuleRef(*Info, /*SkeletonCU=*/true); >>> + } else if (ClangModuleMap) { >>> // We are building a clang module or a precompiled header. >>> // >>> // TODO: When D is a CXXRecordDecl or a C++ Enum, the ODR applies >>> @@ -2179,14 +2186,6 @@ llvm::DIModule *CGDebugInfo::getParentMo >>> } >>> } >>> >>> - if (DebugTypeExtRefs && D->isFromASTFile()) { >>> - // Record a reference to an imported clang module or precompiled >>> header. >>> - auto *Reader = CGM.getContext().getExternalSource(); >>> - auto Idx = D->getOwningModuleID(); >>> - auto Info = Reader->getSourceDescriptor(Idx); >>> - if (Info) >>> - return getOrCreateModuleRef(*Info, /*SkeletonCU=*/true); >>> - } >>> return nullptr; >>> } >>> >>> >>> Modified: cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp?rev=248184&r1=248183&r2=248184&view=diff >>> >>> ============================================================================== >>> --- cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp (original) >>> +++ cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp Mon Sep >>> 21 12:48:37 2015 >>> @@ -67,6 +67,13 @@ class PCHContainerGenerator : public AST >>> return !Ty->isDependentType() && !Ty->isUndeducedType(); >>> } >>> >>> + bool VisitImportDecl(ImportDecl *D) { >>> + auto *Import = cast<ImportDecl>(D); >>> + if (!Import->getImportedOwningModule()) >>> + DI.EmitImportDecl(*Import); >>> + return true; >>> + } >>> + >>> bool VisitTypeDecl(TypeDecl *D) { >>> QualType QualTy = Ctx.getTypeDeclType(D); >>> if (!QualTy.isNull() && CanRepresent(QualTy.getTypePtr())) >>> >>> Added: cfe/trunk/test/Modules/DebugInfoTransitiveImport.m >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/DebugInfoTransitiveImport.m?rev=248184&view=auto >>> >>> ============================================================================== >>> --- cfe/trunk/test/Modules/DebugInfoTransitiveImport.m (added) >>> +++ cfe/trunk/test/Modules/DebugInfoTransitiveImport.m Mon Sep 21 >>> 12:48:37 2015 >>> @@ -0,0 +1,15 @@ >>> +// RUN: rm -rf %t >>> +// RUN: %clang_cc1 -fmodules -fmodule-format=obj -g -dwarf-ext-refs \ >>> +// RUN: -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs >>> \ >>> +// RUN: %s -mllvm -debug-only=pchcontainer 2>&1 | FileCheck %s >>> +// REQUIRES: asserts >>> + >>> +@import diamond_left; >>> + >>> +// CHECK: ![[TOP_DEF:.*]] = distinct !DICompileUnit({{.*}}diamond_top >>> +// CHECK: ![[LEFT_DEF:.*]] = distinct !DICompileUnit({{.*}}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: >>> + >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> cfe-commits@lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits