diff options
author | Pedro Alves <palves@redhat.com> | 2013-03-13 18:34:55 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2013-03-13 18:34:55 +0000 |
commit | 6f937416b997de1c0fb4664df3b7a69910b66b76 (patch) | |
tree | d66ba0c4f47f61e4d59446204692771d055db9d4 /gdb/tracepoint.c | |
parent | 6dd24dfaecfff8a3a388bbd42e077956c2ec763d (diff) | |
download | gdb-6f937416b997de1c0fb4664df3b7a69910b66b76.zip gdb-6f937416b997de1c0fb4664df3b7a69910b66b76.tar.gz gdb-6f937416b997de1c0fb4664df3b7a69910b66b76.tar.bz2 |
Constify strings in tracepoint.c, lookup_cmd and the completers.
This is sort of a continuation of Keith's parse_exp_1 constification
patch. It started out by undoing these bits:
@@ -754,9 +754,12 @@ validate_actionline (char **line, struct
tmp_p = p;
for (loc = t->base.loc; loc; loc = loc->next)
{
- p = tmp_p;
- exp = parse_exp_1 (&p, loc->address,
+ const char *q;
+
+ q = tmp_p;
+ exp = parse_exp_1 (&q, loc->address,
block_for_pc (loc->address), 1);
+ p = (char *) q;
and progressively making more things const upwards, fixing fallout,
rinse repeat, until GDB built again (--enable-targets=all).
That ended up constifying lookup_cmd/add_cmd and (lots of) friends,
and the completers.
I didn't try to constify the command hooks themselves, because I know
upfront there are commands that write to the command string argument,
and I think I managed to stop at a nice non-hacky split point already.
I think the only non-really-super-obvious changes are
tracepoint.c:validate_actionline, and tracepoint.c:trace_dump_actions.
The rest is just mostly about 'char *' => 'const char *', 'char **'=>
'const char **', and the occasional (e.g., deprecated_cmd_warning)
case of 'char **'=> 'const char *', where/when I noticed that nothing
actually cares about the pointer to pointer output.
Tested on x86_64 Fedora 17, native and gdbserver.
gdb/
2013-03-13 Pedro Alves <palves@redhat.com>
* ada-lang.c (struct add_partial_datum) <text, text0, word>: Make
fields const.
(ada_make_symbol_completion_list): Make "text0" parameter const.
* ax-gdb.c (agent_eval_command_one): Make "exp" parameter const.
* breakpoint.c (condition_completer): Make "text" and "word"
parameters const. Adjust.
(check_tracepoint_command): Adjust to validate_actionline
prototype change.
(catch_syscall_completer): Make "text" and "word" parameters
const.
* cli/cli-cmds.c (show_user): Make "comname" local const.
(valid_command_p): Make "command" parameter const.
(alias_command): Make "alias_prefix" and "command_prefix" locals
const.
* cli/cli-decode.c (add_cmd): Make "name" parameter const.
(add_alias_cmd): Make "name" and "oldname" parameters const.
Adjust. No longer make copy of OLDNAME.
(add_prefix_cmd, add_abbrev_prefix_cmd, add_set_or_show_cmd)
(add_setshow_cmd_full, add_setshow_enum_cmd)
(add_setshow_auto_boolean_cmd, add_setshow_boolean_cmd)
(add_setshow_filename_cmd, add_setshow_string_cmd)
(add_setshow_string_noescape_cmd)
(add_setshow_optional_filename_cmd, add_setshow_integer_cmd)
(add_setshow_uinteger_cmd, add_setshow_zinteger_cmd)
(add_setshow_zuinteger_unlimited_cmd, add_setshow_zuinteger_cmd)
(delete_cmd, add_info, add_info_alias, add_com, add_com_alias):
Make "name" parameter const.
(help_cmd): Rename "command" parameter to "arg". New const local
"command".
(find_cmd): Make "command" parameter const.
(lookup_cmd_1): Make "text" parameter pointer to const. Adjust to
deprecated_cmd_warning prototype change.
(undef_cmd_error): Make "cmdtype" parameter const.
(lookup_cmd): Make "line" parameter const.
(deprecated_cmd_warning): Change type of "text" parameter to
pointer to const char, from pointer to pointer to char. Adjust.
(lookup_cmd_composition): Make "text" parameter const.
(complete_on_cmdlist, complete_on_enum): Make "text" and "word"
parameters const.
* cli/cli-decode.h (struct cmd_list_element) <name>: Make field
const.
* cli/cli-script.c (validate_comname): Make "tem" local const.
(define_command): New const local "tem_c". Use it in calls to
lookup_cmd.
(document_command): Make "tem" and "comfull" locals const.
(show_user_1): Make "prefix" and "name" parameters const.
* cli-script.h (show_user_1): Make "prefix" and "name" parameters
const.
* command.h (add_cmd, add_alias_cmd, add_prefix_cmd)
(add_abbrev_prefix_cmd, completer_ftype, lookup_cmd, lookup_cmd_1)
(deprecated_cmd_warning, lookup_cmd_composition, add_com)
(add_com_alias, add_info, add_info_alias, complete_on_cmdlist)
(complete_on_enum, add_setshow_enum_cmd)
(add_setshow_auto_boolean_cmd, add_setshow_boolean_cmd)
(add_setshow_filename_cmd, add_setshow_string_cmd)
(add_setshow_string_noescape_cmd)
(add_setshow_optional_filename_cmd, add_setshow_integer_cmd)
(add_setshow_uinteger_cmd, add_setshow_zinteger_cmd)
(add_setshow_zuinteger_cmd, add_setshow_zuinteger_unlimited_cmd):
Change prototypes, constifying strings.
* completer.c (noop_completer, filename_completer): Make "text"
and "prefix" parameters const.
(location_completer, expression_completer)
(complete_line_internal): Make "text" and "prefix" parameters
const and adjust.
(command_completer, signal_completer): Make "text" and "prefix"
parameters const.
* completer.h (noop_completer, filename_completer)
(expression_completer, location_completer, command_completer)
(signal_completer): Change prototypes.
* corefile.c (complete_set_gnutarget): Make "text" and "word"
parameters const.
* cp-abi.c (cp_abi_completer): Likewise.
* expression.h (parse_expression_for_completion): Change
prototype.
* f-lang.c (f_make_symbol_completion_list): Make "text" and "word"
parameters const.
* infcmd.c (_initialize_infcmd): Make "cmd_name" local const.
* infrun.c (handle_completer): Make "text" and "word" parameters
const.
* interps.c (interpreter_completer): Make "text" and "word"
parameters const.
* language.h (struct language_defn)
<la_make_symbol_completion_list>: Make "text" and "word"
parameters const.
* parse.c (parse_exp_1): Move const hack to parse_exp_in_context.
(parse_exp_in_context): Rename to ...
(parse_exp_in_context_1): ... this.
(parse_exp_in_context): Reimplement, with const hack from
parse_exp_1.
(parse_expression_for_completion): Make "string" parameter const.
* printcmd.c (decode_format): Make "string_ptr" parameter pointer
to pointer to const char. Adjust.
(print_command_1): Make "exp" parameter const.
(output_command): Rename to ...
(output_command_const): ... this. Make "exp" parameter const.
(output_command): Reimplement.
(x_command): Adjust.
(display_command): Rename "exp" parameter to "arg". New "exp"
local, const version of "arg".
* python/py-auto-load.c (gdbpy_initialize_auto_load): Make
"cmd_name" local const.
* python/py-cmd.c (cmdpy_destroyer): Cast const away in xfree
call.
(cmdpy_completer): Make "text" and "word" parameters const.
(gdbpy_parse_command_name): Make "prefix_text2" local const.
* python/py-param.c (add_setshow_generic): Make "tmp_name" local
const.
* remote.c (_initialize_remote): Make "cmd_name" local const.
* symtab.c (language_search_unquoted_string): Make "text" and "p"
parameters const. Adjust.
(completion_list_add_fields): Make "sym_text", "text" and "word"
parameters const.
(struct add_name_data) <sym_text, text, word>: Make fields const.
(default_make_symbol_completion_list_break_on): Make "text" and
"word" parameters const. Adjust locals.
(default_make_symbol_completion_list)
(make_symbol_completion_list, make_symbol_completion_type)
(make_symbol_completion_list_fn): Make "text" and "word"
parameters const.
(make_file_symbol_completion_list): Make "text", "word" and
"srcfile" parameters const. Adjust locals.
(add_filename_to_list): Make "text" and "word" parameters const.
(struct add_partial_filename_data) <text, word>: Make fields
const.
(make_source_files_completion_list): Make "text" and "word"
parameters const.
* symtab.h (default_make_symbol_completion_list_break_on)
(default_make_symbol_completion_list, make_symbol_completion_list)
(make_symbol_completion_type enum type_code)
(make_symbol_completion_list_fn make_file_symbol_completion_list)
(make_source_files_completion_list): Change prototype.
* top.c (execute_command): Adjust to pass pointer to pointer to
const char to lookup_cmd, and to deprecated_cmd_warning prototype
change.
(set_verbose): Make "cmdname" local const.
* tracepoint.c (decode_agent_options): Make "exp" parameter const,
and adjust.
(validate_actionline): Make "line" parameter a pointer to const
char, and adjust.
(encode_actions_1): Make "action_exp" local const, and adjust.
(encode_actions): Adjust.
(replace_comma): Delete.
(trace_dump_actions): Make "action_exp" and "next_comma" locals
const, and adjust. Don't frob the action string while splitting
it at commas. Instead, make a copy of each split substring in
turn.
(trace_dump_command): Adjust to validate_actionline prototype
change.
* tracepoint.h (decode_agent_options, decode_agent_options)
(encode_actions, validate_actionline): Change prototypes.
* valprint.h (output_command): Delete declaration.
(output_command_const): Declare.
* value.c (function_destroyer): Cast const away in xfree call.
Diffstat (limited to 'gdb/tracepoint.c')
-rw-r--r-- | gdb/tracepoint.c | 122 |
1 files changed, 57 insertions, 65 deletions
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 513dccc..4db93ca 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -610,8 +610,8 @@ teval_pseudocommand (char *args, int from_tty) /* Parse any collection options, such as /s for strings. */ -char * -decode_agent_options (char *exp) +const char * +decode_agent_options (const char *exp) { struct value_print_options opts; @@ -643,7 +643,7 @@ decode_agent_options (char *exp) else error (_("Undefined collection format \"%c\"."), *exp); - exp = skip_spaces (exp); + exp = skip_spaces_const (exp); return exp; } @@ -700,21 +700,22 @@ report_agent_reqs_errors (struct agent_expr *aexpr) /* worker function */ void -validate_actionline (char **line, struct breakpoint *b) +validate_actionline (const char *line, struct breakpoint *b) { struct cmd_list_element *c; struct expression *exp = NULL; struct cleanup *old_chain = NULL; - char *p, *tmp_p; + const char *tmp_p; + const char *p; struct bp_location *loc; struct agent_expr *aexpr; struct tracepoint *t = (struct tracepoint *) b; /* If EOF is typed, *line is NULL. */ - if (*line == NULL) + if (line == NULL) return; - p = skip_spaces (*line); + p = skip_spaces_const (line); /* Symbol lookup etc. */ if (*p == '\0') /* empty line: just prompt for another line. */ @@ -736,7 +737,7 @@ validate_actionline (char **line, struct breakpoint *b) do { /* Repeat over a comma-separated list. */ QUIT; /* Allow user to bail out with ^C. */ - p = skip_spaces (p); + p = skip_spaces_const (p); if (*p == '$') /* Look for special pseudo-symbols. */ { @@ -754,12 +755,9 @@ validate_actionline (char **line, struct breakpoint *b) tmp_p = p; for (loc = t->base.loc; loc; loc = loc->next) { - const char *q; - - q = tmp_p; - exp = parse_exp_1 (&q, loc->address, + p = tmp_p; + exp = parse_exp_1 (&p, loc->address, block_for_pc (loc->address), 1); - p = (char *) q; old_chain = make_cleanup (free_current_contents, &exp); if (exp->elts[0].opcode == OP_VAR_VALUE) @@ -804,18 +802,16 @@ validate_actionline (char **line, struct breakpoint *b) do { /* Repeat over a comma-separated list. */ QUIT; /* Allow user to bail out with ^C. */ - p = skip_spaces (p); + p = skip_spaces_const (p); tmp_p = p; for (loc = t->base.loc; loc; loc = loc->next) { - const char *q; + p = tmp_p; - q = tmp_p; /* Only expressions are allowed for this action. */ - exp = parse_exp_1 (&q, loc->address, + exp = parse_exp_1 (&p, loc->address, block_for_pc (loc->address), 1); - p = (char *) q; old_chain = make_cleanup (free_current_contents, &exp); /* We have something to evaluate, make sure that the expr to @@ -838,20 +834,20 @@ validate_actionline (char **line, struct breakpoint *b) else if (cmd_cfunc_eq (c, while_stepping_pseudocommand)) { - char *steparg; /* In case warning is necessary. */ - - p = skip_spaces (p); - steparg = p; + char *endp; - if (*p == '\0' || (t->step_count = strtol (p, &p, 0)) == 0) - error (_("while-stepping step count `%s' is malformed."), *line); + p = skip_spaces_const (p); + t->step_count = strtol (p, &endp, 0); + if (endp == p || t->step_count == 0) + error (_("while-stepping step count `%s' is malformed."), line); + p = endp; } else if (cmd_cfunc_eq (c, end_actions_pseudocommand)) ; else - error (_("`%s' is not a supported tracepoint action."), *line); + error (_("`%s' is not a supported tracepoint action."), line); } enum { @@ -1375,7 +1371,7 @@ encode_actions_1 (struct command_line *action, struct collection_list *collect, struct collection_list *stepping_list) { - char *action_exp; + const char *action_exp; struct expression *exp = NULL; int i; struct value *tempval; @@ -1386,7 +1382,7 @@ encode_actions_1 (struct command_line *action, { QUIT; /* Allow user to bail out with ^C. */ action_exp = action->line; - action_exp = skip_spaces (action_exp); + action_exp = skip_spaces_const (action_exp); cmd = lookup_cmd (&action_exp, cmdlist, "", -1, 1); if (cmd == 0) @@ -1401,7 +1397,7 @@ encode_actions_1 (struct command_line *action, do { /* Repeat over a comma-separated list. */ QUIT; /* Allow user to bail out with ^C. */ - action_exp = skip_spaces (action_exp); + action_exp = skip_spaces_const (action_exp); if (0 == strncasecmp ("$reg", action_exp, 4)) { @@ -1476,12 +1472,9 @@ encode_actions_1 (struct command_line *action, unsigned long addr; struct cleanup *old_chain = NULL; struct cleanup *old_chain1 = NULL; - const char *q; - q = action_exp; - exp = parse_exp_1 (&q, tloc->address, + exp = parse_exp_1 (&action_exp, tloc->address, block_for_pc (tloc->address), 1); - action_exp = (char *) q; old_chain = make_cleanup (free_current_contents, &exp); switch (exp->elts[0].opcode) @@ -1565,17 +1558,14 @@ encode_actions_1 (struct command_line *action, do { /* Repeat over a comma-separated list. */ QUIT; /* Allow user to bail out with ^C. */ - action_exp = skip_spaces (action_exp); + action_exp = skip_spaces_const (action_exp); { struct cleanup *old_chain = NULL; struct cleanup *old_chain1 = NULL; - const char *q; - q = action_exp; - exp = parse_exp_1 (&q, tloc->address, + exp = parse_exp_1 (&action_exp, tloc->address, block_for_pc (tloc->address), 1); - action_exp = (char *) q; old_chain = make_cleanup (free_current_contents, &exp); aexpr = gen_eval_for_expr (tloc->address, exp); @@ -1643,18 +1633,15 @@ encode_actions (struct breakpoint *t, struct bp_location *tloc, the fly, and don't cache it. */ if (*default_collect) { - char *line; - default_collect_line = xstrprintf ("collect %s", default_collect); make_cleanup (xfree, default_collect_line); - line = default_collect_line; - validate_actionline (&line, t); + validate_actionline (default_collect_line, t); default_collect_action = xmalloc (sizeof (struct command_line)); make_cleanup (xfree, default_collect_action); default_collect_action->next = actions; - default_collect_action->line = line; + default_collect_action->line = default_collect_line; actions = default_collect_action; } encode_actions_1 (actions, t, tloc, frame_reg, frame_offset, @@ -2800,15 +2787,6 @@ scope_info (char *args, int from_tty) save_args); } -/* worker function (cleanup) */ -static void -replace_comma (void *data) -{ - char *comma = data; - *comma = ','; -} - - /* Helper for trace_dump_command. Dump the action list starting at ACTION. STEPPING_ACTIONS is true if we're iterating over the actions of the body of a while-stepping action. STEPPING_FRAME is @@ -2820,7 +2798,7 @@ trace_dump_actions (struct command_line *action, int stepping_actions, int stepping_frame, int from_tty) { - char *action_exp, *next_comma; + const char *action_exp, *next_comma; for (; action != NULL; action = action->next) { @@ -2828,7 +2806,7 @@ trace_dump_actions (struct command_line *action, QUIT; /* Allow user to bail out with ^C. */ action_exp = action->line; - action_exp = skip_spaces (action_exp); + action_exp = skip_spaces_const (action_exp); /* The collection actions to be done while stepping are bracketed by the commands "while-stepping" and "end". */ @@ -2858,6 +2836,10 @@ trace_dump_actions (struct command_line *action, STEPPING_ACTIONS should be equal. */ if (stepping_frame == stepping_actions) { + char *cmd = NULL; + struct cleanup *old_chain + = make_cleanup (free_current_contents, &cmd); + if (*action_exp == '/') action_exp = decode_agent_options (action_exp); @@ -2866,7 +2848,7 @@ trace_dump_actions (struct command_line *action, QUIT; /* Allow user to bail out with ^C. */ if (*action_exp == ',') action_exp++; - action_exp = skip_spaces (action_exp); + action_exp = skip_spaces_const (action_exp); next_comma = strchr (action_exp, ','); @@ -2880,20 +2862,31 @@ trace_dump_actions (struct command_line *action, args_info (NULL, from_tty); else { /* variable */ - if (next_comma) + if (next_comma != NULL) { - make_cleanup (replace_comma, next_comma); - *next_comma = '\0'; + size_t len = next_comma - action_exp; + + cmd = xrealloc (cmd, len + 1); + memcpy (cmd, action_exp, len); + cmd[len] = 0; + } + else + { + size_t len = strlen (action_exp); + + cmd = xrealloc (cmd, len + 1); + memcpy (cmd, action_exp, len + 1); } - printf_filtered ("%s = ", action_exp); - output_command (action_exp, from_tty); + + printf_filtered ("%s = ", cmd); + output_command_const (cmd, from_tty); printf_filtered ("\n"); } - if (next_comma) - *next_comma = ','; action_exp = next_comma; } while (action_exp && *action_exp == ','); + + do_cleanups (old_chain); } } } @@ -2908,7 +2901,7 @@ trace_dump_command (char *args, int from_tty) struct tracepoint *t; int stepping_frame = 0; struct bp_location *loc; - char *line, *default_collect_line = NULL; + char *default_collect_line = NULL; struct command_line *actions, *default_collect_action = NULL; struct cleanup *old_chain = NULL; @@ -2952,12 +2945,11 @@ trace_dump_command (char *args, int from_tty) { default_collect_line = xstrprintf ("collect %s", default_collect); old_chain = make_cleanup (xfree, default_collect_line); - line = default_collect_line; - validate_actionline (&line, &t->base); + validate_actionline (default_collect_line, &t->base); default_collect_action = xmalloc (sizeof (struct command_line)); make_cleanup (xfree, default_collect_action); default_collect_action->next = actions; - default_collect_action->line = line; + default_collect_action->line = default_collect_line; actions = default_collect_action; } |