From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6824 invoked by alias); 8 Mar 2013 00:12:14 -0000 Received: (qmail 6695 invoked by uid 22791); 8 Mar 2013 00:12:09 -0000 X-SWARE-Spam-Status: No, hits=-5.6 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,KHOP_RCVD_UNTRUST,KHOP_SPAMHAUS_DROP,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_BJ,TW_CP X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 08 Mar 2013 00:10:00 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r2809xWl025711 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 7 Mar 2013 19:09:59 -0500 Received: from valrhona.uglyboxes.com (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r2809wgT017411 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO) for ; Thu, 7 Mar 2013 19:09:59 -0500 Message-ID: <51392C56.7040302@redhat.com> Date: Fri, 08 Mar 2013 00:12:00 -0000 From: Keith Seitz User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120605 Thunderbird/13.0 MIME-Version: 1.0 To: "gdb-patches@sourceware.org ml" Subject: [RFA] "constify" parse_exp_1 Content-Type: multipart/mixed; boundary="------------000501000900050006020402" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2013-03/txt/msg00322.txt.bz2 This is a multi-part message in MIME format. --------------000501000900050006020402 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 3120 Hi, This is the follow-on patch that I mentioned yesterday. Most of the changes are pretty mechanical. I would appreciate another pair of eagle eyes, though. This patch "constifies" parse_exp_1 by making it argument const and strdup'ing it to rigidly enforce this. As Tom points out, this is necessary because nearly all of the language parsers *will* temporarily modify the input string. I have some patches for this that I will post next week. I've tested this by rebuilding with --enable-targets=all on x86_64 linux. There are no regressions against CVS HEAD on native, native-gdbserver, or cc-with-tweaks(-i). This patch has the added side effect of constifying find_condition_and_thread, which is really what I've been after all along. :-) Comments/questions/concerns? Keith ChangeLog 2013-03-07 Keith Seitz * ada-lang.c (ada_read_renaming_var_value): Pass const pointer to expression string to parse_exp_1. (craete_excep_cond_exprs): Likewise. * ax-gdb.c (agent_eval_command_one): Likewise. (maint_agent_printf_command): Likewise. Constify much of the string handling/parsing. * breakpoint.c (set_breakpoint_condition): Pass const pointer to expression string to parse_exp_1. (update_watchpoint): Likewise. (parse_cmd_to_aexpr): Constify string handling. Pass const pointer to parse_exp_1. (init_breakpoint_sal): Pass const pointer to parse_exp_1. (find_condition_and_thread): Likewise. Make TOK const. (watch_command_1): Constify string handling. (update_breakpoint_location): Pass const pointer to parse_exp_1. * eval.c (parse_and_eval_address): Make EXP const. (parse_to_comma_and_eval): Make EXPP const. * expression.h (parse_expression): Make argument const. (parse_exp_1): Make first argument const. * findcmd.c (parse_find_args): Treat ARGS as const. * linespec.c (parse_linespec): Pass const pointer to linespec_expression_to_pc. (linespec_expression_to_pc): Make EXP_PTR const. * parse.c (parse_exp_1): Make STRINGPTR const. Make a copy of the expression to pass to parse_exp_in_context until this whole interface can be constified. (parse_expression): Make STRING const. * printcmd.c (ui_printf): Treat ARG as const. Handle const strings. * tracepoint.c (validate_actionline): Pass const pointer to all calls to parse_exp_1. (encode_actions_1): Likewise. * value.h (parse_to_comma_and_eval): Make argument const. (parse_and_eval_address): Likewise. * varobj.c (varobj_create): Pass const pointer to parse_exp_1. (varobj_set_value): Likewise. * cli/cli-cmds.c (disassemble_command): Treat ARG as const and constify string handling. Pass const pointers to parse_and_eval_address and parse_to_comman_and_eval. * cli/cli-utils.c (skip_to_space): Rename to ... (skip_to_space_const): ... this. Handle const strings. * cli/cli-utils.h (skip_to_space): Turn into macro which invokes skip_to_space_const. (skip_to_space_const): Declare. * common/format.c (parse_format_string): Make ARG const. Handle const strings. * common/format.h (parse_format_string): Make ARG const. * gdbserver/ax.c (ax_printf): Make FORMAT const. --------------000501000900050006020402 Content-Type: text/x-patch; name="constify-parse_exp_1.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="constify-parse_exp_1.patch" Content-length: 26938 Index: ada-lang.c =================================================================== RCS file: /cvs/src/src/gdb/ada-lang.c,v retrieving revision 1.394 diff -u -p -r1.394 ada-lang.c --- ada-lang.c 5 Mar 2013 21:15:34 -0000 1.394 +++ ada-lang.c 7 Mar 2013 22:59:29 -0000 @@ -4057,13 +4057,14 @@ ada_read_renaming_var_value (struct symb struct block *block) { char *sym_name; + const char *sname; struct expression *expr; struct value *value; struct cleanup *old_chain = NULL; - sym_name = xstrdup (SYMBOL_LINKAGE_NAME (renaming_sym)); + sname = sym_name = xstrdup (SYMBOL_LINKAGE_NAME (renaming_sym)); old_chain = make_cleanup (xfree, sym_name); - expr = parse_exp_1 (&sym_name, 0, block, 0); + expr = parse_exp_1 (&sname, 0, block, 0); make_cleanup (free_current_contents, &expr); value = evaluate_expression (expr); @@ -11385,7 +11386,7 @@ create_excep_cond_exprs (struct ada_catc if (!bl->shlib_disabled) { volatile struct gdb_exception e; - char *s; + const char *s; s = cond_string; TRY_CATCH (e, RETURN_MASK_ERROR) Index: ax-gdb.c =================================================================== RCS file: /cvs/src/src/gdb/ax-gdb.c,v retrieving revision 1.109 diff -u -p -r1.109 ax-gdb.c --- ax-gdb.c 7 Mar 2013 00:48:25 -0000 1.109 +++ ax-gdb.c 7 Mar 2013 22:59:29 -0000 @@ -2608,6 +2608,7 @@ agent_eval_command_one (char *exp, int e struct cleanup *old_chain = 0; struct expression *expr; struct agent_expr *agent; + const char *arg; if (!eval) { @@ -2616,14 +2617,15 @@ agent_eval_command_one (char *exp, int e exp = decode_agent_options (exp); } - if (!eval && strcmp (exp, "$_ret") == 0) + arg = exp; + if (!eval && strcmp (arg, "$_ret") == 0) { agent = gen_trace_for_return_address (pc, get_current_arch ()); old_chain = make_cleanup_free_agent_expr (agent); } else { - expr = parse_exp_1 (&exp, pc, block_for_pc (pc), 0); + expr = parse_exp_1 (&arg, pc, block_for_pc (pc), 0); old_chain = make_cleanup (free_current_contents, &expr); if (eval) agent = gen_eval_for_expr (pc, expr); @@ -2716,8 +2718,8 @@ maint_agent_printf_command (char *exp, i struct expression *argvec[100]; struct agent_expr *agent; struct frame_info *fi = get_current_frame (); /* need current scope */ - char *cmdrest; - char *format_start, *format_end; + const char *cmdrest; + const char *format_start, *format_end; struct format_piece *fpieces; int nargs; @@ -2733,7 +2735,7 @@ maint_agent_printf_command (char *exp, i cmdrest = exp; - cmdrest = skip_spaces (cmdrest); + cmdrest = skip_spaces_const (cmdrest); if (*cmdrest++ != '"') error (_("Must start with a format string.")); @@ -2749,19 +2751,19 @@ maint_agent_printf_command (char *exp, i if (*cmdrest++ != '"') error (_("Bad format string, non-terminated '\"'.")); - cmdrest = skip_spaces (cmdrest); + cmdrest = skip_spaces_const (cmdrest); if (*cmdrest != ',' && *cmdrest != 0) error (_("Invalid argument syntax")); if (*cmdrest == ',') cmdrest++; - cmdrest = skip_spaces (cmdrest); + cmdrest = skip_spaces_const (cmdrest); nargs = 0; while (*cmdrest != '\0') { - char *cmd1; + const char *cmd1; cmd1 = cmdrest; expr = parse_exp_1 (&cmd1, 0, (struct block *) 0, 1); Index: breakpoint.c =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.c,v retrieving revision 1.744 diff -u -p -r1.744 breakpoint.c --- breakpoint.c 7 Mar 2013 21:57:29 -0000 1.744 +++ breakpoint.c 7 Mar 2013 22:59:29 -0000 @@ -950,7 +950,7 @@ set_breakpoint_condition (struct breakpo } else { - char *arg = exp; + const char *arg = exp; /* I don't know if it matters whether this is the string the user typed in or the decompiled expression. */ @@ -1759,7 +1759,7 @@ update_watchpoint (struct watchpoint *b, if (within_current_scope && reparse) { - char *s; + const char *s; if (b->exp) { @@ -2186,8 +2186,8 @@ parse_cmd_to_aexpr (CORE_ADDR scope, cha struct agent_expr *aexpr = NULL; struct cleanup *old_chain = NULL; volatile struct gdb_exception ex; - char *cmdrest; - char *format_start, *format_end; + const char *cmdrest; + const char *format_start, *format_end; struct format_piece *fpieces; int nargs; struct gdbarch *gdbarch = get_current_arch (); @@ -2199,7 +2199,7 @@ parse_cmd_to_aexpr (CORE_ADDR scope, cha if (*cmdrest == ',') ++cmdrest; - cmdrest = skip_spaces (cmdrest); + cmdrest = skip_spaces_const (cmdrest); if (*cmdrest++ != '"') error (_("No format string following the location")); @@ -2215,14 +2215,14 @@ parse_cmd_to_aexpr (CORE_ADDR scope, cha if (*cmdrest++ != '"') error (_("Bad format string, non-terminated '\"'.")); - cmdrest = skip_spaces (cmdrest); + cmdrest = skip_spaces_const (cmdrest); if (!(*cmdrest == ',' || *cmdrest == '\0')) error (_("Invalid argument syntax")); if (*cmdrest == ',') cmdrest++; - cmdrest = skip_spaces (cmdrest); + cmdrest = skip_spaces_const (cmdrest); /* For each argument, make an expression. */ @@ -2232,7 +2232,7 @@ parse_cmd_to_aexpr (CORE_ADDR scope, cha nargs = 0; while (*cmdrest != '\0') { - char *cmd1; + const char *cmd1; cmd1 = cmdrest; expr = parse_exp_1 (&cmd1, scope, block_for_pc (scope), 1); @@ -9103,7 +9103,7 @@ init_breakpoint_sal (struct breakpoint * if (b->cond_string) { - char *arg = b->cond_string; + const char *arg = b->cond_string; loc->cond = parse_exp_1 (&arg, loc->address, block_for_pc (loc->address), 0); if (*arg) @@ -9374,7 +9374,7 @@ invalid_thread_id_error (int id) If no thread is found, *THREAD is set to -1. */ static void -find_condition_and_thread (char *tok, CORE_ADDR pc, +find_condition_and_thread (const char *tok, CORE_ADDR pc, char **cond_string, int *thread, int *task, char **rest) { @@ -9385,12 +9385,12 @@ find_condition_and_thread (char *tok, CO while (tok && *tok) { - char *end_tok; + const char *end_tok; int toklen; - char *cond_start = NULL; - char *cond_end = NULL; + const char *cond_start = NULL; + const char *cond_end = NULL; - tok = skip_spaces (tok); + tok = skip_spaces_const (tok); if ((*tok == '"' || *tok == ',') && rest) { @@ -9398,7 +9398,7 @@ find_condition_and_thread (char *tok, CO return; } - end_tok = skip_to_space (tok); + end_tok = skip_to_space_const (tok); toklen = end_tok - tok; @@ -9414,11 +9414,13 @@ find_condition_and_thread (char *tok, CO } else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0) { - char *tmptok; + char *endp; + const char *tmptok; tok = end_tok + 1; tmptok = tok; - *thread = strtol (tok, &tok, 0); + *thread = strtol (tok, &endp, 0); + tok = endp; if (tok == tmptok) error (_("Junk after thread keyword.")); if (!valid_thread_id (*thread)) @@ -9426,11 +9428,13 @@ find_condition_and_thread (char *tok, CO } else if (toklen >= 1 && strncmp (tok, "task", toklen) == 0) { - char *tmptok; + char *endp; + const char *tmptok; tok = end_tok + 1; tmptok = tok; - *task = strtol (tok, &tok, 0); + *task = strtol (tok, &endp, 0); + tok = endp; if (tok == tmptok) error (_("Junk after task keyword.")); if (!valid_task_id (*task)) @@ -10845,12 +10849,12 @@ watch_command_1 (char *arg, int accessfl const struct block *exp_valid_block = NULL, *cond_exp_valid_block = NULL; struct value *val, *mark, *result; struct frame_info *frame; - char *exp_start = NULL; - char *exp_end = NULL; - char *tok, *end_tok; + const char *exp_start = NULL; + const char *exp_end = NULL; + const char *tok, *end_tok; int toklen = -1; - char *cond_start = NULL; - char *cond_end = NULL; + const char *cond_start = NULL; + const char *cond_end = NULL; enum bptype bp_type; int thread = -1; int pc = 0; @@ -10859,15 +10863,19 @@ watch_command_1 (char *arg, int accessfl int use_mask = 0; CORE_ADDR mask = 0; struct watchpoint *w; + const char *tmp, *start, *end_arg, *cbuf; + char *buf; /* Make sure that we actually have parameters to parse. */ if (arg != NULL && arg[0] != '\0') { - char *value_start; + const char *value_start; + + end_arg = arg + strlen (arg); /* Look for "parameter value" pairs at the end of the arguments string. */ - for (tok = arg + strlen (arg) - 1; tok > arg; tok--) + for (tok = end_arg - 1; tok > arg; tok--) { /* Skip whitespace at the end of the argument list. */ while (tok > arg && (*tok == ' ' || *tok == '\t')) @@ -10937,15 +10945,22 @@ watch_command_1 (char *arg, int accessfl /* Truncate the string and get rid of the "parameter value" pair before the arguments string is parsed by the parse_exp_1 function. */ - *tok = '\0'; + end_arg = tok; } } + else + end_arg = arg; /* Parse the rest of the arguments. */ innermost_block = NULL; - exp_start = arg; - exp = parse_exp_1 (&arg, 0, 0, 0); - exp_end = arg; + buf = alloca (end_arg - arg + 1); + strncpy (buf, arg, end_arg - arg); + buf[end_arg - arg] = '\0'; + exp_start = buf; + tmp = start = buf; + exp = parse_exp_1 (&tmp, 0, 0, 0); + cbuf = exp_end = exp_start + (tmp - start); + /* Remove trailing whitespace from the expression before saving it. This makes the eventual display of the expression string a bit prettier. */ @@ -10989,17 +11004,20 @@ watch_command_1 (char *arg, int accessfl else if (val != NULL) release_value (val); - tok = skip_spaces (arg); - end_tok = skip_to_space (tok); + tok = skip_spaces_const (cbuf); + end_tok = skip_to_space_const (tok); toklen = end_tok - tok; if (toklen >= 1 && strncmp (tok, "if", toklen) == 0) { struct expression *cond; + const char *tmp, *start; innermost_block = NULL; tok = cond_start = end_tok + 1; - cond = parse_exp_1 (&tok, 0, 0, 0); + tmp = start = tok; + cond = parse_exp_1 (&tmp, 0, 0, 0); + tok += tmp - start; /* The watchpoint expression may not be local, but the condition may still be. E.g.: `watch global if local > 0'. */ @@ -14036,7 +14054,7 @@ update_breakpoint_locations (struct brea old symtab. */ if (b->cond_string != NULL) { - char *s; + const char *s; volatile struct gdb_exception e; s = b->cond_string; Index: eval.c =================================================================== RCS file: /cvs/src/src/gdb/eval.c,v retrieving revision 1.178 diff -u -p -r1.178 eval.c --- eval.c 14 Feb 2013 12:43:45 -0000 1.178 +++ eval.c 7 Mar 2013 22:59:29 -0000 @@ -76,7 +76,7 @@ evaluate_subexp (struct type *expect_typ and return the result as a number. */ CORE_ADDR -parse_and_eval_address (char *exp) +parse_and_eval_address (const char *exp) { struct expression *expr = parse_expression (exp); CORE_ADDR addr; @@ -121,7 +121,7 @@ parse_and_eval (char *exp) EXPP is advanced to point to the comma. */ struct value * -parse_to_comma_and_eval (char **expp) +parse_to_comma_and_eval (const char **expp) { struct expression *expr = parse_exp_1 (expp, 0, (struct block *) 0, 1); struct value *val; Index: expression.h =================================================================== RCS file: /cvs/src/src/gdb/expression.h,v retrieving revision 1.47 diff -u -p -r1.47 expression.h --- expression.h 1 Jan 2013 06:32:42 -0000 1.47 +++ expression.h 7 Mar 2013 22:59:29 -0000 @@ -95,12 +95,12 @@ struct expression /* From parse.c */ -extern struct expression *parse_expression (char *); +extern struct expression *parse_expression (const char *); extern struct type *parse_expression_for_completion (char *, char **, enum type_code *); -extern struct expression *parse_exp_1 (char **, CORE_ADDR pc, +extern struct expression *parse_exp_1 (const char **, CORE_ADDR pc, const struct block *, int); /* For use by parsers; set if we want to parse an expression and Index: findcmd.c =================================================================== RCS file: /cvs/src/src/gdb/findcmd.c,v retrieving revision 1.22 diff -u -p -r1.22 findcmd.c --- findcmd.c 7 Mar 2013 21:57:29 -0000 1.22 +++ findcmd.c 7 Mar 2013 22:59:29 -0000 @@ -69,7 +69,7 @@ parse_find_args (char *args, ULONGEST *m ULONGEST pattern_len; CORE_ADDR start_addr; ULONGEST search_space_len; - char *s = args; + const char *s = args; struct cleanup *old_cleanups; struct value *v; @@ -110,7 +110,7 @@ parse_find_args (char *args, ULONGEST *m } } - s = skip_spaces (s); + s = skip_spaces_const (s); } /* Get the search range. */ @@ -120,7 +120,7 @@ parse_find_args (char *args, ULONGEST *m if (*s == ',') ++s; - s = skip_spaces (s); + s = skip_spaces_const (s); if (*s == '+') { @@ -171,7 +171,7 @@ parse_find_args (char *args, ULONGEST *m struct type *t; ULONGEST pattern_buf_size_need; - s = skip_spaces (s); + s = skip_spaces_const (s); v = parse_to_comma_and_eval (&s); t = value_type (v); @@ -219,7 +219,7 @@ parse_find_args (char *args, ULONGEST *m if (*s == ',') ++s; - s = skip_spaces (s); + s = skip_spaces_const (s); } if (pattern_buf_end == pattern_buf) Index: linespec.c =================================================================== RCS file: /cvs/src/src/gdb/linespec.c,v retrieving revision 1.180 diff -u -p -r1.180 linespec.c --- linespec.c 6 Mar 2013 11:05:54 -0000 1.180 +++ linespec.c 7 Mar 2013 22:59:29 -0000 @@ -326,7 +326,7 @@ static void iterate_over_file_blocks (st static void initialize_defaults (struct symtab **default_symtab, int *default_line); -static CORE_ADDR linespec_expression_to_pc (char **exp_ptr); +static CORE_ADDR linespec_expression_to_pc (const char **exp_ptr); static struct symtabs_and_lines decode_objc (struct linespec_state *self, linespec_p ls, @@ -2181,7 +2181,8 @@ parse_linespec (linespec_parser *parser, /* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER. */ if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '*') { - char *expr, *copy; + char *expr; + const char *copy; /* User specified an expression, *EXPR. */ copy = expr = copy_token_string (token); @@ -2565,7 +2566,7 @@ initialize_defaults (struct symtab **def advancing EXP_PTR past any parsed text. */ static CORE_ADDR -linespec_expression_to_pc (char **exp_ptr) +linespec_expression_to_pc (const char **exp_ptr) { if (current_program_space->executing_startup) /* The error message doesn't really matter, because this case Index: parse.c =================================================================== RCS file: /cvs/src/src/gdb/parse.c,v retrieving revision 1.135 diff -u -p -r1.135 parse.c --- parse.c 13 Jan 2013 18:57:00 -0000 1.135 +++ parse.c 7 Mar 2013 22:59:30 -0000 @@ -1125,10 +1125,18 @@ prefixify_subexp (struct expression *ine If COMMA is nonzero, stop if a comma is reached. */ struct expression * -parse_exp_1 (char **stringptr, CORE_ADDR pc, const struct block *block, +parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block, int comma) { - return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL); + struct expression *expr; + char *const_hack = *stringptr ? xstrdup (*stringptr) : NULL; + char *orig = const_hack; + struct cleanup *back_to = make_cleanup (xfree, const_hack); + + expr = parse_exp_in_context (&const_hack, pc, block, comma, 0, NULL); + (*stringptr) += const_hack - orig; + do_cleanups (back_to); + return expr; } /* As for parse_exp_1, except that if VOID_CONTEXT_P, then @@ -1264,7 +1272,7 @@ parse_exp_in_context (char **stringptr, to use up all of the contents of STRING. */ struct expression * -parse_expression (char *string) +parse_expression (const char *string) { struct expression *exp; Index: printcmd.c =================================================================== RCS file: /cvs/src/src/gdb/printcmd.c,v retrieving revision 1.223 diff -u -p -r1.223 printcmd.c --- printcmd.c 11 Feb 2013 22:44:23 -0000 1.223 +++ printcmd.c 7 Mar 2013 22:59:30 -0000 @@ -2215,10 +2215,10 @@ printf_pointer (struct ui_file *stream, /* printf "printf format string" ARG to STREAM. */ static void -ui_printf (char *arg, struct ui_file *stream) +ui_printf (const char *arg, struct ui_file *stream) { struct format_piece *fpieces; - char *s = arg; + const char *s = arg; struct value **val_args; int allocated_args = 20; struct cleanup *old_cleanups; @@ -2229,7 +2229,7 @@ ui_printf (char *arg, struct ui_file *st if (s == 0) error_no_arg (_("format-control string and values to print")); - s = skip_spaces (s); + s = skip_spaces_const (s); /* A format string should follow, enveloped in double quotes. */ if (*s++ != '"') @@ -2242,14 +2242,14 @@ ui_printf (char *arg, struct ui_file *st if (*s++ != '"') error (_("Bad format string, non-terminated '\"'.")); - s = skip_spaces (s); + s = skip_spaces_const (s); if (*s != ',' && *s != 0) error (_("Invalid argument syntax")); if (*s == ',') s++; - s = skip_spaces (s); + s = skip_spaces_const (s); { int nargs = 0; @@ -2267,7 +2267,7 @@ ui_printf (char *arg, struct ui_file *st while (*s != '\0') { - char *s1; + const char *s1; if (nargs == allocated_args) val_args = (struct value **) xrealloc ((char *) val_args, Index: tracepoint.c =================================================================== RCS file: /cvs/src/src/gdb/tracepoint.c,v retrieving revision 1.283 diff -u -p -r1.283 tracepoint.c --- tracepoint.c 7 Mar 2013 21:57:30 -0000 1.283 +++ tracepoint.c 7 Mar 2013 22:59:30 -0000 @@ -749,9 +749,13 @@ 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, *o; + + o = q = tmp_p; + + exp = parse_exp_1 (&q, loc->address, block_for_pc (loc->address), 1); + p += q - o; old_chain = make_cleanup (free_current_contents, &exp); if (exp->elts[0].opcode == OP_VAR_VALUE) @@ -801,10 +805,13 @@ validate_actionline (char **line, struct tmp_p = p; for (loc = t->base.loc; loc; loc = loc->next) { - p = tmp_p; + const char *o, *q; + + o = q = tmp_p; /* Only expressions are allowed for this action. */ - exp = parse_exp_1 (&p, loc->address, + exp = parse_exp_1 (&q, loc->address, block_for_pc (loc->address), 1); + p += q - o; old_chain = make_cleanup (free_current_contents, &exp); /* We have something to evaluate, make sure that the expr to @@ -1465,9 +1472,12 @@ encode_actions_1 (struct command_line *a unsigned long addr; struct cleanup *old_chain = NULL; struct cleanup *old_chain1 = NULL; + const char *q, *o; - exp = parse_exp_1 (&action_exp, tloc->address, + o = q = action_exp; + exp = parse_exp_1 (&q, tloc->address, block_for_pc (tloc->address), 1); + action_exp += q - o; old_chain = make_cleanup (free_current_contents, &exp); switch (exp->elts[0].opcode) @@ -1556,9 +1566,12 @@ encode_actions_1 (struct command_line *a { struct cleanup *old_chain = NULL; struct cleanup *old_chain1 = NULL; + const char *q, *o; - exp = parse_exp_1 (&action_exp, tloc->address, + o = q = action_exp; + exp = parse_exp_1 (&q, tloc->address, block_for_pc (tloc->address), 1); + action_exp += q - o; old_chain = make_cleanup (free_current_contents, &exp); aexpr = gen_eval_for_expr (tloc->address, exp); Index: value.h =================================================================== RCS file: /cvs/src/src/gdb/value.h,v retrieving revision 1.217 diff -u -p -r1.217 value.h --- value.h 6 Feb 2013 19:40:04 -0000 1.217 +++ value.h 7 Mar 2013 22:59:30 -0000 @@ -726,11 +726,11 @@ extern struct value *evaluate_subexp_wit extern struct value *parse_and_eval (char *exp); -extern struct value *parse_to_comma_and_eval (char **expp); +extern struct value *parse_to_comma_and_eval (const char **expp); extern struct type *parse_and_eval_type (char *p, int length); -extern CORE_ADDR parse_and_eval_address (char *exp); +extern CORE_ADDR parse_and_eval_address (const char *exp); extern LONGEST parse_and_eval_long (char *exp); Index: varobj.c =================================================================== RCS file: /cvs/src/src/gdb/varobj.c,v retrieving revision 1.205 diff -u -p -r1.205 varobj.c --- varobj.c 7 Mar 2013 19:24:32 -0000 1.205 +++ varobj.c 7 Mar 2013 22:59:30 -0000 @@ -620,7 +620,7 @@ varobj_create (char *objname, struct frame_info *fi; struct frame_id old_id = null_frame_id; struct block *block; - char *p; + const char *p; enum varobj_languages lang; struct value *value = NULL; volatile struct gdb_exception except; @@ -1469,7 +1469,7 @@ varobj_set_value (struct varobj *var, ch struct expression *exp; struct value *value = NULL; /* Initialize to keep gcc happy. */ int saved_input_radix = input_radix; - char *s = expression; + const char *s = expression; volatile struct gdb_exception except; gdb_assert (varobj_editable_p (var)); Index: cli/cli-cmds.c =================================================================== RCS file: /cvs/src/src/gdb/cli/cli-cmds.c,v retrieving revision 1.150 diff -u -p -r1.150 cli-cmds.c --- cli/cli-cmds.c 7 Mar 2013 21:57:30 -0000 1.150 +++ cli/cli-cmds.c 7 Mar 2013 22:59:30 -0000 @@ -1113,20 +1113,22 @@ disassemble_command (char *arg, int from const char *name; CORE_ADDR pc; int flags; + const char *p; + p = arg; name = NULL; flags = 0; - if (arg && *arg == '/') + if (p && *p == '/') { - ++arg; + ++p; - if (*arg == '\0') + if (*p == '\0') error (_("Missing modifier.")); - while (*arg && ! isspace (*arg)) + while (*p && ! isspace (*p)) { - switch (*arg++) + switch (*p++) { case 'm': flags |= DISASSEMBLY_SOURCE; @@ -1139,20 +1141,20 @@ disassemble_command (char *arg, int from } } - arg = skip_spaces (arg); + p = skip_spaces_const (p); } - if (! arg || ! *arg) + if (! p || ! *p) { flags |= DISASSEMBLY_OMIT_FNAME; disassemble_current_function (flags); return; } - pc = value_as_address (parse_to_comma_and_eval (&arg)); - if (arg[0] == ',') - ++arg; - if (arg[0] == '\0') + pc = value_as_address (parse_to_comma_and_eval (&p)); + if (p[0] == ',') + ++p; + if (p[0] == '\0') { /* One argument. */ if (find_pc_partial_function (pc, &name, &low, &high) == 0) @@ -1172,13 +1174,13 @@ disassemble_command (char *arg, int from /* Two arguments. */ int incl_flag = 0; low = pc; - arg = skip_spaces (arg); - if (arg[0] == '+') + p = skip_spaces_const (p); + if (p[0] == '+') { - ++arg; + ++p; incl_flag = 1; } - high = parse_and_eval_address (arg); + high = parse_and_eval_address (p); if (incl_flag) high += low; } Index: cli/cli-utils.c =================================================================== RCS file: /cvs/src/src/gdb/cli/cli-utils.c,v retrieving revision 1.18 diff -u -p -r1.18 cli-utils.c --- cli/cli-utils.c 12 Feb 2013 19:03:55 -0000 1.18 +++ cli/cli-utils.c 7 Mar 2013 22:59:30 -0000 @@ -237,8 +237,8 @@ skip_spaces_const (const char *chp) /* See documentation in cli-utils.h. */ -char * -skip_to_space (char *chp) +const char * +skip_to_space_const (const char *chp) { if (chp == NULL) return NULL; Index: cli/cli-utils.h =================================================================== RCS file: /cvs/src/src/gdb/cli/cli-utils.h,v retrieving revision 1.18 diff -u -p -r1.18 cli-utils.h --- cli/cli-utils.h 12 Feb 2013 19:03:55 -0000 1.18 +++ cli/cli-utils.h 7 Mar 2013 22:59:30 -0000 @@ -101,7 +101,9 @@ extern const char *skip_spaces_const (co /* Skip leading non-whitespace characters in INP, returning an updated pointer. If INP is NULL, return NULL. */ -extern char *skip_to_space (char *inp); +#define skip_to_space(INP) ((char *) skip_to_space_const ((INP))) + +extern const char *skip_to_space_const (const char *inp); /* Reverse S to the last non-whitespace character without skipping past START. */ Index: common/format.c =================================================================== RCS file: /cvs/src/src/gdb/common/format.c,v retrieving revision 1.3 diff -u -p -r1.3 format.c --- common/format.c 8 Feb 2013 22:52:20 -0000 1.3 +++ common/format.c 7 Mar 2013 22:59:30 -0000 @@ -28,11 +28,12 @@ #include "format.h" struct format_piece * -parse_format_string (char **arg) +parse_format_string (const char **arg) { - char *s, *f, *string; - char *prev_start; - char *percent_loc; + const char *s; + char *f, *string; + const char *prev_start; + const char *percent_loc; char *sub_start, *current_substring; struct format_piece *pieces; int next_frag; Index: common/format.h =================================================================== RCS file: /cvs/src/src/gdb/common/format.h,v retrieving revision 1.2 diff -u -p -r1.2 format.h --- common/format.h 1 Jan 2013 06:32:54 -0000 1.2 +++ common/format.h 7 Mar 2013 22:59:30 -0000 @@ -51,7 +51,7 @@ struct format_piece /* Return an array of printf fragments found at the given string, and rewrite ARG with a pointer to the end of the format string. */ -extern struct format_piece *parse_format_string (char **arg); +extern struct format_piece *parse_format_string (const char **arg); /* Given a pointer to an array of format pieces, free any memory that would have been allocated by parse_format_string. */ Index: gdbserver/ax.c =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/ax.c,v retrieving revision 1.6 diff -u -p -r1.6 ax.c --- gdbserver/ax.c 18 Jan 2013 06:40:57 -0000 1.6 +++ gdbserver/ax.c 7 Mar 2013 22:59:30 -0000 @@ -798,10 +798,10 @@ compile_bytecodes (struct agent_expr *ae in. */ static void -ax_printf (CORE_ADDR fn, CORE_ADDR chan, char *format, +ax_printf (CORE_ADDR fn, CORE_ADDR chan, const char *format, int nargs, ULONGEST *args) { - char *f = format; + const char *f = format; struct format_piece *fpieces; int i, fp; char *current_substring; --------------000501000900050006020402--