From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id cEwKKtdv7mCsIgAAWB0awg (envelope-from ) for ; Wed, 14 Jul 2021 01:02:15 -0400 Received: by simark.ca (Postfix, from userid 112) id A8AAA1EDEE; Wed, 14 Jul 2021 01:02:15 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 317FC1E54D for ; Wed, 14 Jul 2021 01:02:14 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DE2E7397201A for ; Wed, 14 Jul 2021 05:02:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DE2E7397201A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1626238933; bh=UQTBdrP05VMAjJc7+4CZu2jeSDSvxMTdV/KiCLGMx+Y=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=gKnQwU75y1fNtyEfPY6rxaikduxy/VMm3a/JwIA/5NkwIJtgGPKPk4P7BNLwdzeWZ BcYcflVWSAq4dSixPmDK7v/NH5jNEjyNLoGAgeyNjcqIbhM984YthcZbyPVxFwyzo/ NMdYPO3C/aZbYcd0pgivy5bQU2mivekUOnV7+p1I= Received: from barracuda.ebox.ca (barracuda.ebox.ca [96.127.255.19]) by sourceware.org (Postfix) with ESMTPS id 81FA13972023 for ; Wed, 14 Jul 2021 04:57:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 81FA13972023 X-ASG-Debug-ID: 1626238641-0c856e67e219ef330001-fS2M51 Received: from smtp.ebox.ca (smtp.ebox.ca [96.127.255.82]) by barracuda.ebox.ca with ESMTP id 9aJxB3GUx4co7INK (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 14 Jul 2021 00:57:22 -0400 (EDT) X-Barracuda-Envelope-From: simon.marchi@polymtl.ca X-Barracuda-RBL-Trusted-Forwarder: 96.127.255.82 Received: from simark.localdomain (192-222-157-6.qc.cable.ebox.net [192.222.157.6]) by smtp.ebox.ca (Postfix) with ESMTP id E1D4B441D67; Wed, 14 Jul 2021 00:57:21 -0400 (EDT) X-Barracuda-RBL-IP: 192.222.157.6 X-Barracuda-Effective-Source-IP: 192-222-157-6.qc.cable.ebox.net[192.222.157.6] X-Barracuda-Apparent-Source-IP: 192.222.157.6 To: gdb-patches@sourceware.org Subject: [PATCH 12/16] gdb: rename cfunc to simple_func Date: Wed, 14 Jul 2021 00:55:16 -0400 X-ASG-Orig-Subj: [PATCH 12/16] gdb: rename cfunc to simple_func Message-Id: <20210714045520.1623120-13-simon.marchi@polymtl.ca> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210714045520.1623120-1-simon.marchi@polymtl.ca> References: <20210714045520.1623120-1-simon.marchi@polymtl.ca> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: smtp.ebox.ca[96.127.255.82] X-Barracuda-Start-Time: 1626238642 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://96.127.255.19:443/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at ebox.ca X-Barracuda-Scan-Msg-Size: 15526 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=8.0 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.91193 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Simon Marchi via Gdb-patches Reply-To: Simon Marchi Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" After browsing the CLI code for quite a while and trying really hard, I reached the conclusion that I can't give a meaningful explanation of what "sfunc" and "cfunc" functions are, in cmd_list_element. I don't see a logic at all. That makes it very difficult to do any kind of change. Unless somebody can make sense out of all that, I'd like to try to retro-fit some logic in the cmd_list_element callback function code so that we can understand what is going on, do some cleanups and add new features. The first change is about "cfunc". I can't figure out what the "c" in cfunc means. It's not const, because there's already "const" in "cmd_const_cfunc_ftype", and the previous "cmd_cfunc_ftype" had nothing const.. It's not "cmd" or "command", because there's already "cmd" in "cmd_const_cfunc_ftype". The "main" command callback, cmd_list_element::func, has three parameters, whereas cfunc has two. It is missing the cmd_list_element parameter. So the only reason I see for cfunc to exist is to be a shim between the three and two parameter versions. Most commands don't need to receive the cmd_list_element object, so adding it everywhere would be long and would just add more unnecessary boilerplate. So since this is the "simple" version of the callback, compared to the "full", I suggest renaming cmd_const_cfunc_ftype into cmd_simple_func_ftype, as well as everything (like the utility functions) that goes with it. Change-Id: I4e46cacfd77a66bc1cbf683f6a362072504b7868 --- gdb/cli/cli-cmds.c | 2 +- gdb/cli/cli-decode.c | 44 +++++++++++++++++++++++--------------------- gdb/cli/cli-decode.h | 8 ++++++-- gdb/command.h | 25 ++++++++++++++----------- gdb/tracepoint.c | 18 +++++++++--------- 5 files changed, 53 insertions(+), 44 deletions(-) diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 56ae12a0c19d..5ff0b77eb68f 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -443,7 +443,7 @@ complete_command (const char *arg, int from_tty) int is_complete_command (struct cmd_list_element *c) { - return cmd_cfunc_eq (c, complete_command); + return cmd_simple_func_eq (c, complete_command); } static void diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index 633a3ad93095..3c39e47ac69b 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -94,22 +94,23 @@ print_help_for_command (struct cmd_list_element *c, /* Set the callback function for the specified command. For each both the commands callback and func() are set. The latter set to a - bounce function (unless cfunc / sfunc is NULL that is). */ + bounce function (unless simple_func / sfunc is NULL that is). */ static void -do_const_cfunc (struct cmd_list_element *c, const char *args, int from_tty) +do_simple_func (struct cmd_list_element *c, const char *args, int from_tty) { - c->function.const_cfunc (args, from_tty); + c->function.simple_func (args, from_tty); } static void -set_cmd_cfunc (struct cmd_list_element *cmd, cmd_const_cfunc_ftype *cfunc) +set_cmd_simple_func (struct cmd_list_element *cmd, cmd_simple_func_ftype *simple_func) { - if (cfunc == NULL) + if (simple_func == NULL) cmd->func = NULL; else - cmd->func = do_const_cfunc; - cmd->function.const_cfunc = cfunc; + cmd->func = do_simple_func; + + cmd->function.simple_func = simple_func; } static void @@ -129,9 +130,10 @@ set_cmd_sfunc (struct cmd_list_element *cmd, cmd_const_sfunc_ftype *sfunc) } int -cmd_cfunc_eq (struct cmd_list_element *cmd, cmd_const_cfunc_ftype *cfunc) +cmd_simple_func_eq (struct cmd_list_element *cmd, cmd_simple_func_ftype *simple_func) { - return cmd->func == do_const_cfunc && cmd->function.const_cfunc == cfunc; + return (cmd->func == do_simple_func + && cmd->function.simple_func == simple_func); } void @@ -238,17 +240,17 @@ add_cmd (const char *name, enum command_class theclass, { cmd_list_element *result = do_add_cmd (name, theclass, doc, list); result->func = NULL; - result->function.const_cfunc = NULL; + result->function.simple_func = NULL; return result; } struct cmd_list_element * add_cmd (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *doc, struct cmd_list_element **list) { cmd_list_element *result = do_add_cmd (name, theclass, doc, list); - set_cmd_cfunc (result, fun); + set_cmd_simple_func (result, fun); return result; } @@ -256,7 +258,7 @@ add_cmd (const char *name, enum command_class theclass, struct cmd_list_element * add_cmd_suppress_notification (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, const char *doc, + cmd_simple_func_ftype *fun, const char *doc, struct cmd_list_element **list, int *suppress_notification) { @@ -359,7 +361,7 @@ update_prefix_field_of_prefixed_commands (struct cmd_list_element *c) struct cmd_list_element * add_prefix_cmd (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *doc, struct cmd_list_element **subcommands, int allow_unknown, struct cmd_list_element **list) { @@ -432,7 +434,7 @@ add_show_prefix_cmd (const char *name, enum command_class theclass, struct cmd_list_element * add_prefix_cmd_suppress_notification (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *doc, struct cmd_list_element **subcommands, int allow_unknown, struct cmd_list_element **list, int *suppress_notification) @@ -448,7 +450,7 @@ add_prefix_cmd_suppress_notification struct cmd_list_element * add_abbrev_prefix_cmd (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, const char *doc, + cmd_simple_func_ftype *fun, const char *doc, struct cmd_list_element **subcommands, int allow_unknown, struct cmd_list_element **list) { @@ -460,7 +462,7 @@ add_abbrev_prefix_cmd (const char *name, enum command_class theclass, return c; } -/* This is an empty "cfunc". */ +/* This is an empty "simple func". */ void not_just_help_class_command (const char *args, int from_tty) { @@ -951,7 +953,7 @@ delete_cmd (const char *name, struct cmd_list_element **list, /* Add an element to the list of info subcommands. */ struct cmd_list_element * -add_info (const char *name, cmd_const_cfunc_ftype *fun, const char *doc) +add_info (const char *name, cmd_simple_func_ftype *fun, const char *doc) { return add_cmd (name, class_info, fun, doc, &infolist); } @@ -968,7 +970,7 @@ add_info_alias (const char *name, cmd_list_element *target, int abbrev_flag) struct cmd_list_element * add_com (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *doc) { return add_cmd (name, theclass, fun, doc, &cmdlist); @@ -990,7 +992,7 @@ add_com_alias (const char *name, cmd_list_element *target, struct cmd_list_element * add_com_suppress_notification (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, const char *doc, + cmd_simple_func_ftype *fun, const char *doc, int *suppress_notification) { return add_cmd_suppress_notification (name, theclass, fun, doc, @@ -2167,5 +2169,5 @@ int cli_user_command_p (struct cmd_list_element *cmd) { return (cmd->theclass == class_user - && (cmd->func == do_const_cfunc || cmd->func == do_sfunc)); + && (cmd->func == do_simple_func || cmd->func == do_sfunc)); } diff --git a/gdb/cli/cli-decode.h b/gdb/cli/cli-decode.h index 241535ae5b50..4cbdf7ff6d17 100644 --- a/gdb/cli/cli-decode.h +++ b/gdb/cli/cli-decode.h @@ -174,8 +174,12 @@ struct cmd_list_element to one of the below. */ union { - /* If type is not_set_cmd, call it like this: */ - cmd_const_cfunc_ftype *const_cfunc; + /* Most commands don't need the cmd_list_element parameter passed to FUNC. + They therefore register a command of this type, which doesn't have the + cmd_list_element parameter. do_simple_func is installed as FUNC, and + acts as a shim between the two. */ + cmd_simple_func_ftype *simple_func; + /* If type is set_cmd or show_cmd, first set the variables, and then call this: */ cmd_const_sfunc_ftype *sfunc; diff --git a/gdb/command.h b/gdb/command.h index 711cbdcf43e1..1bda67c937af 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -128,7 +128,10 @@ var_types; /* This structure records one command'd definition. */ struct cmd_list_element; -typedef void cmd_const_cfunc_ftype (const char *args, int from_tty); +/* The "simple" signature of command callbacks, which doesn't include a + cmd_list_element parameter. */ + +typedef void cmd_simple_func_ftype (const char *args, int from_tty); /* This structure specifies notifications to be suppressed by a cli command interpreter. */ @@ -158,7 +161,7 @@ extern bool valid_cmd_char_p (int c); /* Const-correct variant of the above. */ extern struct cmd_list_element *add_cmd (const char *, enum command_class, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *, struct cmd_list_element **); @@ -170,7 +173,7 @@ extern struct cmd_list_element *add_cmd (const char *, enum command_class, extern struct cmd_list_element *add_cmd_suppress_notification (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, const char *doc, + cmd_simple_func_ftype *fun, const char *doc, struct cmd_list_element **list, int *suppress_notification); @@ -181,7 +184,7 @@ extern struct cmd_list_element *add_alias_cmd (const char *, extern struct cmd_list_element *add_prefix_cmd (const char *, enum command_class, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *, struct cmd_list_element **, int, @@ -203,7 +206,7 @@ extern struct cmd_list_element *add_show_prefix_cmd extern struct cmd_list_element *add_prefix_cmd_suppress_notification (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *doc, struct cmd_list_element **subcommands, int allow_unknown, struct cmd_list_element **list, @@ -211,7 +214,7 @@ extern struct cmd_list_element *add_prefix_cmd_suppress_notification extern struct cmd_list_element *add_abbrev_prefix_cmd (const char *, enum command_class, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *, struct cmd_list_element **, int, @@ -250,8 +253,8 @@ extern void set_cmd_completer_handle_brkchars (struct cmd_list_element *, /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs around in cmd objects to test the value of the commands sfunc(). */ -extern int cmd_cfunc_eq (struct cmd_list_element *cmd, - cmd_const_cfunc_ftype *cfun); +extern int cmd_simple_func_eq (struct cmd_list_element *cmd, + cmd_simple_func_ftype *cfun); /* Execute CMD's pre/post hook. Throw an error if the command fails. If already executing this pre/post hook, or there is no pre/post @@ -346,7 +349,7 @@ extern int lookup_cmd_composition (const char *text, struct cmd_list_element **cmd); extern struct cmd_list_element *add_com (const char *, enum command_class, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *); extern cmd_list_element *add_com_alias (const char *name, @@ -356,11 +359,11 @@ extern cmd_list_element *add_com_alias (const char *name, extern struct cmd_list_element *add_com_suppress_notification (const char *name, enum command_class theclass, - cmd_const_cfunc_ftype *fun, const char *doc, + cmd_simple_func_ftype *fun, const char *doc, int *supress_notification); extern struct cmd_list_element *add_info (const char *, - cmd_const_cfunc_ftype *fun, + cmd_simple_func_ftype *fun, const char *); extern cmd_list_element *add_info_alias (const char *name, diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 83a32ec8252d..06cf9cad29ad 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -655,7 +655,7 @@ validate_actionline (const char *line, struct breakpoint *b) if (c == 0) error (_("`%s' is not a tracepoint action, or is ambiguous."), p); - if (cmd_cfunc_eq (c, collect_pseudocommand)) + if (cmd_simple_func_eq (c, collect_pseudocommand)) { int trace_string = 0; @@ -723,7 +723,7 @@ validate_actionline (const char *line, struct breakpoint *b) while (p && *p++ == ','); } - else if (cmd_cfunc_eq (c, teval_pseudocommand)) + else if (cmd_simple_func_eq (c, teval_pseudocommand)) { do { /* Repeat over a comma-separated list. */ @@ -750,7 +750,7 @@ validate_actionline (const char *line, struct breakpoint *b) while (p && *p++ == ','); } - else if (cmd_cfunc_eq (c, while_stepping_pseudocommand)) + else if (cmd_simple_func_eq (c, while_stepping_pseudocommand)) { char *endp; @@ -761,7 +761,7 @@ validate_actionline (const char *line, struct breakpoint *b) p = endp; } - else if (cmd_cfunc_eq (c, end_actions_pseudocommand)) + else if (cmd_simple_func_eq (c, end_actions_pseudocommand)) ; else @@ -1308,7 +1308,7 @@ encode_actions_1 (struct command_line *action, if (cmd == 0) error (_("Bad action list item: %s"), action_exp); - if (cmd_cfunc_eq (cmd, collect_pseudocommand)) + if (cmd_simple_func_eq (cmd, collect_pseudocommand)) { int trace_string = 0; @@ -1464,7 +1464,7 @@ encode_actions_1 (struct command_line *action, } while (action_exp && *action_exp++ == ','); } /* if */ - else if (cmd_cfunc_eq (cmd, teval_pseudocommand)) + else if (cmd_simple_func_eq (cmd, teval_pseudocommand)) { do { /* Repeat over a comma-separated list. */ @@ -1488,7 +1488,7 @@ encode_actions_1 (struct command_line *action, } while (action_exp && *action_exp++ == ','); } /* if */ - else if (cmd_cfunc_eq (cmd, while_stepping_pseudocommand)) + else if (cmd_simple_func_eq (cmd, while_stepping_pseudocommand)) { /* We check against nested while-stepping when setting breakpoint action, so no way to run into nested @@ -2690,13 +2690,13 @@ trace_dump_actions (struct command_line *action, if (cmd == 0) error (_("Bad action list item: %s"), action_exp); - if (cmd_cfunc_eq (cmd, while_stepping_pseudocommand)) + if (cmd_simple_func_eq (cmd, while_stepping_pseudocommand)) { gdb_assert (action->body_list_1 == nullptr); trace_dump_actions (action->body_list_0.get (), 1, stepping_frame, from_tty); } - else if (cmd_cfunc_eq (cmd, collect_pseudocommand)) + else if (cmd_simple_func_eq (cmd, collect_pseudocommand)) { /* Display the collected data. For the trap frame, display only what was collected at -- 2.32.0