Skip to content

Commit

Permalink
[llvm-cov] Create syntax to pass source w/o binary.
Browse files Browse the repository at this point in the history
Since binary ID lookup makes CLI object arguments optional, it should be
possible to pass a list of source files without a binary. Unfortunately,
the current syntax will always interpret the first source file as a
binary. This change adds a `-sources` option to cause all later
positional arguments to be considered sources.

Reviewed By: gulfem

Differential Revision: https://reviews.llvm.org/D144207
  • Loading branch information
mysterymath committed Feb 17, 2023
1 parent 4eadd19 commit 8007bcc
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 10 deletions.
4 changes: 4 additions & 0 deletions compiler-rt/test/profile/Linux/binary-id-lookup.c
Expand Up @@ -9,6 +9,9 @@
// RUN: cp %t.main %t/.build-id/ab/cd1234.debug
// RUN: llvm-profdata merge -o %t.profdata %t.profdir/default_*.profraw
// RUN: llvm-cov show -instr-profile %t.profdata -debug-file-directory %t | FileCheck %s
// RUN: llvm-cov show -instr-profile %t.profdata %t/libfoo.so -sources %t/foo.c -object %t.main | FileCheck %s --check-prefix=FOO-ONLY
// RUN: llvm-cov show -instr-profile %t.profdata -debug-file-directory %t -sources %t/foo.c | FileCheck %s --check-prefix=FOO-ONLY
// RUN: llvm-cov show -instr-profile %t.profdata -debug-file-directory %t %t/libfoo.so -sources %t/foo.c | FileCheck %s --check-prefix=FOO-ONLY
// RUN: echo "bad" > %t/.build-id/ab/cd1234.debug
// RUN: llvm-cov show -instr-profile %t.profdata -debug-file-directory %t %t.main | FileCheck %s
// RUN: not llvm-cov show -instr-profile %t.profdata -debug-file-directory %t/empty 2>&1 | FileCheck %s --check-prefix=NODATA
Expand All @@ -17,6 +20,7 @@
// CHECK: 2| 1|void bar(void) {}
// CHECK: 3| 1|int main() {

// FOO-ONLY: 1| 1|void foo(void) {}
// NODATA: error: Failed to load coverage: '': No coverage data found

//--- foo.c
Expand Down
18 changes: 9 additions & 9 deletions llvm/docs/CommandGuide/llvm-cov.rst
Expand Up @@ -188,14 +188,14 @@ SHOW COMMAND
SYNOPSIS
^^^^^^^^

:program:`llvm-cov show` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]] [*SOURCES*]
:program:`llvm-cov show` [*options*] -instr-profile *PROFILE* [*BIN*] [*-object BIN*]... [*-sources*] [*SOURCE*]...

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov show` command shows line by line coverage of the
binaries *BIN*,... using the profile data *PROFILE*. It can optionally be
filtered to only show the coverage for the files listed in *SOURCES*.
binaries *BIN*... using the profile data *PROFILE*. It can optionally be
filtered to only show the coverage for the files listed in *SOURCE*....

*BIN* may be an executable, object file, dynamic library, or archive (thin or
otherwise).
Expand Down Expand Up @@ -370,14 +370,14 @@ REPORT COMMAND
SYNOPSIS
^^^^^^^^

:program:`llvm-cov report` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]] [*SOURCES*]
:program:`llvm-cov report` [*options*] -instr-profile *PROFILE* [*BIN*] [*-object BIN*]... [*-sources*] [*SOURCE*]...

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov report` command displays a summary of the coverage of
the binaries *BIN*,... using the profile data *PROFILE*. It can optionally be
filtered to only show the coverage for the files listed in *SOURCES*.
the binaries *BIN*... using the profile data *PROFILE*. It can optionally be
filtered to only show the coverage for the files listed in *SOURCE*....

*BIN* may be an executable, object file, dynamic library, or archive (thin or
otherwise).
Expand Down Expand Up @@ -451,21 +451,21 @@ EXPORT COMMAND
SYNOPSIS
^^^^^^^^

:program:`llvm-cov export` [*options*] -instr-profile *PROFILE* *BIN* [*-object BIN,...*] [[*-object BIN*]] [*SOURCES*]
:program:`llvm-cov export` [*options*] -instr-profile *PROFILE* [*BIN*] [*-object BIN*]... [*-sources*] [*SOURCE*]...

DESCRIPTION
^^^^^^^^^^^

The :program:`llvm-cov export` command exports coverage data of the binaries
*BIN*,... using the profile data *PROFILE* in either JSON or lcov trace file
*BIN*... using the profile data *PROFILE* in either JSON or lcov trace file
format.

When exporting JSON, the regions, functions, branches, expansions, and
summaries of the coverage data will be exported. When exporting an lcov trace
file, the line-based coverage, branch coverage, and summaries will be exported.

The exported data can optionally be filtered to only export the coverage
for the files listed in *SOURCES*.
for the files listed in *SOURCE*....

For information on compiling programs for coverage and generating profile data,
see :ref:`llvm-cov-show`.
Expand Down
2 changes: 1 addition & 1 deletion llvm/tools/llvm-cov/CodeCoverage.cpp
Expand Up @@ -636,7 +636,7 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
"dump-collected-objects", cl::Optional, cl::Hidden,
cl::desc("Show the collected coverage object files"));

cl::list<std::string> InputSourceFiles(cl::Positional,
cl::list<std::string> InputSourceFiles("sources", cl::Positional,
cl::desc("<Source files>"));

cl::opt<bool> DebugDumpCollectedPaths(
Expand Down

0 comments on commit 8007bcc

Please sign in to comment.