From patchwork Tue Feb 11 09:02:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Aktemur, Tankut Baris" X-Patchwork-Id: 37946 Received: (qmail 127062 invoked by alias); 11 Feb 2020 09:04:24 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 121738 invoked by uid 89); 11 Feb 2020 09:03:54 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy= X-HELO: mga04.intel.com Received: from mga04.intel.com (HELO mga04.intel.com) (192.55.52.120) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 11 Feb 2020 09:03:50 +0000 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Feb 2020 01:03:29 -0800 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga006.fm.intel.com with ESMTP; 11 Feb 2020 01:03:28 -0800 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id 01B93RGs002328; Tue, 11 Feb 2020 09:03:27 GMT Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id 01B93RhC010744; Tue, 11 Feb 2020 10:03:27 +0100 Received: (from taktemur@localhost) by ulvlx001.iul.intel.com with LOCAL id 01B93RQ8010740; Tue, 11 Feb 2020 10:03:27 +0100 From: Tankut Baris Aktemur To: gdb-patches@sourceware.org Subject: [PATCH 57/58] gdbserver: use unique_ptr for 'the_target' Date: Tue, 11 Feb 2020 10:02:09 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-IsSubscribed: yes The target op vector is about to be replaced with a process_target object. In the current state, the 'set_target_ops' function takes a target op vector and creates a clone of it via XNEW and memcpy. As we are now switching to using classes and polymorphism, this memcpy'ing will no longer be possible. For proper memory managament, switch to using a unique_ptr. gdbserver/ChangeLog: 2020-02-10 Tankut Baris Aktemur * target.h (set_target_ops): Remove. (): Change the type to std::unique_ptr. * target.c (set_target_ops): Remove. (done_accessing_memory): Update the usage of the_target. * fork-child.c (post_fork_inferior): Update the usage of the_target. * remote-utils.c (prepare_resume_reply): Ditto. * linux-low.c (initialize_low): Set the value of the_target. (struct linux_target_ops): Delete. * lynx-low.c (initialize_low): Set the value of the_target. (struct lynx_target_ops): Delete. * nto-low.c (initialize_low): Set the value of the_target. (struct nto_target_ops): Delete. * win32-low.c (initialize_low): Set the value of the_target. (struct win32_target_ops): Delete. --- gdbserver/fork-child.c | 2 +- gdbserver/linux-low.c | 7 ++----- gdbserver/lynx-low.c | 9 ++------- gdbserver/nto-low.c | 8 ++------ gdbserver/remote-utils.c | 2 +- gdbserver/target.c | 11 ++--------- gdbserver/target.h | 4 +--- gdbserver/win32-low.c | 7 ++----- 8 files changed, 13 insertions(+), 37 deletions(-) diff --git a/gdbserver/fork-child.c b/gdbserver/fork-child.c index 7a71ec0b1ca..3702c1a8c2e 100644 --- a/gdbserver/fork-child.c +++ b/gdbserver/fork-child.c @@ -107,7 +107,7 @@ post_fork_inferior (int pid, const char *program) atexit (restore_old_foreground_pgrp); #endif - startup_inferior (the_target, pid, + startup_inferior (the_target.get (), pid, START_INFERIOR_TRAPS_EXPECTED, &cs.last_status, &cs.last_ptid); current_thread->last_resume_kind = resume_stop; diff --git a/gdbserver/linux-low.c b/gdbserver/linux-low.c index cd84cef326a..87cf2fd8afb 100644 --- a/gdbserver/linux-low.c +++ b/gdbserver/linux-low.c @@ -7512,10 +7512,6 @@ linux_get_hwcap2 (int wordsize) static linux_process_target the_linux_target; -static process_stratum_target linux_target_ops = { - &the_linux_target, -}; - #ifdef HAVE_LINUX_REGSETS void initialize_regsets_info (struct regsets_info *info) @@ -7533,7 +7529,8 @@ initialize_low (void) struct sigaction sigchld_action; memset (&sigchld_action, 0, sizeof (sigchld_action)); - set_target_ops (&linux_target_ops); + the_target.reset (new process_stratum_target); + the_target->pt = &the_linux_target; linux_ptrace_init_warnings (); linux_proc_init_warnings (); diff --git a/gdbserver/lynx-low.c b/gdbserver/lynx-low.c index 778afd190b6..1377ccaf4ae 100644 --- a/gdbserver/lynx-low.c +++ b/gdbserver/lynx-low.c @@ -739,16 +739,11 @@ lynx_process_target::sw_breakpoint_from_kind (int kind, int *size) static lynx_process_target the_lynx_target; -/* The LynxOS target_ops vector. */ - -static process_stratum_target lynx_target_ops = { - &the_lynx_target, -}; - void initialize_low (void) { - set_target_ops (&lynx_target_ops); + the_target.reset (new process_stratum_target); + the_target->pt = &the_lynx_target; the_low_target.arch_setup (); } diff --git a/gdbserver/nto-low.c b/gdbserver/nto-low.c index cd461be8378..bbcc5046659 100644 --- a/gdbserver/nto-low.c +++ b/gdbserver/nto-low.c @@ -946,11 +946,6 @@ nto_process_target::sw_breakpoint_from_kind (int kind, int *size) static nto_process_target the_nto_target; -static process_stratum_target nto_target_ops = { - &the_nto_target, -}; - - /* Global function called by server.c. Initializes QNX Neutrino gdbserver. */ @@ -960,7 +955,8 @@ initialize_low (void) sigset_t set; TRACE ("%s\n", __func__); - set_target_ops (&nto_target_ops); + the_target.reset (new process_stratum_target); + the_target->pt = &the_nto_target; /* We use SIGUSR1 to gain control after we block waiting for a process. We use sigwaitevent to wait. */ diff --git a/gdbserver/remote-utils.c b/gdbserver/remote-utils.c index 316f04e32ee..14e89332db4 100644 --- a/gdbserver/remote-utils.c +++ b/gdbserver/remote-utils.c @@ -1208,7 +1208,7 @@ prepare_resume_reply (char *buf, ptid_t ptid, saved_thread = current_thread; - switch_to_thread (the_target, ptid); + switch_to_thread (the_target.get (), ptid); regp = current_target_desc ()->expedite_regs; diff --git a/gdbserver/target.c b/gdbserver/target.c index 5c80a379f65..048fd5ad6e9 100644 --- a/gdbserver/target.c +++ b/gdbserver/target.c @@ -27,7 +27,7 @@ #include #include -process_stratum_target *the_target; +std::unique_ptr the_target; int set_desired_thread () @@ -118,7 +118,7 @@ done_accessing_memory (void) /* Restore the previous selected thread. */ cs.general_thread = prev_general_thread; - switch_to_thread (the_target, cs.general_thread); + switch_to_thread (the_target.get (), cs.general_thread); } int @@ -267,13 +267,6 @@ target_supports_multi_process (void) return the_target->pt->supports_multi_process (); } -void -set_target_ops (process_stratum_target *target) -{ - the_target = XNEW (process_stratum_target); - memcpy (the_target, target, sizeof (*the_target)); -} - /* Convert pid to printable format. */ const char * diff --git a/gdbserver/target.h b/gdbserver/target.h index 1b5059c1beb..ac0ada0cd38 100644 --- a/gdbserver/target.h +++ b/gdbserver/target.h @@ -506,9 +506,7 @@ public: virtual int get_ipa_tdesc_idx (); }; -extern process_stratum_target *the_target; - -void set_target_ops (process_stratum_target *); +extern std::unique_ptr the_target; #define target_create_inferior(program, program_args) \ the_target->pt->create_inferior (program, program_args) diff --git a/gdbserver/win32-low.c b/gdbserver/win32-low.c index 567e2ebe3db..5b4dd36f5d0 100644 --- a/gdbserver/win32-low.c +++ b/gdbserver/win32-low.c @@ -1847,14 +1847,11 @@ win32_process_target::sw_breakpoint_from_kind (int kind, int *size) static win32_process_target the_win32_target; -static process_stratum_target win32_target_ops = { - &the_win32_target, -}; - /* Initialize the Win32 backend. */ void initialize_low (void) { - set_target_ops (&win32_target_ops); + the_target.reset (new process_stratum_target); + the_target->pt = &the_win32_target; the_low_target.arch_setup (); }