gdb: remove current_top_target function
authorSimon Marchi <simon.marchi@polymtl.ca>
Wed, 24 Mar 2021 22:08:12 +0000 (18:08 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Wed, 24 Mar 2021 22:08:24 +0000 (18:08 -0400)
The current_top_target function is a hidden dependency on the current
inferior.  Since I'd like to slowly move towards reducing our dependency
on the global current state, remove this function and make callers use

  current_inferior ()->top_target ()

There is no expected change in behavior, but this one step towards
making those callers use the inferior from their context, rather than
refer to the global current inferior.

gdb/ChangeLog:

* target.h (current_top_target): Remove, make callers use the
current inferior instead.
* target.c (current_top_target): Remove.

Change-Id: Iccd457036f84466cdaa3865aa3f9339a24ea001d

48 files changed:
gdb/ChangeLog
gdb/auxv.c
gdb/avr-tdep.c
gdb/breakpoint.c
gdb/corefile.c
gdb/elfread.c
gdb/eval.c
gdb/exec.c
gdb/fbsd-tdep.c
gdb/frame.c
gdb/gnu-v3-abi.c
gdb/ia64-tdep.c
gdb/ia64-vms-tdep.c
gdb/infcall.c
gdb/infcmd.c
gdb/inferior.c
gdb/infrun.c
gdb/linespec.c
gdb/linux-tdep.c
gdb/maint.c
gdb/mi/mi-main.c
gdb/minsyms.c
gdb/ppc-linux-nat.c
gdb/procfs.c
gdb/regcache.c
gdb/remote.c
gdb/rs6000-tdep.c
gdb/s390-linux-nat.c
gdb/s390-tdep.c
gdb/solib-aix.c
gdb/solib-darwin.c
gdb/solib-dsbt.c
gdb/solib-svr4.c
gdb/solib-target.c
gdb/sparc-tdep.c
gdb/sparc64-tdep.c
gdb/symfile.c
gdb/symtab.c
gdb/target-descriptions.c
gdb/target-memory.c
gdb/target.c
gdb/target.h
gdb/tracefile-tfile.c
gdb/tracepoint.c
gdb/valops.c
gdb/valprint.c
gdb/value.c
gdb/windows-tdep.c

index a14592592e4e5203f2cbe3b4907095a1574173c8..a548c58e8f721d21eae65a8647bf3f60c8680cf7 100644 (file)
@@ -1,3 +1,9 @@
+2021-03-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * target.h (current_top_target): Remove, make callers use the
+       current inferior instead.
+       * target.c (current_top_target): Remove.
+
 2021-03-24  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * target.h (target_shortname): Change to function declaration.
index f13f90b153f5c5cf8899d4dccdfed34c4331c693..6507df192e56dfbd83fdf8136c45ba9eee005a5c 100644 (file)
@@ -320,7 +320,8 @@ target_auxv_parse (gdb_byte **readptr,
   if (gdbarch_auxv_parse_p (gdbarch))
     return gdbarch_auxv_parse (gdbarch, readptr, endptr, typep, valp);
 
-  return current_top_target ()->auxv_parse (readptr, endptr, typep, valp);
+  return current_inferior ()->top_target ()->auxv_parse (readptr, endptr,
+                                                        typep, valp);
 }
 
 
@@ -580,7 +581,8 @@ info_auxv_command (const char *cmd, int from_tty)
     error (_("The program has no auxiliary information now."));
   else
     {
-      int ents = fprint_target_auxv (gdb_stdout, current_top_target ());
+      int ents = fprint_target_auxv (gdb_stdout,
+                                    current_inferior ()->top_target ());
 
       if (ents < 0)
        error (_("No auxiliary vector found, or failed reading it."));
index 815c6d451434db63479efc76b6e2d5df85bbfecf..018b18f3dfd31bf289a15d0e8667dfee75d06749 100644 (file)
@@ -1561,7 +1561,8 @@ avr_io_reg_read_command (const char *args, int from_tty)
 
   /* Find out how many io registers the target has.  */
   gdb::optional<gdb::byte_vector> buf
-    = target_read_alloc (current_top_target (), TARGET_OBJECT_AVR, "avr.io_reg");
+    = target_read_alloc (current_inferior ()->top_target (),
+                        TARGET_OBJECT_AVR, "avr.io_reg");
 
   if (!buf)
     {
@@ -1595,7 +1596,8 @@ avr_io_reg_read_command (const char *args, int from_tty)
        j = nreg - i;           /* last block is less than 8 registers */
 
       snprintf (query, sizeof (query) - 1, "avr.io_reg:%x,%x", i, j);
-      buf = target_read_alloc (current_top_target (), TARGET_OBJECT_AVR, query);
+      buf = target_read_alloc (current_inferior ()->top_target (),
+                              TARGET_OBJECT_AVR, query);
 
       if (!buf)
        {
index de1e79ba5d0f1c389554d1a77f0762ea1643dff6..16cf7977b62a41ea04858c4b7488a1a6986f0aaf 100644 (file)
@@ -3598,8 +3598,8 @@ create_exception_master_breakpoint_hook (objfile *objfile)
     }
 
   addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
-  addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
-                                            current_top_target ());
+  addr = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, addr, current_inferior ()->top_target ());
   b = create_internal_breakpoint (gdbarch, addr, bp_exception_master,
                                  &internal_breakpoint_ops);
   initialize_explicit_location (&explicit_loc);
@@ -4869,7 +4869,7 @@ watchpoints_triggered (struct target_waitstatus *ws)
       return 0;
     }
 
-  if (!target_stopped_data_address (current_top_target (), &addr))
+  if (!target_stopped_data_address (current_inferior ()->top_target (), &addr))
     {
       /* We were stopped by a watchpoint, but we don't know where.
         Mark all watchpoints as unknown.  */
@@ -4909,9 +4909,9 @@ watchpoints_triggered (struct target_waitstatus *ws)
                  }
              }
            /* Exact match not required.  Within range is sufficient.  */
-           else if (target_watchpoint_addr_within_range (current_top_target (),
-                                                        addr, loc->address,
-                                                        loc->length))
+           else if (target_watchpoint_addr_within_range
+                      (current_inferior ()->top_target (), addr, loc->address,
+                       loc->length))
              {
                w->watchpoint_triggered = watch_triggered_yes;
                break;
index 4ddcc06ec96cd0f2b48aceee482b4a038fab9c29..30960c129fdad77be0ccdaea02c2d7ad25cec838 100644 (file)
@@ -218,8 +218,8 @@ read_memory_object (enum target_object object, CORE_ADDR memaddr,
       enum target_xfer_status status;
       ULONGEST xfered_len;
 
-      status = target_xfer_partial (current_top_target (), object, NULL,
-                                   myaddr + xfered, NULL,
+      status = target_xfer_partial (current_inferior ()->top_target (), object,
+                                   NULL, myaddr + xfered, NULL,
                                    memaddr + xfered, len - xfered,
                                    &xfered_len);
 
index 851008753471f9d4daaa884ab1a54eeb70b6820b..49bbbec663e8a12d3c612566786c4d89fb6d9d17 100644 (file)
@@ -863,8 +863,8 @@ elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
       if (target_read_memory (pointer_address, buf, ptr_size) != 0)
        continue;
       addr = extract_typed_address (buf, ptr_type);
-      addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
-                                                current_top_target ());
+      addr = gdbarch_convert_from_func_ptr_addr
+       (gdbarch, addr, current_inferior ()->top_target ());
       addr = gdbarch_addr_bits_remove (gdbarch, addr);
 
       if (elf_gnu_ifunc_record_cache (name, addr))
@@ -931,12 +931,13 @@ elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
      parameter.  FUNCTION is the function entry address.  ADDRESS may be a
      function descriptor.  */
 
-  target_auxv_search (current_top_target (), AT_HWCAP, &hwcap);
+  target_auxv_search (current_inferior ()->top_target (), AT_HWCAP, &hwcap);
   hwcap_val = value_from_longest (builtin_type (gdbarch)
                                  ->builtin_unsigned_long, hwcap);
   address_val = call_function_by_hand (function, NULL, hwcap_val);
   address = value_as_address (address_val);
-  address = gdbarch_convert_from_func_ptr_addr (gdbarch, address, current_top_target ());
+  address = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, address, current_inferior ()->top_target ());
   address = gdbarch_addr_bits_remove (gdbarch, address);
 
   if (name_at_pc)
@@ -1042,9 +1043,8 @@ elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
   gdbarch_return_value (gdbarch, func_func, value_type, regcache,
                        value_contents_raw (value), NULL);
   resolved_address = value_as_address (value);
-  resolved_pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
-                                                   resolved_address,
-                                                   current_top_target ());
+  resolved_pc = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, resolved_address, current_inferior ()->top_target ());
   resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
 
   gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
index 530ff152134a282d24101962d4fd2923ba843ff1..363ab4fa4af962cc409b474602785fa52a171209 100644 (file)
@@ -42,6 +42,7 @@
 #include <ctype.h>
 #include "expop.h"
 #include "c-exp.h"
+#include "inferior.h"
 
 \f
 /* Parse the string EXP as a C expression, evaluate it,
@@ -1964,8 +1965,8 @@ eval_op_objc_msgcall (struct type *expect_type, struct expression *exp,
 
       /* The address might point to a function descriptor;
         resolve it to the actual code address instead.  */
-      addr = gdbarch_convert_from_func_ptr_addr (exp->gdbarch, addr,
-                                                current_top_target ());
+      addr = gdbarch_convert_from_func_ptr_addr
+       (exp->gdbarch, addr, current_inferior ()->top_target ());
 
       /* Is it a high_level symbol?  */
       sym = find_pc_function (addr);
index b737bcf6e0f3c25462233b39cf50be0d24e4b5aa..ff0db82a69b9a1222093cce543ad2d8f2e0f5027 100644 (file)
@@ -775,7 +775,7 @@ section_table_read_available_memory (gdb_byte *readbuf, ULONGEST offset,
                                     ULONGEST len, ULONGEST *xfered_len)
 {
   const target_section_table *table
-    = target_get_section_table (current_top_target ());
+    = target_get_section_table (current_inferior ()->top_target ());
   std::vector<mem_range> available_memory
     = section_table_available_memory (offset, len, *table);
 
index 170e8f5e84e2d5e99a2e3a3f205d44214e0de78b..6cab31dde82a66f7f38bd0611bc95e943f0b1f69 100644 (file)
@@ -593,7 +593,7 @@ static gdb::optional<gdb::byte_vector>
 fbsd_make_note_desc (enum target_object object, uint32_t structsize)
 {
   gdb::optional<gdb::byte_vector> buf =
-    target_read_alloc (current_top_target (), object, NULL);
+    target_read_alloc (current_inferior ()->top_target (), object, NULL);
   if (!buf || buf->empty ())
     return {};
 
index 4578b1acab3e21d4d10e6db6151d396d9bb1cf63..dc9fdd41646fbb52463ec8bbc73d670011ed6448 100644 (file)
@@ -2478,9 +2478,8 @@ inside_main_func (frame_info *this_frame)
 
   /* Convert any function descriptor addresses into the actual function
      code address.  */
-  sym_addr
-    = gdbarch_convert_from_func_ptr_addr (get_frame_arch (this_frame),
-                                         sym_addr, current_top_target ());
+  sym_addr = gdbarch_convert_from_func_ptr_addr
+    (get_frame_arch (this_frame), sym_addr, current_inferior ()->top_target ());
 
   return sym_addr == get_frame_func (this_frame);
 }
index 8461535c6ec928d2c1d075cff8cb88dea07aa453..45e57c210cbfafea723a27e7fe3b46db6733f460 100644 (file)
@@ -31,6 +31,7 @@
 #include <algorithm>
 #include "cli/cli-style.h"
 #include "dwarf2/loc.h"
+#include "inferior.h"
 
 static struct cp_abi_ops gnu_v3_abi_ops;
 
@@ -1243,8 +1244,8 @@ gnuv3_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc)
      (powerpc 64 for example).  Make sure to retrieve the address
      of the real function from the function descriptor before passing on
      the address to other layers of GDB.  */
-  func_addr = gdbarch_convert_from_func_ptr_addr (gdbarch, method_stop_pc,
-                                                 current_top_target ());
+  func_addr = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, method_stop_pc, current_inferior ()->top_target ());
   if (func_addr != 0)
     method_stop_pc = func_addr;
 
index 35eeffe8434110fc93434c6a4970475b44714f19..1c4fc4cca47ad7270ae7d3ff7c6c3d5400187f49 100644 (file)
@@ -2653,8 +2653,8 @@ getunwind_table ()
      we should find a way to override the corefile layer's
      xfer_partial method.  */
 
-  return target_read_alloc (current_top_target (), TARGET_OBJECT_UNWIND_TABLE,
-                           NULL);
+  return target_read_alloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_UNWIND_TABLE, NULL);
 }
 
 /* Get the kernel unwind table.  */                             
index 0481f00c2fa5788ab3288828e6fb7aba141e9ee9..cc8e191427485a93fb4fdc579f4e733fd8b3e922 100644 (file)
@@ -41,7 +41,8 @@ ia64_vms_find_proc_info_x (unw_addr_space_t as, unw_word_t ip,
   CORE_ADDR table_addr;
   unsigned int info_len;
 
-  res = target_read (current_top_target (), TARGET_OBJECT_OPENVMS_UIB,
+  res = target_read (current_inferior ()->top_target (),
+                    TARGET_OBJECT_OPENVMS_UIB,
                     annex + 2, buf, 0, sizeof (buf));
 
   if (res != sizeof (buf))
index 2332f293a1e46d70064a049f6f60d237cdbce1ec..ca3347fbb9dec1852856c03b6f3dca4e5638112e 100644 (file)
@@ -269,8 +269,8 @@ find_function_addr (struct value *function,
       ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
       if (ftype->code () == TYPE_CODE_FUNC
          || ftype->code () == TYPE_CODE_METHOD)
-       funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
-                                                     current_top_target ());
+       funaddr = gdbarch_convert_from_func_ptr_addr
+         (gdbarch, funaddr, current_inferior ()->top_target());
     }
   if (ftype->code () == TYPE_CODE_FUNC
       || ftype->code () == TYPE_CODE_METHOD)
@@ -321,9 +321,8 @@ find_function_addr (struct value *function,
 
              funaddr = value_as_address (value_addr (function));
              nfunaddr = funaddr;
-             funaddr
-               = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
-                                                     current_top_target ());
+             funaddr = gdbarch_convert_from_func_ptr_addr
+               (gdbarch, funaddr, current_inferior ()->top_target ());
              if (funaddr != nfunaddr)
                found_descriptor = 1;
            }
index 80e6ad3048f6732c5a8285a95042023c4d42de32..a6e9572fc7fd95969fb28611ac1882ae7a0a86fd 100644 (file)
@@ -759,7 +759,7 @@ continue_command (const char *args, int from_tty)
       ensure_not_running ();
     }
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (from_tty)
     printf_filtered (_("Continuing.\n"));
@@ -877,7 +877,7 @@ step_1 (int skip_subroutines, int single_inst, const char *count_string)
     = strip_bg_char (count_string, &async_exec);
   count_string = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   count = count_string ? parse_and_eval_long (count_string) : 1;
 
@@ -1075,7 +1075,7 @@ jump_command (const char *arg, int from_tty)
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (arg, &async_exec);
   arg = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (!arg)
     error_no_arg (_("starting address"));
@@ -1155,7 +1155,7 @@ signal_command (const char *signum_exp, int from_tty)
     = strip_bg_char (signum_exp, &async_exec);
   signum_exp = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (!signum_exp)
     error_no_arg (_("signal number"));
@@ -1400,7 +1400,7 @@ until_command (const char *arg, int from_tty)
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (arg, &async_exec);
   arg = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (arg)
     until_break_command (arg, from_tty, 0);
@@ -1425,7 +1425,7 @@ advance_command (const char *arg, int from_tty)
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (arg, &async_exec);
   arg = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   until_break_command (arg, from_tty, 1);
 }
@@ -1772,7 +1772,7 @@ finish_command (const char *arg, int from_tty)
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (arg, &async_exec);
   arg = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (arg)
     error (_("The \"finish\" command does not take any arguments."));
index 69baee34ce9d25dd26eda5fc78feadc853708e67..9188f72e35d2a10f7c094fbdb1fac7549d018362 100644 (file)
@@ -507,7 +507,7 @@ print_inferior (struct ui_out *uiout, const char *requested_inferiors)
 
       uiout->field_signed ("number", inf->num);
 
-      /* Because target_pid_to_str uses current_top_target,
+      /* Because target_pid_to_str uses the current inferior,
         switch the inferior.  */
       switch_to_inferior_no_thread (inf);
 
index b6f399d5478ed16fd5eadaf2bc076d35241d4f1d..20035a0f5e8567741ff87caacff7f54492b5ebdd 100644 (file)
@@ -1777,7 +1777,7 @@ displaced_step_finish (thread_info *event_thread, enum gdb_signal signal)
   /* Fixup may need to read memory/registers.  Switch to the thread
      that we're fixing up.  Also, target_stopped_by_watchpoint checks
      the current thread, and displaced_step_restore performs ptid-dependent
-     memory accesses using current_inferior() and current_top_target().  */
+     memory accesses using current_inferior().  */
   switch_to_thread (event_thread);
 
   displaced_step_reset_cleanup cleanup (displaced);
@@ -5813,7 +5813,8 @@ handle_signal_stop (struct execution_control_state *ecs)
 
          infrun_debug_printf ("stopped by watchpoint");
 
-         if (target_stopped_data_address (current_top_target (), &addr))
+         if (target_stopped_data_address (current_inferior ()->top_target (),
+                                          &addr))
            infrun_debug_printf ("stopped data address=%s",
                                 paddress (reg_gdbarch, addr));
          else
@@ -8835,7 +8836,8 @@ siginfo_value_read (struct value *v)
   validate_registers_access ();
 
   transferred =
-    target_read (current_top_target (), TARGET_OBJECT_SIGNAL_INFO,
+    target_read (current_inferior ()->top_target (),
+                TARGET_OBJECT_SIGNAL_INFO,
                 NULL,
                 value_contents_all_raw (v),
                 value_offset (v),
@@ -8857,7 +8859,7 @@ siginfo_value_write (struct value *v, struct value *fromval)
      vice versa.  */
   validate_registers_access ();
 
-  transferred = target_write (current_top_target (),
+  transferred = target_write (current_inferior ()->top_target (),
                              TARGET_OBJECT_SIGNAL_INFO,
                              NULL,
                              value_contents_all_raw (fromval),
@@ -8921,7 +8923,8 @@ public:
 
        siginfo_data.reset ((gdb_byte *) xmalloc (len));
 
-       if (target_read (current_top_target (), TARGET_OBJECT_SIGNAL_INFO, NULL,
+       if (target_read (current_inferior ()->top_target (),
+                        TARGET_OBJECT_SIGNAL_INFO, NULL,
                         siginfo_data.get (), 0, len) != len)
          {
            /* Errors ignored.  */
@@ -8956,7 +8959,8 @@ public:
        struct type *type = gdbarch_get_siginfo_type (gdbarch);
 
        /* Errors ignored.  */
-       target_write (current_top_target (), TARGET_OBJECT_SIGNAL_INFO, NULL,
+       target_write (current_inferior ()->top_target (),
+                     TARGET_OBJECT_SIGNAL_INFO, NULL,
                      m_siginfo_data.get (), 0, TYPE_LENGTH (type));
       }
 
index c7dbd3eeae2a34a8dced072ea8b879fe0a38df62..4034bbab8a0d35ac2513c1bd5cf25128ecd4d194 100644 (file)
@@ -47,6 +47,7 @@
 #include "gdbsupport/function-view.h"
 #include "gdbsupport/def-vector.h"
 #include <algorithm>
+#include "inferior.h"
 
 /* An enumeration of the various things a user might attempt to
    complete for a linespec location.  */
@@ -2314,7 +2315,7 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
                                = (gdbarch_convert_from_func_ptr_addr
                                   (gdbarch,
                                    msym_addr,
-                                   current_top_target ()));
+                                   current_inferior ()->top_target ()));
                            }
 
                          if (msym_addr == addr)
index 38c5ecf5b593975b14069370aa6832616f862cb4..19604b5ff9a3feb17783dab3d0ac7b5f8105e9ca 100644 (file)
@@ -410,9 +410,10 @@ int
 linux_is_uclinux (void)
 {
   CORE_ADDR dummy;
+  target_ops *target = current_inferior ()->top_target ();
 
-  return (target_auxv_search (current_top_target (), AT_NULL, &dummy) > 0
-         && target_auxv_search (current_top_target (), AT_PAGESZ, &dummy) == 0);
+  return (target_auxv_search (target, AT_NULL, &dummy) > 0
+         && target_auxv_search (target, AT_PAGESZ, &dummy) == 0);
 }
 
 static int
@@ -1735,7 +1736,8 @@ linux_get_siginfo_data (thread_info *thread, struct gdbarch *gdbarch)
 
   gdb::byte_vector buf (TYPE_LENGTH (siginfo_type));
 
-  bytes_read = target_read (current_top_target (), TARGET_OBJECT_SIGNAL_INFO, NULL,
+  bytes_read = target_read (current_inferior ()->top_target (),
+                           TARGET_OBJECT_SIGNAL_INFO, NULL,
                            buf.data (), 0, TYPE_LENGTH (siginfo_type));
   if (bytes_read != TYPE_LENGTH (siginfo_type))
     buf.clear ();
@@ -2037,7 +2039,8 @@ linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
 
   /* Auxillary vector.  */
   gdb::optional<gdb::byte_vector> auxv =
-    target_read_alloc (current_top_target (), TARGET_OBJECT_AUXV, NULL);
+    target_read_alloc (current_inferior ()->top_target (),
+                      TARGET_OBJECT_AUXV, NULL);
   if (auxv && !auxv->empty ())
     {
       note_data.reset (elfcore_write_note (obfd, note_data.release (),
@@ -2317,7 +2320,8 @@ linux_vsyscall_range_raw (struct gdbarch *gdbarch, struct mem_range *range)
   char filename[100];
   long pid;
 
-  if (target_auxv_search (current_top_target (), AT_SYSINFO_EHDR, &range->start) <= 0)
+  if (target_auxv_search (current_inferior ()->top_target (),
+                         AT_SYSINFO_EHDR, &range->start) <= 0)
     return 0;
 
   /* It doesn't make sense to access the host's /proc when debugging a
@@ -2507,14 +2511,15 @@ linux_displaced_step_location (struct gdbarch *gdbarch)
      local-store address and is thus not usable as displaced stepping
      location.  The auxiliary vector gets us the PowerPC-side entry
      point address instead.  */
-  if (target_auxv_search (current_top_target (), AT_ENTRY, &addr) <= 0)
+  if (target_auxv_search (current_inferior ()->top_target (),
+                         AT_ENTRY, &addr) <= 0)
     throw_error (NOT_SUPPORTED_ERROR,
                 _("Cannot find AT_ENTRY auxiliary vector entry."));
 
   /* Make certain that the address points at real code, and not a
      function descriptor.  */
-  addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
-                                            current_top_target ());
+  addr = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, addr, current_inferior ()->top_target ());
 
   /* Inferior calls also use the entry point as a breakpoint location.
      We don't want displaced stepping to interfere with those
index 5254cd6ed260c09cdfaf287546a8597cfbb1b713..7f505d07a6994d7f096044337a3c75c8597affc3 100644 (file)
@@ -40,6 +40,7 @@
 #include "top.h"
 #include "maint.h"
 #include "gdbsupport/selftest.h"
+#include "inferior.h"
 
 #include "cli/cli-decode.h"
 #include "cli/cli-utils.h"
@@ -472,7 +473,7 @@ maintenance_info_target_sections (const char *arg, int from_tty)
   bfd *abfd = nullptr;
   int digits = 0;
   const target_section_table *table
-    = target_get_section_table (current_top_target ());
+    = target_get_section_table (current_inferior ()->top_target ());
   if (table == nullptr)
     return;
 
index d5ce08e95ed271ecd38e487a73ea89ebdee7b2f9..c6f1ab4e3f0fbbea520304181bcdb1a77d3cfef5 100644 (file)
@@ -264,7 +264,7 @@ proceed_thread_callback (struct thread_info *thread, void *arg)
 static void
 exec_continue (char **argv, int argc)
 {
-  prepare_execution_command (current_top_target (), mi_async_p ());
+  prepare_execution_command (current_inferior ()->top_target (), mi_async_p ());
 
   if (non_stop)
     {
@@ -1328,7 +1328,8 @@ mi_cmd_data_read_memory (const char *command, char **argv, int argc)
 
   gdb::byte_vector mbuf (total_bytes);
 
-  nr_bytes = target_read (current_top_target (), TARGET_OBJECT_MEMORY, NULL,
+  nr_bytes = target_read (current_inferior ()->top_target (),
+                         TARGET_OBJECT_MEMORY, NULL,
                          mbuf.data (), addr, total_bytes);
   if (nr_bytes <= 0)
     error (_("Unable to read memory."));
@@ -1448,7 +1449,7 @@ mi_cmd_data_read_memory_bytes (const char *command, char **argv, int argc)
   length = atol (argv[1]);
 
   std::vector<memory_read_result> result
-    = read_memory_robust (current_top_target (), addr, length);
+    = read_memory_robust (current_inferior ()->top_target (), addr, length);
 
   if (result.size () == 0)
     error (_("Unable to read memory."));
index 3cf849f48bf00a8a3d2dfd0cc4b1380497ce24a1..8ffd90761249722699a5c508c441f024c0f33c74 100644 (file)
@@ -54,6 +54,7 @@
 #include <algorithm>
 #include "safe-ctype.h"
 #include "gdbsupport/parallel-for.h"
+#include "inferior.h"
 
 #if CXX_STD_THREAD
 #include <mutex>
@@ -78,9 +79,8 @@ msymbol_is_function (struct objfile *objfile, minimal_symbol *minsym,
     case mst_data_gnu_ifunc:
       {
        struct gdbarch *gdbarch = objfile->arch ();
-       CORE_ADDR pc
-         = gdbarch_convert_from_func_ptr_addr (gdbarch, msym_addr,
-                                               current_top_target ());
+       CORE_ADDR pc = gdbarch_convert_from_func_ptr_addr
+         (gdbarch, msym_addr, current_inferior ()->top_target ());
        if (pc != msym_addr)
          {
            if (func_address_p != NULL)
index f1ba165d54054eea06e31b6f4ef6c0868f305491..171f5b386fa8d3848d0875372cb7a18689a61874 100644 (file)
@@ -1967,8 +1967,8 @@ ppc_linux_nat_target::read_description ()
 
   features.wordsize = ppc_linux_target_wordsize (tid);
 
-  CORE_ADDR hwcap = linux_get_hwcap (current_top_target ());
-  CORE_ADDR hwcap2 = linux_get_hwcap2 (current_top_target ());
+  CORE_ADDR hwcap = linux_get_hwcap (current_inferior ()->top_target ());
+  CORE_ADDR hwcap2 = linux_get_hwcap2 (current_inferior ()->top_target ());
 
   if (have_ptrace_getsetvsxregs
       && (hwcap & PPC_FEATURE_HAS_VSX))
@@ -2125,7 +2125,8 @@ ppc_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
         takes two hardware watchpoints though.  */
       if (len > 1
          && hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE
-         && linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE)
+         && (linux_get_hwcap (current_inferior ()->top_target ())
+             & PPC_FEATURE_BOOKE))
        return 2;
       /* Check if the processor provides DAWR interface.  */
       if (hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_DAWR)
@@ -2153,7 +2154,8 @@ ppc_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
     {
       gdb_assert (m_dreg_interface.debugreg_p ());
 
-      if (((linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE)
+      if (((linux_get_hwcap (current_inferior ()->top_target ())
+           & PPC_FEATURE_BOOKE)
           && (addr + len) > (addr & ~3) + 4)
          || (addr + len) > (addr & ~7) + 8)
        return 0;
@@ -2640,7 +2642,8 @@ ppc_linux_nat_target::insert_watchpoint (CORE_ADDR addr, int len,
       long wp_value;
       long read_mode, write_mode;
 
-      if (linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE)
+      if (linux_get_hwcap (current_inferior ()->top_target ())
+         & PPC_FEATURE_BOOKE)
        {
          /* PowerPC 440 requires only the read/write flags to be passed
             to the kernel.  */
@@ -3013,9 +3016,11 @@ ppc_linux_nat_target::watchpoint_addr_within_range (CORE_ADDR addr,
   int mask;
 
   if (m_dreg_interface.hwdebug_p ()
-      && linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE)
+      && (linux_get_hwcap (current_inferior ()->top_target ())
+         & PPC_FEATURE_BOOKE))
     return start <= addr && start + length >= addr;
-  else if (linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE)
+  else if (linux_get_hwcap (current_inferior ()->top_target ())
+          & PPC_FEATURE_BOOKE)
     mask = 3;
   else
     mask = 7;
index 91d2039e3f9a46d64afd12d1e971efc5324185ef..eb703cf43b70d1b621dedb21ea21149199259648 100644 (file)
@@ -3643,7 +3643,8 @@ procfs_target::make_corefile_notes (bfd *obfd, int *note_size)
                             &thread_args);
 
   gdb::optional<gdb::byte_vector> auxv =
-    target_read_alloc (current_top_target (), TARGET_OBJECT_AUXV, NULL);
+    target_read_alloc (current_inferior ()->top_target (),
+                      TARGET_OBJECT_AUXV, NULL);
   if (auxv && !auxv->empty ())
     note_data.reset (elfcore_write_note (obfd, note_data.release (), note_size,
                                         "CORE", NT_AUXV, auxv->data (),
index a419a21f30a06454e706b883cd0ebbeef6bfb372..bf3c6f43e6af89fc65d020232015f62b887179c3 100644 (file)
@@ -1916,7 +1916,7 @@ cooked_write_test (struct gdbarch *gdbarch)
 {
   /* Error out if debugging something, because we're going to push the
      test target, which would pop any existing target.  */
-  if (current_top_target ()->stratum () >= process_stratum)
+  if (current_inferior ()->top_target ()->stratum () >= process_stratum)
     error (_("target already pushed"));
 
   /* Create a mock environment.  A process_stratum target pushed.  */
index 6ccfa3365b0d624b78998d010143f83c01b3c0ac..ff1366ebc40fcd5312385fd060500ccc1cbee066 100644 (file)
@@ -5079,9 +5079,8 @@ remote_target::remote_check_symbols ()
 
          /* If this is a function address, return the start of code
             instead of any data function descriptor.  */
-         sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
-                                                        sym_addr,
-                                                        current_top_target ());
+         sym_addr = gdbarch_convert_from_func_ptr_addr
+           (target_gdbarch (), sym_addr, current_inferior ()->top_target ());
 
          xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s",
                     phex_nz (sym_addr, addr_size), &reply[8]);
@@ -11463,7 +11462,8 @@ remote_target::memory_map ()
 {
   std::vector<mem_region> result;
   gdb::optional<gdb::char_vector> text
-    = target_read_stralloc (current_top_target (), TARGET_OBJECT_MEMORY_MAP, NULL);
+    = target_read_stralloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_MEMORY_MAP, NULL);
 
   if (text)
     result = parse_memory_map (text->data ());
@@ -13694,7 +13694,8 @@ traceframe_info_up
 remote_target::traceframe_info ()
 {
   gdb::optional<gdb::char_vector> text
-    = target_read_stralloc (current_top_target (), TARGET_OBJECT_TRACEFRAME_INFO,
+    = target_read_stralloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_TRACEFRAME_INFO,
                            NULL);
   if (text)
     return parse_traceframe_info (text->data ());
@@ -13923,7 +13924,8 @@ static void
 btrace_read_config (struct btrace_config *conf)
 {
   gdb::optional<gdb::char_vector> xml
-    = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE_CONF, "");
+    = target_read_stralloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_BTRACE_CONF, "");
   if (xml)
     parse_xml_btrace_conf (conf, xml->data ());
 }
@@ -14124,7 +14126,8 @@ remote_target::read_btrace (struct btrace_data *btrace,
     }
 
   gdb::optional<gdb::char_vector> xml
-    = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE, annex);
+    = target_read_stralloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_BTRACE, annex);
   if (!xml)
     return BTRACE_ERR_UNKNOWN;
 
@@ -14180,7 +14183,7 @@ remote_target::pid_to_exec_file (int pid)
       xsnprintf (annex, annex_size, "%x", pid);
     }
 
-  filename = target_read_stralloc (current_top_target (),
+  filename = target_read_stralloc (current_inferior ()->top_target (),
                                   TARGET_OBJECT_EXEC_FILE, annex);
 
   return filename ? filename->data () : nullptr;
index b09f63137dc9ca9f8611cb190f81c450aa6ed978..cb06cd952a708224b2148d2fcdff95e2588f52f4 100644 (file)
@@ -5077,7 +5077,8 @@ ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
       return 0;
 
     case 1014:         /* Data Cache Block set to Zero */
-      if (target_auxv_search (current_top_target (), AT_DCACHEBSIZE, &at_dcsz) <= 0
+      if (target_auxv_search (current_inferior ()->top_target (),
+                             AT_DCACHEBSIZE, &at_dcsz) <= 0
          || at_dcsz == 0)
        at_dcsz = 128; /* Assume 128-byte cache line size (POWER8)  */
 
index d493843410a83e1a37070609f6cc7fd52d4d40ea..41b50ce4800346bdbc301d1114ab1f4976f413c2 100644 (file)
@@ -1002,7 +1002,7 @@ s390_linux_nat_target::read_description ()
      that mode, report s390 architecture with 64-bit GPRs.  */
 #ifdef __s390x__
   {
-    CORE_ADDR hwcap = linux_get_hwcap (current_top_target ());
+    CORE_ADDR hwcap = linux_get_hwcap (current_inferior ()->top_target ());
 
     have_regset_tdb = (hwcap & HWCAP_S390_TE)
       && check_regset (tid, NT_S390_TDB, s390_sizeof_tdbregset);
index 39c8ee0450ac0088012f3c5078aae4e55c3478a7..1bd770a3cc3d6bff4f5d5171d86ac3c34db441e3 100644 (file)
@@ -39,6 +39,7 @@
 #include "target-descriptions.h"
 #include "trad-frame.h"
 #include "value.h"
+#include "inferior.h"
 
 #include "features/s390-linux32.c"
 #include "features/s390x-linux64.c"
@@ -685,7 +686,7 @@ s390_load (struct s390_prologue_data *data,
   if (pv_is_constant (addr))
     {
       const struct target_section *secp
-       = target_section_by_addr (current_top_target (), addr.k);
+       = target_section_by_addr (current_inferior ()->top_target (), addr.k);
       if (secp != NULL
          && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
        return pv_constant (read_memory_integer (addr.k, size,
index a0dbdde4d49bc8b4030c6cff86f973fdd78052af..faccf299899b6623d7f7b75e7bf12ff3d3de7392 100644 (file)
@@ -246,7 +246,8 @@ solib_aix_get_library_list (struct inferior *inf, const char *warning_msg)
     return data->library_list;
 
   gdb::optional<gdb::char_vector> library_document
-    = target_read_stralloc (current_top_target (), TARGET_OBJECT_LIBRARIES_AIX,
+    = target_read_stralloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_LIBRARIES_AIX,
                            NULL);
   if (!library_document && warning_msg != NULL)
     {
index 628ef02a653794a85083fd8f005c683750071cb0..152afc21b9df93e389a1e2ed266203d86ac2406e 100644 (file)
@@ -488,7 +488,8 @@ darwin_solib_read_all_image_info_addr (struct darwin_info *info)
   if (TYPE_LENGTH (ptr_type) > sizeof (buf))
     return;
 
-  len = target_read (current_top_target (), TARGET_OBJECT_DARWIN_DYLD_INFO,
+  len = target_read (current_inferior ()->top_target (),
+                    TARGET_OBJECT_DARWIN_DYLD_INFO,
                     NULL, buf, 0, TYPE_LENGTH (ptr_type));
   if (len <= 0)
     return;
index 4b1b7560e16a7cfb85a1cedf3c4306df32321351..c279435c89a1e5a43b1d7cd0f418e51f0bd66dfe 100644 (file)
@@ -280,7 +280,8 @@ dsbt_get_initial_loadmaps (void)
 {
   struct dsbt_info *info = get_dsbt_info ();
   gdb::optional<gdb::byte_vector> buf
-    = target_read_alloc (current_top_target (), TARGET_OBJECT_FDPIC, "exec");
+    = target_read_alloc (current_inferior ()->top_target (),
+                        TARGET_OBJECT_FDPIC, "exec");
 
   if (!buf || buf->empty ())
     {
@@ -291,7 +292,8 @@ dsbt_get_initial_loadmaps (void)
   if (solib_dsbt_debug)
     dsbt_print_loadmap (info->exec_loadmap);
 
-  buf = target_read_alloc (current_top_target (), TARGET_OBJECT_FDPIC, "exec");
+  buf = target_read_alloc (current_inferior ()->top_target (),
+                          TARGET_OBJECT_FDPIC, "exec");
   if (!buf || buf->empty ())
     {
       info->interp_loadmap = NULL;
index c7b3157191f2e625c65deef6f8b19d8657a0d7f2..531469484e546ed33a037abc3d9d0fafa3de559e 100644 (file)
@@ -428,11 +428,14 @@ read_program_header (int type, int *p_arch_size, CORE_ADDR *base_addr)
   int pt_phdr_p = 0;
 
   /* Get required auxv elements from target.  */
-  if (target_auxv_search (current_top_target (), AT_PHDR, &at_phdr) <= 0)
+  if (target_auxv_search (current_inferior ()->top_target (),
+                         AT_PHDR, &at_phdr) <= 0)
     return {};
-  if (target_auxv_search (current_top_target (), AT_PHENT, &at_phent) <= 0)
+  if (target_auxv_search (current_inferior ()->top_target (),
+                         AT_PHENT, &at_phent) <= 0)
     return {};
-  if (target_auxv_search (current_top_target (), AT_PHNUM, &at_phnum) <= 0)
+  if (target_auxv_search (current_inferior ()->top_target (),
+                         AT_PHNUM, &at_phnum) <= 0)
     return {};
   if (!at_phdr || !at_phnum)
     return {};
@@ -1239,7 +1242,8 @@ svr4_current_sos_via_xfer_libraries (struct svr4_library_list *list,
 
   /* Fetch the list of shared libraries.  */
   gdb::optional<gdb::char_vector> svr4_library_document
-    = target_read_stralloc (current_top_target (), TARGET_OBJECT_LIBRARIES_SVR4,
+    = target_read_stralloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_LIBRARIES_SVR4,
                            annex);
   if (!svr4_library_document)
     return 0;
@@ -2242,9 +2246,8 @@ enable_break (struct svr4_info *info, int from_tty)
 
       sym_addr = gdbarch_addr_bits_remove
        (target_gdbarch (),
-        gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
-                                            sym_addr,
-                                            current_top_target ()));
+        gdbarch_convert_from_func_ptr_addr
+          (target_gdbarch (), sym_addr, current_inferior ()->top_target ()));
 
       /* On at least some versions of Solaris there's a dynamic relocation
         on _r_debug.r_brk and SYM_ADDR may not be relocated yet, e.g., if
@@ -2353,7 +2356,8 @@ enable_break (struct svr4_info *info, int from_tty)
       /* If we were not able to find the base address of the loader
         from our so_list, then try using the AT_BASE auxilliary entry.  */
       if (!load_addr_found)
-       if (target_auxv_search (current_top_target (), AT_BASE, &load_addr) > 0)
+       if (target_auxv_search (current_inferior ()->top_target (),
+                               AT_BASE, &load_addr) > 0)
          {
            int addr_bit = gdbarch_addr_bit (target_gdbarch ());
 
@@ -2474,9 +2478,8 @@ enable_break (struct svr4_info *info, int from_tty)
          && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
        {
          sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
-         sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
-                                                        sym_addr,
-                                                        current_top_target ());
+         sym_addr = gdbarch_convert_from_func_ptr_addr
+           (target_gdbarch (), sym_addr, current_inferior ()->top_target ());
          svr4_create_solib_event_breakpoints (info, target_gdbarch (),
                                               sym_addr);
          return 1;
@@ -2492,9 +2495,9 @@ enable_break (struct svr4_info *info, int from_tty)
              && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
            {
              sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
-             sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
-                                                            sym_addr,
-                                                            current_top_target ());
+             sym_addr = gdbarch_convert_from_func_ptr_addr
+               (target_gdbarch (), sym_addr,
+                current_inferior ()->top_target ());
              svr4_create_solib_event_breakpoints (info, target_gdbarch (),
                                                   sym_addr);
              return 1;
@@ -2582,7 +2585,8 @@ svr4_exec_displacement (CORE_ADDR *displacementp)
   if ((bfd_get_file_flags (current_program_space->exec_bfd ()) & DYNAMIC) == 0)
     return 0;
 
-  if (target_auxv_search (current_top_target (), AT_ENTRY, &entry_point) <= 0)
+  if (target_auxv_search (current_inferior ()->top_target (),
+                         AT_ENTRY, &entry_point) <= 0)
     return 0;
 
   exec_displacement
index d8e33c3b02794776463c5f4078e2e8d3a2321ad6..1e010c52221a65768956725e566ed19e3bf48680 100644 (file)
@@ -25,6 +25,7 @@
 #include "target.h"
 #include "solib-target.h"
 #include <vector>
+#include "inferior.h"
 
 /* Private data for each loaded library.  */
 struct lm_info_target : public lm_info_base
@@ -233,8 +234,8 @@ solib_target_current_sos (void)
 
   /* Fetch the list of shared libraries.  */
   gdb::optional<gdb::char_vector> library_document
-    = target_read_stralloc (current_top_target (), TARGET_OBJECT_LIBRARIES,
-                           NULL);
+    = target_read_stralloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_LIBRARIES, NULL);
   if (!library_document)
     return NULL;
 
index 34f22879737a91e68058928d7eb7a173b9a49a16..a6df0fcb58b47132619ea59e1bd53198c1ba184a 100644 (file)
@@ -189,7 +189,7 @@ ULONGEST
 sparc_fetch_wcookie (struct gdbarch *gdbarch)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  struct target_ops *ops = current_top_target ();
+  struct target_ops *ops = current_inferior ()->top_target ();
   gdb_byte buf[8];
   int len;
 
index c4d5ab21b2ffab1f5cea92bcee4fa920155e0013..3609794419ab549797f08d12581ff05e73ba7e35 100644 (file)
@@ -214,10 +214,12 @@ adi_available (void)
     return proc->stat.is_avail;
 
   proc->stat.checked_avail = true;
-  if (target_auxv_search (current_top_target (), AT_ADI_BLKSZ, &value) <= 0)
+  if (target_auxv_search (current_inferior ()->top_target (),
+                         AT_ADI_BLKSZ, &value) <= 0)
     return false;
   proc->stat.blksize = value;
-  target_auxv_search (current_top_target (), AT_ADI_NBITS, &value);
+  target_auxv_search (current_inferior ()->top_target (),
+                     AT_ADI_NBITS, &value);
   proc->stat.nbits = value;
   proc->stat.max_version = (1 << proc->stat.nbits) - 2;
   proc->stat.is_avail = true;
index adcdc169306bf5f589a7f7e8559331f4e33d8db1..e417878031db8b7bb8cc52463475ed83b0632408 100644 (file)
@@ -838,10 +838,8 @@ init_entry_point_info (struct objfile *objfile)
 
       /* Make certain that the address points at real code, and not a
         function descriptor.  */
-      entry_point
-       = gdbarch_convert_from_func_ptr_addr (objfile->arch (),
-                                             entry_point,
-                                             current_top_target ());
+      entry_point = gdbarch_convert_from_func_ptr_addr
+       (objfile->arch (), entry_point, current_inferior ()->top_target ());
 
       /* Remove any ISA markers, so that this matches entries in the
         symbol table.  */
index 084e8ecc2e86442c3b72cb8e8e158b615562f0a5..122fdf0b1d3ea908c47069fc60b20dcbf2508a8c 100644 (file)
@@ -5564,10 +5564,8 @@ find_gnu_ifunc (const symbol *sym)
          if (MSYMBOL_TYPE (minsym) == mst_data_gnu_ifunc)
            {
              struct gdbarch *gdbarch = objfile->arch ();
-             msym_addr
-               = gdbarch_convert_from_func_ptr_addr (gdbarch,
-                                                     msym_addr,
-                                                     current_top_target ());
+             msym_addr = gdbarch_convert_from_func_ptr_addr
+               (gdbarch, msym_addr, current_inferior ()->top_target ());
            }
          if (msym_addr == address)
            {
index 248edd51bd13e160bab682612d78d043125874ab..c0e798a3530a33f03dc94af6f751ec2bc035921d 100644 (file)
@@ -553,11 +553,13 @@ target_find_description (void)
   /* Next try to read the description from the current target using
      target objects.  */
   if (current_target_desc == NULL)
-    current_target_desc = target_read_description_xml (current_top_target ());
+    current_target_desc = target_read_description_xml
+      (current_inferior ()->top_target ());
 
   /* If that failed try a target-specific hook.  */
   if (current_target_desc == NULL)
-    current_target_desc = target_read_description (current_top_target ());
+    current_target_desc = target_read_description
+      (current_inferior ()->top_target ());
 
   /* If a non-NULL description was returned, then update the current
      architecture.  */
index 060f9cc6642fc36c377dd7265a583cb7b03a6af9..877f6c3e94636fa885cebeaaa5301397be89fe95 100644 (file)
@@ -21,6 +21,7 @@
 #include "defs.h"
 #include "target.h"
 #include "memory-map.h"
+#include "inferior.h"
 
 #include "gdbsupport/gdb_sys_time.h"
 #include <algorithm>
@@ -335,7 +336,7 @@ target_write_memory_blocks (const std::vector<memory_write_request> &requests,
     {
       LONGEST len;
 
-      len = target_write_with_progress (current_top_target (),
+      len = target_write_with_progress (current_inferior ()->top_target (),
                                        TARGET_OBJECT_MEMORY, NULL,
                                        iter.data, iter.begin,
                                        iter.end - iter.begin,
@@ -358,7 +359,7 @@ target_write_memory_blocks (const std::vector<memory_write_request> &requests,
        {
          LONGEST len;
 
-         len = target_write_with_progress (current_top_target (),
+         len = target_write_with_progress (current_inferior ()->top_target (),
                                            TARGET_OBJECT_FLASH, NULL,
                                            iter.data, iter.begin,
                                            iter.end - iter.begin,
index 9c4af5beaf0e8f8c750c8201a8224e40bf7edd22..3653a7a98f805091fc7fedbc087b60a4ca88bc9e 100644 (file)
@@ -110,16 +110,6 @@ static std::unordered_map<const target_info *, target_open_ftype *>
 
 static struct target_ops *the_debug_target;
 
-/* Top of target stack.  */
-/* The target structure we are currently using to talk to a process
-   or file or whatever "inferior" we have.  */
-
-target_ops *
-current_top_target ()
-{
-  return current_inferior ()->top_target ();
-}
-
 /* Command list for target.  */
 
 static struct cmd_list_element *targetlist = NULL;
@@ -173,7 +163,9 @@ show_targetdebug (struct ui_file *file, int from_tty,
 int
 target_has_memory ()
 {
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     if (t->has_memory ())
       return 1;
 
@@ -183,7 +175,9 @@ target_has_memory ()
 int
 target_has_stack ()
 {
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     if (t->has_stack ())
       return 1;
 
@@ -193,7 +187,9 @@ target_has_stack ()
 int
 target_has_registers ()
 {
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     if (t->has_registers ())
       return 1;
 
@@ -218,7 +214,7 @@ target_has_execution (inferior *inf)
 const char *
 target_shortname ()
 {
-  return current_top_target ()->shortname ();
+  return current_inferior ()->top_target ()->shortname ();
 }
 
 /* See target.h.  */
@@ -226,7 +222,7 @@ target_shortname ()
 bool
 target_attach_no_wait ()
 {
-  return current_top_target ()->attach_no_wait ();
+  return current_inferior ()->top_target ()->attach_no_wait ();
 }
 
 /* See target.h.  */
@@ -234,7 +230,7 @@ target_attach_no_wait ()
 void
 target_post_attach (int pid)
 {
-  return current_top_target ()->post_attach (pid);
+  return current_inferior ()->top_target ()->post_attach (pid);
 }
 
 /* See target.h.  */
@@ -242,7 +238,7 @@ target_post_attach (int pid)
 void
 target_prepare_to_store (regcache *regcache)
 {
-  return current_top_target ()->prepare_to_store (regcache);
+  return current_inferior ()->top_target ()->prepare_to_store (regcache);
 }
 
 /* See target.h.  */
@@ -250,13 +246,15 @@ target_prepare_to_store (regcache *regcache)
 bool
 target_supports_enable_disable_tracepoint ()
 {
-  return current_top_target ()->supports_enable_disable_tracepoint ();
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->supports_enable_disable_tracepoint ();
 }
 
 bool
 target_supports_string_tracing ()
 {
-  return current_top_target ()->supports_string_tracing ();
+  return current_inferior ()->top_target ()->supports_string_tracing ();
 }
 
 /* See target.h.  */
@@ -264,7 +262,9 @@ target_supports_string_tracing ()
 bool
 target_supports_evaluation_of_breakpoint_conditions ()
 {
-  return current_top_target ()->supports_evaluation_of_breakpoint_conditions ();
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->supports_evaluation_of_breakpoint_conditions ();
 }
 
 /* See target.h.  */
@@ -272,7 +272,7 @@ target_supports_evaluation_of_breakpoint_conditions ()
 bool
 target_supports_dumpcore ()
 {
-  return current_top_target ()->supports_dumpcore ();
+  return current_inferior ()->top_target ()->supports_dumpcore ();
 }
 
 /* See target.h.  */
@@ -280,7 +280,7 @@ target_supports_dumpcore ()
 void
 target_dumpcore (const char *filename)
 {
-  return current_top_target ()->dumpcore (filename);
+  return current_inferior ()->top_target ()->dumpcore (filename);
 }
 
 /* See target.h.  */
@@ -288,7 +288,7 @@ target_dumpcore (const char *filename)
 bool
 target_can_run_breakpoint_commands ()
 {
-  return current_top_target ()->can_run_breakpoint_commands ();
+  return current_inferior ()->top_target ()->can_run_breakpoint_commands ();
 }
 
 /* See target.h.  */
@@ -296,7 +296,7 @@ target_can_run_breakpoint_commands ()
 void
 target_files_info ()
 {
-  return current_top_target ()->files_info ();
+  return current_inferior ()->top_target ()->files_info ();
 }
 
 /* See target.h.  */
@@ -304,7 +304,7 @@ target_files_info ()
 void
 target_post_startup_inferior (ptid_t ptid)
 {
-  return current_top_target ()->post_startup_inferior (ptid);
+  return current_inferior ()->top_target ()->post_startup_inferior (ptid);
 }
 
 /* See target.h.  */
@@ -312,7 +312,7 @@ target_post_startup_inferior (ptid_t ptid)
 int
 target_insert_fork_catchpoint (int pid)
 {
-  return current_top_target ()->insert_fork_catchpoint (pid);
+  return current_inferior ()->top_target ()->insert_fork_catchpoint (pid);
 }
 
 /* See target.h.  */
@@ -320,7 +320,7 @@ target_insert_fork_catchpoint (int pid)
 int
 target_remove_fork_catchpoint (int pid)
 {
-  return current_top_target ()->remove_fork_catchpoint (pid);
+  return current_inferior ()->top_target ()->remove_fork_catchpoint (pid);
 }
 
 /* See target.h.  */
@@ -328,7 +328,7 @@ target_remove_fork_catchpoint (int pid)
 int
 target_insert_vfork_catchpoint (int pid)
 {
-  return current_top_target ()->insert_vfork_catchpoint (pid);
+  return current_inferior ()->top_target ()->insert_vfork_catchpoint (pid);
 }
 
 /* See target.h.  */
@@ -336,7 +336,7 @@ target_insert_vfork_catchpoint (int pid)
 int
 target_remove_vfork_catchpoint (int pid)
 {
-  return current_top_target ()->remove_vfork_catchpoint (pid);
+  return current_inferior ()->top_target ()->remove_vfork_catchpoint (pid);
 }
 
 /* See target.h.  */
@@ -344,7 +344,7 @@ target_remove_vfork_catchpoint (int pid)
 int
 target_insert_exec_catchpoint (int pid)
 {
-  return current_top_target ()->insert_exec_catchpoint (pid);
+  return current_inferior ()->top_target ()->insert_exec_catchpoint (pid);
 }
 
 /* See target.h.  */
@@ -352,7 +352,7 @@ target_insert_exec_catchpoint (int pid)
 int
 target_remove_exec_catchpoint (int pid)
 {
-  return current_top_target ()->remove_exec_catchpoint (pid);
+  return current_inferior ()->top_target ()->remove_exec_catchpoint (pid);
 }
 
 /* See target.h.  */
@@ -361,8 +361,10 @@ int
 target_set_syscall_catchpoint (int pid, bool needed, int any_count,
                               gdb::array_view<const int> syscall_counts)
 {
-  return current_top_target ()->set_syscall_catchpoint (pid, needed, any_count,
-                                                       syscall_counts);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->set_syscall_catchpoint (pid, needed, any_count,
+                                        syscall_counts);
 }
 
 /* See target.h.  */
@@ -370,7 +372,7 @@ target_set_syscall_catchpoint (int pid, bool needed, int any_count,
 void
 target_rcmd (const char *command, struct ui_file *outbuf)
 {
-  return current_top_target ()->rcmd (command, outbuf);
+  return current_inferior ()->top_target ()->rcmd (command, outbuf);
 }
 
 /* See target.h.  */
@@ -378,8 +380,9 @@ target_rcmd (const char *command, struct ui_file *outbuf)
 bool
 target_can_lock_scheduler ()
 {
-  return (current_top_target ()->get_thread_control_capabilities ()
-         & tc_schedlock) != 0;
+  target_ops *target = current_inferior ()->top_target ();
+
+  return (target->get_thread_control_capabilities ()& tc_schedlock) != 0;
 }
 
 /* See target.h.  */
@@ -387,7 +390,7 @@ target_can_lock_scheduler ()
 bool
 target_can_async_p ()
 {
-  return current_top_target ()->can_async_p ();
+  return current_inferior ()->top_target ()->can_async_p ();
 }
 
 /* See target.h.  */
@@ -395,13 +398,13 @@ target_can_async_p ()
 bool
 target_is_async_p ()
 {
-  return current_top_target ()->is_async_p ();
+  return current_inferior ()->top_target ()->is_async_p ();
 }
 
 exec_direction_kind
 target_execution_direction ()
 {
-  return current_top_target ()->execution_direction ();
+  return current_inferior ()->top_target ()->execution_direction ();
 }
 
 /* See target.h.  */
@@ -409,7 +412,7 @@ target_execution_direction ()
 const char *
 target_extra_thread_info (thread_info *tp)
 {
-  return current_top_target ()->extra_thread_info (tp);
+  return current_inferior ()->top_target ()->extra_thread_info (tp);
 }
 
 /* See target.h.  */
@@ -417,7 +420,7 @@ target_extra_thread_info (thread_info *tp)
 char *
 target_pid_to_exec_file (int pid)
 {
-  return current_top_target ()->pid_to_exec_file (pid);
+  return current_inferior ()->top_target ()->pid_to_exec_file (pid);
 }
 
 /* See target.h.  */
@@ -425,7 +428,7 @@ target_pid_to_exec_file (int pid)
 gdbarch *
 target_thread_architecture (ptid_t ptid)
 {
-  return current_top_target ()->thread_architecture (ptid);
+  return current_inferior ()->top_target ()->thread_architecture (ptid);
 }
 
 /* See target.h.  */
@@ -433,7 +436,7 @@ target_thread_architecture (ptid_t ptid)
 int
 target_find_memory_regions (find_memory_region_ftype func, void *data)
 {
-  return current_top_target ()->find_memory_regions (func, data);
+  return current_inferior ()->top_target ()->find_memory_regions (func, data);
 }
 
 /* See target.h.  */
@@ -441,19 +444,19 @@ target_find_memory_regions (find_memory_region_ftype func, void *data)
 gdb::unique_xmalloc_ptr<char>
 target_make_corefile_notes (bfd *bfd, int *size_p)
 {
-  return current_top_target ()->make_corefile_notes (bfd, size_p);
+  return current_inferior ()->top_target ()->make_corefile_notes (bfd, size_p);
 }
 
 gdb_byte *
 target_get_bookmark (const char *args, int from_tty)
 {
-  return current_top_target ()->get_bookmark (args, from_tty);
+  return current_inferior ()->top_target ()->get_bookmark (args, from_tty);
 }
 
 void
 target_goto_bookmark (const gdb_byte *arg, int from_tty)
 {
-  return current_top_target ()->goto_bookmark (arg, from_tty);
+  return current_inferior ()->top_target ()->goto_bookmark (arg, from_tty);
 }
 
 /* See target.h.  */
@@ -461,7 +464,7 @@ target_goto_bookmark (const gdb_byte *arg, int from_tty)
 bool
 target_stopped_by_watchpoint ()
 {
-  return current_top_target ()->stopped_by_watchpoint ();
+  return current_inferior ()->top_target ()->stopped_by_watchpoint ();
 }
 
 /* See target.h.  */
@@ -469,25 +472,29 @@ target_stopped_by_watchpoint ()
 bool
 target_stopped_by_sw_breakpoint ()
 {
-  return current_top_target ()->stopped_by_sw_breakpoint ();
+  return current_inferior ()->top_target ()->stopped_by_sw_breakpoint ();
 }
 
 bool
 target_supports_stopped_by_sw_breakpoint ()
 {
-  return current_top_target ()->supports_stopped_by_sw_breakpoint ();
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->supports_stopped_by_sw_breakpoint ();
 }
 
 bool
 target_stopped_by_hw_breakpoint ()
 {
-  return current_top_target ()->stopped_by_hw_breakpoint ();
+  return current_inferior ()->top_target ()->stopped_by_hw_breakpoint ();
 }
 
 bool
 target_supports_stopped_by_hw_breakpoint ()
 {
-  return current_top_target ()->supports_stopped_by_hw_breakpoint ();
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->supports_stopped_by_hw_breakpoint ();
 }
 
 /* See target.h.  */
@@ -495,7 +502,7 @@ target_supports_stopped_by_hw_breakpoint ()
 bool
 target_have_steppable_watchpoint ()
 {
-  return current_top_target ()->have_steppable_watchpoint ();
+  return current_inferior ()->top_target ()->have_steppable_watchpoint ();
 }
 
 /* See target.h.  */
@@ -503,7 +510,9 @@ target_have_steppable_watchpoint ()
 int
 target_can_use_hardware_watchpoint (bptype type, int cnt, int othertype)
 {
-  return current_top_target ()->can_use_hw_breakpoint (type, cnt, othertype);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->can_use_hw_breakpoint (type, cnt, othertype);
 }
 
 /* See target.h.  */
@@ -511,14 +520,16 @@ target_can_use_hardware_watchpoint (bptype type, int cnt, int othertype)
 int
 target_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
 {
-  return current_top_target ()->region_ok_for_hw_watchpoint (addr, len);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->region_ok_for_hw_watchpoint (addr, len);
 }
 
 
 int
 target_can_do_single_step ()
 {
-  return current_top_target ()->can_do_single_step ();
+  return current_inferior ()->top_target ()->can_do_single_step ();
 }
 
 /* See target.h.  */
@@ -527,7 +538,9 @@ int
 target_insert_watchpoint (CORE_ADDR addr, int len, target_hw_bp_type type,
                          expression *cond)
 {
-  return current_top_target ()->insert_watchpoint (addr, len, type, cond);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->insert_watchpoint (addr, len, type, cond);
 }
 
 /* See target.h.  */
@@ -536,7 +549,9 @@ int
 target_remove_watchpoint (CORE_ADDR addr, int len, target_hw_bp_type type,
                          expression *cond)
 {
-  return current_top_target ()->remove_watchpoint (addr, len, type, cond);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->remove_watchpoint (addr, len, type, cond);
 }
 
 /* See target.h.  */
@@ -544,7 +559,9 @@ target_remove_watchpoint (CORE_ADDR addr, int len, target_hw_bp_type type,
 int
 target_insert_hw_breakpoint (gdbarch *gdbarch, bp_target_info *bp_tgt)
 {
-  return current_top_target ()->insert_hw_breakpoint (gdbarch, bp_tgt);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->insert_hw_breakpoint (gdbarch, bp_tgt);
 }
 
 /* See target.h.  */
@@ -552,7 +569,9 @@ target_insert_hw_breakpoint (gdbarch *gdbarch, bp_target_info *bp_tgt)
 int
 target_remove_hw_breakpoint (gdbarch *gdbarch, bp_target_info *bp_tgt)
 {
-  return current_top_target ()->remove_hw_breakpoint (gdbarch, bp_tgt);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->remove_hw_breakpoint (gdbarch, bp_tgt);
 }
 
 /* See target.h.  */
@@ -561,7 +580,9 @@ bool
 target_can_accel_watchpoint_condition (CORE_ADDR addr, int len, int type,
                                       expression *cond)
 {
-  return current_top_target ()->can_accel_watchpoint_condition (addr, len, type, cond);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->can_accel_watchpoint_condition (addr, len, type, cond);
 }
 
 /* See target.h.  */
@@ -569,228 +590,246 @@ target_can_accel_watchpoint_condition (CORE_ADDR addr, int len, int type,
 bool
 target_can_execute_reverse ()
 {
-  return current_top_target ()->can_execute_reverse ();
+  return current_inferior ()->top_target ()->can_execute_reverse ();
 }
 
 ptid_t
 target_get_ada_task_ptid (long lwp, long tid)
 {
-  return current_top_target ()->get_ada_task_ptid (lwp, tid);
+  return current_inferior ()->top_target ()->get_ada_task_ptid (lwp, tid);
 }
 
 bool
 target_filesystem_is_local ()
 {
-  return current_top_target ()->filesystem_is_local ();
+  return current_inferior ()->top_target ()->filesystem_is_local ();
 }
 
 void
 target_trace_init ()
 {
-  return current_top_target ()->trace_init ();
+  return current_inferior ()->top_target ()->trace_init ();
 }
 
 void
 target_download_tracepoint (bp_location *location)
 {
-  return current_top_target ()->download_tracepoint (location);
+  return current_inferior ()->top_target ()->download_tracepoint (location);
 }
 
 bool
 target_can_download_tracepoint ()
 {
-  return current_top_target ()->can_download_tracepoint ();
+  return current_inferior ()->top_target ()->can_download_tracepoint ();
 }
 
 void
 target_download_trace_state_variable (const trace_state_variable &tsv)
 {
-  return current_top_target ()->download_trace_state_variable (tsv);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->download_trace_state_variable (tsv);
 }
 
 void
 target_enable_tracepoint (bp_location *loc)
 {
-  return current_top_target ()->enable_tracepoint (loc);
+  return current_inferior ()->top_target ()->enable_tracepoint (loc);
 }
 
 void
 target_disable_tracepoint (bp_location *loc)
 {
-  return current_top_target ()->disable_tracepoint (loc);
+  return current_inferior ()->top_target ()->disable_tracepoint (loc);
 }
 
 void
 target_trace_start ()
 {
-  return current_top_target ()->trace_start ();
+  return current_inferior ()->top_target ()->trace_start ();
 }
 
 void
 target_trace_set_readonly_regions ()
 {
-  current_top_target ()->trace_set_readonly_regions ();
+  return current_inferior ()->top_target ()->trace_set_readonly_regions ();
 }
 
 int
 target_get_trace_status (trace_status *ts)
 {
-  return current_top_target ()->get_trace_status (ts);
+  return current_inferior ()->top_target ()->get_trace_status (ts);
 }
 
 void
 target_get_tracepoint_status (breakpoint *tp, uploaded_tp *utp)
 {
-  return current_top_target ()->get_tracepoint_status (tp, utp);
+  return current_inferior ()->top_target ()->get_tracepoint_status (tp, utp);
 }
 
 void
 target_trace_stop ()
 {
-  return current_top_target ()->trace_stop ();
+  return current_inferior ()->top_target ()->trace_stop ();
 }
 
 int
 target_trace_find (trace_find_type type, int num,
                   CORE_ADDR addr1, CORE_ADDR addr2, int *tpp)
 {
-  return current_top_target ()->trace_find (type, num, addr1, addr2, tpp);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->trace_find (type, num, addr1, addr2, tpp);
 }
 
 bool
 target_get_trace_state_variable_value (int tsv, LONGEST *val)
 {
-  return current_top_target ()->get_trace_state_variable_value (tsv, val);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->get_trace_state_variable_value (tsv, val);
 }
 
 int
 target_save_trace_data (const char *filename)
 {
-  return current_top_target ()->save_trace_data (filename);
+  return current_inferior ()->top_target ()->save_trace_data (filename);
 }
 
 int
 target_upload_tracepoints (uploaded_tp **utpp)
 {
-  return current_top_target ()->upload_tracepoints (utpp);
+  return current_inferior ()->top_target ()->upload_tracepoints (utpp);
 }
 
 int
 target_upload_trace_state_variables (uploaded_tsv **utsvp)
 {
-  return current_top_target ()->upload_trace_state_variables (utsvp);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->upload_trace_state_variables (utsvp);
 }
 
 LONGEST
 target_get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
 {
-  return current_top_target ()->get_raw_trace_data (buf, offset, len);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->get_raw_trace_data (buf, offset, len);
 }
 
 int
 target_get_min_fast_tracepoint_insn_len ()
 {
-  return current_top_target ()->get_min_fast_tracepoint_insn_len ();
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->get_min_fast_tracepoint_insn_len ();
 }
 
 void
 target_set_disconnected_tracing (int val)
 {
-  return current_top_target ()->set_disconnected_tracing (val);
+  return current_inferior ()->top_target ()->set_disconnected_tracing (val);
 }
 
 void
 target_set_circular_trace_buffer (int val)
 {
-  return current_top_target ()->set_circular_trace_buffer (val);
+  return current_inferior ()->top_target ()->set_circular_trace_buffer (val);
 }
 
 void
 target_set_trace_buffer_size (LONGEST val)
 {
-  return current_top_target ()->set_trace_buffer_size (val);
+  return current_inferior ()->top_target ()->set_trace_buffer_size (val);
 }
 
 bool
 target_set_trace_notes (const char *user, const char *notes,
                        const char *stopnotes)
 {
-  return current_top_target ()->set_trace_notes (user, notes, stopnotes);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->set_trace_notes (user, notes, stopnotes);
 }
 
 bool
 target_get_tib_address (ptid_t ptid, CORE_ADDR *addr)
 {
-  return current_top_target ()->get_tib_address (ptid, addr);
+  return current_inferior ()->top_target ()->get_tib_address (ptid, addr);
 }
 
 void
 target_set_permissions ()
 {
-  return current_top_target ()->set_permissions ();
+  return current_inferior ()->top_target ()->set_permissions ();
 }
 
 bool
 target_static_tracepoint_marker_at (CORE_ADDR addr,
                                    static_tracepoint_marker *marker)
 {
-  return current_top_target ()->static_tracepoint_marker_at (addr, marker);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->static_tracepoint_marker_at (addr, marker);
 }
 
 std::vector<static_tracepoint_marker>
 target_static_tracepoint_markers_by_strid (const char *marker_id)
 {
-  return current_top_target ()->static_tracepoint_markers_by_strid (marker_id);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->static_tracepoint_markers_by_strid (marker_id);
 }
 
 traceframe_info_up
 target_traceframe_info ()
 {
-  return current_top_target ()->traceframe_info ();
+  return current_inferior ()->top_target ()->traceframe_info ();
 }
 
 bool
 target_use_agent (bool use)
 {
-  return current_top_target ()->use_agent (use);
+  return current_inferior ()->top_target ()->use_agent (use);
 }
 
 bool
 target_can_use_agent ()
 {
-  return current_top_target ()->can_use_agent ();
+  return current_inferior ()->top_target ()->can_use_agent ();
 }
 
 bool
 target_augmented_libraries_svr4_read ()
 {
-  return current_top_target ()->augmented_libraries_svr4_read ();
+  return current_inferior ()->top_target ()->augmented_libraries_svr4_read ();
 }
 
 bool
 target_supports_memory_tagging ()
 {
-  return current_top_target ()->supports_memory_tagging ();
+  return current_inferior ()->top_target ()->supports_memory_tagging ();
 }
 
 bool
 target_fetch_memtags (CORE_ADDR address, size_t len, gdb::byte_vector &tags,
                      int type)
 {
-  return current_top_target ()->fetch_memtags (address, len, tags, type);
+  return current_inferior ()->top_target ()->fetch_memtags (address, len, tags, type);
 }
 
 bool
 target_store_memtags (CORE_ADDR address, size_t len,
                      const gdb::byte_vector &tags, int type)
 {
-  return current_top_target ()->store_memtags (address, len, tags, type);
+  return current_inferior ()->top_target ()->store_memtags (address, len, tags, type);
 }
 
 void
 target_log_command (const char *p)
 {
-  return current_top_target ()->log_command (p);
+  return current_inferior ()->top_target ()->log_command (p);
 }
 
 /* This is used to implement the various target commands.  */
@@ -863,14 +902,14 @@ add_deprecated_target_alias (const target_info &tinfo, const char *alias)
 void
 target_kill (void)
 {
-  current_top_target ()->kill ();
+  current_inferior ()->top_target ()->kill ();
 }
 
 void
 target_load (const char *arg, int from_tty)
 {
   target_dcache_invalidate ();
-  current_top_target ()->load (arg, from_tty);
+  current_inferior ()->top_target ()->load (arg, from_tty);
 }
 
 /* Define it.  */
@@ -883,7 +922,7 @@ target_terminal_state target_terminal::m_terminal_state
 void
 target_terminal::init (void)
 {
-  current_top_target ()->terminal_init ();
+  current_inferior ()->top_target ()->terminal_init ();
 
   m_terminal_state = target_terminal_state::is_ours;
 }
@@ -914,7 +953,7 @@ target_terminal::inferior (void)
 
   if (inf->terminal_state != target_terminal_state::is_inferior)
     {
-      current_top_target ()->terminal_inferior ();
+      current_inferior ()->top_target ()->terminal_inferior ();
       inf->terminal_state = target_terminal_state::is_inferior;
     }
 
@@ -949,7 +988,7 @@ target_terminal::restore_inferior (void)
        if (inf->terminal_state == target_terminal_state::is_ours_for_output)
          {
            set_current_inferior (inf);
-           current_top_target ()->terminal_inferior ();
+           current_inferior ()->top_target ()->terminal_inferior ();
            inf->terminal_state = target_terminal_state::is_inferior;
          }
       }
@@ -981,7 +1020,7 @@ target_terminal_is_ours_kind (target_terminal_state desired_state)
       if (inf->terminal_state == target_terminal_state::is_inferior)
        {
          set_current_inferior (inf);
-         current_top_target ()->terminal_save_inferior ();
+         current_inferior ()->top_target ()->terminal_save_inferior ();
        }
     }
 
@@ -996,9 +1035,9 @@ target_terminal_is_ours_kind (target_terminal_state desired_state)
        {
          set_current_inferior (inf);
          if (desired_state == target_terminal_state::is_ours)
-           current_top_target ()->terminal_ours ();
+           current_inferior ()->top_target ()->terminal_ours ();
          else if (desired_state == target_terminal_state::is_ours_for_output)
-           current_top_target ()->terminal_ours_for_output ();
+           current_inferior ()->top_target ()->terminal_ours_for_output ();
          else
            gdb_assert_not_reached ("unhandled desired state");
          inf->terminal_state = desired_state;
@@ -1047,7 +1086,7 @@ target_terminal::ours_for_output ()
 void
 target_terminal::info (const char *arg, int from_tty)
 {
-  current_top_target ()->terminal_info (arg, from_tty);
+  current_inferior ()->top_target ()->terminal_info (arg, from_tty);
 }
 
 /* See target.h.  */
@@ -1071,7 +1110,7 @@ static void
 tcomplain (void)
 {
   error (_("You can't do that when your target is `%s'"),
-        current_top_target ()->shortname ());
+        current_inferior ()->top_target ()->shortname ());
 }
 
 void
@@ -1206,8 +1245,9 @@ unpush_target_and_assert (struct target_ops *target)
 void
 pop_all_targets_above (enum strata above_stratum)
 {
-  while ((int) (current_top_target ()->stratum ()) > (int) above_stratum)
-    unpush_target_and_assert (current_top_target ());
+  while ((int) (current_inferior ()->top_target ()->stratum ())
+        > (int) above_stratum)
+    unpush_target_and_assert (current_inferior ()->top_target ());
 }
 
 /* See target.h.  */
@@ -1215,8 +1255,9 @@ pop_all_targets_above (enum strata above_stratum)
 void
 pop_all_targets_at_and_above (enum strata stratum)
 {
-  while ((int) (current_top_target ()->stratum ()) >= (int) stratum)
-    unpush_target_and_assert (current_top_target ());
+  while ((int) (current_inferior ()->top_target ()->stratum ())
+        >= (int) stratum)
+    unpush_target_and_assert (current_inferior ()->top_target ());
 }
 
 void
@@ -1246,7 +1287,7 @@ CORE_ADDR
 target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset)
 {
   volatile CORE_ADDR addr = 0;
-  struct target_ops *target = current_top_target ();
+  struct target_ops *target = current_inferior ()->top_target ();
   struct gdbarch *gdbarch = target_gdbarch ();
 
   if (gdbarch_fetch_tls_load_module_address_p (gdbarch))
@@ -1765,7 +1806,8 @@ target_xfer_partial (struct target_ops *ops,
 int
 target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 {
-  if (target_read (current_top_target (), TARGET_OBJECT_MEMORY, NULL,
+  if (target_read (current_inferior ()->top_target (),
+                  TARGET_OBJECT_MEMORY, NULL,
                   myaddr, memaddr, len) == len)
     return 0;
   else
@@ -1795,7 +1837,8 @@ target_read_uint32 (CORE_ADDR memaddr, uint32_t *result)
 int
 target_read_raw_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 {
-  if (target_read (current_top_target (), TARGET_OBJECT_RAW_MEMORY, NULL,
+  if (target_read (current_inferior ()->top_target (),
+                  TARGET_OBJECT_RAW_MEMORY, NULL,
                   myaddr, memaddr, len) == len)
     return 0;
   else
@@ -1808,7 +1851,8 @@ target_read_raw_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 int
 target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 {
-  if (target_read (current_top_target (), TARGET_OBJECT_STACK_MEMORY, NULL,
+  if (target_read (current_inferior ()->top_target (),
+                  TARGET_OBJECT_STACK_MEMORY, NULL,
                   myaddr, memaddr, len) == len)
     return 0;
   else
@@ -1821,7 +1865,8 @@ target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 int
 target_read_code (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 {
-  if (target_read (current_top_target (), TARGET_OBJECT_CODE_MEMORY, NULL,
+  if (target_read (current_inferior ()->top_target (),
+                  TARGET_OBJECT_CODE_MEMORY, NULL,
                   myaddr, memaddr, len) == len)
     return 0;
   else
@@ -1837,7 +1882,8 @@ target_read_code (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 int
 target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
 {
-  if (target_write (current_top_target (), TARGET_OBJECT_MEMORY, NULL,
+  if (target_write (current_inferior ()->top_target (),
+                   TARGET_OBJECT_MEMORY, NULL,
                    myaddr, memaddr, len) == len)
     return 0;
   else
@@ -1853,7 +1899,8 @@ target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
 int
 target_write_raw_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
 {
-  if (target_write (current_top_target (), TARGET_OBJECT_RAW_MEMORY, NULL,
+  if (target_write (current_inferior ()->top_target (),
+                   TARGET_OBJECT_RAW_MEMORY, NULL,
                    myaddr, memaddr, len) == len)
     return 0;
   else
@@ -1865,7 +1912,8 @@ target_write_raw_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
 std::vector<mem_region>
 target_memory_map (void)
 {
-  std::vector<mem_region> result = current_top_target ()->memory_map ();
+  target_ops *target = current_inferior ()->top_target ();
+  std::vector<mem_region> result = target->memory_map ();
   if (result.empty ())
     return result;
 
@@ -1895,13 +1943,13 @@ target_memory_map (void)
 void
 target_flash_erase (ULONGEST address, LONGEST length)
 {
-  current_top_target ()->flash_erase (address, length);
+  current_inferior ()->top_target ()->flash_erase (address, length);
 }
 
 void
 target_flash_done (void)
 {
-  current_top_target ()->flash_done ();
+  current_inferior ()->top_target ()->flash_done ();
 }
 
 static void
@@ -2356,7 +2404,9 @@ target_insert_breakpoint (struct gdbarch *gdbarch,
       return 1;
     }
 
-  return current_top_target ()->insert_breakpoint (gdbarch, bp_tgt);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->insert_breakpoint (gdbarch, bp_tgt);
 }
 
 /* See target.h.  */
@@ -2376,7 +2426,9 @@ target_remove_breakpoint (struct gdbarch *gdbarch,
       return 1;
     }
 
-  return current_top_target ()->remove_breakpoint (gdbarch, bp_tgt, reason);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->remove_breakpoint (gdbarch, bp_tgt, reason);
 }
 
 static void
@@ -2391,7 +2443,9 @@ info_target_command (const char *args, int from_tty)
                         objfile_name (objf));
     }
 
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     {
       if (!t->has_memory ())
        continue;
@@ -2511,7 +2565,7 @@ target_detach (inferior *inf, int from_tty)
      target.  */
   auto proc_target_ref = target_ops_ref::new_reference (inf->process_target ());
 
-  current_top_target ()->detach (inf, from_tty);
+  current_inferior ()->top_target ()->detach (inf, from_tty);
 
   process_stratum_target *proc_target
     = as_process_stratum_target (proc_target_ref.get ());
@@ -2533,7 +2587,7 @@ target_disconnect (const char *args, int from_tty)
      disconnecting.  */
   remove_breakpoints ();
 
-  current_top_target ()->disconnect (args, from_tty);
+  current_inferior ()->top_target ()->disconnect (args, from_tty);
 }
 
 /* See target/target.h.  */
@@ -2542,7 +2596,7 @@ ptid_t
 target_wait (ptid_t ptid, struct target_waitstatus *status,
             target_wait_flags options)
 {
-  target_ops *target = current_top_target ();
+  target_ops *target = current_inferior ()->top_target ();
 
   if (!target->can_async_p ())
     gdb_assert ((options & TARGET_WNOHANG) == 0);
@@ -2564,7 +2618,7 @@ default_target_wait (struct target_ops *ops,
 std::string
 target_pid_to_str (ptid_t ptid)
 {
-  return current_top_target ()->pid_to_str (ptid);
+  return current_inferior ()->top_target ()->pid_to_str (ptid);
 }
 
 const char *
@@ -2572,7 +2626,7 @@ target_thread_name (struct thread_info *info)
 {
   gdb_assert (info->inf == current_inferior ());
 
-  return current_top_target ()->thread_name (info);
+  return current_inferior ()->top_target ()->thread_name (info);
 }
 
 struct thread_info *
@@ -2580,8 +2634,9 @@ target_thread_handle_to_thread_info (const gdb_byte *thread_handle,
                                     int handle_len,
                                     struct inferior *inf)
 {
-  return current_top_target ()->thread_handle_to_thread_info (thread_handle,
-                                                    handle_len, inf);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->thread_handle_to_thread_info (thread_handle, handle_len, inf);
 }
 
 /* See target.h.  */
@@ -2589,7 +2644,9 @@ target_thread_handle_to_thread_info (const gdb_byte *thread_handle,
 gdb::byte_vector
 target_thread_info_to_thread_handle (struct thread_info *tip)
 {
-  return current_top_target ()->thread_info_to_thread_handle (tip);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->thread_info_to_thread_handle (tip);
 }
 
 void
@@ -2599,7 +2656,7 @@ target_resume (ptid_t ptid, int step, enum gdb_signal signal)
 
   target_dcache_invalidate ();
 
-  current_top_target ()->resume (ptid, step, signal);
+  current_inferior ()->top_target ()->resume (ptid, step, signal);
 
   registers_changed_ptid (curr_target, ptid);
   /* We only set the internal executing state here.  The user/frontend
@@ -2620,7 +2677,7 @@ target_commit_resume (void)
   if (defer_target_commit_resume)
     return;
 
-  current_top_target ()->commit_resume ();
+  current_inferior ()->top_target ()->commit_resume ();
 }
 
 /* See target.h.  */
@@ -2634,13 +2691,13 @@ make_scoped_defer_target_commit_resume ()
 void
 target_pass_signals (gdb::array_view<const unsigned char> pass_signals)
 {
-  current_top_target ()->pass_signals (pass_signals);
+  current_inferior ()->top_target ()->pass_signals (pass_signals);
 }
 
 void
 target_program_signals (gdb::array_view<const unsigned char> program_signals)
 {
-  current_top_target ()->program_signals (program_signals);
+  current_inferior ()->top_target ()->program_signals (program_signals);
 }
 
 static bool
@@ -2658,7 +2715,9 @@ default_follow_fork (struct target_ops *self, bool follow_child,
 bool
 target_follow_fork (bool follow_child, bool detach_fork)
 {
-  return current_top_target ()->follow_fork (follow_child, detach_fork);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->follow_fork (follow_child, detach_fork);
 }
 
 /* Target wrapper for follow exec hook.  */
@@ -2666,7 +2725,7 @@ target_follow_fork (bool follow_child, bool detach_fork)
 void
 target_follow_exec (struct inferior *inf, const char *execd_pathname)
 {
-  current_top_target ()->follow_exec (inf, execd_pathname);
+  current_inferior ()->top_target ()->follow_exec (inf, execd_pathname);
 }
 
 static void
@@ -2680,7 +2739,7 @@ void
 target_mourn_inferior (ptid_t ptid)
 {
   gdb_assert (ptid.pid () == inferior_ptid.pid ());
-  current_top_target ()->mourn_inferior ();
+  current_inferior ()->top_target ()->mourn_inferior ();
 
   /* We no longer need to keep handles on any of the object files.
      Make sure to release them to avoid unnecessarily locking any
@@ -2708,7 +2767,8 @@ default_search_memory (struct target_ops *self,
 {
   auto read_memory = [=] (CORE_ADDR addr, gdb_byte *result, size_t len)
     {
-      return target_read (current_top_target (), TARGET_OBJECT_MEMORY, NULL,
+      return target_read (current_inferior ()->top_target (),
+                         TARGET_OBJECT_MEMORY, NULL,
                          result, addr, len) == len;
     };
 
@@ -2729,8 +2789,10 @@ target_search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
                      const gdb_byte *pattern, ULONGEST pattern_len,
                      CORE_ADDR *found_addrp)
 {
-  return current_top_target ()->search_memory (start_addr, search_space_len,
-                                     pattern, pattern_len, found_addrp);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->search_memory (start_addr, search_space_len, pattern,
+                               pattern_len, found_addrp);
 }
 
 /* Look through the currently pushed targets.  If none of them will
@@ -2740,7 +2802,9 @@ target_search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
 void
 target_require_runnable (void)
 {
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     {
       /* If this target knows how to create a new program, then
         assume we will still be able to after killing the current
@@ -2830,7 +2894,9 @@ struct target_ops *
 find_attach_target (void)
 {
   /* If a target on the current stack can attach, use it.  */
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     {
       if (t->can_attach ())
        return t;
@@ -2846,7 +2912,9 @@ struct target_ops *
 find_run_target (void)
 {
   /* If a target on the current stack can run, use it.  */
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     {
       if (t->can_create_inferior ())
        return t;
@@ -2905,7 +2973,7 @@ find_default_supports_disable_randomization (struct target_ops *self)
 int
 target_supports_disable_randomization (void)
 {
-  return current_top_target ()->supports_disable_randomization ();
+  return current_inferior ()->top_target ()->supports_disable_randomization ();
 }
 
 /* See target/target.h.  */
@@ -2913,7 +2981,7 @@ target_supports_disable_randomization (void)
 int
 target_supports_multi_process (void)
 {
-  return current_top_target ()->supports_multi_process ();
+  return current_inferior ()->top_target ()->supports_multi_process ();
 }
 
 /* See target.h.  */
@@ -2943,7 +3011,7 @@ target_thread_address_space (ptid_t ptid)
 {
   struct address_space *aspace;
 
-  aspace = current_top_target ()->thread_address_space (ptid);
+  aspace = current_inferior ()->top_target ()->thread_address_space (ptid);
   gdb_assert (aspace != NULL);
 
   return aspace;
@@ -2996,7 +3064,9 @@ target_ops::can_run ()
 int
 target_can_run ()
 {
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     {
       if (t->can_run ())
        return 1;
@@ -3679,13 +3749,13 @@ target_close (struct target_ops *targ)
 int
 target_thread_alive (ptid_t ptid)
 {
-  return current_top_target ()->thread_alive (ptid);
+  return current_inferior ()->top_target ()->thread_alive (ptid);
 }
 
 void
 target_update_thread_list (void)
 {
-  current_top_target ()->update_thread_list ();
+  current_inferior ()->top_target ()->update_thread_list ();
 }
 
 void
@@ -3697,7 +3767,7 @@ target_stop (ptid_t ptid)
       return;
     }
 
-  current_top_target ()->stop (ptid);
+  current_inferior ()->top_target ()->stop (ptid);
 }
 
 void
@@ -3709,7 +3779,7 @@ target_interrupt ()
       return;
     }
 
-  current_top_target ()->interrupt ();
+  current_inferior ()->top_target ()->interrupt ();
 }
 
 /* See target.h.  */
@@ -3739,7 +3809,7 @@ target_pass_ctrlc (void)
                 through the target_stack.  */
              scoped_restore_current_inferior restore_inferior;
              set_current_inferior (inf);
-             current_top_target ()->pass_ctrlc ();
+             current_inferior ()->top_target ()->pass_ctrlc ();
              return;
            }
        }
@@ -3834,7 +3904,7 @@ target_options_to_string (target_wait_flags target_options)
 void
 target_fetch_registers (struct regcache *regcache, int regno)
 {
-  current_top_target ()->fetch_registers (regcache, regno);
+  current_inferior ()->top_target ()->fetch_registers (regcache, regno);
   if (targetdebug)
     regcache->debug_print_register ("target_fetch_registers", regno);
 }
@@ -3845,7 +3915,7 @@ target_store_registers (struct regcache *regcache, int regno)
   if (!may_write_registers)
     error (_("Writing to registers is not allowed (regno %d)"), regno);
 
-  current_top_target ()->store_registers (regcache, regno);
+  current_inferior ()->top_target ()->store_registers (regcache, regno);
   if (targetdebug)
     {
       regcache->debug_print_register ("target_store_registers", regno);
@@ -3855,7 +3925,7 @@ target_store_registers (struct regcache *regcache, int regno)
 int
 target_core_of_thread (ptid_t ptid)
 {
-  return current_top_target ()->core_of_thread (ptid);
+  return current_inferior ()->top_target ()->core_of_thread (ptid);
 }
 
 int
@@ -3893,14 +3963,16 @@ default_verify_memory (struct target_ops *self,
                       const gdb_byte *data, CORE_ADDR memaddr, ULONGEST size)
 {
   /* Start over from the top of the target stack.  */
-  return simple_verify_memory (current_top_target (),
+  return simple_verify_memory (current_inferior ()->top_target (),
                               data, memaddr, size);
 }
 
 int
 target_verify_memory (const gdb_byte *data, CORE_ADDR memaddr, ULONGEST size)
 {
-  return current_top_target ()->verify_memory (data, memaddr, size);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->verify_memory (data, memaddr, size);
 }
 
 /* The documentation for this function is in its prototype declaration in
@@ -3910,7 +3982,9 @@ int
 target_insert_mask_watchpoint (CORE_ADDR addr, CORE_ADDR mask,
                               enum target_hw_bp_type rw)
 {
-  return current_top_target ()->insert_mask_watchpoint (addr, mask, rw);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->insert_mask_watchpoint (addr, mask, rw);
 }
 
 /* The documentation for this function is in its prototype declaration in
@@ -3920,7 +3994,9 @@ int
 target_remove_mask_watchpoint (CORE_ADDR addr, CORE_ADDR mask,
                               enum target_hw_bp_type rw)
 {
-  return current_top_target ()->remove_mask_watchpoint (addr, mask, rw);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->remove_mask_watchpoint (addr, mask, rw);
 }
 
 /* The documentation for this function is in its prototype declaration
@@ -3929,7 +4005,9 @@ target_remove_mask_watchpoint (CORE_ADDR addr, CORE_ADDR mask,
 int
 target_masked_watch_num_registers (CORE_ADDR addr, CORE_ADDR mask)
 {
-  return current_top_target ()->masked_watch_num_registers (addr, mask);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->masked_watch_num_registers (addr, mask);
 }
 
 /* The documentation for this function is in its prototype declaration
@@ -3938,7 +4016,7 @@ target_masked_watch_num_registers (CORE_ADDR addr, CORE_ADDR mask)
 int
 target_ranged_break_num_registers (void)
 {
-  return current_top_target ()->ranged_break_num_registers ();
+  return current_inferior ()->top_target ()->ranged_break_num_registers ();
 }
 
 /* See target.h.  */
@@ -3946,7 +4024,7 @@ target_ranged_break_num_registers (void)
 struct btrace_target_info *
 target_enable_btrace (ptid_t ptid, const struct btrace_config *conf)
 {
-  return current_top_target ()->enable_btrace (ptid, conf);
+  return current_inferior ()->top_target ()->enable_btrace (ptid, conf);
 }
 
 /* See target.h.  */
@@ -3954,7 +4032,7 @@ target_enable_btrace (ptid_t ptid, const struct btrace_config *conf)
 void
 target_disable_btrace (struct btrace_target_info *btinfo)
 {
-  current_top_target ()->disable_btrace (btinfo);
+  current_inferior ()->top_target ()->disable_btrace (btinfo);
 }
 
 /* See target.h.  */
@@ -3962,7 +4040,7 @@ target_disable_btrace (struct btrace_target_info *btinfo)
 void
 target_teardown_btrace (struct btrace_target_info *btinfo)
 {
-  current_top_target ()->teardown_btrace (btinfo);
+  current_inferior ()->top_target ()->teardown_btrace (btinfo);
 }
 
 /* See target.h.  */
@@ -3972,7 +4050,9 @@ target_read_btrace (struct btrace_data *btrace,
                    struct btrace_target_info *btinfo,
                    enum btrace_read_type type)
 {
-  return current_top_target ()->read_btrace (btrace, btinfo, type);
+  target_ops *target = current_inferior ()->top_target ();
+
+  return target->read_btrace (btrace, btinfo, type);
 }
 
 /* See target.h.  */
@@ -3980,7 +4060,7 @@ target_read_btrace (struct btrace_data *btrace,
 const struct btrace_config *
 target_btrace_conf (const struct btrace_target_info *btinfo)
 {
-  return current_top_target ()->btrace_conf (btinfo);
+  return current_inferior ()->top_target ()->btrace_conf (btinfo);
 }
 
 /* See target.h.  */
@@ -3988,7 +4068,7 @@ target_btrace_conf (const struct btrace_target_info *btinfo)
 void
 target_stop_recording (void)
 {
-  current_top_target ()->stop_recording ();
+  current_inferior ()->top_target ()->stop_recording ();
 }
 
 /* See target.h.  */
@@ -3996,7 +4076,7 @@ target_stop_recording (void)
 void
 target_save_record (const char *filename)
 {
-  current_top_target ()->save_record (filename);
+  current_inferior ()->top_target ()->save_record (filename);
 }
 
 /* See target.h.  */
@@ -4004,7 +4084,7 @@ target_save_record (const char *filename)
 int
 target_supports_delete_record ()
 {
-  return current_top_target ()->supports_delete_record ();
+  return current_inferior ()->top_target ()->supports_delete_record ();
 }
 
 /* See target.h.  */
@@ -4012,7 +4092,7 @@ target_supports_delete_record ()
 void
 target_delete_record (void)
 {
-  current_top_target ()->delete_record ();
+  current_inferior ()->top_target ()->delete_record ();
 }
 
 /* See target.h.  */
@@ -4020,7 +4100,7 @@ target_delete_record (void)
 enum record_method
 target_record_method (ptid_t ptid)
 {
-  return current_top_target ()->record_method (ptid);
+  return current_inferior ()->top_target ()->record_method (ptid);
 }
 
 /* See target.h.  */
@@ -4028,7 +4108,7 @@ target_record_method (ptid_t ptid)
 int
 target_record_is_replaying (ptid_t ptid)
 {
-  return current_top_target ()->record_is_replaying (ptid);
+  return current_inferior ()->top_target ()->record_is_replaying (ptid);
 }
 
 /* See target.h.  */
@@ -4036,7 +4116,7 @@ target_record_is_replaying (ptid_t ptid)
 int
 target_record_will_replay (ptid_t ptid, int dir)
 {
-  return current_top_target ()->record_will_replay (ptid, dir);
+  return current_inferior ()->top_target ()->record_will_replay (ptid, dir);
 }
 
 /* See target.h.  */
@@ -4044,7 +4124,7 @@ target_record_will_replay (ptid_t ptid, int dir)
 void
 target_record_stop_replaying (void)
 {
-  current_top_target ()->record_stop_replaying ();
+  current_inferior ()->top_target ()->record_stop_replaying ();
 }
 
 /* See target.h.  */
@@ -4052,7 +4132,7 @@ target_record_stop_replaying (void)
 void
 target_goto_record_begin (void)
 {
-  current_top_target ()->goto_record_begin ();
+  current_inferior ()->top_target ()->goto_record_begin ();
 }
 
 /* See target.h.  */
@@ -4060,7 +4140,7 @@ target_goto_record_begin (void)
 void
 target_goto_record_end (void)
 {
-  current_top_target ()->goto_record_end ();
+  current_inferior ()->top_target ()->goto_record_end ();
 }
 
 /* See target.h.  */
@@ -4068,7 +4148,7 @@ target_goto_record_end (void)
 void
 target_goto_record (ULONGEST insn)
 {
-  current_top_target ()->goto_record (insn);
+  current_inferior ()->top_target ()->goto_record (insn);
 }
 
 /* See target.h.  */
@@ -4076,7 +4156,7 @@ target_goto_record (ULONGEST insn)
 void
 target_insn_history (int size, gdb_disassembly_flags flags)
 {
-  current_top_target ()->insn_history (size, flags);
+  current_inferior ()->top_target ()->insn_history (size, flags);
 }
 
 /* See target.h.  */
@@ -4085,7 +4165,7 @@ void
 target_insn_history_from (ULONGEST from, int size,
                          gdb_disassembly_flags flags)
 {
-  current_top_target ()->insn_history_from (from, size, flags);
+  current_inferior ()->top_target ()->insn_history_from (from, size, flags);
 }
 
 /* See target.h.  */
@@ -4094,7 +4174,7 @@ void
 target_insn_history_range (ULONGEST begin, ULONGEST end,
                           gdb_disassembly_flags flags)
 {
-  current_top_target ()->insn_history_range (begin, end, flags);
+  current_inferior ()->top_target ()->insn_history_range (begin, end, flags);
 }
 
 /* See target.h.  */
@@ -4102,7 +4182,7 @@ target_insn_history_range (ULONGEST begin, ULONGEST end,
 void
 target_call_history (int size, record_print_flags flags)
 {
-  current_top_target ()->call_history (size, flags);
+  current_inferior ()->top_target ()->call_history (size, flags);
 }
 
 /* See target.h.  */
@@ -4110,7 +4190,7 @@ target_call_history (int size, record_print_flags flags)
 void
 target_call_history_from (ULONGEST begin, int size, record_print_flags flags)
 {
-  current_top_target ()->call_history_from (begin, size, flags);
+  current_inferior ()->top_target ()->call_history_from (begin, size, flags);
 }
 
 /* See target.h.  */
@@ -4118,7 +4198,7 @@ target_call_history_from (ULONGEST begin, int size, record_print_flags flags)
 void
 target_call_history_range (ULONGEST begin, ULONGEST end, record_print_flags flags)
 {
-  current_top_target ()->call_history_range (begin, end, flags);
+  current_inferior ()->top_target ()->call_history_range (begin, end, flags);
 }
 
 /* See target.h.  */
@@ -4126,7 +4206,7 @@ target_call_history_range (ULONGEST begin, ULONGEST end, record_print_flags flag
 const struct frame_unwind *
 target_get_unwinder (void)
 {
-  return current_top_target ()->get_unwinder ();
+  return current_inferior ()->top_target ()->get_unwinder ();
 }
 
 /* See target.h.  */
@@ -4134,7 +4214,7 @@ target_get_unwinder (void)
 const struct frame_unwind *
 target_get_tailcall_unwinder (void)
 {
-  return current_top_target ()->get_tailcall_unwinder ();
+  return current_inferior ()->top_target ()->get_tailcall_unwinder ();
 }
 
 /* See target.h.  */
@@ -4142,7 +4222,7 @@ target_get_tailcall_unwinder (void)
 void
 target_prepare_to_generate_core (void)
 {
-  current_top_target ()->prepare_to_generate_core ();
+  current_inferior ()->top_target ()->prepare_to_generate_core ();
 }
 
 /* See target.h.  */
@@ -4150,7 +4230,7 @@ target_prepare_to_generate_core (void)
 void
 target_done_generating_core (void)
 {
-  current_top_target ()->done_generating_core ();
+  current_inferior ()->top_target ()->done_generating_core ();
 }
 
 \f
@@ -4218,7 +4298,9 @@ maintenance_print_target_stack (const char *cmd, int from_tty)
 {
   printf_filtered (_("The current target stack is:\n"));
 
-  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
+  for (target_ops *t = current_inferior ()->top_target ();
+       t != NULL;
+       t = t->beneath ())
     {
       if (t->stratum () == debug_stratum)
        continue;
@@ -4232,7 +4314,7 @@ void
 target_async (int enable)
 {
   infrun_async (enable);
-  current_top_target ()->async (enable);
+  current_inferior ()->top_target ()->async (enable);
 }
 
 /* See target.h.  */
@@ -4240,7 +4322,7 @@ target_async (int enable)
 void
 target_thread_events (int enable)
 {
-  current_top_target ()->thread_events (enable);
+  current_inferior ()->top_target ()->thread_events (enable);
 }
 
 /* Controls if targets can report that they can/are async.  This is
@@ -4280,7 +4362,7 @@ maint_show_target_async_command (struct ui_file *file, int from_tty,
 static int
 target_always_non_stop_p (void)
 {
-  return current_top_target ()->always_non_stop_p ();
+  return current_inferior ()->top_target ()->always_non_stop_p ();
 }
 
 /* See target.h.  */
index 482952e5f5d21e360a63bc23de34f0baf502a789..5d14edb9f4c7452ba9e2ae3b41cf3ab4f0dca5f1 100644 (file)
@@ -1385,11 +1385,6 @@ private:
   target_ops *m_stack[(int) debug_stratum + 1] {};
 };
 
-/* The ops structure for our "current" target process.  This should
-   never be NULL.  If there is no target, it points to the dummy_target.  */
-
-extern target_ops *current_top_target ();
-
 /* Return the dummy target.  */
 extern target_ops *get_dummy_target ();
 
index d82cac8d9ddd04fdb3b20d2f5904c21944fbc7df..33ce86bbe2389a7098b2b4bf098b10df6471069f 100644 (file)
@@ -310,7 +310,7 @@ tfile_write_tdesc (struct trace_file_writer *self)
     = (struct tfile_trace_file_writer *) self;
 
   gdb::optional<std::string> tdesc
-    = target_fetch_description_xml (current_top_target ());
+    = target_fetch_description_xml (current_inferior ()->top_target ());
 
   if (!tdesc)
     return;
index bf8a63c59669c8315eacb1d94cfea990315ca173..48d72d6a1f280bf17d2c97d50e6464354c3708f1 100644 (file)
@@ -3812,7 +3812,8 @@ sdata_make_value (struct gdbarch *gdbarch, struct internalvar *var,
 {
   /* We need to read the whole object before we know its size.  */
   gdb::optional<gdb::byte_vector> buf
-    = target_read_alloc (current_top_target (), TARGET_OBJECT_STATIC_TRACE_DATA,
+    = target_read_alloc (current_inferior ()->top_target (),
+                        TARGET_OBJECT_STATIC_TRACE_DATA,
                         NULL);
   if (buf)
     {
index fec821ad932c4d98d2a0e716a79439b32e48fbba..f86c98180584b830a4877de27ecdcc6c5203519e 100644 (file)
@@ -1040,7 +1040,7 @@ read_value_memory (struct value *val, LONGEST bit_offset,
       enum target_xfer_status status;
       ULONGEST xfered_partial;
 
-      status = target_xfer_partial (current_top_target (),
+      status = target_xfer_partial (current_inferior ()->top_target (),
                                    object, NULL,
                                    buffer + xfered_total * unit_size, NULL,
                                    memaddr + xfered_total,
@@ -1286,7 +1286,8 @@ value_assign (struct value *toval, struct value *fromval)
     case lval_register:
     case lval_computed:
 
-      gdb::observers::target_changed.notify (current_top_target ());
+      gdb::observers::target_changed.notify
+       (current_inferior ()->top_target ());
 
       /* Having destroyed the frame cache, restore the selected
         frame.  */
index c089ee27a23a0623311ae3050a4a7371ccdc508e..baf50f76b60043c3632c696cafb712ae05f5c3a5 100644 (file)
@@ -42,6 +42,7 @@
 #include "count-one-bits.h"
 #include "c-lang.h"
 #include "cp-abi.h"
+#include "inferior.h"
 
 /* Maximum number of wchars returned from wchar_iterate.  */
 #define MAX_WCHARS 4
@@ -1848,9 +1849,8 @@ print_function_pointer_address (const struct value_print_options *options,
                                CORE_ADDR address,
                                struct ui_file *stream)
 {
-  CORE_ADDR func_addr
-    = gdbarch_convert_from_func_ptr_addr (gdbarch, address,
-                                         current_top_target ());
+  CORE_ADDR func_addr = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, address, current_inferior ()->top_target ());
 
   /* If the function pointer is represented by a description, print
      the address of the description.  */
index 9527186f57afeb3a88cb8e605a82fa7cdd6d77cf..3bd81e76007c4795faadf85241e9ea6496a57026 100644 (file)
@@ -45,6 +45,7 @@
 #include "gdbsupport/array-view.h"
 #include "cli/cli-style.h"
 #include "expop.h"
+#include "inferior.h"
 
 /* Definition of a user function.  */
 struct internal_function
@@ -3159,7 +3160,8 @@ value_fn_field (struct value **arg1p, struct fn_field *f,
 
       set_value_address (v,
        gdbarch_convert_from_func_ptr_addr
-          (gdbarch, BMSYMBOL_VALUE_ADDRESS (msym), current_top_target ()));
+          (gdbarch, BMSYMBOL_VALUE_ADDRESS (msym),
+           current_inferior ()->top_target ()));
     }
 
   if (arg1p)
index a06b44822d46b35682d9a3a1b015ca55c7900626..97aa3da6e777e625a9574bb2925a0dea1758e981 100644 (file)
@@ -487,7 +487,7 @@ display_one_tib (ptid_t ptid)
       return -1;
     }
 
-  if (target_read (current_top_target (), TARGET_OBJECT_MEMORY,
+  if (target_read (current_inferior ()->top_target (), TARGET_OBJECT_MEMORY,
                   NULL, tib, thread_local_base, tib_size) != tib_size)
     {
       printf_filtered (_("Unable to read thread information "