Add -Z profile-emit=<path> for Gcov gcda output.
Adds a -Z flag to control the file path that the Gcov gcda output is written to during runtime. This flag expects a path and filename, e.g. -Z profile-emit=gcov/out/lib.gcda. This works similar to GCC/Clang's -fprofile-dir flag which allows control over the output path for gcda coverage files.
This commit is contained in:
parent
aeca4d6428
commit
0c1ef853bb
4 changed files with 11 additions and 4 deletions
|
@ -959,16 +959,16 @@ pub fn compile_unit_metadata(
|
||||||
if tcx.sess.opts.debugging_opts.profile {
|
if tcx.sess.opts.debugging_opts.profile {
|
||||||
let cu_desc_metadata =
|
let cu_desc_metadata =
|
||||||
llvm::LLVMRustMetadataAsValue(debug_context.llcontext, unit_metadata);
|
llvm::LLVMRustMetadataAsValue(debug_context.llcontext, unit_metadata);
|
||||||
|
let default_gcda_path = &tcx.output_filenames(LOCAL_CRATE).with_extension("gcda");
|
||||||
|
let gcda_path =
|
||||||
|
tcx.sess.opts.debugging_opts.profile_emit.as_ref().unwrap_or(default_gcda_path);
|
||||||
|
|
||||||
let gcov_cu_info = [
|
let gcov_cu_info = [
|
||||||
path_to_mdstring(
|
path_to_mdstring(
|
||||||
debug_context.llcontext,
|
debug_context.llcontext,
|
||||||
&tcx.output_filenames(LOCAL_CRATE).with_extension("gcno"),
|
&tcx.output_filenames(LOCAL_CRATE).with_extension("gcno"),
|
||||||
),
|
),
|
||||||
path_to_mdstring(
|
path_to_mdstring(debug_context.llcontext, &gcda_path),
|
||||||
debug_context.llcontext,
|
|
||||||
&tcx.output_filenames(LOCAL_CRATE).with_extension("gcda"),
|
|
||||||
),
|
|
||||||
cu_desc_metadata,
|
cu_desc_metadata,
|
||||||
];
|
];
|
||||||
let gcov_metadata = llvm::LLVMMDNodeInContext(
|
let gcov_metadata = llvm::LLVMMDNodeInContext(
|
||||||
|
|
|
@ -557,6 +557,7 @@ fn test_debugging_options_tracking_hash() {
|
||||||
tracked!(plt, Some(true));
|
tracked!(plt, Some(true));
|
||||||
tracked!(print_fuel, Some("abc".to_string()));
|
tracked!(print_fuel, Some("abc".to_string()));
|
||||||
tracked!(profile, true);
|
tracked!(profile, true);
|
||||||
|
tracked!(profile_emit, Some(PathBuf::from("abc")));
|
||||||
tracked!(relro_level, Some(RelroLevel::Full));
|
tracked!(relro_level, Some(RelroLevel::Full));
|
||||||
tracked!(report_delayed_bugs, true);
|
tracked!(report_delayed_bugs, true);
|
||||||
tracked!(run_dsymutil, false);
|
tracked!(run_dsymutil, false);
|
||||||
|
|
|
@ -955,6 +955,9 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
|
||||||
"print layout information for each type encountered (default: no)"),
|
"print layout information for each type encountered (default: no)"),
|
||||||
profile: bool = (false, parse_bool, [TRACKED],
|
profile: bool = (false, parse_bool, [TRACKED],
|
||||||
"insert profiling code (default: no)"),
|
"insert profiling code (default: no)"),
|
||||||
|
profile_emit: Option<PathBuf> = (None, parse_opt_pathbuf, [TRACKED],
|
||||||
|
"file path to emit profiling data at runtime when using 'profile' \
|
||||||
|
(default based on relative source path)"),
|
||||||
query_dep_graph: bool = (false, parse_bool, [UNTRACKED],
|
query_dep_graph: bool = (false, parse_bool, [UNTRACKED],
|
||||||
"enable queries of the dependency graph for regression testing (default: no)"),
|
"enable queries of the dependency graph for regression testing (default: no)"),
|
||||||
query_stats: bool = (false, parse_bool, [UNTRACKED],
|
query_stats: bool = (false, parse_bool, [UNTRACKED],
|
||||||
|
|
|
@ -7,3 +7,6 @@ all:
|
||||||
$(call RUN,test) || exit 1
|
$(call RUN,test) || exit 1
|
||||||
[ -e "$(TMPDIR)/test.gcno" ] || (echo "No .gcno file"; exit 1)
|
[ -e "$(TMPDIR)/test.gcno" ] || (echo "No .gcno file"; exit 1)
|
||||||
[ -e "$(TMPDIR)/test.gcda" ] || (echo "No .gcda file"; exit 1)
|
[ -e "$(TMPDIR)/test.gcda" ] || (echo "No .gcda file"; exit 1)
|
||||||
|
$(RUSTC) -g -Z profile -Z profile-emit=$(TMPDIR)/abc/abc.gcda test.rs
|
||||||
|
$(call RUN,test) || exit 1
|
||||||
|
[ -e "$(TMPDIR)/abc/abc.gcda" ] || (echo "gcda file not emitted to defined path"; exit 1)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue