public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: "Christian Biesinger via gdb-patches" <gdb-patches@sourceware.org>
To: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Cc: gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [PATCH 57/58] gdbserver: use unique_ptr for 'the_target'
Date: Tue, 11 Feb 2020 16:43:00 -0000	[thread overview]
Message-ID: <CAPTJ0XFY-JTC0hy8hMWR4hD1wDjE2oohvZ1Gwyr2W+nz+JExtQ@mail.gmail.com> (raw)
In-Reply-To: <a2565d928bd4596e95ed10d9191c85a4a67bb4e1.1581410935.git.tankut.baris.aktemur@intel.com>

On Tue, Feb 11, 2020 at 3:08 AM Tankut Baris Aktemur
<tankut.baris.aktemur@intel.com> wrote:
>
> 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;

Should this now be a constructor argument?

>
>    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
>

  reply	other threads:[~2020-02-11 16:43 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 21/58] gdbserver: turn target op '{supports_}stopped_by_hw_breakpoint' 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 23/58] gdbserver: turn target ops 'stopped_by_watchpoint' and 'stopped_data_address' into methods Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 25/58] gdbserver: turn target op 'get_tls_address' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 09/58] gdbserver: turn target op 'thread_alive' " 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 07/58] gdbserver: turn target op 'mourn' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 33/58] gdbserver: turn target op 'handle_monitor_command' " 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 20/58] gdbserver: turn target op '{supports_}stopped_by_sw_breakpoint' " 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 22/58] gdbserver: turn target op 'supports_hardware_single_step' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 28/58] gdbserver: turn target op 'qxfer_siginfo' " 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 06/58] gdbserver: turn target op 'detach' into a method 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 04/58] gdbserver: turn target op 'attach' 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 11/58] gdbserver: turn target op 'wait' " 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 15/58] gdbserver: turn target op 'look_up_symbols' " Tankut Baris Aktemur
2020-02-13 20:28   ` Pedro Alves
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 02/58] gdbserver: turn target op 'create_inferior' into a method 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 45/58] gdbserver: turn target op 'supports_disable_randomization' " Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 27/58] gdbserver: turn target op 'qxfer_osdata' " Tankut Baris Aktemur
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 40/58] gdbserver: turn target op 'get_tib_address' into a method Tankut Baris Aktemur
2020-02-11  9:03 ` [PATCH 36/58] gdbserver: turn target op 'process_qsupported' " 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 32/58] gdbserver: turn target op 'handle_new_gdb_connection' into a method 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 08/58] gdbserver: turn target op 'join' into a method 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 34/58] gdbserver: turn target op 'core_of_thread' " 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 39/58] gdbserver: turn target op 'thread_stopped' into a method 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 47/58] gdbserver: turn target op 'supports_agent' " 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:04 ` [PATCH 50/58] gdbserver: turn target op 'pid_to_exec_file' into a method 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 31/58] gdbserver: turn target ops 'supports_{fork,vfork,exec}_events' into methods Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 57/58] gdbserver: use unique_ptr for 'the_target' Tankut Baris Aktemur
2020-02-11 16:43   ` Christian Biesinger via gdb-patches [this message]
2020-02-12  8:32     ` Aktemur, Tankut Baris
2020-02-13 20:31   ` Pedro Alves
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 ` [PATCH 56/58] gdbserver: turn target op 'get_ipa_tdesc_idx' into a method Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 53/58] gdbserver: turn target ops 'thread_name' and 'thread_handle' into methods Tankut Baris Aktemur
2020-02-11  9:04 ` [PATCH 42/58] gdbserver: turn target op 'stabilize_threads' into a method 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 29/58] gdbserver: turn non-stop and async target ops into methods Tankut Baris Aktemur
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  9:05 ` [PATCH 41/58] gdbserver: turn target ops 'pause_all' and 'unpause_all' into methods Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 51/58] gdbserver: turn target ops 'multifs_{open, readlink, unlink}' " 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 35/58] gdbserver: turn target op 'read_loadmap' " Tankut Baris Aktemur
2020-02-11  9:05 ` [PATCH 10/58] gdbserver: turn target op 'resume' " 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=CAPTJ0XFY-JTC0hy8hMWR4hD1wDjE2oohvZ1Gwyr2W+nz+JExtQ@mail.gmail.com \
    --to=gdb-patches@sourceware.org \
    --cc=cbiesinger@google.com \
    --cc=tankut.baris.aktemur@intel.com \
    /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).