From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 124724 invoked by alias); 10 Jul 2019 15:39:53 -0000 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 Received: (qmail 124646 invoked by uid 89); 10 Jul 2019 15:39:53 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=ultimate, resume, sk:check_f, HContent-Transfer-Encoding:8bit X-HELO: rock.gnat.com Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 10 Jul 2019 15:39:51 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id E18E7561D7; Wed, 10 Jul 2019 11:39:49 -0400 (EDT) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id yG4ordzsQIlb; Wed, 10 Jul 2019 11:39:49 -0400 (EDT) Received: from murgatroyd.Home (97-122-178-82.hlrn.qwest.net [97.122.178.82]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPSA id 8A45556128; Wed, 10 Jul 2019 11:39:49 -0400 (EDT) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 1/9] Change remote-sim.c to use type-safe registry Date: Wed, 10 Jul 2019 15:39:00 -0000 Message-Id: <20190710153947.25721-2-tromey@adacore.com> In-Reply-To: <20190710153947.25721-1-tromey@adacore.com> References: <20190710153947.25721-1-tromey@adacore.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SW-Source: 2019-07/txt/msg00253.txt.bz2 This changes remote-sim.c to use the type-safe registry. gdb/ChangeLog 2019-07-10 Tom Tromey * remote-sim.c (struct sim_inferior_data): Add initializers and destructor. (sim_inferior_data_key): Change type. Move lower. (check_for_duplicate_sim_descriptor): Update. (get_sim_inferior_data): Use new. Update. (~sim_inferior_data_cleanup): Rename from sim_inferior_data_cleanup. Simplify. (gdbsim_close_inferior, simulator_command) (sim_command_completer, _initialize_remote_sim): Update. --- gdb/ChangeLog | 12 ++++++++++ gdb/remote-sim.c | 57 +++++++++++++++--------------------------------- 2 files changed, 30 insertions(+), 39 deletions(-) diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c index a22a59ed399..9030ead562d 100644 --- a/gdb/remote-sim.c +++ b/gdb/remote-sim.c @@ -132,15 +132,15 @@ struct gdbsim_target final static struct gdbsim_target gdbsim_ops; -static const struct inferior_data *sim_inferior_data_key; - /* Simulator-specific, per-inferior state. */ struct sim_inferior_data { + ~sim_inferior_data (); + /* Flag which indicates whether or not the program has been loaded. */ - int program_loaded; + int program_loaded = 0; /* Simulator descriptor for this inferior. */ - SIM_DESC gdbsim_desc; + SIM_DESC gdbsim_desc = nullptr; /* This is the ptid we use for this particular simulator instance. Its value is somewhat arbitrary, as the simulator target don't have a @@ -150,12 +150,14 @@ struct sim_inferior_data { ptid_t remote_sim_ptid; /* Signal with which to resume. */ - enum gdb_signal resume_siggnal; + enum gdb_signal resume_siggnal = GDB_SIGNAL_0; /* Flag which indicates whether resume should step or not. */ - int resume_step; + int resume_step = 0; }; +static inferior_key sim_inferior_data_key; + /* Flag indicating the "open" status of this module. It's set to 1 in gdbsim_open() and 0 in gdbsim_close(). */ static int gdbsim_is_open = 0; @@ -186,8 +188,7 @@ check_for_duplicate_sim_descriptor (struct inferior *inf, void *arg) struct sim_inferior_data *sim_data; SIM_DESC new_sim_desc = (SIM_DESC) arg; - sim_data = ((struct sim_inferior_data *) - inferior_data (inf, sim_inferior_data_key)); + sim_data = sim_inferior_data_key.get (inf); return (sim_data != NULL && sim_data->gdbsim_desc == new_sim_desc); } @@ -204,8 +205,7 @@ static struct sim_inferior_data * get_sim_inferior_data (struct inferior *inf, int sim_instance_needed) { SIM_DESC sim_desc = NULL; - struct sim_inferior_data *sim_data - = (struct sim_inferior_data *) inferior_data (inf, sim_inferior_data_key); + struct sim_inferior_data *sim_data = sim_inferior_data_key.get (inf); /* Try to allocate a new sim instance, if needed. We do this ahead of a potential allocation of a sim_inferior_data struct in order to @@ -240,18 +240,14 @@ get_sim_inferior_data (struct inferior *inf, int sim_instance_needed) if (sim_data == NULL) { - sim_data = XCNEW(struct sim_inferior_data); - set_inferior_data (inf, sim_inferior_data_key, sim_data); + sim_data = sim_inferior_data_key.emplace (inf); /* Allocate a ptid for this inferior. */ sim_data->remote_sim_ptid = ptid_t (next_pid, 0, next_pid); next_pid++; /* Initialize the other instance variables. */ - sim_data->program_loaded = 0; sim_data->gdbsim_desc = sim_desc; - sim_data->resume_siggnal = GDB_SIGNAL_0; - sim_data->resume_step = 0; } else if (sim_desc) { @@ -287,20 +283,10 @@ get_sim_inferior_data_by_ptid (ptid_t ptid, int sim_instance_needed) /* Free the per-inferior simulator data. */ -static void -sim_inferior_data_cleanup (struct inferior *inf, void *data) +sim_inferior_data::~sim_inferior_data () { - struct sim_inferior_data *sim_data = (struct sim_inferior_data *) data; - - if (sim_data != NULL) - { - if (sim_data->gdbsim_desc) - { - sim_close (sim_data->gdbsim_desc, 0); - sim_data->gdbsim_desc = NULL; - } - xfree (sim_data); - } + if (gdbsim_desc) + sim_close (gdbsim_desc, 0); } static void @@ -789,14 +775,12 @@ gdbsim_target_open (const char *args, int from_tty) static int gdbsim_close_inferior (struct inferior *inf, void *arg) { - struct sim_inferior_data *sim_data - = (struct sim_inferior_data *) inferior_data (inf, sim_inferior_data_key); + struct sim_inferior_data *sim_data = sim_inferior_data_key.get (inf); if (sim_data != NULL) { ptid_t ptid = sim_data->remote_sim_ptid; - sim_inferior_data_cleanup (inf, sim_data); - set_inferior_data (inf, sim_inferior_data_key, NULL); + sim_inferior_data_key.clear (inf); /* Having a ptid allocated and stored in remote_sim_ptid does not mean that a corresponding inferior was ever created. @@ -1193,8 +1177,7 @@ simulator_command (const char *args, int from_tty) thus allocating memory that would not be garbage collected until the ultimate destruction of the associated inferior. */ - sim_data = ((struct sim_inferior_data *) - inferior_data (current_inferior (), sim_inferior_data_key)); + sim_data = sim_inferior_data_key.get (current_inferior ()); if (sim_data == NULL || sim_data->gdbsim_desc == NULL) { @@ -1225,8 +1208,7 @@ sim_command_completer (struct cmd_list_element *ignore, { struct sim_inferior_data *sim_data; - sim_data = ((struct sim_inferior_data *) - inferior_data (current_inferior (), sim_inferior_data_key)); + sim_data = sim_inferior_data_key.get (current_inferior ()); if (sim_data == NULL || sim_data->gdbsim_desc == NULL) return; @@ -1324,7 +1306,4 @@ _initialize_remote_sim (void) c = add_com ("sim", class_obscure, simulator_command, _("Send a command to the simulator.")); set_cmd_completer (c, sim_command_completer); - - sim_inferior_data_key - = register_inferior_data_with_cleanup (NULL, sim_inferior_data_cleanup); } -- 2.20.1