aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2010-11-19 13:27:18 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2010-11-19 13:27:18 +0000
commit6a1f6c9c8645b35f6704ded5f1f3f9186dadc109 (patch)
treea35d25dbb6e404b8f7a02dc82c52069bfefb83ba
parent21bf1558203226d4191d93a0b110b46611782f72 (diff)
downloadgcc-6a1f6c9c8645b35f6704ded5f1f3f9186dadc109.zip
gcc-6a1f6c9c8645b35f6704ded5f1f3f9186dadc109.tar.gz
gcc-6a1f6c9c8645b35f6704ded5f1f3f9186dadc109.tar.bz2
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
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/common.opt8
-rw-r--r--gcc/flags.h4
-rw-r--r--gcc/gimplify.c40
-rw-r--r--gcc/opts.c50
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 <joseph@codesourcery.com>
+ * 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 <joseph@codesourcery.com>
+
* 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_: