From 6a1f6c9c8645b35f6704ded5f1f3f9186dadc109 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Fri, 19 Nov 2010 13:27:18 +0000 Subject: [PATCH] common.opt (flag_instrument_functions_exclude_functions, [...]): New Variable definitions. * common.opt (flag_instrument_functions_exclude_functions, flag_instrument_functions_exclude_files): New Variable definitions. * flags.h (flag_instrument_functions_exclude_p): Don't declare. * gimplify.c (char_p): Declare type and vectors. (flag_instrument_functions_exclude_p): Moved from opts.c. Make static. * opts.c (flag_instrument_functions_exclude_functions, flag_instrument_functions_exclude_files): Remove. (add_comma_separated_to_vector): Take void **. (flag_instrument_functions_exclude_p): Move to gimplify.c. (common_handle_option): Use options structure for -finstrument-functions-exclude- options. From-SVN: r166943 --- gcc/ChangeLog | 16 ++++++++++++++++ gcc/common.opt | 8 ++++++++ gcc/flags.h | 4 ---- gcc/gimplify.c | 40 ++++++++++++++++++++++++++++++++++++++++ gcc/opts.c | 50 +++++++------------------------------------------- 5 files changed, 71 insertions(+), 47 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9ffa3c4..b065ee3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,21 @@ 2010-11-19 Joseph Myers + * common.opt (flag_instrument_functions_exclude_functions, + flag_instrument_functions_exclude_files): New Variable + definitions. + * flags.h (flag_instrument_functions_exclude_p): Don't declare. + * gimplify.c (char_p): Declare type and vectors. + (flag_instrument_functions_exclude_p): Moved from opts.c. Make + static. + * opts.c (flag_instrument_functions_exclude_functions, + flag_instrument_functions_exclude_files): Remove. + (add_comma_separated_to_vector): Take void **. + (flag_instrument_functions_exclude_p): Move to gimplify.c. + (common_handle_option): Use options structure for + -finstrument-functions-exclude- options. + +2010-11-19 Joseph Myers + * doc/options.texi (Var): Document effects of Defer. (Defer): Document. * opt-functions.awk (var_type, var_set): Handle deferred options. diff --git a/gcc/common.opt b/gcc/common.opt index a3dd291..9a1f905 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -105,6 +105,14 @@ enum symbol_visibility default_visibility = VISIBILITY_DEFAULT Variable enum tls_model flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC +; These two are really VEC(char_p,heap) *. + +Variable +void *flag_instrument_functions_exclude_functions + +Variable +void *flag_instrument_functions_exclude_files + ### Driver diff --git a/gcc/flags.h b/gcc/flags.h index 7aa9ff1..3cc65a4 100644 --- a/gcc/flags.h +++ b/gcc/flags.h @@ -159,10 +159,6 @@ extern enum stack_check_type flag_stack_check; #define abi_version_at_least(N) \ (flag_abi_version == 0 || flag_abi_version >= (N)) -/* Return whether the function should be excluded from - instrumentation. */ -extern bool flag_instrument_functions_exclude_p (tree fndecl); - /* True if overflow wraps around for the given integral type. That is, TYPE_MAX + 1 == TYPE_MIN. */ #define TYPE_OVERFLOW_WRAPS(TYPE) \ diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 128ac02..5cf8474 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -7762,6 +7762,46 @@ gimplify_body (tree *body_p, tree fndecl, bool do_parms) return outer_bind; } +typedef char *char_p; /* For DEF_VEC_P. */ +DEF_VEC_P(char_p); +DEF_VEC_ALLOC_P(char_p,heap); + +/* Return whether we should exclude FNDECL from instrumentation. */ + +static bool +flag_instrument_functions_exclude_p (tree fndecl) +{ + VEC(char_p,heap) *vec; + + vec = (VEC(char_p,heap) *) flag_instrument_functions_exclude_functions; + if (VEC_length (char_p, vec) > 0) + { + const char *name; + int i; + char *s; + + name = lang_hooks.decl_printable_name (fndecl, 0); + FOR_EACH_VEC_ELT (char_p, vec, i, s) + if (strstr (name, s) != NULL) + return true; + } + + vec = (VEC(char_p,heap) *) flag_instrument_functions_exclude_files; + if (VEC_length (char_p, vec) > 0) + { + const char *name; + int i; + char *s; + + name = DECL_SOURCE_FILE (fndecl); + FOR_EACH_VEC_ELT (char_p, vec, i, s) + if (strstr (name, s) != NULL) + return true; + } + + return false; +} + /* Entry point to the gimplification pass. FNDECL is the FUNCTION_DECL node for the function we want to gimplify. diff --git a/gcc/opts.c b/gcc/opts.c index ad3d6fc..b2787ce 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -319,15 +319,10 @@ struct visibility_flags visibility_options; /* What to print when a switch has no documentation. */ static const char undocumented_msg[] = N_("This switch lacks documentation"); -/* Functions excluded from profiling. */ - typedef char *char_p; /* For DEF_VEC_P. */ DEF_VEC_P(char_p); DEF_VEC_ALLOC_P(char_p,heap); -static VEC(char_p,heap) *flag_instrument_functions_exclude_functions; -static VEC(char_p,heap) *flag_instrument_functions_exclude_files; - typedef const char *const_char_p; /* For DEF_VEC_P. */ DEF_VEC_P(const_char_p); DEF_VEC_ALLOC_P(const_char_p,heap); @@ -545,12 +540,13 @@ add_input_filename (const char *filename) /* Add comma-separated strings to a char_p vector. */ static void -add_comma_separated_to_vector (VEC(char_p,heap) **pvec, const char* arg) +add_comma_separated_to_vector (void **pvec, const char *arg) { char *tmp; char *r; char *w; char *token_start; + VEC(char_p,heap) *vec = (VEC(char_p,heap) *) *pvec; /* We never free this string. */ tmp = xstrdup (arg); @@ -565,7 +561,7 @@ add_comma_separated_to_vector (VEC(char_p,heap) **pvec, const char* arg) { *w++ = '\0'; ++r; - VEC_safe_push (char_p, heap, *pvec, token_start); + VEC_safe_push (char_p, heap, vec, token_start); token_start = w; } if (*r == '\\' && r[1] == ',') @@ -577,43 +573,11 @@ add_comma_separated_to_vector (VEC(char_p,heap) **pvec, const char* arg) *w++ = *r++; } if (*token_start != '\0') - VEC_safe_push (char_p, heap, *pvec, token_start); -} - -/* Return whether we should exclude FNDECL from instrumentation. */ + VEC_safe_push (char_p, heap, vec, token_start); -bool -flag_instrument_functions_exclude_p (tree fndecl) -{ - if (VEC_length (char_p, flag_instrument_functions_exclude_functions) > 0) - { - const char *name; - int i; - char *s; - - name = lang_hooks.decl_printable_name (fndecl, 0); - FOR_EACH_VEC_ELT (char_p, flag_instrument_functions_exclude_functions, - i, s) - if (strstr (name, s) != NULL) - return true; - } - - if (VEC_length (char_p, flag_instrument_functions_exclude_files) > 0) - { - const char *name; - int i; - char *s; - - name = DECL_SOURCE_FILE (fndecl); - FOR_EACH_VEC_ELT (char_p, flag_instrument_functions_exclude_files, i, s) - if (strstr (name, s) != NULL) - return true; - } - - return false; + *pvec = vec; } - /* Handle the vector of command line options (located at LOC), storing the results of processing DECODED_OPTIONS and DECODED_OPTIONS_COUNT in OPTS and OPTS_SET and using DC for diagnostic state. LANG_MASK @@ -1918,12 +1882,12 @@ common_handle_option (struct gcc_options *opts, case OPT_finstrument_functions_exclude_function_list_: add_comma_separated_to_vector - (&flag_instrument_functions_exclude_functions, arg); + (&opts->x_flag_instrument_functions_exclude_functions, arg); break; case OPT_finstrument_functions_exclude_file_list_: add_comma_separated_to_vector - (&flag_instrument_functions_exclude_files, arg); + (&opts->x_flag_instrument_functions_exclude_files, arg); break; case OPT_fmessage_length_: -- 2.7.4