Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
(Reland with changes) Adding a function for setting coverage output f…
…ile. Summary: User code can open a file on its own and pass it to the runtime, rather than specifying a name and having the runtime open the file. This supports the use case where a process cannot open a file on its own but can receive a file descriptor from another process. Relanding https://reviews.llvm.org/D62541. The original revision unlocked the file before calling flush, this revision fixes that. Reviewers: Dor1s, davidxl Reviewed By: Dor1s Subscribers: #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D63581 llvm-svn: 364231
- Loading branch information
1 parent
8242f35
commit 6694b2b
Showing
6 changed files
with
168 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
compiler-rt/test/profile/instrprof-set-file-object-merging.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// Test that the specified output merges the profiling data. | ||
// Run the program twice so that the counters accumulate. | ||
// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t %s | ||
// RUN: %run %t %t.merging.profraw | ||
// RUN: %run %t %t.merging.profraw | ||
// RUN: test -f %t.merging.profraw | ||
// RUN: llvm-profdata merge -o %t.merging.profdata %t.merging.profraw | ||
// RUN: llvm-cov show -instr-profile %t.merging.profdata %t | FileCheck %s --match-full-lines | ||
// RUN: rm %t.merging.profdata %t.merging.profraw | ||
#include <stdio.h> | ||
|
||
extern void __llvm_profile_set_file_object(FILE *, int); | ||
|
||
int main(int argc, const char *argv[]) { | ||
if (argc < 2) | ||
return 1; | ||
|
||
FILE *F = fopen(argv[1], "r+b"); | ||
if (!F) { | ||
// File might not exist, try opening with truncation | ||
F = fopen(argv[1], "w+b"); | ||
} | ||
__llvm_profile_set_file_object(F, 1); | ||
|
||
return 0; | ||
} | ||
// CHECK: 10| |#include <stdio.h> | ||
// CHECK: 11| | | ||
// CHECK: 12| |extern void __llvm_profile_set_file_object(FILE *, int); | ||
// CHECK: 13| | | ||
// CHECK: 14| 2|int main(int argc, const char *argv[]) { | ||
// CHECK: 15| 2| if (argc < 2) | ||
// CHECK: 16| 0| return 1; | ||
// CHECK: 17| 2| | ||
// CHECK: 18| 2| FILE *F = fopen(argv[1], "r+b"); | ||
// CHECK: 19| 2| if (!F) { | ||
// CHECK: 20| 1| // File might not exist, try opening with truncation | ||
// CHECK: 21| 1| F = fopen(argv[1], "w+b"); | ||
// CHECK: 22| 1| } | ||
// CHECK: 23| 2| __llvm_profile_set_file_object(F, 1); | ||
// CHECK: 24| 2| | ||
// CHECK: 25| 2| return 0; | ||
// CHECK: 26| 2|} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// Test that the specified output has profiling data. | ||
// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t %s | ||
// RUN: %run %t %t.file.profraw | ||
// RUN: test -f %t.file.profraw | ||
// RUN: llvm-profdata merge -o %t.file.profdata %t.file.profraw | ||
// RUN: llvm-cov show -instr-profile %t.file.profdata %t | FileCheck %s --match-full-lines | ||
// RUN: rm %t.file.profraw %t.file.profdata | ||
#include <stdio.h> | ||
|
||
extern void __llvm_profile_set_file_object(FILE *, int); | ||
|
||
int main(int argc, const char *argv[]) { | ||
if (argc < 2) | ||
return 1; | ||
|
||
FILE *F = fopen(argv[1], "w+b"); | ||
__llvm_profile_set_file_object(F, 0); | ||
return 0; | ||
} | ||
// CHECK: 8| |#include <stdio.h> | ||
// CHECK: 9| | | ||
// CHECK: 10| |extern void __llvm_profile_set_file_object(FILE *, int); | ||
// CHECK: 11| | | ||
// CHECK: 12| 1|int main(int argc, const char *argv[]) { | ||
// CHECK: 13| 1| if (argc < 2) | ||
// CHECK: 14| 0| return 1; | ||
// CHECK: 15| 1| | ||
// CHECK: 16| 1| FILE *F = fopen(argv[1], "w+b"); | ||
// CHECK: 17| 1| __llvm_profile_set_file_object(F, 0); | ||
// CHECK: 18| 1| return 0; | ||
// CHECK: 19| 1|} |