public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 57/58] gdbserver: use unique_ptr for 'the_target'
Date: Tue, 11 Feb 2020 09:04:00 -0000	[thread overview]
Message-ID: <a2565d928bd4596e95ed10d9191c85a4a67bb4e1.1581410935.git.tankut.baris.aktemur@intel.com> (raw)
In-Reply-To: <cover.1581410932.git.tankut.baris.aktemur@intel.com>
In-Reply-To: <cover.1581410932.git.tankut.baris.aktemur@intel.com>

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  <tankut.baris.aktemur@intel.com>

	* target.h (set_target_ops): Remove.
	(<the_target>): Change the type to
	std::unique_ptr<process_stratum_target>.
	* 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 <sys/types.h>
 #include <sys/stat.h>
 
-process_stratum_target *the_target;
+std::unique_ptr<process_stratum_target> 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<process_stratum_target> 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 ();
 }
-- 
2.17.1

  parent reply	other threads:[~2020-02-11  9:04 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-11  9:02 [PATCH 00/58] Turn gdbserver's process_stratum_target into a class Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 11/58] gdbserver: turn target op 'wait' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 46/58] gdbserver: turn target op 'qxfer_libraries_svr4' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 18/58] gdbserver: turn target op 'supports_z_point_type' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 13/58] gdbserver: turn prepare_to_access_memory & done_accessing_memory into methods Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 15/58] gdbserver: turn target op 'look_up_symbols' into a method Tankut Baris Aktemur
2020-02-13 20:28   ` Pedro Alves
2020-02-11  9:03 ` [PATCH 05/58] gdbserver: turn target op 'kill' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 19/58] gdbserver: turn target ops 'insert_point' and 'remove_point' into methods Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 27/58] gdbserver: turn target op 'qxfer_osdata' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 45/58] gdbserver: turn target op 'supports_disable_randomization' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 02/58] gdbserver: turn target op 'create_inferior' " Tankut Baris Aktemur
2020-02-13 20:27   ` Pedro Alves
2020-02-14 11:01     ` Aktemur, Tankut Baris
2020-02-14 13:07       ` Pedro Alves
2020-02-11  9:03 ` [PATCH 36/58] gdbserver: turn target op 'process_qsupported' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 40/58] gdbserver: turn target op 'get_tib_address' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 01/58] gdbserver: start turning the target ops vector into a class Tankut Baris Aktemur
2020-02-13 20:26   ` Pedro Alves
2020-02-11  9:03 ` [PATCH 32/58] gdbserver: turn target op 'handle_new_gdb_connection' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 43/58] gdbserver: turn fast tracepoint target ops into methods Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 08/58] gdbserver: turn target op 'join' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 03/58] gdbserver: turn target op 'post_create_inferior' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 21/58] gdbserver: turn target op '{supports_}stopped_by_hw_breakpoint' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 25/58] gdbserver: turn target op 'get_tls_address' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 23/58] gdbserver: turn target ops 'stopped_by_watchpoint' and 'stopped_data_address' into methods Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 09/58] gdbserver: turn target op 'thread_alive' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 37/58] gdbserver: turn target op 'supports_tracepoints' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 24/58] gdbserver: turn target op 'read_offsets' " Tankut Baris Aktemur
2020-02-13 20:29   ` Pedro Alves
2020-02-11  9:03 ` [PATCH 33/58] gdbserver: turn target op 'handle_monitor_command' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 07/58] gdbserver: turn target op 'mourn' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 20/58] gdbserver: turn target op '{supports_}stopped_by_sw_breakpoint' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 12/58] gdbserver: turn target ops 'fetch_registers' and 'store_registers' into methods Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 06/58] gdbserver: turn target op 'detach' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 48/58] gdbserver: turn btrace-related target ops into methods Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 28/58] gdbserver: turn target op 'qxfer_siginfo' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 22/58] gdbserver: turn target op 'supports_hardware_single_step' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 26/58] gdbserver: turn target op 'hostio_last_error' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 04/58] gdbserver: turn target op 'attach' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 55/58] gdbserver: turn target op 'supports_catch_syscall' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 50/58] gdbserver: turn target op 'pid_to_exec_file' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 38/58] gdbserver: turn target ops 'read_pc' and 'write_pc' into methods Tankut Baris Aktemur
2020-02-13 20:29   ` Pedro Alves
2020-02-11  9:04 ` Tankut Baris Aktemur [this message]
2020-02-11 16:43   ` [PATCH 57/58] gdbserver: use unique_ptr for 'the_target' Christian Biesinger via gdb-patches
2020-02-12  8:32     ` Aktemur, Tankut Baris
2020-02-13 20:31   ` Pedro Alves
2020-02-11  9:04 ` [PATCH 31/58] gdbserver: turn target ops 'supports_{fork,vfork,exec}_events' into methods Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 53/58] gdbserver: turn target ops 'thread_name' and 'thread_handle' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 56/58] gdbserver: turn target op 'get_ipa_tdesc_idx' into a method Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 42/58] gdbserver: turn target op 'stabilize_threads' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 17/58] gdbserver: turn target op 'read_auxv' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 54/58] gdbserver: turn target op 'supports_software_single_step' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 52/58] gdbserver: turn breakpoint kind-related target ops into methods Tankut Baris Aktemur
2020-02-13 20:29   ` Pedro Alves
2020-02-11  9:04 ` [PATCH 34/58] gdbserver: turn target op 'core_of_thread' into a method Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 39/58] gdbserver: turn target op 'thread_stopped' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 47/58] gdbserver: turn target op 'supports_agent' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 49/58] gdbserver: turn target op 'supports_range_stepping' " Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 14/58] gdbserver: turn target ops 'read_memory' and 'write_memory' into methods Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 41/58] gdbserver: turn target ops 'pause_all' and 'unpause_all' " Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 16/58] gdbserver: turn target op 'request_interrupt' into a method Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 51/58] gdbserver: turn target ops 'multifs_{open, readlink, unlink}' into methods Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 35/58] gdbserver: turn target op 'read_loadmap' into a method Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 10/58] gdbserver: turn target op 'resume' " Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 29/58] gdbserver: turn non-stop and async target ops into methods Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 58/58] gdbserver: finish turning the target ops vector into a class Tankut Baris Aktemur
2020-02-13 20:31   ` Pedro Alves
2020-02-11  9:05 ` [PATCH 30/58] gdbserver: turn target op 'supports_multi_process' into a method Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 44/58] gdbserver: turn target op 'emit_ops' " Tankut Baris Aktemur
2020-02-11 17:41 ` [PATCH 00/58] Turn gdbserver's process_stratum_target into a class Christian Biesinger via gdb-patches
2020-02-12  8:18   ` Aktemur, Tankut Baris
2020-02-12 16:43     ` Christian Biesinger via gdb-patches
2020-02-13 20:26 ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a2565d928bd4596e95ed10d9191c85a4a67bb4e1.1581410935.git.tankut.baris.aktemur@intel.com \
    --to=tankut.baris.aktemur@intel.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).