Browse Source

Remove some alloca uses

A few spots (mostly in the parsers) use alloca to ensure that a string
is terminated before passing it to a printf-like function (mostly
'error').  However, this isn't needed as the "%.*s" format can be used
instead.

This patch makes this change.

In one spot the alloca is dead code and is simply removed.

Regression tested on x86-64 Fedora 38.

Approved-By: John Baldwin <jhb@FreeBSD.org>
master
Tom Tromey 2 years ago
parent
commit
e6375bc8eb
  1. 19
      gdb/c-exp.y
  2. 4
      gdb/cp-name-parser.y
  3. 12
      gdb/cp-support.c
  4. 9
      gdb/d-exp.y
  5. 9
      gdb/f-exp.y
  6. 9
      gdb/go-exp.y
  7. 9
      gdb/m2-exp.y
  8. 9
      gdb/p-exp.y

19
gdb/c-exp.y

@ -2784,13 +2784,8 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
toktype = parse_number (par_state, tokstart, p - tokstart, toktype = parse_number (par_state, tokstart, p - tokstart,
got_dot | got_e | got_p, &yylval); got_dot | got_e | got_p, &yylval);
if (toktype == ERROR) if (toktype == ERROR)
{ error (_("Invalid number \"%.*s\"."), (int) (p - tokstart),
char *err_copy = (char *) alloca (p - tokstart + 1); tokstart);
memcpy (err_copy, tokstart, p - tokstart);
err_copy[p - tokstart] = 0;
error (_("Invalid number \"%s\"."), err_copy);
}
pstate->lexptr = p; pstate->lexptr = p;
return toktype; return toktype;
} }
@ -3434,14 +3429,8 @@ c_print_token (FILE *file, int type, YYSTYPE value)
case CHAR: case CHAR:
case STRING: case STRING:
{ parser_fprintf (file, "tsval<type=%d, %.*s>", value.tsval.type,
char *copy = (char *) alloca (value.tsval.length + 1); value.tsval.length, val.tsval.ptr);
memcpy (copy, value.tsval.ptr, value.tsval.length);
copy[value.tsval.length] = '\0';
parser_fprintf (file, "tsval<type=%d, %s>", value.tsval.type, copy);
}
break; break;
case NSSTRING: case NSSTRING:

4
gdb/cp-name-parser.y

@ -1702,10 +1702,6 @@ yylex (YYSTYPE *lvalp, cpname_state *state)
lvalp); lvalp);
if (toktype == ERROR) if (toktype == ERROR)
{ {
char *err_copy = (char *) alloca (p - tokstart + 1);
memcpy (err_copy, tokstart, p - tokstart);
err_copy[p - tokstart] = 0;
yyerror (state, _("invalid number")); yyerror (state, _("invalid number"));
return ERROR; return ERROR;
} }

12
gdb/cp-support.c

@ -2214,19 +2214,11 @@ test_cp_remove_params ()
static void static void
first_component_command (const char *arg, int from_tty) first_component_command (const char *arg, int from_tty)
{ {
int len;
char *prefix;
if (!arg) if (!arg)
return; return;
len = cp_find_first_component (arg); int len = cp_find_first_component (arg);
prefix = (char *) alloca (len + 1); gdb_printf ("%.*s\n", len, arg);
memcpy (prefix, arg, len);
prefix[len] = '\0';
gdb_printf ("%s\n", prefix);
} }
/* Implement "info vtbl". */ /* Implement "info vtbl". */

9
gdb/d-exp.y

@ -1154,13 +1154,8 @@ lex_one_token (struct parser_state *par_state)
toktype = parse_number (par_state, tokstart, p - tokstart, toktype = parse_number (par_state, tokstart, p - tokstart,
got_dot|got_e, &yylval); got_dot|got_e, &yylval);
if (toktype == ERROR) if (toktype == ERROR)
{ error (_("Invalid number \"%.*s\"."), (int) (p - tokstart),
char *err_copy = (char *) alloca (p - tokstart + 1); tokstart);
memcpy (err_copy, tokstart, p - tokstart);
err_copy[p - tokstart] = 0;
error (_("Invalid number \"%s\"."), err_copy);
}
pstate->lexptr = p; pstate->lexptr = p;
return toktype; return toktype;
} }

9
gdb/f-exp.y

@ -1557,13 +1557,8 @@ yylex (void)
got_dot|got_e|got_d, got_dot|got_e|got_d,
&yylval); &yylval);
if (toktype == ERROR) if (toktype == ERROR)
{ error (_("Invalid number \"%.*s\"."), (int) (p - tokstart),
char *err_copy = (char *) alloca (p - tokstart + 1); tokstart);
memcpy (err_copy, tokstart, p - tokstart);
err_copy[p - tokstart] = 0;
error (_("Invalid number \"%s\"."), err_copy);
}
pstate->lexptr = p; pstate->lexptr = p;
return toktype; return toktype;
} }

9
gdb/go-exp.y

@ -1103,13 +1103,8 @@ lex_one_token (struct parser_state *par_state)
toktype = parse_number (par_state, tokstart, p - tokstart, toktype = parse_number (par_state, tokstart, p - tokstart,
got_dot|got_e, &yylval); got_dot|got_e, &yylval);
if (toktype == ERROR) if (toktype == ERROR)
{ error (_("Invalid number \"%.*s\"."), (int) (p - tokstart),
char *err_copy = (char *) alloca (p - tokstart + 1); tokstart);
memcpy (err_copy, tokstart, p - tokstart);
err_copy[p - tokstart] = 0;
error (_("Invalid number \"%s\"."), err_copy);
}
par_state->lexptr = p; par_state->lexptr = p;
return toktype; return toktype;
} }

9
gdb/m2-exp.y

@ -869,13 +869,8 @@ yylex (void)
} }
toktype = parse_number (p - tokstart); toktype = parse_number (p - tokstart);
if (toktype == ERROR) if (toktype == ERROR)
{ error (_("Invalid number \"%.*s\"."), (int) (p - tokstart),
char *err_copy = (char *) alloca (p - tokstart + 1); tokstart);
memcpy (err_copy, tokstart, p - tokstart);
err_copy[p - tokstart] = 0;
error (_("Invalid number \"%s\"."), err_copy);
}
pstate->lexptr = p; pstate->lexptr = p;
return toktype; return toktype;
} }

9
gdb/p-exp.y

@ -1239,13 +1239,8 @@ yylex (void)
toktype = parse_number (pstate, tokstart, toktype = parse_number (pstate, tokstart,
p - tokstart, got_dot | got_e, &yylval); p - tokstart, got_dot | got_e, &yylval);
if (toktype == ERROR) if (toktype == ERROR)
{ error (_("Invalid number \"%.*s\"."), (int) (p - tokstart),
char *err_copy = (char *) alloca (p - tokstart + 1); tokstart);
memcpy (err_copy, tokstart, p - tokstart);
err_copy[p - tokstart] = 0;
error (_("Invalid number \"%s\"."), err_copy);
}
pstate->lexptr = p; pstate->lexptr = p;
return toktype; return toktype;
} }

Loading…
Cancel
Save