Skip to content

Commit

Permalink
[GCOV] Avoid emitting profile arcs for module and skeleton CUs
Browse files Browse the repository at this point in the history
Do not emit profile arc files and note files for module and skeleton
CU's.

Our users report seeing unexpected *.gcda and *.gcno files in their
projects when using gcov-style profiling with modules or frameworks.
The unwanted files come from these modules. This is not very helpful
for end-users. Further, we've seen reports of instrumented programs
crashing while writing these files out (due to I/O failures).

rdar://problem/22838296

Reviewed-by: aprantl

Differential Revision: http://reviews.llvm.org/D15997

llvm-svn: 258406
  • Loading branch information
vedantk committed Jan 21, 2016
1 parent 6f508af commit 61035fa
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
10 changes: 10 additions & 0 deletions llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
Expand Up @@ -494,6 +494,11 @@ void GCOVProfiler::emitProfileNotes() {
// LTO, we'll generate the same .gcno files.

auto *CU = cast<DICompileUnit>(CU_Nodes->getOperand(i));

// Skip module skeleton (and module) CUs.
if (CU->getDWOId())
continue;

std::error_code EC;
raw_fd_ostream out(mangleName(CU, "gcno"), EC, sys::fs::F_None);
std::string EdgeDestinations;
Expand Down Expand Up @@ -853,6 +858,11 @@ Function *GCOVProfiler::insertCounterWriteout(
if (CU_Nodes) {
for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
auto *CU = cast<DICompileUnit>(CU_Nodes->getOperand(i));

// Skip module skeleton (and module) CUs.
if (CU->getDWOId())
continue;

std::string FilenameGcda = mangleName(CU, "gcda");
uint32_t CfgChecksum = FileChecksums.empty() ? 0 : FileChecksums[i];
Builder.CreateCall(StartFile,
Expand Down
12 changes: 12 additions & 0 deletions llvm/test/Transforms/GCOVProfiling/modules.ll
@@ -0,0 +1,12 @@
; RUN: opt -insert-gcov-profiling -o - < %s | llvm-dis | FileCheck -check-prefix=EMIT-ARCS %s

; EMIT-ARCS-NOT: call void @llvm_gcda_start_file

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3, !4}

!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, splitDebugFilename: "my.dwo", emissionKind: 1, enums: !2, retainedTypes: !2, subprograms: !2, globals: !2, imports: !2, dwoId: 43981)
!1 = !DIFile(filename: "<stdin>", directory: "/")
!2 = !{}
!3 = !{i32 2, !"Dwarf Version", i32 4}
!4 = !{i32 2, !"Debug Info Version", i32 3}

0 comments on commit 61035fa

Please sign in to comment.