Implement -fprofile-prefix-map.
PR gcov-profile/96092 gcc/ChangeLog: * common.opt: New option. * coverage.c (coverage_begin_function): Emit filename with remap_profile_filename. * doc/invoke.texi: Document the new option. * file-prefix-map.c (add_profile_prefix_map): New. (remap_profile_filename): Likewise. * file-prefix-map.h (add_profile_prefix_map): Likewise. (remap_profile_filename): Likewise. * lto-opts.c (lto_write_options): Handle OPT_fprofile_prefix_map_. * opts-global.c (handle_common_deferred_options): Likewise. * opts.c (common_handle_option): Likewise. (gen_command_line_string): Likewise. * profile.c (output_location): Emit filename with remap_profile_filename.
This commit is contained in:
parent
6f43a8a080
commit
cde87638bf
9 changed files with 48 additions and 3 deletions
|
@ -2327,6 +2327,10 @@ fprofile-prefix-path=
|
|||
Common Joined RejectNegative Var(profile_prefix_path)
|
||||
Remove prefix from absolute path before mangling name for -fprofile-generate= and -fprofile-use=.
|
||||
|
||||
fprofile-prefix-map=
|
||||
Common Joined RejectNegative Var(common_deferred_options) Defer
|
||||
-fprofile-prefix-map=<old>=<new> Map one directory name to another in GCOV coverage result.
|
||||
|
||||
fprofile-generate
|
||||
Common
|
||||
Enable common options for generating profile info for profile feedback directed optimizations.
|
||||
|
|
|
@ -51,6 +51,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "profile.h"
|
||||
#include "diagnostic.h"
|
||||
#include "varasm.h"
|
||||
#include "file-prefix-map.h"
|
||||
|
||||
#include "gcov-io.c"
|
||||
|
||||
|
@ -646,7 +647,7 @@ coverage_begin_function (unsigned lineno_checksum, unsigned cfg_checksum)
|
|||
gcov_write_unsigned (DECL_ARTIFICIAL (current_function_decl)
|
||||
&& !DECL_FUNCTION_VERSIONED (current_function_decl)
|
||||
&& !DECL_LAMBDA_FUNCTION_P (current_function_decl));
|
||||
gcov_write_filename (startloc.file);
|
||||
gcov_write_filename (remap_profile_filename (startloc.file));
|
||||
gcov_write_unsigned (startloc.line);
|
||||
gcov_write_unsigned (startloc.column);
|
||||
|
||||
|
|
|
@ -613,7 +613,8 @@ Objective-C and Objective-C++ Dialects}.
|
|||
-fvtv-counts -fvtv-debug @gol
|
||||
-finstrument-functions @gol
|
||||
-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
|
||||
-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}}
|
||||
-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}} @gol
|
||||
-fprofile-prefix-map=@var{old}=@var{new}
|
||||
|
||||
@item Preprocessor Options
|
||||
@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
|
||||
|
@ -2182,7 +2183,8 @@ files resided in directory @file{@var{new}} instead. Specifying this
|
|||
option is equivalent to specifying all the individual
|
||||
@option{-f*-prefix-map} options. This can be used to make reproducible
|
||||
builds that are location independent. See also
|
||||
@option{-fmacro-prefix-map} and @option{-fdebug-prefix-map}.
|
||||
@option{-fmacro-prefix-map}, @option{-fdebug-prefix-map} and
|
||||
@option{-fprofile-prefix-map}.
|
||||
|
||||
@item -fplugin=@var{name}.so
|
||||
@opindex fplugin
|
||||
|
@ -15273,6 +15275,14 @@ In such setups @option{-fprofile-prefix-path=}@var{path} with @var{path}
|
|||
pointing to the base directory of the build can be used to strip the irrelevant
|
||||
part of the path and keep all file names relative to the main build directory.
|
||||
|
||||
@item -fprofile-prefix-map=@var{old}=@var{new}
|
||||
@opindex fprofile-prefix-map
|
||||
When compiling files residing in directory @file{@var{old}}, record
|
||||
profiling information (with @option{--coverage})
|
||||
describing them as if the files resided in
|
||||
directory @file{@var{new}} instead.
|
||||
See also @option{-ffile-prefix-map}.
|
||||
|
||||
@item -fprofile-update=@var{method}
|
||||
@opindex fprofile-update
|
||||
|
||||
|
|
|
@ -92,6 +92,7 @@ remap_filename (file_prefix_map *maps, const char *filename)
|
|||
/* Linked lists of file_prefix_map structures. */
|
||||
static file_prefix_map *macro_prefix_maps; /* -fmacro-prefix-map */
|
||||
static file_prefix_map *debug_prefix_maps; /* -fdebug-prefix-map */
|
||||
static file_prefix_map *profile_prefix_maps; /* -fprofile-prefix-map */
|
||||
|
||||
/* Record a file prefix mapping for -fmacro-prefix-map. */
|
||||
void
|
||||
|
@ -113,6 +114,14 @@ add_file_prefix_map (const char *arg)
|
|||
{
|
||||
add_prefix_map (macro_prefix_maps, arg, "-ffile-prefix-map");
|
||||
add_prefix_map (debug_prefix_maps, arg, "-ffile-prefix-map");
|
||||
add_prefix_map (profile_prefix_maps, arg, "-ffile-prefix-map");
|
||||
}
|
||||
|
||||
/* Record a file prefix mapping for -fprofile-prefix-map. */
|
||||
void
|
||||
add_profile_prefix_map (const char *arg)
|
||||
{
|
||||
add_prefix_map (profile_prefix_maps, arg, "-fprofile-prefix-map");
|
||||
}
|
||||
|
||||
/* Remap using -fmacro-prefix-map. Return the GC-allocated new name
|
||||
|
@ -130,3 +139,11 @@ remap_debug_filename (const char *filename)
|
|||
{
|
||||
return remap_filename (debug_prefix_maps, filename);
|
||||
}
|
||||
|
||||
/* Remap using -fprofile-prefix-map. Return the GC-allocated new name
|
||||
corresponding to FILENAME or FILENAME if no remapping was performed. */
|
||||
const char *
|
||||
remap_profile_filename (const char *filename)
|
||||
{
|
||||
return remap_filename (profile_prefix_maps, filename);
|
||||
}
|
||||
|
|
|
@ -21,8 +21,10 @@
|
|||
void add_macro_prefix_map (const char *);
|
||||
void add_debug_prefix_map (const char *);
|
||||
void add_file_prefix_map (const char *);
|
||||
void add_profile_prefix_map (const char *);
|
||||
|
||||
const char *remap_macro_filename (const char *);
|
||||
const char *remap_debug_filename (const char *);
|
||||
const char *remap_profile_filename (const char *);
|
||||
|
||||
#endif /* !GCC_FILE_PREFIX_MAP_H */
|
||||
|
|
|
@ -149,6 +149,7 @@ lto_write_options (void)
|
|||
case OPT_fdebug_prefix_map_:
|
||||
case OPT_ffile_prefix_map_:
|
||||
case OPT_fmacro_prefix_map_:
|
||||
case OPT_fprofile_prefix_map_:
|
||||
continue;
|
||||
|
||||
default:
|
||||
|
|
|
@ -386,6 +386,10 @@ handle_common_deferred_options (void)
|
|||
add_file_prefix_map (opt->arg);
|
||||
break;
|
||||
|
||||
case OPT_fprofile_prefix_map_:
|
||||
add_profile_prefix_map (opt->arg);
|
||||
break;
|
||||
|
||||
case OPT_fdump_:
|
||||
g->get_dumps ()->dump_switch_p (opt->arg);
|
||||
break;
|
||||
|
|
|
@ -2685,6 +2685,7 @@ common_handle_option (struct gcc_options *opts,
|
|||
|
||||
case OPT_fdebug_prefix_map_:
|
||||
case OPT_ffile_prefix_map_:
|
||||
case OPT_fprofile_prefix_map_:
|
||||
/* Deferred. */
|
||||
break;
|
||||
|
||||
|
@ -3598,6 +3599,7 @@ gen_command_line_string (cl_decoded_option *options,
|
|||
case OPT_fdebug_prefix_map_:
|
||||
case OPT_fmacro_prefix_map_:
|
||||
case OPT_ffile_prefix_map_:
|
||||
case OPT_fprofile_prefix_map_:
|
||||
case OPT_fcompare_debug:
|
||||
case OPT_fchecking:
|
||||
case OPT_fchecking_:
|
||||
|
|
|
@ -65,6 +65,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "dumpfile.h"
|
||||
#include "cfgloop.h"
|
||||
#include "sreal.h"
|
||||
#include "file-prefix-map.h"
|
||||
|
||||
#include "profile.h"
|
||||
|
||||
|
@ -1060,6 +1061,9 @@ output_location (hash_set<location_triplet_hash> *streamed_locations,
|
|||
static int prev_line;
|
||||
bool name_differs, line_differs;
|
||||
|
||||
if (file_name != NULL)
|
||||
file_name = remap_profile_filename (file_name);
|
||||
|
||||
location_triplet triplet;
|
||||
triplet.filename = file_name;
|
||||
triplet.lineno = line;
|
||||
|
|
Loading…
Add table
Reference in a new issue