From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2126) id 5AC573858D1E; Sun, 21 Apr 2024 18:32:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5AC573858D1E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1713724366; bh=xKRTl/a9GSs/HRofxCbI76/LhaqNIQUHWjrRp5KXmII=; h=From:To:Subject:Date:From; b=szkbuQ1uYzeBVXofSIQ0RRyzrYKcELoaiQIoOm8s5ss5JPnCKfwRW+b0bK2de90iX 9Ts5E/f9clgob3mTCvns+06+Ja/gN8T098uxkK1UxZZdTSWZsOv6576btyp2eMkkH4 G0FEC5g3pEfEZC/N/FSlsa2YVjeVP0ktu48Zf7yo= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Remove some alloca uses X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: 7e9ef24e4a72d8d174932c7dd6be44226328ab88 X-Git-Newrev: e6375bc8ebbbc177c79f08e9616eb0b131229f65 Message-Id: <20240421183246.5AC573858D1E@sourceware.org> Date: Sun, 21 Apr 2024 18:32:46 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3De6375bc8ebbb= c177c79f08e9616eb0b131229f65 commit e6375bc8ebbbc177c79f08e9616eb0b131229f65 Author: Tom Tromey Date: Wed Apr 17 16:17:33 2024 -0600 Remove some alloca uses =20 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. =20 This patch makes this change. =20 In one spot the alloca is dead code and is simply removed. =20 Regression tested on x86-64 Fedora 38. =20 Approved-By: John Baldwin Diff: --- gdb/c-exp.y | 19 ++++--------------- gdb/cp-name-parser.y | 4 ---- gdb/cp-support.c | 12 ++---------- gdb/d-exp.y | 9 ++------- gdb/f-exp.y | 9 ++------- gdb/go-exp.y | 9 ++------- gdb/m2-exp.y | 9 ++------- gdb/p-exp.y | 9 ++------- 8 files changed, 16 insertions(+), 64 deletions(-) diff --git a/gdb/c-exp.y b/gdb/c-exp.y index 663c30f9517..87aca4d59b1 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -2784,13 +2784,8 @@ lex_one_token (struct parser_state *par_state, bool = *is_quoted_name) toktype =3D parse_number (par_state, tokstart, p - tokstart, got_dot | got_e | got_p, &yylval); if (toktype =3D=3D ERROR) - { - char *err_copy =3D (char *) alloca (p - tokstart + 1); - - memcpy (err_copy, tokstart, p - tokstart); - err_copy[p - tokstart] =3D 0; - error (_("Invalid number \"%s\"."), err_copy); - } + error (_("Invalid number \"%.*s\"."), (int) (p - tokstart), + tokstart); pstate->lexptr =3D p; return toktype; } @@ -3434,14 +3429,8 @@ c_print_token (FILE *file, int type, YYSTYPE value) =20 case CHAR: case STRING: - { - char *copy =3D (char *) alloca (value.tsval.length + 1); - - memcpy (copy, value.tsval.ptr, value.tsval.length); - copy[value.tsval.length] =3D '\0'; - - parser_fprintf (file, "tsval", value.tsval.type, copy); - } + parser_fprintf (file, "tsval", value.tsval.type, + value.tsval.length, val.tsval.ptr); break; =20 case NSSTRING: diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y index 87f13445bba..e944276d001 100644 --- a/gdb/cp-name-parser.y +++ b/gdb/cp-name-parser.y @@ -1702,10 +1702,6 @@ yylex (YYSTYPE *lvalp, cpname_state *state) lvalp); if (toktype =3D=3D ERROR) { - char *err_copy =3D (char *) alloca (p - tokstart + 1); - - memcpy (err_copy, tokstart, p - tokstart); - err_copy[p - tokstart] =3D 0; yyerror (state, _("invalid number")); return ERROR; } diff --git a/gdb/cp-support.c b/gdb/cp-support.c index e6e811ddf50..5fd53094d05 100644 --- a/gdb/cp-support.c +++ b/gdb/cp-support.c @@ -2214,19 +2214,11 @@ test_cp_remove_params () static void first_component_command (const char *arg, int from_tty) { - int len; =20 - char *prefix;=20 - if (!arg) return; =20 - len =3D cp_find_first_component (arg); - prefix =3D (char *) alloca (len + 1); - - memcpy (prefix, arg, len); - prefix[len] =3D '\0'; - - gdb_printf ("%s\n", prefix); + int len =3D cp_find_first_component (arg); + gdb_printf ("%.*s\n", len, arg); } =20 /* Implement "info vtbl". */ diff --git a/gdb/d-exp.y b/gdb/d-exp.y index b2adad24d1a..13d2cfa44d8 100644 --- a/gdb/d-exp.y +++ b/gdb/d-exp.y @@ -1154,13 +1154,8 @@ lex_one_token (struct parser_state *par_state) toktype =3D parse_number (par_state, tokstart, p - tokstart, got_dot|got_e, &yylval); if (toktype =3D=3D ERROR) - { - char *err_copy =3D (char *) alloca (p - tokstart + 1); - - memcpy (err_copy, tokstart, p - tokstart); - err_copy[p - tokstart] =3D 0; - error (_("Invalid number \"%s\"."), err_copy); - } + error (_("Invalid number \"%.*s\"."), (int) (p - tokstart), + tokstart); pstate->lexptr =3D p; return toktype; } diff --git a/gdb/f-exp.y b/gdb/f-exp.y index 11cd7948682..bdf9c32a81b 100644 --- a/gdb/f-exp.y +++ b/gdb/f-exp.y @@ -1557,13 +1557,8 @@ yylex (void) got_dot|got_e|got_d, &yylval); if (toktype =3D=3D ERROR) - { - char *err_copy =3D (char *) alloca (p - tokstart + 1); - =20 - memcpy (err_copy, tokstart, p - tokstart); - err_copy[p - tokstart] =3D 0; - error (_("Invalid number \"%s\"."), err_copy); - } + error (_("Invalid number \"%.*s\"."), (int) (p - tokstart), + tokstart); pstate->lexptr =3D p; return toktype; } diff --git a/gdb/go-exp.y b/gdb/go-exp.y index 20ab8ff76cf..1a6ebbe135b 100644 --- a/gdb/go-exp.y +++ b/gdb/go-exp.y @@ -1103,13 +1103,8 @@ lex_one_token (struct parser_state *par_state) toktype =3D parse_number (par_state, tokstart, p - tokstart, got_dot|got_e, &yylval); if (toktype =3D=3D ERROR) - { - char *err_copy =3D (char *) alloca (p - tokstart + 1); - - memcpy (err_copy, tokstart, p - tokstart); - err_copy[p - tokstart] =3D 0; - error (_("Invalid number \"%s\"."), err_copy); - } + error (_("Invalid number \"%.*s\"."), (int) (p - tokstart), + tokstart); par_state->lexptr =3D p; return toktype; } diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y index ebbc49c62a5..28005e1a700 100644 --- a/gdb/m2-exp.y +++ b/gdb/m2-exp.y @@ -869,13 +869,8 @@ yylex (void) } toktype =3D parse_number (p - tokstart); if (toktype =3D=3D ERROR) - { - char *err_copy =3D (char *) alloca (p - tokstart + 1); - - memcpy (err_copy, tokstart, p - tokstart); - err_copy[p - tokstart] =3D 0; - error (_("Invalid number \"%s\"."), err_copy); - } + error (_("Invalid number \"%.*s\"."), (int) (p - tokstart), + tokstart); pstate->lexptr =3D p; return toktype; } diff --git a/gdb/p-exp.y b/gdb/p-exp.y index 2140b609225..f334db6b523 100644 --- a/gdb/p-exp.y +++ b/gdb/p-exp.y @@ -1239,13 +1239,8 @@ yylex (void) toktype =3D parse_number (pstate, tokstart, p - tokstart, got_dot | got_e, &yylval); if (toktype =3D=3D ERROR) - { - char *err_copy =3D (char *) alloca (p - tokstart + 1); - - memcpy (err_copy, tokstart, p - tokstart); - err_copy[p - tokstart] =3D 0; - error (_("Invalid number \"%s\"."), err_copy); - } + error (_("Invalid number \"%.*s\"."), (int) (p - tokstart), + tokstart); pstate->lexptr =3D p; return toktype; }