gdb: remove unpush_target free function
authorSimon Marchi <simon.marchi@polymtl.ca>
Tue, 23 Mar 2021 13:50:32 +0000 (09:50 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Tue, 23 Mar 2021 13:50:32 +0000 (09:50 -0400)
unpush_target unpushes the passed-in target from the current inferior's
target stack.  Calling it is therefore an implicit dependency on the
current global inferior.  Remove that function and make the callers use
the inferior::unpush_target method directly.  This sometimes allows
using the inferior from the context rather than the global current
inferior.

target_unpusher::operator() now needs to be implemented in target.c,
otherwise target.h and inferior.h both need to include each other, and
that wouldn't work.

gdb/ChangeLog:

* target.h (unpush_target): Remove, update all callers
to use `inferior::unpush_target` instead.
(struct target_unpusher) <operator()>: Just declare.
* target.c (unpush_target): Remove.
(target_unpusher::operator()): New.

Change-Id: Ia5172dfb3f373e0a75b991885b50322ca2142a8c

17 files changed:
gdb/ChangeLog
gdb/aix-thread.c
gdb/bsd-kvm.c
gdb/bsd-uthread.c
gdb/corelow.c
gdb/exec.c
gdb/inf-child.c
gdb/linux-thread-db.c
gdb/ravenscar-thread.c
gdb/record-btrace.c
gdb/record-full.c
gdb/record.c
gdb/remote-sim.c
gdb/sol-thread.c
gdb/target.c
gdb/target.h
gdb/tracefile-tfile.c

index 1e076546c14b32c9df79f29578638a491e81da86..7396237d90f285f43b19a0f71c98074d1b62a8a4 100644 (file)
@@ -1,3 +1,11 @@
+2021-03-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * target.h (unpush_target): Remove, update all callers
+       to use `inferior::unpush_target` instead.
+       (struct target_unpusher) <operator()>: Just declare.
+       * target.c (unpush_target): Remove.
+       (target_unpusher::operator()): New.
+
 2021-03-22  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * dwarf2/read.c (process_psymtab_comp_unit): Replace abort with an
index f4b6c1b06ab66f692cc9fb194c27d121f3c7877f..a479d0150bc209865d7dbb1dce39d2cd3259bf03 100644 (file)
@@ -993,7 +993,7 @@ pd_disable (void)
   if (pd_active)
     pd_deactivate ();
   pd_able = 0;
-  unpush_target (&aix_thread_ops);
+  current_inferior ()->unpush_target (&aix_thread_ops);
 }
 
 /* new_objfile observer callback.
index cd25e19a544e08d2058c7ec8bcd06aeefec7a6e4..17db2fe1cd60dbdc4a4d2676ea784d382ba504e4 100644 (file)
@@ -132,7 +132,7 @@ bsd_kvm_target_open (const char *arg, int from_tty)
     error (("%s"), errbuf);
 
   bsd_kvm_corefile = filename;
-  unpush_target (&bsd_kvm_ops);
+  current_inferior ()->unpush_target (&bsd_kvm_ops);
   core_kd = temp_kd;
   push_target (&bsd_kvm_ops);
 
index d7dd0a1801420a828fd80f931e7a9099d03bc1bf..2ee47bfb5c47335d7246182ba06e79648ceecfa1 100644 (file)
@@ -259,7 +259,7 @@ bsd_uthread_deactivate (void)
   if (!bsd_uthread_active)
     return;
 
-  unpush_target (&bsd_uthread_ops);
+  current_inferior ()->unpush_target (&bsd_uthread_ops);
 }
 
 static void
index a2d2d20afc627e6a71833e3bfb0e3769d746e4d2..a4c1f6354c6e427ca449e9e3f6fc7e5c09e45bd0 100644 (file)
@@ -580,7 +580,7 @@ core_target::detach (inferior *inf, int from_tty)
   /* Note that 'this' is dangling after this call.  unpush_target
      closes the target, and our close implementation deletes
      'this'.  */
-  unpush_target (this);
+  inf->unpush_target (this);
 
   /* Clear the register cache and the frame cache.  */
   registers_changed ();
index 544a05873f11ee287a701e2323a8aa5aac2e0c23..bcc54bd966fe15d6a1e028f5e3fbc241a94f0aed 100644 (file)
@@ -671,7 +671,7 @@ program_space::remove_target_sections (void *owner)
            continue;
 
          switch_to_inferior_no_thread (inf);
-         unpush_target (&exec_ops);
+         inf->unpush_target (&exec_ops);
        }
     }
 }
index 192cfc336913e0a750264be04835d5a66f9efe75..b8bc2e2598e649ad3e53371d5e9bb470232e19fb 100644 (file)
@@ -207,7 +207,7 @@ void
 inf_child_target::maybe_unpush_target ()
 {
   if (!inf_child_explicitly_opened)
-    unpush_target (this);
+    current_inferior ()->unpush_target (this);
 }
 
 void
index 4dab64ac34483c82d35f01ac8855c10a8867c40d..3a3d3def6074eb0559cbbbd93ede95b3587e016e 100644 (file)
@@ -1364,7 +1364,7 @@ thread_db_target::detach (inferior *inf, int from_tty)
   /* NOTE: From this point on, inferior_ptid is null_ptid.  */
 
   /* Detach the thread_db target from this inferior.  */
-  unpush_target (this);
+  inf->unpush_target (this);
 }
 
 ptid_t
@@ -1398,7 +1398,7 @@ thread_db_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
       /* New image, it may or may not end up using thread_db.  Assume
         not unless we find otherwise.  */
       delete_thread_db_info (beneath, ptid.pid ());
-      unpush_target (this);
+      current_inferior ()->unpush_target (this);
 
       return ptid;
     }
@@ -1420,7 +1420,7 @@ thread_db_target::mourn_inferior ()
   target_beneath->mourn_inferior ();
 
   /* Detach the thread_db target from this inferior.  */
-  unpush_target (this);
+  current_inferior ()->unpush_target (this);
 }
 
 struct callback_data
index 2cc7bbc0ca3692496372d47c6550259381153f92..63aa1d1db843e8d64948c2869b8de959041e0e5b 100644 (file)
@@ -620,7 +620,7 @@ ravenscar_thread_target::mourn_inferior ()
 {
   m_base_ptid = null_ptid;
   target_ops *beneath = this->beneath ();
-  unpush_target (this);
+  current_inferior ()->unpush_target (this);
   beneath->mourn_inferior ();
 }
 
index d9cc7a3b6d89dd14bf4da75ec3d20bb711b6c92a..1a0cac2f710e543039819af019453b04de5304bd 100644 (file)
@@ -428,7 +428,7 @@ record_btrace_target::disconnect (const char *args,
   struct target_ops *beneath = this->beneath ();
 
   /* Do not stop recording, just clean up GDB side.  */
-  unpush_target (this);
+  current_inferior ()->unpush_target (this);
 
   /* Forward disconnect.  */
   beneath->disconnect (args, from_tty);
index 2373741470c45deb46d9e48b7dc7fc8925f5341d..59e4410c0085182391977b6c94bb9a74fdc9d24f 100644 (file)
@@ -2078,7 +2078,7 @@ record_full_core_target::kill ()
   if (record_debug)
     fprintf_unfiltered (gdb_stdlog, "Process record: record_full_core_kill\n");
 
-  unpush_target (this);
+  current_inferior ()->unpush_target (this);
 }
 
 /* "fetch_registers" method for prec over corefile.  */
index cd541b56f43879bf5407eabc56047407be60306f..483b906c2d06c706f8418a92a00a3a15b445da8a 100644 (file)
@@ -166,7 +166,7 @@ record_unpush (struct target_ops *t)
 {
   DEBUG ("unpush %s", t->shortname ());
 
-  unpush_target (t);
+  current_inferior ()->unpush_target (t);
 }
 
 /* See record.h.  */
index d51130562fb1e0ed2e240f4abd4418eb846e1b74..f72bbd2015e407987cb43c60c55b10e8a443ec49 100644 (file)
@@ -699,7 +699,7 @@ gdbsim_target_open (const char *args, int from_tty)
      operation until after we complete those operations which could
      error out.  */
   if (gdbsim_is_open)
-    unpush_target (&gdbsim_ops);
+    current_inferior ()->unpush_target (&gdbsim_ops);
 
   len = (7 + 1                 /* gdbsim */
         + strlen (" -E little")
@@ -834,7 +834,7 @@ gdbsim_target::detach (inferior *inf, int from_tty)
   if (remote_debug)
     fprintf_unfiltered (gdb_stdlog, "gdbsim_detach\n");
 
-  unpush_target (this);                /* calls gdbsim_close to do the real work */
+  inf->unpush_target (this);           /* calls gdbsim_close to do the real work */
   if (from_tty)
     printf_filtered ("Ending simulator %s debugging\n", target_shortname);
 }
index 7b46a5747877ac129c6e4d9fe9d9fd1482ecf042..1458185f414fafcbbacec0858f186036cb45ab2d 100644 (file)
@@ -387,7 +387,7 @@ sol_thread_target::detach (inferior *inf, int from_tty)
 
   sol_thread_active = 0;
   inferior_ptid = ptid_t (main_ph.ptid.pid ());
-  unpush_target (this);
+  inf->unpush_target (this);
   beneath->detach (inf, from_tty);
 }
 
@@ -681,7 +681,7 @@ sol_thread_target::mourn_inferior ()
 
   sol_thread_active = 0;
 
-  unpush_target (this);
+  current_inferior ()->unpush_target (this);
 
   beneath->mourn_inferior ();
 }
index 0889da82ea593ad295741e75f6455c1fcd45d055..236aded0a2e175269248ce61ce9f04e8e330dcac 100644 (file)
@@ -160,7 +160,7 @@ set_targetdebug  (const char *args, int from_tty, struct cmd_list_element *c)
   if (targetdebug)
     push_target (the_debug_target);
   else
-    unpush_target (the_debug_target);
+    current_inferior ()->unpush_target (the_debug_target);
 }
 
 static void
@@ -589,14 +589,6 @@ push_target (target_ops_up &&t)
 
 /* See target.h.  */
 
-int
-unpush_target (struct target_ops *t)
-{
-  return current_inferior ()->unpush_target (t);
-}
-
-/* See target.h.  */
-
 bool
 target_stack::unpush (target_ops *t)
 {
@@ -640,7 +632,7 @@ target_stack::unpush (target_ops *t)
 static void
 unpush_target_and_assert (struct target_ops *target)
 {
-  if (!unpush_target (target))
+  if (!current_inferior ()->unpush_target (target))
     {
       fprintf_unfiltered (gdb_stderr,
                          "pop_all_targets couldn't find target %s\n",
@@ -681,6 +673,12 @@ target_is_pushed (target_ops *t)
   return current_inferior ()->target_is_pushed (t);
 }
 
+void
+target_unpusher::operator() (struct target_ops *ops) const
+{
+  current_inferior ()->unpush_target (ops);
+}
+
 /* Default implementation of to_get_thread_local_address.  */
 
 static void
index ee93c5cf3959a1d8deadde821c38edb07a970e74..3a64094ae5b2394350da0283ea5e795949ac4937 100644 (file)
@@ -2390,16 +2390,11 @@ extern void push_target (struct target_ops *);
 /* An overload that deletes the target on failure.  */
 extern void push_target (target_ops_up &&);
 
-extern int unpush_target (struct target_ops *);
-
 /* A unique_ptr helper to unpush a target.  */
 
 struct target_unpusher
 {
-  void operator() (struct target_ops *ops) const
-  {
-    unpush_target (ops);
-  }
+  void operator() (struct target_ops *ops) const;
 };
 
 /* A unique_ptr that unpushes a target on destruction.  */
index ca6324c03920262b3038eb5e33c9c3e414cba539..ea703643d8f1b81223ba37110fdee9e0a3ebf1cd 100644 (file)
@@ -481,7 +481,7 @@ tfile_target_open (const char *arg, int from_tty)
 
   /* Looks semi-reasonable.  Toss the old trace file and work on the new.  */
 
-  unpush_target (&tfile_ops);
+  current_inferior ()->unpush_target (&tfile_ops);
 
   trace_filename = filename.release ();
   trace_fd = scratch_chan;
@@ -551,7 +551,7 @@ tfile_target_open (const char *arg, int from_tty)
   catch (const gdb_exception &ex)
     {
       /* Remove the partially set up target.  */
-      unpush_target (&tfile_ops);
+      current_inferior ()->unpush_target (&tfile_ops);
       throw;
     }