looks ok. David
On Wed, Apr 17, 2013 at 9:00 AM, Teresa Johnson <tejohn...@google.com> wrote: > Patch to add interface for querying the profile directory prefix > specified to the -fprofile-generate= option. > > Google ref b/8629045. > > Tested with regression tests and internal test. Ok for google branches? > > 2013-04-17 Teresa Johnson <tejohn...@google.com> > > * libgcc/libgcov.c (__gcov_get_profile_prefix): New function. > * gcc/tree-profile.c (tree_init_instrumentation): New function. > * gcc/coverage.c (get_const_string_type): Make non-static. > (coverage_init): Invoke tree_init_instrumentation(). > * gcc/coverage.h (get_const_string_type): Declare. > (tree_init_instrumentation): Ditto. > > Index: libgcc/libgcov.c > =================================================================== > --- libgcc/libgcov.c (revision 197640) > +++ libgcc/libgcov.c (working copy) > @@ -183,6 +183,14 @@ unsigned int __gcov_sampling_enabled () > return __gcov_has_sampling; > } > > +/* Profile directory prefix specified to -fprofile-generate=. */ > +extern char * __gcov_profile_prefix; > + > +char *__gcov_get_profile_prefix () > +{ > + return __gcov_profile_prefix; > +} > + > /* Per thread sample counter. */ > THREAD_PREFIX gcov_unsigned_t __gcov_sample_counter = 0; > > Index: gcc/tree-profile.c > =================================================================== > --- gcc/tree-profile.c (revision 197640) > +++ gcc/tree-profile.c (working copy) > @@ -165,6 +165,9 @@ static struct pointer_set_t *instrumentation_to_be > /* extern __thread gcov_unsigned_t __gcov_sample_counter */ > static GTY(()) tree gcov_sample_counter_decl = NULL_TREE; > > +/* extern gcov_unsigned_t __gcov_profile_prefix */ > +static tree GTY(()) gcov_profile_prefix_decl = NULL_TREE; > + > /* extern gcov_unsigned_t __gcov_sampling_period */ > static tree GTY(()) gcov_sampling_period_decl = NULL_TREE; > > @@ -407,6 +410,41 @@ cleanup_instrumentation_sampling (void) > } > } > > +/* Initialization function for FDO instrumentation. */ > + > +void > +tree_init_instrumentation (void) > +{ > + if (!gcov_profile_prefix_decl) > + { > + tree prefix_ptr; > + int prefix_len; > + tree prefix_string; > + > + /* Construct an initializer for __gcov_profile_prefix. */ > + gcov_profile_prefix_decl = > + build_decl (UNKNOWN_LOCATION, VAR_DECL, > + get_identifier ("__gcov_profile_prefix"), > + get_const_string_type ()); > + TREE_PUBLIC (gcov_profile_prefix_decl) = 1; > + DECL_ARTIFICIAL (gcov_profile_prefix_decl) = 1; > + make_decl_one_only (gcov_profile_prefix_decl, > + DECL_ASSEMBLER_NAME (gcov_profile_prefix_decl)); > + TREE_STATIC (gcov_profile_prefix_decl) = 1; > + > + prefix_len = strlen (profile_data_prefix); > + prefix_string = build_string (prefix_len + 1, profile_data_prefix); > + TREE_TYPE (prefix_string) = build_array_type > + (char_type_node, build_index_type > + (build_int_cst (NULL_TREE, prefix_len))); > + prefix_ptr = build1 (ADDR_EXPR, get_const_string_type (), > + prefix_string); > + > + DECL_INITIAL (gcov_profile_prefix_decl) = prefix_ptr; > + varpool_finalize_decl (gcov_profile_prefix_decl); > + } > +} > + > /* Initialization function for FDO sampling. */ > > void > Index: gcc/coverage.c > =================================================================== > --- gcc/coverage.c (revision 197640) > +++ gcc/coverage.c (working copy) > @@ -227,7 +227,7 @@ get_gcov_unsigned_t (void) > > /* Return the type node for const char *. */ > > -static tree > +tree > get_const_string_type (void) > { > return build_pointer_type > @@ -2879,6 +2879,7 @@ coverage_init (const char *filename, const char* s > /* Define variables which are referenced at runtime by libgcov. */ > if (profiling_enabled_p ()) > { > + tree_init_instrumentation (); > tree_init_dyn_ipa_parameters (); > init_pmu_profiling (); > tree_init_instrumentation_sampling (); > Index: gcc/coverage.h > =================================================================== > --- gcc/coverage.h (revision 197640) > +++ gcc/coverage.h (working copy) > @@ -82,6 +82,7 @@ extern bool pmu_data_present (void); > > extern tree get_gcov_type (void); > extern tree get_gcov_unsigned_t (void); > +extern tree get_const_string_type (void); > > /* Mark this module as containing asm statements. */ > extern void coverage_has_asm_stmt (void); > @@ -89,5 +90,6 @@ extern void coverage_has_asm_stmt (void); > /* Defined in tree-profile.c. */ > extern void tree_init_instrumentation_sampling (void); > extern void tree_init_dyn_ipa_parameters (void); > +extern void tree_init_instrumentation (void); > > #endif > > -- > This patch is available for review at http://codereview.appspot.com/8726046