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
This commit is contained in:
parent
21bf155820
commit
6a1f6c9c86
@ -1,3 +1,19 @@
|
||||
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.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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) \
|
||||
|
@ -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.
|
||||
|
||||
|
52
gcc/opts.c
52
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);
|
||||
VEC_safe_push (char_p, heap, vec, token_start);
|
||||
|
||||
*pvec = vec;
|
||||
}
|
||||
|
||||
/* Return whether we should exclude FNDECL from instrumentation. */
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/* 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_:
|
||||
|
Loading…
Reference in New Issue
Block a user