[2/4] target_ops::beneath -> target_ops::beneath()

Message ID 20180528161041.32497-3-palves@redhat.com
State New
Headers show
Series
  • Change target stack representation
Related show

Commit Message

Pedro Alves May 28, 2018, 4:10 p.m.
This changes target_ops::beneath from a pointer to a method, and
adjusts all references throughout.  The idea here is to make it easier
to change the target stack representation from an intrusive singly
linked list to something else without leaking implementation details
throughout.

The commit does not change the representation yet, that will be done
in a following patch.  That is why a new target_ops::m_beneath field
appears here.  That new field isn't really documented properly or made
private, simply because it will be removed shortly.

Note that target_ops::beneath() is essentially the same as the current
find_target_beneath routine.  The following patch will eliminate the
latter.

gdb/ChangeLog:
yyyy-mm-dd  Pedro Alves  <palves@redhat.com>

	* target.h (target_ops) <beneath>: Now a method.  All references
	updated.
	(target_ops) <m_beneath>: New.
	* target.c (target_ops::beneath): New.
	* corelow.c: Adjust all references to target_ops::beneath.
	* linux-thread-db.c: Likewise.
	* make-target-delegates: Likewise.
	* record-btrace.c: Likewise.
	* record-full.c: Likewise.
	* remote.c: Likewise.
	* target.c: Likewise.

	* target-delegates.c: Regenerate.
---
 gdb/corelow.c             |    8 +-
 gdb/linux-thread-db.c     |    2 +-
 gdb/make-target-delegates |    8 +-
 gdb/record-btrace.c       |   38 +-
 gdb/record-full.c         |   44 +-
 gdb/remote.c              |    4 +-
 gdb/target-delegates.c    | 1280 ++++++++++++++++++++++-----------------------
 gdb/target.c              |   91 ++--
 gdb/target.h              |    4 +-
 9 files changed, 732 insertions(+), 747 deletions(-)

-- 
2.14.3

Patch

diff --git a/gdb/corelow.c b/gdb/corelow.c
index c6175279da..379b20e753 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -950,9 +950,9 @@  core_target::xfer_partial (enum target_object object, const char *annex,
       return TARGET_XFER_E_IO;
 
     default:
-      return this->beneath->xfer_partial (object, annex, readbuf,
-					  writebuf, offset, len,
-					  xfered_len);
+      return this->beneath ()->xfer_partial (object, annex, readbuf,
+					     writebuf, offset, len,
+					     xfered_len);
     }
 }
 
@@ -987,7 +987,7 @@  core_target::read_description ()
 	return result;
     }
 
-  return this->beneath->read_description ();
+  return this->beneath ()->read_description ();
 }
 
 const char *
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index 8feab6f0ca..920e15edf4 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -1369,7 +1369,7 @@  thread_db_target::update_thread_list ()
     }
 
   /* Give the beneath target a chance to do extra processing.  */
-  this->beneath->update_thread_list ();
+  this->beneath ()->update_thread_list ();
 }
 
 const char *
diff --git a/gdb/make-target-delegates b/gdb/make-target-delegates
index b8cf63cd0b..28b49a4e8f 100755
--- a/gdb/make-target-delegates
+++ b/gdb/make-target-delegates
@@ -225,7 +225,7 @@  sub write_delegator($$@) {
     if ($return_type ne 'void') {
 	print "return ";
     }
-    print "this->beneath->" . $name . " (";
+    print "this->beneath ()->" . $name . " (";
     print join (', ', @names);
     print ");\n";
     print "}\n\n";
@@ -309,19 +309,19 @@  sub write_debugmethod($$$@) {
 	print "  $return_type result;\n";
     }
 
-    print "  fprintf_unfiltered (gdb_stdlog, \"-> %s->$name (...)\\n\", this->beneath->shortname ());\n";
+    print "  fprintf_unfiltered (gdb_stdlog, \"-> %s->$name (...)\\n\", this->beneath ()->shortname ());\n";
 
     # Delegate to the beneath target.
     print "  ";
     if ($return_type ne 'void') {
 	print "result = ";
     }
-    print "this->beneath->" . $name . " (";
+    print "this->beneath ()->" . $name . " (";
     print join (', ', @names);
     print ");\n";
 
     # Now print the arguments.
-    print "  fprintf_unfiltered (gdb_stdlog, \"<- %s->$name (\", this->beneath->shortname ());\n";
+    print "  fprintf_unfiltered (gdb_stdlog, \"<- %s->$name (\", this->beneath ()->shortname ());\n";
     for my $i (0 .. $#argtypes) {
 	if ($i > 0) {
 	    print "  fputs_unfiltered (\", \", gdb_stdlog);\n"
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
index 4249b1da1f..218f750f67 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -423,7 +423,7 @@  void
 record_btrace_target::disconnect (const char *args,
 				  int from_tty)
 {
-  struct target_ops *beneath = this->beneath;
+  struct target_ops *beneath = this->beneath ();
 
   /* Do not stop recording, just clean up GDB side.  */
   unpush_target (this);
@@ -462,7 +462,7 @@  record_btrace_target::async (int enable)
   else
     clear_async_event_handler (record_btrace_async_inferior_event_handler);
 
-  this->beneath->async (enable);
+  this->beneath ()->async (enable);
 }
 
 /* Adjusts the size and returns a human readable size suffix.  */
@@ -1463,8 +1463,8 @@  record_btrace_target::xfer_partial (enum target_object object,
     }
 
   /* Forward the request.  */
-  return this->beneath->xfer_partial (object, annex, readbuf, writebuf,
-				      offset, len, xfered_len);
+  return this->beneath ()->xfer_partial (object, annex, readbuf, writebuf,
+					 offset, len, xfered_len);
 }
 
 /* The insert_breakpoint method of target record-btrace.  */
@@ -1484,7 +1484,7 @@  record_btrace_target::insert_breakpoint (struct gdbarch *gdbarch,
   ret = 0;
   TRY
     {
-      ret = this->beneath->insert_breakpoint (gdbarch, bp_tgt);
+      ret = this->beneath ()->insert_breakpoint (gdbarch, bp_tgt);
     }
   CATCH (except, RETURN_MASK_ALL)
     {
@@ -1515,7 +1515,7 @@  record_btrace_target::remove_breakpoint (struct gdbarch *gdbarch,
   ret = 0;
   TRY
     {
-      ret = this->beneath->remove_breakpoint (gdbarch, bp_tgt, reason);
+      ret = this->beneath ()->remove_breakpoint (gdbarch, bp_tgt, reason);
     }
   CATCH (except, RETURN_MASK_ALL)
     {
@@ -1561,7 +1561,7 @@  record_btrace_target::fetch_registers (struct regcache *regcache, int regno)
       regcache_raw_supply (regcache, regno, &insn->pc);
     }
   else
-    this->beneath->fetch_registers (regcache, regno);
+    this->beneath ()->fetch_registers (regcache, regno);
 }
 
 /* The store_registers method of target record-btrace.  */
@@ -1577,7 +1577,7 @@  record_btrace_target::store_registers (struct regcache *regcache, int regno)
 
   gdb_assert (may_write_registers != 0);
 
-  this->beneath->store_registers (regcache, regno);
+  this->beneath ()->store_registers (regcache, regno);
 }
 
 /* The prepare_to_store method of target record-btrace.  */
@@ -1589,7 +1589,7 @@  record_btrace_target::prepare_to_store (struct regcache *regcache)
       && record_is_replaying (regcache_get_ptid (regcache)))
     return;
 
-  this->beneath->prepare_to_store (regcache);
+  this->beneath ()->prepare_to_store (regcache);
 }
 
 /* The branch trace frame cache.  */
@@ -2161,7 +2161,7 @@  record_btrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
   if ((::execution_direction != EXEC_REVERSE)
       && !record_is_replaying (minus_one_ptid))
     {
-      this->beneath->resume (ptid, step, signal);
+      this->beneath ()->resume (ptid, step, signal);
       return;
     }
 
@@ -2216,7 +2216,7 @@  record_btrace_target::commit_resume ()
 {
   if ((::execution_direction != EXEC_REVERSE)
       && !record_is_replaying (minus_one_ptid))
-    beneath->commit_resume ();
+    beneath ()->commit_resume ();
 }
 
 /* Cancel resuming TP.  */
@@ -2561,7 +2561,7 @@  record_btrace_target::wait (ptid_t ptid, struct target_waitstatus *status,
   if ((::execution_direction != EXEC_REVERSE)
       && !record_is_replaying (minus_one_ptid))
     {
-      return this->beneath->wait (ptid, status, options);
+      return this->beneath ()->wait (ptid, status, options);
     }
 
   /* Keep a work list of moving threads.  */
@@ -2690,7 +2690,7 @@  record_btrace_target::stop (ptid_t ptid)
   if ((::execution_direction != EXEC_REVERSE)
       && !record_is_replaying (minus_one_ptid))
     {
-      this->beneath->stop (ptid);
+      this->beneath ()->stop (ptid);
     }
   else
     {
@@ -2725,7 +2725,7 @@  record_btrace_target::stopped_by_sw_breakpoint ()
       return tp->btrace.stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT;
     }
 
-  return this->beneath->stopped_by_sw_breakpoint ();
+  return this->beneath ()->stopped_by_sw_breakpoint ();
 }
 
 /* The supports_stopped_by_sw_breakpoint method of target
@@ -2737,7 +2737,7 @@  record_btrace_target::supports_stopped_by_sw_breakpoint ()
   if (record_is_replaying (minus_one_ptid))
     return true;
 
-  return this->beneath->supports_stopped_by_sw_breakpoint ();
+  return this->beneath ()->supports_stopped_by_sw_breakpoint ();
 }
 
 /* The stopped_by_sw_breakpoint method of target record-btrace.  */
@@ -2752,7 +2752,7 @@  record_btrace_target::stopped_by_hw_breakpoint ()
       return tp->btrace.stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT;
     }
 
-  return this->beneath->stopped_by_hw_breakpoint ();
+  return this->beneath ()->stopped_by_hw_breakpoint ();
 }
 
 /* The supports_stopped_by_hw_breakpoint method of target
@@ -2764,7 +2764,7 @@  record_btrace_target::supports_stopped_by_hw_breakpoint ()
   if (record_is_replaying (minus_one_ptid))
     return true;
 
-  return this->beneath->supports_stopped_by_hw_breakpoint ();
+  return this->beneath ()->supports_stopped_by_hw_breakpoint ();
 }
 
 /* The update_thread_list method of target record-btrace.  */
@@ -2777,7 +2777,7 @@  record_btrace_target::update_thread_list ()
     return;
 
   /* Forward the request.  */
-  this->beneath->update_thread_list ();
+  this->beneath ()->update_thread_list ();
 }
 
 /* The thread_alive method of target record-btrace.  */
@@ -2790,7 +2790,7 @@  record_btrace_target::thread_alive (ptid_t ptid)
     return find_thread_ptid (ptid) != NULL;
 
   /* Forward the request.  */
-  return this->beneath->thread_alive (ptid);
+  return this->beneath ()->thread_alive (ptid);
 }
 
 /* Set the replay branch trace instruction iterator.  If IT is NULL, replay
diff --git a/gdb/record-full.c b/gdb/record-full.c
index 79f5c0fa0a..243b9920ba 100644
--- a/gdb/record-full.c
+++ b/gdb/record-full.c
@@ -1040,7 +1040,7 @@  record_full_base_target::async (int enable)
   else
     clear_async_event_handler (record_full_async_inferior_event_token);
 
-  beneath->async (enable);
+  beneath ()->async (enable);
 }
 
 static int record_full_resume_step = 0;
@@ -1105,7 +1105,7 @@  record_full_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
       /* Make sure the target beneath reports all signals.  */
       target_pass_signals (0, NULL);
 
-      this->beneath->resume (ptid, step, signal);
+      this->beneath ()->resume (ptid, step, signal);
     }
 
   /* We are about to start executing the inferior (or simulate it),
@@ -1120,7 +1120,7 @@  void
 record_full_target::commit_resume ()
 {
   if (!RECORD_FULL_IS_REPLAY)
-    beneath->commit_resume ();
+    beneath ()->commit_resume ();
 }
 
 static int record_full_get_sig = 0;
@@ -1202,7 +1202,7 @@  record_full_wait_1 (struct target_ops *ops,
       if (record_full_resume_step)
 	{
 	  /* This is a single step.  */
-	  return ops->beneath->wait (ptid, status, options);
+	  return ops->beneath ()->wait (ptid, status, options);
 	}
       else
 	{
@@ -1215,7 +1215,7 @@  record_full_wait_1 (struct target_ops *ops,
 	    {
 	      struct thread_info *tp;
 
-	      ret = ops->beneath->wait (ptid, status, options);
+	      ret = ops->beneath ()->wait (ptid, status, options);
 	      if (status->kind == TARGET_WAITKIND_IGNORE)
 		{
 		  if (record_debug)
@@ -1291,8 +1291,8 @@  record_full_wait_1 (struct target_ops *ops,
 					    "Process record: record_full_wait "
 					    "issuing one more step in the "
 					    "target beneath\n");
-		      ops->beneath->resume (ptid, step, GDB_SIGNAL_0);
-		      ops->beneath->commit_resume ();
+		      ops->beneath ()->resume (ptid, step, GDB_SIGNAL_0);
+		      ops->beneath ()->commit_resume ();
 		      continue;
 		    }
 		}
@@ -1479,7 +1479,7 @@  record_full_base_target::stopped_by_watchpoint ()
   if (RECORD_FULL_IS_REPLAY)
     return record_full_stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
   else
-    return beneath->stopped_by_watchpoint ();
+    return beneath ()->stopped_by_watchpoint ();
 }
 
 bool
@@ -1488,7 +1488,7 @@  record_full_base_target::stopped_data_address (CORE_ADDR *addr_p)
   if (RECORD_FULL_IS_REPLAY)
     return false;
   else
-    return this->beneath->stopped_data_address (addr_p);
+    return this->beneath ()->stopped_data_address (addr_p);
 }
 
 /* The stopped_by_sw_breakpoint method of target record-full.  */
@@ -1623,7 +1623,7 @@  record_full_target::store_registers (struct regcache *regcache, int regno)
 
       record_full_registers_change (regcache, regno);
     }
-  this->beneath->store_registers (regcache, regno);
+  this->beneath ()->store_registers (regcache, regno);
 }
 
 /* "xfer_partial" method.  Behavior is conditional on
@@ -1688,8 +1688,8 @@  record_full_target::xfer_partial (enum target_object object,
 	record_full_insn_num++;
     }
 
-  return this->beneath->xfer_partial (object, annex, readbuf, writebuf, offset,
-				      len, xfered_len);
+  return this->beneath ()->xfer_partial (object, annex, readbuf, writebuf,
+					 offset, len, xfered_len);
 }
 
 /* This structure represents a breakpoint inserted while the record
@@ -1770,7 +1770,7 @@  record_full_target::insert_breakpoint (struct gdbarch *gdbarch,
       scoped_restore restore_operation_disable
 	= record_full_gdb_operation_disable_set ();
 
-      int ret = this->beneath->insert_breakpoint (gdbarch, bp_tgt);
+      int ret = this->beneath ()->insert_breakpoint (gdbarch, bp_tgt);
       if (ret != 0)
 	return ret;
 
@@ -1824,8 +1824,8 @@  record_full_target::remove_breakpoint (struct gdbarch *gdbarch,
 	      scoped_restore restore_operation_disable
 		= record_full_gdb_operation_disable_set ();
 
-	      int ret = this->beneath->remove_breakpoint (gdbarch, bp_tgt,
-							  reason);
+	      int ret = this->beneath ()->remove_breakpoint (gdbarch, bp_tgt,
+							     reason);
 	      if (ret != 0)
 		return ret;
 	    }
@@ -2204,10 +2204,10 @@  record_full_core_target::xfer_partial (enum target_object object,
 		  else
 		    {
 		      if (!entry)
-			return this->beneath->xfer_partial (object, annex,
-							    readbuf, writebuf,
-							    offset, len,
-							    xfered_len);
+			return this->beneath ()->xfer_partial (object, annex,
+							       readbuf, writebuf,
+							       offset, len,
+							       xfered_len);
 
 		      memcpy (readbuf, entry->buf + sec_offset,
 			      (size_t) len);
@@ -2224,9 +2224,9 @@  record_full_core_target::xfer_partial (enum target_object object,
 	error (_("You can't do that without a process to debug."));
     }
 
-  return this->beneath->xfer_partial (object, annex,
-				      readbuf, writebuf, offset, len,
-				      xfered_len);
+  return this->beneath ()->xfer_partial (object, annex,
+					 readbuf, writebuf, offset, len,
+					 xfered_len);
 }
 
 /* "insert_breakpoint" method for prec over corefile.  */
diff --git a/gdb/remote.c b/gdb/remote.c
index bc0c8e1292..86f0966612 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -11795,7 +11795,7 @@  remote_target::read_description ()
   /* Do not try this during initial connection, when we do not know
      whether there is a running but stopped thread.  */
   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
-    return beneath->read_description ();
+    return beneath ()->read_description ();
 
   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
     {
@@ -11814,7 +11814,7 @@  remote_target::read_description ()
 	 an architecture, but it's too tricky to do safely.  */
     }
 
-  return beneath->read_description ();
+  return beneath ()->read_description ();
 }
 
 /* Remote file transfer support.  This is host-initiated I/O, not
diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c
index da74347122..319a9bb46b 100644
--- a/gdb/target-delegates.c
+++ b/gdb/target-delegates.c
@@ -343,7 +343,7 @@  struct debug_target : public target_ops
 void
 target_ops::post_attach (int arg0)
 {
-  this->beneath->post_attach (arg0);
+  this->beneath ()->post_attach (arg0);
 }
 
 void
@@ -354,9 +354,9 @@  dummy_target::post_attach (int arg0)
 void
 debug_target::post_attach (int arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->post_attach (...)\n", this->beneath->shortname ());
-  this->beneath->post_attach (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->post_attach (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->post_attach (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->post_attach (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->post_attach (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -364,7 +364,7 @@  debug_target::post_attach (int arg0)
 void
 target_ops::detach (inferior *arg0, int arg1)
 {
-  this->beneath->detach (arg0, arg1);
+  this->beneath ()->detach (arg0, arg1);
 }
 
 void
@@ -375,9 +375,9 @@  dummy_target::detach (inferior *arg0, int arg1)
 void
 debug_target::detach (inferior *arg0, int arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->detach (...)\n", this->beneath->shortname ());
-  this->beneath->detach (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->detach (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->detach (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->detach (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->detach (", this->beneath ()->shortname ());
   target_debug_print_inferior_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -387,7 +387,7 @@  debug_target::detach (inferior *arg0, int arg1)
 void
 target_ops::disconnect (const char *arg0, int arg1)
 {
-  this->beneath->disconnect (arg0, arg1);
+  this->beneath ()->disconnect (arg0, arg1);
 }
 
 void
@@ -399,9 +399,9 @@  dummy_target::disconnect (const char *arg0, int arg1)
 void
 debug_target::disconnect (const char *arg0, int arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->disconnect (...)\n", this->beneath->shortname ());
-  this->beneath->disconnect (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->disconnect (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->disconnect (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->disconnect (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->disconnect (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -411,7 +411,7 @@  debug_target::disconnect (const char *arg0, int arg1)
 void
 target_ops::resume (ptid_t arg0, int arg1, enum gdb_signal arg2)
 {
-  this->beneath->resume (arg0, arg1, arg2);
+  this->beneath ()->resume (arg0, arg1, arg2);
 }
 
 void
@@ -423,9 +423,9 @@  dummy_target::resume (ptid_t arg0, int arg1, enum gdb_signal arg2)
 void
 debug_target::resume (ptid_t arg0, int arg1, enum gdb_signal arg2)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->resume (...)\n", this->beneath->shortname ());
-  this->beneath->resume (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->resume (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->resume (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->resume (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->resume (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_step (arg1);
@@ -437,7 +437,7 @@  debug_target::resume (ptid_t arg0, int arg1, enum gdb_signal arg2)
 void
 target_ops::commit_resume ()
 {
-  this->beneath->commit_resume ();
+  this->beneath ()->commit_resume ();
 }
 
 void
@@ -448,16 +448,16 @@  dummy_target::commit_resume ()
 void
 debug_target::commit_resume ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->commit_resume (...)\n", this->beneath->shortname ());
-  this->beneath->commit_resume ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->commit_resume (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->commit_resume (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->commit_resume ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->commit_resume (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 ptid_t
 target_ops::wait (ptid_t arg0, struct target_waitstatus *arg1, int arg2)
 {
-  return this->beneath->wait (arg0, arg1, arg2);
+  return this->beneath ()->wait (arg0, arg1, arg2);
 }
 
 ptid_t
@@ -470,9 +470,9 @@  ptid_t
 debug_target::wait (ptid_t arg0, struct target_waitstatus *arg1, int arg2)
 {
   ptid_t result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->wait (...)\n", this->beneath->shortname ());
-  result = this->beneath->wait (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->wait (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->wait (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->wait (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->wait (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_target_waitstatus_p (arg1);
@@ -487,7 +487,7 @@  debug_target::wait (ptid_t arg0, struct target_waitstatus *arg1, int arg2)
 void
 target_ops::fetch_registers (struct regcache *arg0, int arg1)
 {
-  this->beneath->fetch_registers (arg0, arg1);
+  this->beneath ()->fetch_registers (arg0, arg1);
 }
 
 void
@@ -498,9 +498,9 @@  dummy_target::fetch_registers (struct regcache *arg0, int arg1)
 void
 debug_target::fetch_registers (struct regcache *arg0, int arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->fetch_registers (...)\n", this->beneath->shortname ());
-  this->beneath->fetch_registers (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->fetch_registers (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->fetch_registers (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->fetch_registers (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->fetch_registers (", this->beneath ()->shortname ());
   target_debug_print_struct_regcache_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -510,7 +510,7 @@  debug_target::fetch_registers (struct regcache *arg0, int arg1)
 void
 target_ops::store_registers (struct regcache *arg0, int arg1)
 {
-  this->beneath->store_registers (arg0, arg1);
+  this->beneath ()->store_registers (arg0, arg1);
 }
 
 void
@@ -522,9 +522,9 @@  dummy_target::store_registers (struct regcache *arg0, int arg1)
 void
 debug_target::store_registers (struct regcache *arg0, int arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->store_registers (...)\n", this->beneath->shortname ());
-  this->beneath->store_registers (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->store_registers (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->store_registers (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->store_registers (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->store_registers (", this->beneath ()->shortname ());
   target_debug_print_struct_regcache_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -534,7 +534,7 @@  debug_target::store_registers (struct regcache *arg0, int arg1)
 void
 target_ops::prepare_to_store (struct regcache *arg0)
 {
-  this->beneath->prepare_to_store (arg0);
+  this->beneath ()->prepare_to_store (arg0);
 }
 
 void
@@ -546,9 +546,9 @@  dummy_target::prepare_to_store (struct regcache *arg0)
 void
 debug_target::prepare_to_store (struct regcache *arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->prepare_to_store (...)\n", this->beneath->shortname ());
-  this->beneath->prepare_to_store (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->prepare_to_store (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->prepare_to_store (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->prepare_to_store (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->prepare_to_store (", this->beneath ()->shortname ());
   target_debug_print_struct_regcache_p (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -556,7 +556,7 @@  debug_target::prepare_to_store (struct regcache *arg0)
 void
 target_ops::files_info ()
 {
-  this->beneath->files_info ();
+  this->beneath ()->files_info ();
 }
 
 void
@@ -567,16 +567,16 @@  dummy_target::files_info ()
 void
 debug_target::files_info ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->files_info (...)\n", this->beneath->shortname ());
-  this->beneath->files_info ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->files_info (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->files_info (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->files_info ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->files_info (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 int
 target_ops::insert_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
 {
-  return this->beneath->insert_breakpoint (arg0, arg1);
+  return this->beneath ()->insert_breakpoint (arg0, arg1);
 }
 
 int
@@ -589,9 +589,9 @@  int
 debug_target::insert_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->insert_breakpoint (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->insert_breakpoint (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_breakpoint (", this->beneath ()->shortname ());
   target_debug_print_struct_gdbarch_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_bp_target_info_p (arg1);
@@ -604,7 +604,7 @@  debug_target::insert_breakpoint (struct gdbarch *arg0, struct bp_target_info *ar
 int
 target_ops::remove_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1, enum remove_bp_reason arg2)
 {
-  return this->beneath->remove_breakpoint (arg0, arg1, arg2);
+  return this->beneath ()->remove_breakpoint (arg0, arg1, arg2);
 }
 
 int
@@ -617,9 +617,9 @@  int
 debug_target::remove_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1, enum remove_bp_reason arg2)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->remove_breakpoint (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->remove_breakpoint (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_breakpoint (", this->beneath ()->shortname ());
   target_debug_print_struct_gdbarch_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_bp_target_info_p (arg1);
@@ -634,7 +634,7 @@  debug_target::remove_breakpoint (struct gdbarch *arg0, struct bp_target_info *ar
 bool
 target_ops::stopped_by_sw_breakpoint ()
 {
-  return this->beneath->stopped_by_sw_breakpoint ();
+  return this->beneath ()->stopped_by_sw_breakpoint ();
 }
 
 bool
@@ -647,9 +647,9 @@  bool
 debug_target::stopped_by_sw_breakpoint ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_sw_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->stopped_by_sw_breakpoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_sw_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_sw_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->stopped_by_sw_breakpoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_sw_breakpoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -659,7 +659,7 @@  debug_target::stopped_by_sw_breakpoint ()
 bool
 target_ops::supports_stopped_by_sw_breakpoint ()
 {
-  return this->beneath->supports_stopped_by_sw_breakpoint ();
+  return this->beneath ()->supports_stopped_by_sw_breakpoint ();
 }
 
 bool
@@ -672,9 +672,9 @@  bool
 debug_target::supports_stopped_by_sw_breakpoint ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_stopped_by_sw_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_stopped_by_sw_breakpoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_stopped_by_sw_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_stopped_by_sw_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_stopped_by_sw_breakpoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_stopped_by_sw_breakpoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -684,7 +684,7 @@  debug_target::supports_stopped_by_sw_breakpoint ()
 bool
 target_ops::stopped_by_hw_breakpoint ()
 {
-  return this->beneath->stopped_by_hw_breakpoint ();
+  return this->beneath ()->stopped_by_hw_breakpoint ();
 }
 
 bool
@@ -697,9 +697,9 @@  bool
 debug_target::stopped_by_hw_breakpoint ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_hw_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->stopped_by_hw_breakpoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_hw_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->stopped_by_hw_breakpoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_hw_breakpoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -709,7 +709,7 @@  debug_target::stopped_by_hw_breakpoint ()
 bool
 target_ops::supports_stopped_by_hw_breakpoint ()
 {
-  return this->beneath->supports_stopped_by_hw_breakpoint ();
+  return this->beneath ()->supports_stopped_by_hw_breakpoint ();
 }
 
 bool
@@ -722,9 +722,9 @@  bool
 debug_target::supports_stopped_by_hw_breakpoint ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_stopped_by_hw_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_stopped_by_hw_breakpoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_stopped_by_hw_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_stopped_by_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_stopped_by_hw_breakpoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_stopped_by_hw_breakpoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -734,7 +734,7 @@  debug_target::supports_stopped_by_hw_breakpoint ()
 int
 target_ops::can_use_hw_breakpoint (enum bptype arg0, int arg1, int arg2)
 {
-  return this->beneath->can_use_hw_breakpoint (arg0, arg1, arg2);
+  return this->beneath ()->can_use_hw_breakpoint (arg0, arg1, arg2);
 }
 
 int
@@ -747,9 +747,9 @@  int
 debug_target::can_use_hw_breakpoint (enum bptype arg0, int arg1, int arg2)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->can_use_hw_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->can_use_hw_breakpoint (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->can_use_hw_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->can_use_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->can_use_hw_breakpoint (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->can_use_hw_breakpoint (", this->beneath ()->shortname ());
   target_debug_print_enum_bptype (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -764,7 +764,7 @@  debug_target::can_use_hw_breakpoint (enum bptype arg0, int arg1, int arg2)
 int
 target_ops::ranged_break_num_registers ()
 {
-  return this->beneath->ranged_break_num_registers ();
+  return this->beneath ()->ranged_break_num_registers ();
 }
 
 int
@@ -777,9 +777,9 @@  int
 debug_target::ranged_break_num_registers ()
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->ranged_break_num_registers (...)\n", this->beneath->shortname ());
-  result = this->beneath->ranged_break_num_registers ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->ranged_break_num_registers (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->ranged_break_num_registers (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->ranged_break_num_registers ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->ranged_break_num_registers (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -789,7 +789,7 @@  debug_target::ranged_break_num_registers ()
 int
 target_ops::insert_hw_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
 {
-  return this->beneath->insert_hw_breakpoint (arg0, arg1);
+  return this->beneath ()->insert_hw_breakpoint (arg0, arg1);
 }
 
 int
@@ -802,9 +802,9 @@  int
 debug_target::insert_hw_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_hw_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->insert_hw_breakpoint (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_hw_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->insert_hw_breakpoint (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_hw_breakpoint (", this->beneath ()->shortname ());
   target_debug_print_struct_gdbarch_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_bp_target_info_p (arg1);
@@ -817,7 +817,7 @@  debug_target::insert_hw_breakpoint (struct gdbarch *arg0, struct bp_target_info
 int
 target_ops::remove_hw_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
 {
-  return this->beneath->remove_hw_breakpoint (arg0, arg1);
+  return this->beneath ()->remove_hw_breakpoint (arg0, arg1);
 }
 
 int
@@ -830,9 +830,9 @@  int
 debug_target::remove_hw_breakpoint (struct gdbarch *arg0, struct bp_target_info *arg1)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_hw_breakpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->remove_hw_breakpoint (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_hw_breakpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_hw_breakpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->remove_hw_breakpoint (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_hw_breakpoint (", this->beneath ()->shortname ());
   target_debug_print_struct_gdbarch_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_bp_target_info_p (arg1);
@@ -845,7 +845,7 @@  debug_target::remove_hw_breakpoint (struct gdbarch *arg0, struct bp_target_info
 int
 target_ops::remove_watchpoint (CORE_ADDR arg0, int arg1, enum target_hw_bp_type arg2, struct expression *arg3)
 {
-  return this->beneath->remove_watchpoint (arg0, arg1, arg2, arg3);
+  return this->beneath ()->remove_watchpoint (arg0, arg1, arg2, arg3);
 }
 
 int
@@ -858,9 +858,9 @@  int
 debug_target::remove_watchpoint (CORE_ADDR arg0, int arg1, enum target_hw_bp_type arg2, struct expression *arg3)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_watchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->remove_watchpoint (arg0, arg1, arg2, arg3);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_watchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_watchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->remove_watchpoint (arg0, arg1, arg2, arg3);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_watchpoint (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -877,7 +877,7 @@  debug_target::remove_watchpoint (CORE_ADDR arg0, int arg1, enum target_hw_bp_typ
 int
 target_ops::insert_watchpoint (CORE_ADDR arg0, int arg1, enum target_hw_bp_type arg2, struct expression *arg3)
 {
-  return this->beneath->insert_watchpoint (arg0, arg1, arg2, arg3);
+  return this->beneath ()->insert_watchpoint (arg0, arg1, arg2, arg3);
 }
 
 int
@@ -890,9 +890,9 @@  int
 debug_target::insert_watchpoint (CORE_ADDR arg0, int arg1, enum target_hw_bp_type arg2, struct expression *arg3)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_watchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->insert_watchpoint (arg0, arg1, arg2, arg3);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_watchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_watchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->insert_watchpoint (arg0, arg1, arg2, arg3);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_watchpoint (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -909,7 +909,7 @@  debug_target::insert_watchpoint (CORE_ADDR arg0, int arg1, enum target_hw_bp_typ
 int
 target_ops::insert_mask_watchpoint (CORE_ADDR arg0, CORE_ADDR arg1, enum target_hw_bp_type arg2)
 {
-  return this->beneath->insert_mask_watchpoint (arg0, arg1, arg2);
+  return this->beneath ()->insert_mask_watchpoint (arg0, arg1, arg2);
 }
 
 int
@@ -922,9 +922,9 @@  int
 debug_target::insert_mask_watchpoint (CORE_ADDR arg0, CORE_ADDR arg1, enum target_hw_bp_type arg2)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_mask_watchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->insert_mask_watchpoint (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_mask_watchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_mask_watchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->insert_mask_watchpoint (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_mask_watchpoint (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_CORE_ADDR (arg1);
@@ -939,7 +939,7 @@  debug_target::insert_mask_watchpoint (CORE_ADDR arg0, CORE_ADDR arg1, enum targe
 int
 target_ops::remove_mask_watchpoint (CORE_ADDR arg0, CORE_ADDR arg1, enum target_hw_bp_type arg2)
 {
-  return this->beneath->remove_mask_watchpoint (arg0, arg1, arg2);
+  return this->beneath ()->remove_mask_watchpoint (arg0, arg1, arg2);
 }
 
 int
@@ -952,9 +952,9 @@  int
 debug_target::remove_mask_watchpoint (CORE_ADDR arg0, CORE_ADDR arg1, enum target_hw_bp_type arg2)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_mask_watchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->remove_mask_watchpoint (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_mask_watchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_mask_watchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->remove_mask_watchpoint (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_mask_watchpoint (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_CORE_ADDR (arg1);
@@ -969,7 +969,7 @@  debug_target::remove_mask_watchpoint (CORE_ADDR arg0, CORE_ADDR arg1, enum targe
 bool
 target_ops::stopped_by_watchpoint ()
 {
-  return this->beneath->stopped_by_watchpoint ();
+  return this->beneath ()->stopped_by_watchpoint ();
 }
 
 bool
@@ -982,9 +982,9 @@  bool
 debug_target::stopped_by_watchpoint ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_watchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->stopped_by_watchpoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_watchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_by_watchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->stopped_by_watchpoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_by_watchpoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -994,7 +994,7 @@  debug_target::stopped_by_watchpoint ()
 int
 target_ops::have_steppable_watchpoint ()
 {
-  return this->beneath->have_steppable_watchpoint ();
+  return this->beneath ()->have_steppable_watchpoint ();
 }
 
 int
@@ -1007,9 +1007,9 @@  int
 debug_target::have_steppable_watchpoint ()
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->have_steppable_watchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->have_steppable_watchpoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->have_steppable_watchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->have_steppable_watchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->have_steppable_watchpoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->have_steppable_watchpoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -1019,7 +1019,7 @@  debug_target::have_steppable_watchpoint ()
 bool
 target_ops::have_continuable_watchpoint ()
 {
-  return this->beneath->have_continuable_watchpoint ();
+  return this->beneath ()->have_continuable_watchpoint ();
 }
 
 bool
@@ -1032,9 +1032,9 @@  bool
 debug_target::have_continuable_watchpoint ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->have_continuable_watchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->have_continuable_watchpoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->have_continuable_watchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->have_continuable_watchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->have_continuable_watchpoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->have_continuable_watchpoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -1044,7 +1044,7 @@  debug_target::have_continuable_watchpoint ()
 bool
 target_ops::stopped_data_address (CORE_ADDR *arg0)
 {
-  return this->beneath->stopped_data_address (arg0);
+  return this->beneath ()->stopped_data_address (arg0);
 }
 
 bool
@@ -1057,9 +1057,9 @@  bool
 debug_target::stopped_data_address (CORE_ADDR *arg0)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_data_address (...)\n", this->beneath->shortname ());
-  result = this->beneath->stopped_data_address (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_data_address (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->stopped_data_address (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->stopped_data_address (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->stopped_data_address (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR_p (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
@@ -1070,7 +1070,7 @@  debug_target::stopped_data_address (CORE_ADDR *arg0)
 bool
 target_ops::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2)
 {
-  return this->beneath->watchpoint_addr_within_range (arg0, arg1, arg2);
+  return this->beneath ()->watchpoint_addr_within_range (arg0, arg1, arg2);
 }
 
 bool
@@ -1083,9 +1083,9 @@  bool
 debug_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->watchpoint_addr_within_range (...)\n", this->beneath->shortname ());
-  result = this->beneath->watchpoint_addr_within_range (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->watchpoint_addr_within_range (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->watchpoint_addr_within_range (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->watchpoint_addr_within_range (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->watchpoint_addr_within_range (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_CORE_ADDR (arg1);
@@ -1100,7 +1100,7 @@  debug_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int
 int
 target_ops::region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1)
 {
-  return this->beneath->region_ok_for_hw_watchpoint (arg0, arg1);
+  return this->beneath ()->region_ok_for_hw_watchpoint (arg0, arg1);
 }
 
 int
@@ -1113,9 +1113,9 @@  int
 debug_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->region_ok_for_hw_watchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->region_ok_for_hw_watchpoint (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->region_ok_for_hw_watchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->region_ok_for_hw_watchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->region_ok_for_hw_watchpoint (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->region_ok_for_hw_watchpoint (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -1128,7 +1128,7 @@  debug_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1)
 bool
 target_ops::can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3)
 {
-  return this->beneath->can_accel_watchpoint_condition (arg0, arg1, arg2, arg3);
+  return this->beneath ()->can_accel_watchpoint_condition (arg0, arg1, arg2, arg3);
 }
 
 bool
@@ -1141,9 +1141,9 @@  bool
 debug_target::can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->can_accel_watchpoint_condition (...)\n", this->beneath->shortname ());
-  result = this->beneath->can_accel_watchpoint_condition (arg0, arg1, arg2, arg3);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->can_accel_watchpoint_condition (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->can_accel_watchpoint_condition (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->can_accel_watchpoint_condition (arg0, arg1, arg2, arg3);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->can_accel_watchpoint_condition (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -1160,7 +1160,7 @@  debug_target::can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2
 int
 target_ops::masked_watch_num_registers (CORE_ADDR arg0, CORE_ADDR arg1)
 {
-  return this->beneath->masked_watch_num_registers (arg0, arg1);
+  return this->beneath ()->masked_watch_num_registers (arg0, arg1);
 }
 
 int
@@ -1173,9 +1173,9 @@  int
 debug_target::masked_watch_num_registers (CORE_ADDR arg0, CORE_ADDR arg1)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->masked_watch_num_registers (...)\n", this->beneath->shortname ());
-  result = this->beneath->masked_watch_num_registers (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->masked_watch_num_registers (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->masked_watch_num_registers (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->masked_watch_num_registers (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->masked_watch_num_registers (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_CORE_ADDR (arg1);
@@ -1188,7 +1188,7 @@  debug_target::masked_watch_num_registers (CORE_ADDR arg0, CORE_ADDR arg1)
 int
 target_ops::can_do_single_step ()
 {
-  return this->beneath->can_do_single_step ();
+  return this->beneath ()->can_do_single_step ();
 }
 
 int
@@ -1201,9 +1201,9 @@  int
 debug_target::can_do_single_step ()
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->can_do_single_step (...)\n", this->beneath->shortname ());
-  result = this->beneath->can_do_single_step ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->can_do_single_step (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->can_do_single_step (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->can_do_single_step ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->can_do_single_step (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -1213,7 +1213,7 @@  debug_target::can_do_single_step ()
 bool
 target_ops::supports_terminal_ours ()
 {
-  return this->beneath->supports_terminal_ours ();
+  return this->beneath ()->supports_terminal_ours ();
 }
 
 bool
@@ -1226,9 +1226,9 @@  bool
 debug_target::supports_terminal_ours ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_terminal_ours (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_terminal_ours ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_terminal_ours (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_terminal_ours (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_terminal_ours ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_terminal_ours (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -1238,7 +1238,7 @@  debug_target::supports_terminal_ours ()
 void
 target_ops::terminal_init ()
 {
-  this->beneath->terminal_init ();
+  this->beneath ()->terminal_init ();
 }
 
 void
@@ -1249,16 +1249,16 @@  dummy_target::terminal_init ()
 void
 debug_target::terminal_init ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_init (...)\n", this->beneath->shortname ());
-  this->beneath->terminal_init ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_init (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_init (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->terminal_init ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_init (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::terminal_inferior ()
 {
-  this->beneath->terminal_inferior ();
+  this->beneath ()->terminal_inferior ();
 }
 
 void
@@ -1269,16 +1269,16 @@  dummy_target::terminal_inferior ()
 void
 debug_target::terminal_inferior ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_inferior (...)\n", this->beneath->shortname ());
-  this->beneath->terminal_inferior ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_inferior (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_inferior (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->terminal_inferior ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_inferior (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::terminal_save_inferior ()
 {
-  this->beneath->terminal_save_inferior ();
+  this->beneath ()->terminal_save_inferior ();
 }
 
 void
@@ -1289,16 +1289,16 @@  dummy_target::terminal_save_inferior ()
 void
 debug_target::terminal_save_inferior ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_save_inferior (...)\n", this->beneath->shortname ());
-  this->beneath->terminal_save_inferior ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_save_inferior (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_save_inferior (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->terminal_save_inferior ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_save_inferior (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::terminal_ours_for_output ()
 {
-  this->beneath->terminal_ours_for_output ();
+  this->beneath ()->terminal_ours_for_output ();
 }
 
 void
@@ -1309,16 +1309,16 @@  dummy_target::terminal_ours_for_output ()
 void
 debug_target::terminal_ours_for_output ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_ours_for_output (...)\n", this->beneath->shortname ());
-  this->beneath->terminal_ours_for_output ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_ours_for_output (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_ours_for_output (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->terminal_ours_for_output ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_ours_for_output (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::terminal_ours ()
 {
-  this->beneath->terminal_ours ();
+  this->beneath ()->terminal_ours ();
 }
 
 void
@@ -1329,16 +1329,16 @@  dummy_target::terminal_ours ()
 void
 debug_target::terminal_ours ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_ours (...)\n", this->beneath->shortname ());
-  this->beneath->terminal_ours ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_ours (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_ours (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->terminal_ours ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_ours (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::terminal_info (const char *arg0, int arg1)
 {
-  this->beneath->terminal_info (arg0, arg1);
+  this->beneath ()->terminal_info (arg0, arg1);
 }
 
 void
@@ -1350,9 +1350,9 @@  dummy_target::terminal_info (const char *arg0, int arg1)
 void
 debug_target::terminal_info (const char *arg0, int arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_info (...)\n", this->beneath->shortname ());
-  this->beneath->terminal_info (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_info (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_info (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->terminal_info (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_info (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -1362,7 +1362,7 @@  debug_target::terminal_info (const char *arg0, int arg1)
 void
 target_ops::kill ()
 {
-  this->beneath->kill ();
+  this->beneath ()->kill ();
 }
 
 void
@@ -1374,16 +1374,16 @@  dummy_target::kill ()
 void
 debug_target::kill ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->kill (...)\n", this->beneath->shortname ());
-  this->beneath->kill ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->kill (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->kill (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->kill ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->kill (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::load (const char *arg0, int arg1)
 {
-  this->beneath->load (arg0, arg1);
+  this->beneath ()->load (arg0, arg1);
 }
 
 void
@@ -1395,9 +1395,9 @@  dummy_target::load (const char *arg0, int arg1)
 void
 debug_target::load (const char *arg0, int arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->load (...)\n", this->beneath->shortname ());
-  this->beneath->load (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->load (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->load (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->load (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->load (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -1407,7 +1407,7 @@  debug_target::load (const char *arg0, int arg1)
 void
 target_ops::post_startup_inferior (ptid_t arg0)
 {
-  this->beneath->post_startup_inferior (arg0);
+  this->beneath ()->post_startup_inferior (arg0);
 }
 
 void
@@ -1418,9 +1418,9 @@  dummy_target::post_startup_inferior (ptid_t arg0)
 void
 debug_target::post_startup_inferior (ptid_t arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->post_startup_inferior (...)\n", this->beneath->shortname ());
-  this->beneath->post_startup_inferior (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->post_startup_inferior (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->post_startup_inferior (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->post_startup_inferior (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->post_startup_inferior (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -1428,7 +1428,7 @@  debug_target::post_startup_inferior (ptid_t arg0)
 int
 target_ops::insert_fork_catchpoint (int arg0)
 {
-  return this->beneath->insert_fork_catchpoint (arg0);
+  return this->beneath ()->insert_fork_catchpoint (arg0);
 }
 
 int
@@ -1441,9 +1441,9 @@  int
 debug_target::insert_fork_catchpoint (int arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_fork_catchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->insert_fork_catchpoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_fork_catchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_fork_catchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->insert_fork_catchpoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_fork_catchpoint (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -1454,7 +1454,7 @@  debug_target::insert_fork_catchpoint (int arg0)
 int
 target_ops::remove_fork_catchpoint (int arg0)
 {
-  return this->beneath->remove_fork_catchpoint (arg0);
+  return this->beneath ()->remove_fork_catchpoint (arg0);
 }
 
 int
@@ -1467,9 +1467,9 @@  int
 debug_target::remove_fork_catchpoint (int arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_fork_catchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->remove_fork_catchpoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_fork_catchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_fork_catchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->remove_fork_catchpoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_fork_catchpoint (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -1480,7 +1480,7 @@  debug_target::remove_fork_catchpoint (int arg0)
 int
 target_ops::insert_vfork_catchpoint (int arg0)
 {
-  return this->beneath->insert_vfork_catchpoint (arg0);
+  return this->beneath ()->insert_vfork_catchpoint (arg0);
 }
 
 int
@@ -1493,9 +1493,9 @@  int
 debug_target::insert_vfork_catchpoint (int arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_vfork_catchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->insert_vfork_catchpoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_vfork_catchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_vfork_catchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->insert_vfork_catchpoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_vfork_catchpoint (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -1506,7 +1506,7 @@  debug_target::insert_vfork_catchpoint (int arg0)
 int
 target_ops::remove_vfork_catchpoint (int arg0)
 {
-  return this->beneath->remove_vfork_catchpoint (arg0);
+  return this->beneath ()->remove_vfork_catchpoint (arg0);
 }
 
 int
@@ -1519,9 +1519,9 @@  int
 debug_target::remove_vfork_catchpoint (int arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_vfork_catchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->remove_vfork_catchpoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_vfork_catchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_vfork_catchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->remove_vfork_catchpoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_vfork_catchpoint (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -1532,7 +1532,7 @@  debug_target::remove_vfork_catchpoint (int arg0)
 int
 target_ops::follow_fork (int arg0, int arg1)
 {
-  return this->beneath->follow_fork (arg0, arg1);
+  return this->beneath ()->follow_fork (arg0, arg1);
 }
 
 int
@@ -1545,9 +1545,9 @@  int
 debug_target::follow_fork (int arg0, int arg1)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->follow_fork (...)\n", this->beneath->shortname ());
-  result = this->beneath->follow_fork (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->follow_fork (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->follow_fork (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->follow_fork (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->follow_fork (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -1560,7 +1560,7 @@  debug_target::follow_fork (int arg0, int arg1)
 int
 target_ops::insert_exec_catchpoint (int arg0)
 {
-  return this->beneath->insert_exec_catchpoint (arg0);
+  return this->beneath ()->insert_exec_catchpoint (arg0);
 }
 
 int
@@ -1573,9 +1573,9 @@  int
 debug_target::insert_exec_catchpoint (int arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_exec_catchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->insert_exec_catchpoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_exec_catchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insert_exec_catchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->insert_exec_catchpoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insert_exec_catchpoint (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -1586,7 +1586,7 @@  debug_target::insert_exec_catchpoint (int arg0)
 int
 target_ops::remove_exec_catchpoint (int arg0)
 {
-  return this->beneath->remove_exec_catchpoint (arg0);
+  return this->beneath ()->remove_exec_catchpoint (arg0);
 }
 
 int
@@ -1599,9 +1599,9 @@  int
 debug_target::remove_exec_catchpoint (int arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_exec_catchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->remove_exec_catchpoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_exec_catchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->remove_exec_catchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->remove_exec_catchpoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->remove_exec_catchpoint (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -1612,7 +1612,7 @@  debug_target::remove_exec_catchpoint (int arg0)
 void
 target_ops::follow_exec (struct inferior *arg0, char *arg1)
 {
-  this->beneath->follow_exec (arg0, arg1);
+  this->beneath ()->follow_exec (arg0, arg1);
 }
 
 void
@@ -1623,9 +1623,9 @@  dummy_target::follow_exec (struct inferior *arg0, char *arg1)
 void
 debug_target::follow_exec (struct inferior *arg0, char *arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->follow_exec (...)\n", this->beneath->shortname ());
-  this->beneath->follow_exec (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->follow_exec (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->follow_exec (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->follow_exec (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->follow_exec (", this->beneath ()->shortname ());
   target_debug_print_struct_inferior_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_char_p (arg1);
@@ -1635,7 +1635,7 @@  debug_target::follow_exec (struct inferior *arg0, char *arg1)
 int
 target_ops::set_syscall_catchpoint (int arg0, bool arg1, int arg2, gdb::array_view<const int> arg3)
 {
-  return this->beneath->set_syscall_catchpoint (arg0, arg1, arg2, arg3);
+  return this->beneath ()->set_syscall_catchpoint (arg0, arg1, arg2, arg3);
 }
 
 int
@@ -1648,9 +1648,9 @@  int
 debug_target::set_syscall_catchpoint (int arg0, bool arg1, int arg2, gdb::array_view<const int> arg3)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->set_syscall_catchpoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->set_syscall_catchpoint (arg0, arg1, arg2, arg3);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->set_syscall_catchpoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->set_syscall_catchpoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->set_syscall_catchpoint (arg0, arg1, arg2, arg3);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->set_syscall_catchpoint (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_bool (arg1);
@@ -1667,7 +1667,7 @@  debug_target::set_syscall_catchpoint (int arg0, bool arg1, int arg2, gdb::array_
 void
 target_ops::mourn_inferior ()
 {
-  this->beneath->mourn_inferior ();
+  this->beneath ()->mourn_inferior ();
 }
 
 void
@@ -1679,16 +1679,16 @@  dummy_target::mourn_inferior ()
 void
 debug_target::mourn_inferior ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->mourn_inferior (...)\n", this->beneath->shortname ());
-  this->beneath->mourn_inferior ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->mourn_inferior (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->mourn_inferior (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->mourn_inferior ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->mourn_inferior (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::pass_signals (int arg0, unsigned char * arg1)
 {
-  this->beneath->pass_signals (arg0, arg1);
+  this->beneath ()->pass_signals (arg0, arg1);
 }
 
 void
@@ -1699,9 +1699,9 @@  dummy_target::pass_signals (int arg0, unsigned char * arg1)
 void
 debug_target::pass_signals (int arg0, unsigned char * arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->pass_signals (...)\n", this->beneath->shortname ());
-  this->beneath->pass_signals (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->pass_signals (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->pass_signals (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->pass_signals (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->pass_signals (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_signals (arg1);
@@ -1711,7 +1711,7 @@  debug_target::pass_signals (int arg0, unsigned char * arg1)
 void
 target_ops::program_signals (int arg0, unsigned char * arg1)
 {
-  this->beneath->program_signals (arg0, arg1);
+  this->beneath ()->program_signals (arg0, arg1);
 }
 
 void
@@ -1722,9 +1722,9 @@  dummy_target::program_signals (int arg0, unsigned char * arg1)
 void
 debug_target::program_signals (int arg0, unsigned char * arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->program_signals (...)\n", this->beneath->shortname ());
-  this->beneath->program_signals (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->program_signals (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->program_signals (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->program_signals (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->program_signals (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_signals (arg1);
@@ -1734,7 +1734,7 @@  debug_target::program_signals (int arg0, unsigned char * arg1)
 bool
 target_ops::thread_alive (ptid_t arg0)
 {
-  return this->beneath->thread_alive (arg0);
+  return this->beneath ()->thread_alive (arg0);
 }
 
 bool
@@ -1747,9 +1747,9 @@  bool
 debug_target::thread_alive (ptid_t arg0)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_alive (...)\n", this->beneath->shortname ());
-  result = this->beneath->thread_alive (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_alive (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_alive (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->thread_alive (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_alive (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
@@ -1760,7 +1760,7 @@  debug_target::thread_alive (ptid_t arg0)
 void
 target_ops::update_thread_list ()
 {
-  this->beneath->update_thread_list ();
+  this->beneath ()->update_thread_list ();
 }
 
 void
@@ -1771,16 +1771,16 @@  dummy_target::update_thread_list ()
 void
 debug_target::update_thread_list ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->update_thread_list (...)\n", this->beneath->shortname ());
-  this->beneath->update_thread_list ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->update_thread_list (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->update_thread_list (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->update_thread_list ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->update_thread_list (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 const char *
 target_ops::pid_to_str (ptid_t arg0)
 {
-  return this->beneath->pid_to_str (arg0);
+  return this->beneath ()->pid_to_str (arg0);
 }
 
 const char *
@@ -1793,9 +1793,9 @@  const char *
 debug_target::pid_to_str (ptid_t arg0)
 {
   const char * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->pid_to_str (...)\n", this->beneath->shortname ());
-  result = this->beneath->pid_to_str (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->pid_to_str (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->pid_to_str (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->pid_to_str (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->pid_to_str (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_const_char_p (result);
@@ -1806,7 +1806,7 @@  debug_target::pid_to_str (ptid_t arg0)
 const char *
 target_ops::extra_thread_info (thread_info *arg0)
 {
-  return this->beneath->extra_thread_info (arg0);
+  return this->beneath ()->extra_thread_info (arg0);
 }
 
 const char *
@@ -1819,9 +1819,9 @@  const char *
 debug_target::extra_thread_info (thread_info *arg0)
 {
   const char * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->extra_thread_info (...)\n", this->beneath->shortname ());
-  result = this->beneath->extra_thread_info (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->extra_thread_info (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->extra_thread_info (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->extra_thread_info (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->extra_thread_info (", this->beneath ()->shortname ());
   target_debug_print_thread_info_p (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_const_char_p (result);
@@ -1832,7 +1832,7 @@  debug_target::extra_thread_info (thread_info *arg0)
 const char *
 target_ops::thread_name (thread_info *arg0)
 {
-  return this->beneath->thread_name (arg0);
+  return this->beneath ()->thread_name (arg0);
 }
 
 const char *
@@ -1845,9 +1845,9 @@  const char *
 debug_target::thread_name (thread_info *arg0)
 {
   const char * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_name (...)\n", this->beneath->shortname ());
-  result = this->beneath->thread_name (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_name (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_name (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->thread_name (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_name (", this->beneath ()->shortname ());
   target_debug_print_thread_info_p (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_const_char_p (result);
@@ -1858,7 +1858,7 @@  debug_target::thread_name (thread_info *arg0)
 thread_info *
 target_ops::thread_handle_to_thread_info (const gdb_byte *arg0, int arg1, inferior *arg2)
 {
-  return this->beneath->thread_handle_to_thread_info (arg0, arg1, arg2);
+  return this->beneath ()->thread_handle_to_thread_info (arg0, arg1, arg2);
 }
 
 thread_info *
@@ -1871,9 +1871,9 @@  thread_info *
 debug_target::thread_handle_to_thread_info (const gdb_byte *arg0, int arg1, inferior *arg2)
 {
   thread_info * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_handle_to_thread_info (...)\n", this->beneath->shortname ());
-  result = this->beneath->thread_handle_to_thread_info (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_handle_to_thread_info (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_handle_to_thread_info (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->thread_handle_to_thread_info (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_handle_to_thread_info (", this->beneath ()->shortname ());
   target_debug_print_const_gdb_byte_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -1888,7 +1888,7 @@  debug_target::thread_handle_to_thread_info (const gdb_byte *arg0, int arg1, infe
 void
 target_ops::stop (ptid_t arg0)
 {
-  this->beneath->stop (arg0);
+  this->beneath ()->stop (arg0);
 }
 
 void
@@ -1899,9 +1899,9 @@  dummy_target::stop (ptid_t arg0)
 void
 debug_target::stop (ptid_t arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->stop (...)\n", this->beneath->shortname ());
-  this->beneath->stop (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->stop (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->stop (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->stop (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->stop (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -1909,7 +1909,7 @@  debug_target::stop (ptid_t arg0)
 void
 target_ops::interrupt ()
 {
-  this->beneath->interrupt ();
+  this->beneath ()->interrupt ();
 }
 
 void
@@ -1920,16 +1920,16 @@  dummy_target::interrupt ()
 void
 debug_target::interrupt ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->interrupt (...)\n", this->beneath->shortname ());
-  this->beneath->interrupt ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->interrupt (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->interrupt (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->interrupt ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->interrupt (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::pass_ctrlc ()
 {
-  this->beneath->pass_ctrlc ();
+  this->beneath ()->pass_ctrlc ();
 }
 
 void
@@ -1941,16 +1941,16 @@  dummy_target::pass_ctrlc ()
 void
 debug_target::pass_ctrlc ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->pass_ctrlc (...)\n", this->beneath->shortname ());
-  this->beneath->pass_ctrlc ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->pass_ctrlc (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->pass_ctrlc (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->pass_ctrlc ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->pass_ctrlc (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::rcmd (const char *arg0, struct ui_file *arg1)
 {
-  this->beneath->rcmd (arg0, arg1);
+  this->beneath ()->rcmd (arg0, arg1);
 }
 
 void
@@ -1962,9 +1962,9 @@  dummy_target::rcmd (const char *arg0, struct ui_file *arg1)
 void
 debug_target::rcmd (const char *arg0, struct ui_file *arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->rcmd (...)\n", this->beneath->shortname ());
-  this->beneath->rcmd (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->rcmd (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->rcmd (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->rcmd (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->rcmd (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_ui_file_p (arg1);
@@ -1974,7 +1974,7 @@  debug_target::rcmd (const char *arg0, struct ui_file *arg1)
 char *
 target_ops::pid_to_exec_file (int arg0)
 {
-  return this->beneath->pid_to_exec_file (arg0);
+  return this->beneath ()->pid_to_exec_file (arg0);
 }
 
 char *
@@ -1987,9 +1987,9 @@  char *
 debug_target::pid_to_exec_file (int arg0)
 {
   char * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->pid_to_exec_file (...)\n", this->beneath->shortname ());
-  result = this->beneath->pid_to_exec_file (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->pid_to_exec_file (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->pid_to_exec_file (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->pid_to_exec_file (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->pid_to_exec_file (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_char_p (result);
@@ -2000,7 +2000,7 @@  debug_target::pid_to_exec_file (int arg0)
 void
 target_ops::log_command (const char *arg0)
 {
-  this->beneath->log_command (arg0);
+  this->beneath ()->log_command (arg0);
 }
 
 void
@@ -2011,9 +2011,9 @@  dummy_target::log_command (const char *arg0)
 void
 debug_target::log_command (const char *arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->log_command (...)\n", this->beneath->shortname ());
-  this->beneath->log_command (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->log_command (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->log_command (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->log_command (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->log_command (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -2021,7 +2021,7 @@  debug_target::log_command (const char *arg0)
 struct target_section_table *
 target_ops::get_section_table ()
 {
-  return this->beneath->get_section_table ();
+  return this->beneath ()->get_section_table ();
 }
 
 struct target_section_table *
@@ -2034,9 +2034,9 @@  struct target_section_table *
 debug_target::get_section_table ()
 {
   struct target_section_table * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_section_table (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_section_table ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_section_table (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_section_table (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_section_table ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_section_table (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_struct_target_section_table_p (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2046,7 +2046,7 @@  debug_target::get_section_table ()
 thread_control_capabilities
 target_ops::get_thread_control_capabilities ()
 {
-  return this->beneath->get_thread_control_capabilities ();
+  return this->beneath ()->get_thread_control_capabilities ();
 }
 
 thread_control_capabilities
@@ -2059,9 +2059,9 @@  thread_control_capabilities
 debug_target::get_thread_control_capabilities ()
 {
   thread_control_capabilities result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_thread_control_capabilities (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_thread_control_capabilities ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_thread_control_capabilities (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_thread_control_capabilities (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_thread_control_capabilities ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_thread_control_capabilities (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_thread_control_capabilities (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2071,7 +2071,7 @@  debug_target::get_thread_control_capabilities ()
 bool
 target_ops::attach_no_wait ()
 {
-  return this->beneath->attach_no_wait ();
+  return this->beneath ()->attach_no_wait ();
 }
 
 bool
@@ -2084,9 +2084,9 @@  bool
 debug_target::attach_no_wait ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->attach_no_wait (...)\n", this->beneath->shortname ());
-  result = this->beneath->attach_no_wait ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->attach_no_wait (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->attach_no_wait (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->attach_no_wait ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->attach_no_wait (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2096,7 +2096,7 @@  debug_target::attach_no_wait ()
 bool
 target_ops::can_async_p ()
 {
-  return this->beneath->can_async_p ();
+  return this->beneath ()->can_async_p ();
 }
 
 bool
@@ -2109,9 +2109,9 @@  bool
 debug_target::can_async_p ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->can_async_p (...)\n", this->beneath->shortname ());
-  result = this->beneath->can_async_p ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->can_async_p (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->can_async_p (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->can_async_p ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->can_async_p (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2121,7 +2121,7 @@  debug_target::can_async_p ()
 bool
 target_ops::is_async_p ()
 {
-  return this->beneath->is_async_p ();
+  return this->beneath ()->is_async_p ();
 }
 
 bool
@@ -2134,9 +2134,9 @@  bool
 debug_target::is_async_p ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->is_async_p (...)\n", this->beneath->shortname ());
-  result = this->beneath->is_async_p ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->is_async_p (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->is_async_p (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->is_async_p ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->is_async_p (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2146,7 +2146,7 @@  debug_target::is_async_p ()
 void
 target_ops::async (int arg0)
 {
-  this->beneath->async (arg0);
+  this->beneath ()->async (arg0);
 }
 
 void
@@ -2158,9 +2158,9 @@  dummy_target::async (int arg0)
 void
 debug_target::async (int arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->async (...)\n", this->beneath->shortname ());
-  this->beneath->async (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->async (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->async (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->async (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->async (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -2168,7 +2168,7 @@  debug_target::async (int arg0)
 void
 target_ops::thread_events (int arg0)
 {
-  this->beneath->thread_events (arg0);
+  this->beneath ()->thread_events (arg0);
 }
 
 void
@@ -2179,9 +2179,9 @@  dummy_target::thread_events (int arg0)
 void
 debug_target::thread_events (int arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_events (...)\n", this->beneath->shortname ());
-  this->beneath->thread_events (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_events (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_events (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->thread_events (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_events (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -2189,7 +2189,7 @@  debug_target::thread_events (int arg0)
 bool
 target_ops::supports_non_stop ()
 {
-  return this->beneath->supports_non_stop ();
+  return this->beneath ()->supports_non_stop ();
 }
 
 bool
@@ -2202,9 +2202,9 @@  bool
 debug_target::supports_non_stop ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_non_stop (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_non_stop ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_non_stop (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_non_stop (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_non_stop ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_non_stop (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2214,7 +2214,7 @@  debug_target::supports_non_stop ()
 bool
 target_ops::always_non_stop_p ()
 {
-  return this->beneath->always_non_stop_p ();
+  return this->beneath ()->always_non_stop_p ();
 }
 
 bool
@@ -2227,9 +2227,9 @@  bool
 debug_target::always_non_stop_p ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->always_non_stop_p (...)\n", this->beneath->shortname ());
-  result = this->beneath->always_non_stop_p ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->always_non_stop_p (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->always_non_stop_p (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->always_non_stop_p ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->always_non_stop_p (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2239,7 +2239,7 @@  debug_target::always_non_stop_p ()
 int
 target_ops::find_memory_regions (find_memory_region_ftype arg0, void *arg1)
 {
-  return this->beneath->find_memory_regions (arg0, arg1);
+  return this->beneath ()->find_memory_regions (arg0, arg1);
 }
 
 int
@@ -2252,9 +2252,9 @@  int
 debug_target::find_memory_regions (find_memory_region_ftype arg0, void *arg1)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->find_memory_regions (...)\n", this->beneath->shortname ());
-  result = this->beneath->find_memory_regions (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->find_memory_regions (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->find_memory_regions (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->find_memory_regions (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->find_memory_regions (", this->beneath ()->shortname ());
   target_debug_print_find_memory_region_ftype (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_void_p (arg1);
@@ -2267,7 +2267,7 @@  debug_target::find_memory_regions (find_memory_region_ftype arg0, void *arg1)
 char *
 target_ops::make_corefile_notes (bfd *arg0, int *arg1)
 {
-  return this->beneath->make_corefile_notes (arg0, arg1);
+  return this->beneath ()->make_corefile_notes (arg0, arg1);
 }
 
 char *
@@ -2280,9 +2280,9 @@  char *
 debug_target::make_corefile_notes (bfd *arg0, int *arg1)
 {
   char * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->make_corefile_notes (...)\n", this->beneath->shortname ());
-  result = this->beneath->make_corefile_notes (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->make_corefile_notes (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->make_corefile_notes (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->make_corefile_notes (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->make_corefile_notes (", this->beneath ()->shortname ());
   target_debug_print_bfd_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int_p (arg1);
@@ -2295,7 +2295,7 @@  debug_target::make_corefile_notes (bfd *arg0, int *arg1)
 gdb_byte *
 target_ops::get_bookmark (const char *arg0, int arg1)
 {
-  return this->beneath->get_bookmark (arg0, arg1);
+  return this->beneath ()->get_bookmark (arg0, arg1);
 }
 
 gdb_byte *
@@ -2308,9 +2308,9 @@  gdb_byte *
 debug_target::get_bookmark (const char *arg0, int arg1)
 {
   gdb_byte * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_bookmark (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_bookmark (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_bookmark (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_bookmark (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_bookmark (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_bookmark (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -2323,7 +2323,7 @@  debug_target::get_bookmark (const char *arg0, int arg1)
 void
 target_ops::goto_bookmark (const gdb_byte *arg0, int arg1)
 {
-  this->beneath->goto_bookmark (arg0, arg1);
+  this->beneath ()->goto_bookmark (arg0, arg1);
 }
 
 void
@@ -2335,9 +2335,9 @@  dummy_target::goto_bookmark (const gdb_byte *arg0, int arg1)
 void
 debug_target::goto_bookmark (const gdb_byte *arg0, int arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->goto_bookmark (...)\n", this->beneath->shortname ());
-  this->beneath->goto_bookmark (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->goto_bookmark (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->goto_bookmark (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->goto_bookmark (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->goto_bookmark (", this->beneath ()->shortname ());
   target_debug_print_const_gdb_byte_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -2347,7 +2347,7 @@  debug_target::goto_bookmark (const gdb_byte *arg0, int arg1)
 CORE_ADDR
 target_ops::get_thread_local_address (ptid_t arg0, CORE_ADDR arg1, CORE_ADDR arg2)
 {
-  return this->beneath->get_thread_local_address (arg0, arg1, arg2);
+  return this->beneath ()->get_thread_local_address (arg0, arg1, arg2);
 }
 
 CORE_ADDR
@@ -2360,9 +2360,9 @@  CORE_ADDR
 debug_target::get_thread_local_address (ptid_t arg0, CORE_ADDR arg1, CORE_ADDR arg2)
 {
   CORE_ADDR result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_thread_local_address (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_thread_local_address (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_thread_local_address (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_thread_local_address (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_thread_local_address (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_thread_local_address (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_CORE_ADDR (arg1);
@@ -2377,7 +2377,7 @@  debug_target::get_thread_local_address (ptid_t arg0, CORE_ADDR arg1, CORE_ADDR a
 enum target_xfer_status
 target_ops::xfer_partial (enum target_object arg0, const char *arg1, gdb_byte *arg2, const gdb_byte *arg3, ULONGEST arg4, ULONGEST arg5, ULONGEST *arg6)
 {
-  return this->beneath->xfer_partial (arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+  return this->beneath ()->xfer_partial (arg0, arg1, arg2, arg3, arg4, arg5, arg6);
 }
 
 enum target_xfer_status
@@ -2390,9 +2390,9 @@  enum target_xfer_status
 debug_target::xfer_partial (enum target_object arg0, const char *arg1, gdb_byte *arg2, const gdb_byte *arg3, ULONGEST arg4, ULONGEST arg5, ULONGEST *arg6)
 {
   enum target_xfer_status result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->xfer_partial (...)\n", this->beneath->shortname ());
-  result = this->beneath->xfer_partial (arg0, arg1, arg2, arg3, arg4, arg5, arg6);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->xfer_partial (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->xfer_partial (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->xfer_partial (arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->xfer_partial (", this->beneath ()->shortname ());
   target_debug_print_enum_target_object (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_const_char_p (arg1);
@@ -2415,7 +2415,7 @@  debug_target::xfer_partial (enum target_object arg0, const char *arg1, gdb_byte
 ULONGEST
 target_ops::get_memory_xfer_limit ()
 {
-  return this->beneath->get_memory_xfer_limit ();
+  return this->beneath ()->get_memory_xfer_limit ();
 }
 
 ULONGEST
@@ -2428,9 +2428,9 @@  ULONGEST
 debug_target::get_memory_xfer_limit ()
 {
   ULONGEST result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_memory_xfer_limit (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_memory_xfer_limit ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_memory_xfer_limit (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_memory_xfer_limit (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_memory_xfer_limit ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_memory_xfer_limit (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_ULONGEST (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2440,7 +2440,7 @@  debug_target::get_memory_xfer_limit ()
 std::vector<mem_region>
 target_ops::memory_map ()
 {
-  return this->beneath->memory_map ();
+  return this->beneath ()->memory_map ();
 }
 
 std::vector<mem_region>
@@ -2453,9 +2453,9 @@  std::vector<mem_region>
 debug_target::memory_map ()
 {
   std::vector<mem_region> result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->memory_map (...)\n", this->beneath->shortname ());
-  result = this->beneath->memory_map ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->memory_map (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->memory_map (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->memory_map ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->memory_map (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_std_vector_mem_region (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2465,7 +2465,7 @@  debug_target::memory_map ()
 void
 target_ops::flash_erase (ULONGEST arg0, LONGEST arg1)
 {
-  this->beneath->flash_erase (arg0, arg1);
+  this->beneath ()->flash_erase (arg0, arg1);
 }
 
 void
@@ -2477,9 +2477,9 @@  dummy_target::flash_erase (ULONGEST arg0, LONGEST arg1)
 void
 debug_target::flash_erase (ULONGEST arg0, LONGEST arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->flash_erase (...)\n", this->beneath->shortname ());
-  this->beneath->flash_erase (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->flash_erase (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->flash_erase (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->flash_erase (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->flash_erase (", this->beneath ()->shortname ());
   target_debug_print_ULONGEST (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_LONGEST (arg1);
@@ -2489,7 +2489,7 @@  debug_target::flash_erase (ULONGEST arg0, LONGEST arg1)
 void
 target_ops::flash_done ()
 {
-  this->beneath->flash_done ();
+  this->beneath ()->flash_done ();
 }
 
 void
@@ -2501,16 +2501,16 @@  dummy_target::flash_done ()
 void
 debug_target::flash_done ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->flash_done (...)\n", this->beneath->shortname ());
-  this->beneath->flash_done ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->flash_done (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->flash_done (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->flash_done ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->flash_done (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 const struct target_desc *
 target_ops::read_description ()
 {
-  return this->beneath->read_description ();
+  return this->beneath ()->read_description ();
 }
 
 const struct target_desc *
@@ -2523,9 +2523,9 @@  const struct target_desc *
 debug_target::read_description ()
 {
   const struct target_desc * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->read_description (...)\n", this->beneath->shortname ());
-  result = this->beneath->read_description ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->read_description (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->read_description (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->read_description ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->read_description (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_const_struct_target_desc_p (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2535,7 +2535,7 @@  debug_target::read_description ()
 ptid_t
 target_ops::get_ada_task_ptid (long arg0, long arg1)
 {
-  return this->beneath->get_ada_task_ptid (arg0, arg1);
+  return this->beneath ()->get_ada_task_ptid (arg0, arg1);
 }
 
 ptid_t
@@ -2548,9 +2548,9 @@  ptid_t
 debug_target::get_ada_task_ptid (long arg0, long arg1)
 {
   ptid_t result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_ada_task_ptid (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_ada_task_ptid (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_ada_task_ptid (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_ada_task_ptid (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_ada_task_ptid (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_ada_task_ptid (", this->beneath ()->shortname ());
   target_debug_print_long (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_long (arg1);
@@ -2563,7 +2563,7 @@  debug_target::get_ada_task_ptid (long arg0, long arg1)
 int
 target_ops::auxv_parse (gdb_byte **arg0, gdb_byte *arg1, CORE_ADDR *arg2, CORE_ADDR *arg3)
 {
-  return this->beneath->auxv_parse (arg0, arg1, arg2, arg3);
+  return this->beneath ()->auxv_parse (arg0, arg1, arg2, arg3);
 }
 
 int
@@ -2576,9 +2576,9 @@  int
 debug_target::auxv_parse (gdb_byte **arg0, gdb_byte *arg1, CORE_ADDR *arg2, CORE_ADDR *arg3)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->auxv_parse (...)\n", this->beneath->shortname ());
-  result = this->beneath->auxv_parse (arg0, arg1, arg2, arg3);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->auxv_parse (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->auxv_parse (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->auxv_parse (arg0, arg1, arg2, arg3);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->auxv_parse (", this->beneath ()->shortname ());
   target_debug_print_gdb_byte_pp (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_gdb_byte_p (arg1);
@@ -2595,7 +2595,7 @@  debug_target::auxv_parse (gdb_byte **arg0, gdb_byte *arg1, CORE_ADDR *arg2, CORE
 int
 target_ops::search_memory (CORE_ADDR arg0, ULONGEST arg1, const gdb_byte *arg2, ULONGEST arg3, CORE_ADDR *arg4)
 {
-  return this->beneath->search_memory (arg0, arg1, arg2, arg3, arg4);
+  return this->beneath ()->search_memory (arg0, arg1, arg2, arg3, arg4);
 }
 
 int
@@ -2608,9 +2608,9 @@  int
 debug_target::search_memory (CORE_ADDR arg0, ULONGEST arg1, const gdb_byte *arg2, ULONGEST arg3, CORE_ADDR *arg4)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->search_memory (...)\n", this->beneath->shortname ());
-  result = this->beneath->search_memory (arg0, arg1, arg2, arg3, arg4);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->search_memory (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->search_memory (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->search_memory (arg0, arg1, arg2, arg3, arg4);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->search_memory (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_ULONGEST (arg1);
@@ -2629,7 +2629,7 @@  debug_target::search_memory (CORE_ADDR arg0, ULONGEST arg1, const gdb_byte *arg2
 bool
 target_ops::can_execute_reverse ()
 {
-  return this->beneath->can_execute_reverse ();
+  return this->beneath ()->can_execute_reverse ();
 }
 
 bool
@@ -2642,9 +2642,9 @@  bool
 debug_target::can_execute_reverse ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->can_execute_reverse (...)\n", this->beneath->shortname ());
-  result = this->beneath->can_execute_reverse ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->can_execute_reverse (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->can_execute_reverse (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->can_execute_reverse ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->can_execute_reverse (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2654,7 +2654,7 @@  debug_target::can_execute_reverse ()
 enum exec_direction_kind
 target_ops::execution_direction ()
 {
-  return this->beneath->execution_direction ();
+  return this->beneath ()->execution_direction ();
 }
 
 enum exec_direction_kind
@@ -2667,9 +2667,9 @@  enum exec_direction_kind
 debug_target::execution_direction ()
 {
   enum exec_direction_kind result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->execution_direction (...)\n", this->beneath->shortname ());
-  result = this->beneath->execution_direction ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->execution_direction (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->execution_direction (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->execution_direction ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->execution_direction (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_enum_exec_direction_kind (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2679,7 +2679,7 @@  debug_target::execution_direction ()
 bool
 target_ops::supports_multi_process ()
 {
-  return this->beneath->supports_multi_process ();
+  return this->beneath ()->supports_multi_process ();
 }
 
 bool
@@ -2692,9 +2692,9 @@  bool
 debug_target::supports_multi_process ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_multi_process (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_multi_process ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_multi_process (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_multi_process (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_multi_process ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_multi_process (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2704,7 +2704,7 @@  debug_target::supports_multi_process ()
 bool
 target_ops::supports_enable_disable_tracepoint ()
 {
-  return this->beneath->supports_enable_disable_tracepoint ();
+  return this->beneath ()->supports_enable_disable_tracepoint ();
 }
 
 bool
@@ -2717,9 +2717,9 @@  bool
 debug_target::supports_enable_disable_tracepoint ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_enable_disable_tracepoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_enable_disable_tracepoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_enable_disable_tracepoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_enable_disable_tracepoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_enable_disable_tracepoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_enable_disable_tracepoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2729,7 +2729,7 @@  debug_target::supports_enable_disable_tracepoint ()
 bool
 target_ops::supports_disable_randomization ()
 {
-  return this->beneath->supports_disable_randomization ();
+  return this->beneath ()->supports_disable_randomization ();
 }
 
 bool
@@ -2742,9 +2742,9 @@  bool
 debug_target::supports_disable_randomization ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_disable_randomization (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_disable_randomization ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_disable_randomization (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_disable_randomization (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_disable_randomization ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_disable_randomization (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2754,7 +2754,7 @@  debug_target::supports_disable_randomization ()
 bool
 target_ops::supports_string_tracing ()
 {
-  return this->beneath->supports_string_tracing ();
+  return this->beneath ()->supports_string_tracing ();
 }
 
 bool
@@ -2767,9 +2767,9 @@  bool
 debug_target::supports_string_tracing ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_string_tracing (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_string_tracing ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_string_tracing (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_string_tracing (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_string_tracing ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_string_tracing (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2779,7 +2779,7 @@  debug_target::supports_string_tracing ()
 bool
 target_ops::supports_evaluation_of_breakpoint_conditions ()
 {
-  return this->beneath->supports_evaluation_of_breakpoint_conditions ();
+  return this->beneath ()->supports_evaluation_of_breakpoint_conditions ();
 }
 
 bool
@@ -2792,9 +2792,9 @@  bool
 debug_target::supports_evaluation_of_breakpoint_conditions ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_evaluation_of_breakpoint_conditions (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_evaluation_of_breakpoint_conditions ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_evaluation_of_breakpoint_conditions (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_evaluation_of_breakpoint_conditions (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_evaluation_of_breakpoint_conditions ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_evaluation_of_breakpoint_conditions (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2804,7 +2804,7 @@  debug_target::supports_evaluation_of_breakpoint_conditions ()
 bool
 target_ops::can_run_breakpoint_commands ()
 {
-  return this->beneath->can_run_breakpoint_commands ();
+  return this->beneath ()->can_run_breakpoint_commands ();
 }
 
 bool
@@ -2817,9 +2817,9 @@  bool
 debug_target::can_run_breakpoint_commands ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->can_run_breakpoint_commands (...)\n", this->beneath->shortname ());
-  result = this->beneath->can_run_breakpoint_commands ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->can_run_breakpoint_commands (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->can_run_breakpoint_commands (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->can_run_breakpoint_commands ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->can_run_breakpoint_commands (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2829,7 +2829,7 @@  debug_target::can_run_breakpoint_commands ()
 struct gdbarch *
 target_ops::thread_architecture (ptid_t arg0)
 {
-  return this->beneath->thread_architecture (arg0);
+  return this->beneath ()->thread_architecture (arg0);
 }
 
 struct gdbarch *
@@ -2842,9 +2842,9 @@  struct gdbarch *
 debug_target::thread_architecture (ptid_t arg0)
 {
   struct gdbarch * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_architecture (...)\n", this->beneath->shortname ());
-  result = this->beneath->thread_architecture (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_architecture (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_architecture (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->thread_architecture (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_architecture (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_struct_gdbarch_p (result);
@@ -2855,7 +2855,7 @@  debug_target::thread_architecture (ptid_t arg0)
 struct address_space *
 target_ops::thread_address_space (ptid_t arg0)
 {
-  return this->beneath->thread_address_space (arg0);
+  return this->beneath ()->thread_address_space (arg0);
 }
 
 struct address_space *
@@ -2868,9 +2868,9 @@  struct address_space *
 debug_target::thread_address_space (ptid_t arg0)
 {
   struct address_space * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_address_space (...)\n", this->beneath->shortname ());
-  result = this->beneath->thread_address_space (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_address_space (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->thread_address_space (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->thread_address_space (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->thread_address_space (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_struct_address_space_p (result);
@@ -2881,7 +2881,7 @@  debug_target::thread_address_space (ptid_t arg0)
 bool
 target_ops::filesystem_is_local ()
 {
-  return this->beneath->filesystem_is_local ();
+  return this->beneath ()->filesystem_is_local ();
 }
 
 bool
@@ -2894,9 +2894,9 @@  bool
 debug_target::filesystem_is_local ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->filesystem_is_local (...)\n", this->beneath->shortname ());
-  result = this->beneath->filesystem_is_local ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->filesystem_is_local (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->filesystem_is_local (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->filesystem_is_local ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->filesystem_is_local (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2906,7 +2906,7 @@  debug_target::filesystem_is_local ()
 void
 target_ops::trace_init ()
 {
-  this->beneath->trace_init ();
+  this->beneath ()->trace_init ();
 }
 
 void
@@ -2918,16 +2918,16 @@  dummy_target::trace_init ()
 void
 debug_target::trace_init ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_init (...)\n", this->beneath->shortname ());
-  this->beneath->trace_init ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_init (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_init (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->trace_init ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_init (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::download_tracepoint (struct bp_location *arg0)
 {
-  this->beneath->download_tracepoint (arg0);
+  this->beneath ()->download_tracepoint (arg0);
 }
 
 void
@@ -2939,9 +2939,9 @@  dummy_target::download_tracepoint (struct bp_location *arg0)
 void
 debug_target::download_tracepoint (struct bp_location *arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->download_tracepoint (...)\n", this->beneath->shortname ());
-  this->beneath->download_tracepoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->download_tracepoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->download_tracepoint (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->download_tracepoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->download_tracepoint (", this->beneath ()->shortname ());
   target_debug_print_struct_bp_location_p (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -2949,7 +2949,7 @@  debug_target::download_tracepoint (struct bp_location *arg0)
 bool
 target_ops::can_download_tracepoint ()
 {
-  return this->beneath->can_download_tracepoint ();
+  return this->beneath ()->can_download_tracepoint ();
 }
 
 bool
@@ -2962,9 +2962,9 @@  bool
 debug_target::can_download_tracepoint ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->can_download_tracepoint (...)\n", this->beneath->shortname ());
-  result = this->beneath->can_download_tracepoint ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->can_download_tracepoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->can_download_tracepoint (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->can_download_tracepoint ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->can_download_tracepoint (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -2974,7 +2974,7 @@  debug_target::can_download_tracepoint ()
 void
 target_ops::download_trace_state_variable (const trace_state_variable &arg0)
 {
-  this->beneath->download_trace_state_variable (arg0);
+  this->beneath ()->download_trace_state_variable (arg0);
 }
 
 void
@@ -2986,9 +2986,9 @@  dummy_target::download_trace_state_variable (const trace_state_variable &arg0)
 void
 debug_target::download_trace_state_variable (const trace_state_variable &arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->download_trace_state_variable (...)\n", this->beneath->shortname ());
-  this->beneath->download_trace_state_variable (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->download_trace_state_variable (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->download_trace_state_variable (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->download_trace_state_variable (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->download_trace_state_variable (", this->beneath ()->shortname ());
   target_debug_print_const_trace_state_variable_r (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -2996,7 +2996,7 @@  debug_target::download_trace_state_variable (const trace_state_variable &arg0)
 void
 target_ops::enable_tracepoint (struct bp_location *arg0)
 {
-  this->beneath->enable_tracepoint (arg0);
+  this->beneath ()->enable_tracepoint (arg0);
 }
 
 void
@@ -3008,9 +3008,9 @@  dummy_target::enable_tracepoint (struct bp_location *arg0)
 void
 debug_target::enable_tracepoint (struct bp_location *arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->enable_tracepoint (...)\n", this->beneath->shortname ());
-  this->beneath->enable_tracepoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->enable_tracepoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->enable_tracepoint (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->enable_tracepoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->enable_tracepoint (", this->beneath ()->shortname ());
   target_debug_print_struct_bp_location_p (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -3018,7 +3018,7 @@  debug_target::enable_tracepoint (struct bp_location *arg0)
 void
 target_ops::disable_tracepoint (struct bp_location *arg0)
 {
-  this->beneath->disable_tracepoint (arg0);
+  this->beneath ()->disable_tracepoint (arg0);
 }
 
 void
@@ -3030,9 +3030,9 @@  dummy_target::disable_tracepoint (struct bp_location *arg0)
 void
 debug_target::disable_tracepoint (struct bp_location *arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->disable_tracepoint (...)\n", this->beneath->shortname ());
-  this->beneath->disable_tracepoint (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->disable_tracepoint (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->disable_tracepoint (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->disable_tracepoint (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->disable_tracepoint (", this->beneath ()->shortname ());
   target_debug_print_struct_bp_location_p (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -3040,7 +3040,7 @@  debug_target::disable_tracepoint (struct bp_location *arg0)
 void
 target_ops::trace_set_readonly_regions ()
 {
-  this->beneath->trace_set_readonly_regions ();
+  this->beneath ()->trace_set_readonly_regions ();
 }
 
 void
@@ -3052,16 +3052,16 @@  dummy_target::trace_set_readonly_regions ()
 void
 debug_target::trace_set_readonly_regions ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_set_readonly_regions (...)\n", this->beneath->shortname ());
-  this->beneath->trace_set_readonly_regions ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_set_readonly_regions (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_set_readonly_regions (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->trace_set_readonly_regions ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_set_readonly_regions (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::trace_start ()
 {
-  this->beneath->trace_start ();
+  this->beneath ()->trace_start ();
 }
 
 void
@@ -3073,16 +3073,16 @@  dummy_target::trace_start ()
 void
 debug_target::trace_start ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_start (...)\n", this->beneath->shortname ());
-  this->beneath->trace_start ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_start (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_start (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->trace_start ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_start (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 int
 target_ops::get_trace_status (struct trace_status *arg0)
 {
-  return this->beneath->get_trace_status (arg0);
+  return this->beneath ()->get_trace_status (arg0);
 }
 
 int
@@ -3095,9 +3095,9 @@  int
 debug_target::get_trace_status (struct trace_status *arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_trace_status (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_trace_status (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_trace_status (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_trace_status (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_trace_status (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_trace_status (", this->beneath ()->shortname ());
   target_debug_print_struct_trace_status_p (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -3108,7 +3108,7 @@  debug_target::get_trace_status (struct trace_status *arg0)
 void
 target_ops::get_tracepoint_status (struct breakpoint *arg0, struct uploaded_tp *arg1)
 {
-  this->beneath->get_tracepoint_status (arg0, arg1);
+  this->beneath ()->get_tracepoint_status (arg0, arg1);
 }
 
 void
@@ -3120,9 +3120,9 @@  dummy_target::get_tracepoint_status (struct breakpoint *arg0, struct uploaded_tp
 void
 debug_target::get_tracepoint_status (struct breakpoint *arg0, struct uploaded_tp *arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_tracepoint_status (...)\n", this->beneath->shortname ());
-  this->beneath->get_tracepoint_status (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_tracepoint_status (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_tracepoint_status (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->get_tracepoint_status (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_tracepoint_status (", this->beneath ()->shortname ());
   target_debug_print_struct_breakpoint_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_uploaded_tp_p (arg1);
@@ -3132,7 +3132,7 @@  debug_target::get_tracepoint_status (struct breakpoint *arg0, struct uploaded_tp
 void
 target_ops::trace_stop ()
 {
-  this->beneath->trace_stop ();
+  this->beneath ()->trace_stop ();
 }
 
 void
@@ -3144,16 +3144,16 @@  dummy_target::trace_stop ()
 void
 debug_target::trace_stop ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_stop (...)\n", this->beneath->shortname ());
-  this->beneath->trace_stop ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_stop (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_stop (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->trace_stop ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_stop (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 int
 target_ops::trace_find (enum trace_find_type arg0, int arg1, CORE_ADDR arg2, CORE_ADDR arg3, int *arg4)
 {
-  return this->beneath->trace_find (arg0, arg1, arg2, arg3, arg4);
+  return this->beneath ()->trace_find (arg0, arg1, arg2, arg3, arg4);
 }
 
 int
@@ -3166,9 +3166,9 @@  int
 debug_target::trace_find (enum trace_find_type arg0, int arg1, CORE_ADDR arg2, CORE_ADDR arg3, int *arg4)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_find (...)\n", this->beneath->shortname ());
-  result = this->beneath->trace_find (arg0, arg1, arg2, arg3, arg4);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_find (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->trace_find (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->trace_find (arg0, arg1, arg2, arg3, arg4);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->trace_find (", this->beneath ()->shortname ());
   target_debug_print_enum_trace_find_type (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -3187,7 +3187,7 @@  debug_target::trace_find (enum trace_find_type arg0, int arg1, CORE_ADDR arg2, C
 bool
 target_ops::get_trace_state_variable_value (int arg0, LONGEST *arg1)
 {
-  return this->beneath->get_trace_state_variable_value (arg0, arg1);
+  return this->beneath ()->get_trace_state_variable_value (arg0, arg1);
 }
 
 bool
@@ -3200,9 +3200,9 @@  bool
 debug_target::get_trace_state_variable_value (int arg0, LONGEST *arg1)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_trace_state_variable_value (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_trace_state_variable_value (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_trace_state_variable_value (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_trace_state_variable_value (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_trace_state_variable_value (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_trace_state_variable_value (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_LONGEST_p (arg1);
@@ -3215,7 +3215,7 @@  debug_target::get_trace_state_variable_value (int arg0, LONGEST *arg1)
 int
 target_ops::save_trace_data (const char *arg0)
 {
-  return this->beneath->save_trace_data (arg0);
+  return this->beneath ()->save_trace_data (arg0);
 }
 
 int
@@ -3228,9 +3228,9 @@  int
 debug_target::save_trace_data (const char *arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->save_trace_data (...)\n", this->beneath->shortname ());
-  result = this->beneath->save_trace_data (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->save_trace_data (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->save_trace_data (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->save_trace_data (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->save_trace_data (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -3241,7 +3241,7 @@  debug_target::save_trace_data (const char *arg0)
 int
 target_ops::upload_tracepoints (struct uploaded_tp **arg0)
 {
-  return this->beneath->upload_tracepoints (arg0);
+  return this->beneath ()->upload_tracepoints (arg0);
 }
 
 int
@@ -3254,9 +3254,9 @@  int
 debug_target::upload_tracepoints (struct uploaded_tp **arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->upload_tracepoints (...)\n", this->beneath->shortname ());
-  result = this->beneath->upload_tracepoints (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->upload_tracepoints (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->upload_tracepoints (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->upload_tracepoints (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->upload_tracepoints (", this->beneath ()->shortname ());
   target_debug_print_struct_uploaded_tp_pp (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -3267,7 +3267,7 @@  debug_target::upload_tracepoints (struct uploaded_tp **arg0)
 int
 target_ops::upload_trace_state_variables (struct uploaded_tsv **arg0)
 {
-  return this->beneath->upload_trace_state_variables (arg0);
+  return this->beneath ()->upload_trace_state_variables (arg0);
 }
 
 int
@@ -3280,9 +3280,9 @@  int
 debug_target::upload_trace_state_variables (struct uploaded_tsv **arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->upload_trace_state_variables (...)\n", this->beneath->shortname ());
-  result = this->beneath->upload_trace_state_variables (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->upload_trace_state_variables (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->upload_trace_state_variables (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->upload_trace_state_variables (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->upload_trace_state_variables (", this->beneath ()->shortname ());
   target_debug_print_struct_uploaded_tsv_pp (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -3293,7 +3293,7 @@  debug_target::upload_trace_state_variables (struct uploaded_tsv **arg0)
 LONGEST
 target_ops::get_raw_trace_data (gdb_byte *arg0, ULONGEST arg1, LONGEST arg2)
 {
-  return this->beneath->get_raw_trace_data (arg0, arg1, arg2);
+  return this->beneath ()->get_raw_trace_data (arg0, arg1, arg2);
 }
 
 LONGEST
@@ -3306,9 +3306,9 @@  LONGEST
 debug_target::get_raw_trace_data (gdb_byte *arg0, ULONGEST arg1, LONGEST arg2)
 {
   LONGEST result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_raw_trace_data (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_raw_trace_data (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_raw_trace_data (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_raw_trace_data (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_raw_trace_data (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_raw_trace_data (", this->beneath ()->shortname ());
   target_debug_print_gdb_byte_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_ULONGEST (arg1);
@@ -3323,7 +3323,7 @@  debug_target::get_raw_trace_data (gdb_byte *arg0, ULONGEST arg1, LONGEST arg2)
 int
 target_ops::get_min_fast_tracepoint_insn_len ()
 {
-  return this->beneath->get_min_fast_tracepoint_insn_len ();
+  return this->beneath ()->get_min_fast_tracepoint_insn_len ();
 }
 
 int
@@ -3336,9 +3336,9 @@  int
 debug_target::get_min_fast_tracepoint_insn_len ()
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_min_fast_tracepoint_insn_len (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_min_fast_tracepoint_insn_len ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_min_fast_tracepoint_insn_len (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_min_fast_tracepoint_insn_len (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_min_fast_tracepoint_insn_len ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_min_fast_tracepoint_insn_len (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -3348,7 +3348,7 @@  debug_target::get_min_fast_tracepoint_insn_len ()
 void
 target_ops::set_disconnected_tracing (int arg0)
 {
-  this->beneath->set_disconnected_tracing (arg0);
+  this->beneath ()->set_disconnected_tracing (arg0);
 }
 
 void
@@ -3359,9 +3359,9 @@  dummy_target::set_disconnected_tracing (int arg0)
 void
 debug_target::set_disconnected_tracing (int arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->set_disconnected_tracing (...)\n", this->beneath->shortname ());
-  this->beneath->set_disconnected_tracing (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->set_disconnected_tracing (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->set_disconnected_tracing (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->set_disconnected_tracing (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->set_disconnected_tracing (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -3369,7 +3369,7 @@  debug_target::set_disconnected_tracing (int arg0)
 void
 target_ops::set_circular_trace_buffer (int arg0)
 {
-  this->beneath->set_circular_trace_buffer (arg0);
+  this->beneath ()->set_circular_trace_buffer (arg0);
 }
 
 void
@@ -3380,9 +3380,9 @@  dummy_target::set_circular_trace_buffer (int arg0)
 void
 debug_target::set_circular_trace_buffer (int arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->set_circular_trace_buffer (...)\n", this->beneath->shortname ());
-  this->beneath->set_circular_trace_buffer (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->set_circular_trace_buffer (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->set_circular_trace_buffer (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->set_circular_trace_buffer (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->set_circular_trace_buffer (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -3390,7 +3390,7 @@  debug_target::set_circular_trace_buffer (int arg0)
 void
 target_ops::set_trace_buffer_size (LONGEST arg0)
 {
-  this->beneath->set_trace_buffer_size (arg0);
+  this->beneath ()->set_trace_buffer_size (arg0);
 }
 
 void
@@ -3401,9 +3401,9 @@  dummy_target::set_trace_buffer_size (LONGEST arg0)
 void
 debug_target::set_trace_buffer_size (LONGEST arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->set_trace_buffer_size (...)\n", this->beneath->shortname ());
-  this->beneath->set_trace_buffer_size (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->set_trace_buffer_size (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->set_trace_buffer_size (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->set_trace_buffer_size (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->set_trace_buffer_size (", this->beneath ()->shortname ());
   target_debug_print_LONGEST (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -3411,7 +3411,7 @@  debug_target::set_trace_buffer_size (LONGEST arg0)
 bool
 target_ops::set_trace_notes (const char *arg0, const char *arg1, const char *arg2)
 {
-  return this->beneath->set_trace_notes (arg0, arg1, arg2);
+  return this->beneath ()->set_trace_notes (arg0, arg1, arg2);
 }
 
 bool
@@ -3424,9 +3424,9 @@  bool
 debug_target::set_trace_notes (const char *arg0, const char *arg1, const char *arg2)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->set_trace_notes (...)\n", this->beneath->shortname ());
-  result = this->beneath->set_trace_notes (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->set_trace_notes (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->set_trace_notes (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->set_trace_notes (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->set_trace_notes (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_const_char_p (arg1);
@@ -3441,7 +3441,7 @@  debug_target::set_trace_notes (const char *arg0, const char *arg1, const char *a
 int
 target_ops::core_of_thread (ptid_t arg0)
 {
-  return this->beneath->core_of_thread (arg0);
+  return this->beneath ()->core_of_thread (arg0);
 }
 
 int
@@ -3454,9 +3454,9 @@  int
 debug_target::core_of_thread (ptid_t arg0)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->core_of_thread (...)\n", this->beneath->shortname ());
-  result = this->beneath->core_of_thread (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->core_of_thread (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->core_of_thread (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->core_of_thread (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->core_of_thread (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_int (result);
@@ -3467,7 +3467,7 @@  debug_target::core_of_thread (ptid_t arg0)
 int
 target_ops::verify_memory (const gdb_byte *arg0, CORE_ADDR arg1, ULONGEST arg2)
 {
-  return this->beneath->verify_memory (arg0, arg1, arg2);
+  return this->beneath ()->verify_memory (arg0, arg1, arg2);
 }
 
 int
@@ -3480,9 +3480,9 @@  int
 debug_target::verify_memory (const gdb_byte *arg0, CORE_ADDR arg1, ULONGEST arg2)
 {
   int result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->verify_memory (...)\n", this->beneath->shortname ());
-  result = this->beneath->verify_memory (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->verify_memory (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->verify_memory (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->verify_memory (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->verify_memory (", this->beneath ()->shortname ());
   target_debug_print_const_gdb_byte_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_CORE_ADDR (arg1);
@@ -3497,7 +3497,7 @@  debug_target::verify_memory (const gdb_byte *arg0, CORE_ADDR arg1, ULONGEST arg2
 bool
 target_ops::get_tib_address (ptid_t arg0, CORE_ADDR *arg1)
 {
-  return this->beneath->get_tib_address (arg0, arg1);
+  return this->beneath ()->get_tib_address (arg0, arg1);
 }
 
 bool
@@ -3510,9 +3510,9 @@  bool
 debug_target::get_tib_address (ptid_t arg0, CORE_ADDR *arg1)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_tib_address (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_tib_address (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_tib_address (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_tib_address (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_tib_address (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_tib_address (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_CORE_ADDR_p (arg1);
@@ -3525,7 +3525,7 @@  debug_target::get_tib_address (ptid_t arg0, CORE_ADDR *arg1)
 void
 target_ops::set_permissions ()
 {
-  this->beneath->set_permissions ();
+  this->beneath ()->set_permissions ();
 }
 
 void
@@ -3536,16 +3536,16 @@  dummy_target::set_permissions ()
 void
 debug_target::set_permissions ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->set_permissions (...)\n", this->beneath->shortname ());
-  this->beneath->set_permissions ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->set_permissions (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->set_permissions (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->set_permissions ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->set_permissions (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 bool
 target_ops::static_tracepoint_marker_at (CORE_ADDR arg0, static_tracepoint_marker *arg1)
 {
-  return this->beneath->static_tracepoint_marker_at (arg0, arg1);
+  return this->beneath ()->static_tracepoint_marker_at (arg0, arg1);
 }
 
 bool
@@ -3558,9 +3558,9 @@  bool
 debug_target::static_tracepoint_marker_at (CORE_ADDR arg0, static_tracepoint_marker *arg1)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->static_tracepoint_marker_at (...)\n", this->beneath->shortname ());
-  result = this->beneath->static_tracepoint_marker_at (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->static_tracepoint_marker_at (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->static_tracepoint_marker_at (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->static_tracepoint_marker_at (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->static_tracepoint_marker_at (", this->beneath ()->shortname ());
   target_debug_print_CORE_ADDR (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_static_tracepoint_marker_p (arg1);
@@ -3573,7 +3573,7 @@  debug_target::static_tracepoint_marker_at (CORE_ADDR arg0, static_tracepoint_mar
 std::vector<static_tracepoint_marker>
 target_ops::static_tracepoint_markers_by_strid (const char *arg0)
 {
-  return this->beneath->static_tracepoint_markers_by_strid (arg0);
+  return this->beneath ()->static_tracepoint_markers_by_strid (arg0);
 }
 
 std::vector<static_tracepoint_marker>
@@ -3586,9 +3586,9 @@  std::vector<static_tracepoint_marker>
 debug_target::static_tracepoint_markers_by_strid (const char *arg0)
 {
   std::vector<static_tracepoint_marker> result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->static_tracepoint_markers_by_strid (...)\n", this->beneath->shortname ());
-  result = this->beneath->static_tracepoint_markers_by_strid (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->static_tracepoint_markers_by_strid (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->static_tracepoint_markers_by_strid (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->static_tracepoint_markers_by_strid (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->static_tracepoint_markers_by_strid (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_std_vector_static_tracepoint_marker (result);
@@ -3599,7 +3599,7 @@  debug_target::static_tracepoint_markers_by_strid (const char *arg0)
 traceframe_info_up
 target_ops::traceframe_info ()
 {
-  return this->beneath->traceframe_info ();
+  return this->beneath ()->traceframe_info ();
 }
 
 traceframe_info_up
@@ -3612,9 +3612,9 @@  traceframe_info_up
 debug_target::traceframe_info ()
 {
   traceframe_info_up result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->traceframe_info (...)\n", this->beneath->shortname ());
-  result = this->beneath->traceframe_info ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->traceframe_info (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->traceframe_info (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->traceframe_info ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->traceframe_info (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_traceframe_info_up (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -3624,7 +3624,7 @@  debug_target::traceframe_info ()
 bool
 target_ops::use_agent (bool arg0)
 {
-  return this->beneath->use_agent (arg0);
+  return this->beneath ()->use_agent (arg0);
 }
 
 bool
@@ -3637,9 +3637,9 @@  bool
 debug_target::use_agent (bool arg0)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->use_agent (...)\n", this->beneath->shortname ());
-  result = this->beneath->use_agent (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->use_agent (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->use_agent (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->use_agent (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->use_agent (", this->beneath ()->shortname ());
   target_debug_print_bool (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
@@ -3650,7 +3650,7 @@  debug_target::use_agent (bool arg0)
 bool
 target_ops::can_use_agent ()
 {
-  return this->beneath->can_use_agent ();
+  return this->beneath ()->can_use_agent ();
 }
 
 bool
@@ -3663,9 +3663,9 @@  bool
 debug_target::can_use_agent ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->can_use_agent (...)\n", this->beneath->shortname ());
-  result = this->beneath->can_use_agent ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->can_use_agent (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->can_use_agent (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->can_use_agent ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->can_use_agent (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -3675,7 +3675,7 @@  debug_target::can_use_agent ()
 struct btrace_target_info *
 target_ops::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
 {
-  return this->beneath->enable_btrace (arg0, arg1);
+  return this->beneath ()->enable_btrace (arg0, arg1);
 }
 
 struct btrace_target_info *
@@ -3688,9 +3688,9 @@  struct btrace_target_info *
 debug_target::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
 {
   struct btrace_target_info * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->enable_btrace (...)\n", this->beneath->shortname ());
-  result = this->beneath->enable_btrace (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->enable_btrace (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->enable_btrace (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->enable_btrace (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->enable_btrace (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_const_struct_btrace_config_p (arg1);
@@ -3703,7 +3703,7 @@  debug_target::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
 void
 target_ops::disable_btrace (struct btrace_target_info *arg0)
 {
-  this->beneath->disable_btrace (arg0);
+  this->beneath ()->disable_btrace (arg0);
 }
 
 void
@@ -3715,9 +3715,9 @@  dummy_target::disable_btrace (struct btrace_target_info *arg0)
 void
 debug_target::disable_btrace (struct btrace_target_info *arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->disable_btrace (...)\n", this->beneath->shortname ());
-  this->beneath->disable_btrace (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->disable_btrace (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->disable_btrace (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->disable_btrace (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->disable_btrace (", this->beneath ()->shortname ());
   target_debug_print_struct_btrace_target_info_p (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -3725,7 +3725,7 @@  debug_target::disable_btrace (struct btrace_target_info *arg0)
 void
 target_ops::teardown_btrace (struct btrace_target_info *arg0)
 {
-  this->beneath->teardown_btrace (arg0);
+  this->beneath ()->teardown_btrace (arg0);
 }
 
 void
@@ -3737,9 +3737,9 @@  dummy_target::teardown_btrace (struct btrace_target_info *arg0)
 void
 debug_target::teardown_btrace (struct btrace_target_info *arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->teardown_btrace (...)\n", this->beneath->shortname ());
-  this->beneath->teardown_btrace (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->teardown_btrace (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->teardown_btrace (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->teardown_btrace (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->teardown_btrace (", this->beneath ()->shortname ());
   target_debug_print_struct_btrace_target_info_p (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -3747,7 +3747,7 @@  debug_target::teardown_btrace (struct btrace_target_info *arg0)
 enum btrace_error
 target_ops::read_btrace (struct btrace_data *arg0, struct btrace_target_info *arg1, enum btrace_read_type arg2)
 {
-  return this->beneath->read_btrace (arg0, arg1, arg2);
+  return this->beneath ()->read_btrace (arg0, arg1, arg2);
 }
 
 enum btrace_error
@@ -3760,9 +3760,9 @@  enum btrace_error
 debug_target::read_btrace (struct btrace_data *arg0, struct btrace_target_info *arg1, enum btrace_read_type arg2)
 {
   enum btrace_error result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->read_btrace (...)\n", this->beneath->shortname ());
-  result = this->beneath->read_btrace (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->read_btrace (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->read_btrace (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->read_btrace (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->read_btrace (", this->beneath ()->shortname ());
   target_debug_print_struct_btrace_data_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_struct_btrace_target_info_p (arg1);
@@ -3777,7 +3777,7 @@  debug_target::read_btrace (struct btrace_data *arg0, struct btrace_target_info *
 const struct btrace_config *
 target_ops::btrace_conf (const struct btrace_target_info *arg0)
 {
-  return this->beneath->btrace_conf (arg0);
+  return this->beneath ()->btrace_conf (arg0);
 }
 
 const struct btrace_config *
@@ -3790,9 +3790,9 @@  const struct btrace_config *
 debug_target::btrace_conf (const struct btrace_target_info *arg0)
 {
   const struct btrace_config * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->btrace_conf (...)\n", this->beneath->shortname ());
-  result = this->beneath->btrace_conf (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->btrace_conf (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->btrace_conf (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->btrace_conf (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->btrace_conf (", this->beneath ()->shortname ());
   target_debug_print_const_struct_btrace_target_info_p (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_const_struct_btrace_config_p (result);
@@ -3803,7 +3803,7 @@  debug_target::btrace_conf (const struct btrace_target_info *arg0)
 enum record_method
 target_ops::record_method (ptid_t arg0)
 {
-  return this->beneath->record_method (arg0);
+  return this->beneath ()->record_method (arg0);
 }
 
 enum record_method
@@ -3816,9 +3816,9 @@  enum record_method
 debug_target::record_method (ptid_t arg0)
 {
   enum record_method result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->record_method (...)\n", this->beneath->shortname ());
-  result = this->beneath->record_method (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->record_method (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->record_method (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->record_method (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->record_method (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_enum_record_method (result);
@@ -3829,7 +3829,7 @@  debug_target::record_method (ptid_t arg0)
 void
 target_ops::stop_recording ()
 {
-  this->beneath->stop_recording ();
+  this->beneath ()->stop_recording ();
 }
 
 void
@@ -3840,16 +3840,16 @@  dummy_target::stop_recording ()
 void
 debug_target::stop_recording ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->stop_recording (...)\n", this->beneath->shortname ());
-  this->beneath->stop_recording ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->stop_recording (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->stop_recording (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->stop_recording ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->stop_recording (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::info_record ()
 {
-  this->beneath->info_record ();
+  this->beneath ()->info_record ();
 }
 
 void
@@ -3860,16 +3860,16 @@  dummy_target::info_record ()
 void
 debug_target::info_record ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->info_record (...)\n", this->beneath->shortname ());
-  this->beneath->info_record ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->info_record (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->info_record (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->info_record ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->info_record (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::save_record (const char *arg0)
 {
-  this->beneath->save_record (arg0);
+  this->beneath ()->save_record (arg0);
 }
 
 void
@@ -3881,9 +3881,9 @@  dummy_target::save_record (const char *arg0)
 void
 debug_target::save_record (const char *arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->save_record (...)\n", this->beneath->shortname ());
-  this->beneath->save_record (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->save_record (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->save_record (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->save_record (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->save_record (", this->beneath ()->shortname ());
   target_debug_print_const_char_p (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -3891,7 +3891,7 @@  debug_target::save_record (const char *arg0)
 bool
 target_ops::supports_delete_record ()
 {
-  return this->beneath->supports_delete_record ();
+  return this->beneath ()->supports_delete_record ();
 }
 
 bool
@@ -3904,9 +3904,9 @@  bool
 debug_target::supports_delete_record ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_delete_record (...)\n", this->beneath->shortname ());
-  result = this->beneath->supports_delete_record ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_delete_record (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->supports_delete_record (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->supports_delete_record ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->supports_delete_record (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -3916,7 +3916,7 @@  debug_target::supports_delete_record ()
 void
 target_ops::delete_record ()
 {
-  this->beneath->delete_record ();
+  this->beneath ()->delete_record ();
 }
 
 void
@@ -3928,16 +3928,16 @@  dummy_target::delete_record ()
 void
 debug_target::delete_record ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->delete_record (...)\n", this->beneath->shortname ());
-  this->beneath->delete_record ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->delete_record (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->delete_record (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->delete_record ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->delete_record (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 bool
 target_ops::record_is_replaying (ptid_t arg0)
 {
-  return this->beneath->record_is_replaying (arg0);
+  return this->beneath ()->record_is_replaying (arg0);
 }
 
 bool
@@ -3950,9 +3950,9 @@  bool
 debug_target::record_is_replaying (ptid_t arg0)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->record_is_replaying (...)\n", this->beneath->shortname ());
-  result = this->beneath->record_is_replaying (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->record_is_replaying (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->record_is_replaying (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->record_is_replaying (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->record_is_replaying (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
@@ -3963,7 +3963,7 @@  debug_target::record_is_replaying (ptid_t arg0)
 bool
 target_ops::record_will_replay (ptid_t arg0, int arg1)
 {
-  return this->beneath->record_will_replay (arg0, arg1);
+  return this->beneath ()->record_will_replay (arg0, arg1);
 }
 
 bool
@@ -3976,9 +3976,9 @@  bool
 debug_target::record_will_replay (ptid_t arg0, int arg1)
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->record_will_replay (...)\n", this->beneath->shortname ());
-  result = this->beneath->record_will_replay (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->record_will_replay (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->record_will_replay (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->record_will_replay (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->record_will_replay (", this->beneath ()->shortname ());
   target_debug_print_ptid_t (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -3991,7 +3991,7 @@  debug_target::record_will_replay (ptid_t arg0, int arg1)
 void
 target_ops::record_stop_replaying ()
 {
-  this->beneath->record_stop_replaying ();
+  this->beneath ()->record_stop_replaying ();
 }
 
 void
@@ -4002,16 +4002,16 @@  dummy_target::record_stop_replaying ()
 void
 debug_target::record_stop_replaying ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->record_stop_replaying (...)\n", this->beneath->shortname ());
-  this->beneath->record_stop_replaying ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->record_stop_replaying (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->record_stop_replaying (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->record_stop_replaying ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->record_stop_replaying (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::goto_record_begin ()
 {
-  this->beneath->goto_record_begin ();
+  this->beneath ()->goto_record_begin ();
 }
 
 void
@@ -4023,16 +4023,16 @@  dummy_target::goto_record_begin ()
 void
 debug_target::goto_record_begin ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record_begin (...)\n", this->beneath->shortname ());
-  this->beneath->goto_record_begin ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record_begin (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record_begin (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->goto_record_begin ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record_begin (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::goto_record_end ()
 {
-  this->beneath->goto_record_end ();
+  this->beneath ()->goto_record_end ();
 }
 
 void
@@ -4044,16 +4044,16 @@  dummy_target::goto_record_end ()
 void
 debug_target::goto_record_end ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record_end (...)\n", this->beneath->shortname ());
-  this->beneath->goto_record_end ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record_end (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record_end (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->goto_record_end ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record_end (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::goto_record (ULONGEST arg0)
 {
-  this->beneath->goto_record (arg0);
+  this->beneath ()->goto_record (arg0);
 }
 
 void
@@ -4065,9 +4065,9 @@  dummy_target::goto_record (ULONGEST arg0)
 void
 debug_target::goto_record (ULONGEST arg0)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record (...)\n", this->beneath->shortname ());
-  this->beneath->goto_record (arg0);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->goto_record (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->goto_record (arg0);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->goto_record (", this->beneath ()->shortname ());
   target_debug_print_ULONGEST (arg0);
   fputs_unfiltered (")\n", gdb_stdlog);
 }
@@ -4075,7 +4075,7 @@  debug_target::goto_record (ULONGEST arg0)
 void
 target_ops::insn_history (int arg0, gdb_disassembly_flags arg1)
 {
-  this->beneath->insn_history (arg0, arg1);
+  this->beneath ()->insn_history (arg0, arg1);
 }
 
 void
@@ -4087,9 +4087,9 @@  dummy_target::insn_history (int arg0, gdb_disassembly_flags arg1)
 void
 debug_target::insn_history (int arg0, gdb_disassembly_flags arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history (...)\n", this->beneath->shortname ());
-  this->beneath->insn_history (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->insn_history (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_gdb_disassembly_flags (arg1);
@@ -4099,7 +4099,7 @@  debug_target::insn_history (int arg0, gdb_disassembly_flags arg1)
 void
 target_ops::insn_history_from (ULONGEST arg0, int arg1, gdb_disassembly_flags arg2)
 {
-  this->beneath->insn_history_from (arg0, arg1, arg2);
+  this->beneath ()->insn_history_from (arg0, arg1, arg2);
 }
 
 void
@@ -4111,9 +4111,9 @@  dummy_target::insn_history_from (ULONGEST arg0, int arg1, gdb_disassembly_flags
 void
 debug_target::insn_history_from (ULONGEST arg0, int arg1, gdb_disassembly_flags arg2)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history_from (...)\n", this->beneath->shortname ());
-  this->beneath->insn_history_from (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history_from (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history_from (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->insn_history_from (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history_from (", this->beneath ()->shortname ());
   target_debug_print_ULONGEST (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -4125,7 +4125,7 @@  debug_target::insn_history_from (ULONGEST arg0, int arg1, gdb_disassembly_flags
 void
 target_ops::insn_history_range (ULONGEST arg0, ULONGEST arg1, gdb_disassembly_flags arg2)
 {
-  this->beneath->insn_history_range (arg0, arg1, arg2);
+  this->beneath ()->insn_history_range (arg0, arg1, arg2);
 }
 
 void
@@ -4137,9 +4137,9 @@  dummy_target::insn_history_range (ULONGEST arg0, ULONGEST arg1, gdb_disassembly_
 void
 debug_target::insn_history_range (ULONGEST arg0, ULONGEST arg1, gdb_disassembly_flags arg2)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history_range (...)\n", this->beneath->shortname ());
-  this->beneath->insn_history_range (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history_range (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->insn_history_range (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->insn_history_range (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->insn_history_range (", this->beneath ()->shortname ());
   target_debug_print_ULONGEST (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_ULONGEST (arg1);
@@ -4151,7 +4151,7 @@  debug_target::insn_history_range (ULONGEST arg0, ULONGEST arg1, gdb_disassembly_
 void
 target_ops::call_history (int arg0, record_print_flags arg1)
 {
-  this->beneath->call_history (arg0, arg1);
+  this->beneath ()->call_history (arg0, arg1);
 }
 
 void
@@ -4163,9 +4163,9 @@  dummy_target::call_history (int arg0, record_print_flags arg1)
 void
 debug_target::call_history (int arg0, record_print_flags arg1)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->call_history (...)\n", this->beneath->shortname ());
-  this->beneath->call_history (arg0, arg1);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->call_history (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->call_history (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->call_history (arg0, arg1);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->call_history (", this->beneath ()->shortname ());
   target_debug_print_int (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_record_print_flags (arg1);
@@ -4175,7 +4175,7 @@  debug_target::call_history (int arg0, record_print_flags arg1)
 void
 target_ops::call_history_from (ULONGEST arg0, int arg1, record_print_flags arg2)
 {
-  this->beneath->call_history_from (arg0, arg1, arg2);
+  this->beneath ()->call_history_from (arg0, arg1, arg2);
 }
 
 void
@@ -4187,9 +4187,9 @@  dummy_target::call_history_from (ULONGEST arg0, int arg1, record_print_flags arg
 void
 debug_target::call_history_from (ULONGEST arg0, int arg1, record_print_flags arg2)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->call_history_from (...)\n", this->beneath->shortname ());
-  this->beneath->call_history_from (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->call_history_from (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->call_history_from (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->call_history_from (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->call_history_from (", this->beneath ()->shortname ());
   target_debug_print_ULONGEST (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_int (arg1);
@@ -4201,7 +4201,7 @@  debug_target::call_history_from (ULONGEST arg0, int arg1, record_print_flags arg
 void
 target_ops::call_history_range (ULONGEST arg0, ULONGEST arg1, record_print_flags arg2)
 {
-  this->beneath->call_history_range (arg0, arg1, arg2);
+  this->beneath ()->call_history_range (arg0, arg1, arg2);
 }
 
 void
@@ -4213,9 +4213,9 @@  dummy_target::call_history_range (ULONGEST arg0, ULONGEST arg1, record_print_fla
 void
 debug_target::call_history_range (ULONGEST arg0, ULONGEST arg1, record_print_flags arg2)
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->call_history_range (...)\n", this->beneath->shortname ());
-  this->beneath->call_history_range (arg0, arg1, arg2);
-  fprintf_unfiltered (gdb_stdlog, "<- %s->call_history_range (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->call_history_range (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->call_history_range (arg0, arg1, arg2);
+  fprintf_unfiltered (gdb_stdlog, "<- %s->call_history_range (", this->beneath ()->shortname ());
   target_debug_print_ULONGEST (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_ULONGEST (arg1);
@@ -4227,7 +4227,7 @@  debug_target::call_history_range (ULONGEST arg0, ULONGEST arg1, record_print_fla
 bool
 target_ops::augmented_libraries_svr4_read ()
 {
-  return this->beneath->augmented_libraries_svr4_read ();
+  return this->beneath ()->augmented_libraries_svr4_read ();
 }
 
 bool
@@ -4240,9 +4240,9 @@  bool
 debug_target::augmented_libraries_svr4_read ()
 {
   bool result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->augmented_libraries_svr4_read (...)\n", this->beneath->shortname ());
-  result = this->beneath->augmented_libraries_svr4_read ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->augmented_libraries_svr4_read (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->augmented_libraries_svr4_read (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->augmented_libraries_svr4_read ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->augmented_libraries_svr4_read (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_bool (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -4252,7 +4252,7 @@  debug_target::augmented_libraries_svr4_read ()
 const struct frame_unwind *
 target_ops::get_unwinder ()
 {
-  return this->beneath->get_unwinder ();
+  return this->beneath ()->get_unwinder ();
 }
 
 const struct frame_unwind *
@@ -4265,9 +4265,9 @@  const struct frame_unwind *
 debug_target::get_unwinder ()
 {
   const struct frame_unwind * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_unwinder (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_unwinder ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_unwinder (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_unwinder (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_unwinder ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_unwinder (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_const_struct_frame_unwind_p (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -4277,7 +4277,7 @@  debug_target::get_unwinder ()
 const struct frame_unwind *
 target_ops::get_tailcall_unwinder ()
 {
-  return this->beneath->get_tailcall_unwinder ();
+  return this->beneath ()->get_tailcall_unwinder ();
 }
 
 const struct frame_unwind *
@@ -4290,9 +4290,9 @@  const struct frame_unwind *
 debug_target::get_tailcall_unwinder ()
 {
   const struct frame_unwind * result;
-  fprintf_unfiltered (gdb_stdlog, "-> %s->get_tailcall_unwinder (...)\n", this->beneath->shortname ());
-  result = this->beneath->get_tailcall_unwinder ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->get_tailcall_unwinder (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->get_tailcall_unwinder (...)\n", this->beneath ()->shortname ());
+  result = this->beneath ()->get_tailcall_unwinder ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->get_tailcall_unwinder (", this->beneath ()->shortname ());
   fputs_unfiltered (") = ", gdb_stdlog);
   target_debug_print_const_struct_frame_unwind_p (result);
   fputs_unfiltered ("\n", gdb_stdlog);
@@ -4302,7 +4302,7 @@  debug_target::get_tailcall_unwinder ()
 void
 target_ops::prepare_to_generate_core ()
 {
-  this->beneath->prepare_to_generate_core ();
+  this->beneath ()->prepare_to_generate_core ();
 }
 
 void
@@ -4313,16 +4313,16 @@  dummy_target::prepare_to_generate_core ()
 void
 debug_target::prepare_to_generate_core ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->prepare_to_generate_core (...)\n", this->beneath->shortname ());
-  this->beneath->prepare_to_generate_core ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->prepare_to_generate_core (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->prepare_to_generate_core (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->prepare_to_generate_core ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->prepare_to_generate_core (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
 void
 target_ops::done_generating_core ()
 {
-  this->beneath->done_generating_core ();
+  this->beneath ()->done_generating_core ();
 }
 
 void
@@ -4333,9 +4333,9 @@  dummy_target::done_generating_core ()
 void
 debug_target::done_generating_core ()
 {
-  fprintf_unfiltered (gdb_stdlog, "-> %s->done_generating_core (...)\n", this->beneath->shortname ());
-  this->beneath->done_generating_core ();
-  fprintf_unfiltered (gdb_stdlog, "<- %s->done_generating_core (", this->beneath->shortname ());
+  fprintf_unfiltered (gdb_stdlog, "-> %s->done_generating_core (...)\n", this->beneath ()->shortname ());
+  this->beneath ()->done_generating_core ();
+  fprintf_unfiltered (gdb_stdlog, "<- %s->done_generating_core (", this->beneath ()->shortname ());
   fputs_unfiltered (")\n", gdb_stdlog);
 }
 
diff --git a/gdb/target.c b/gdb/target.c
index 13f7e68fdf..c8fa8e1217 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -268,9 +268,7 @@  default_child_has_execution (ptid_t the_ptid)
 int
 target_has_all_memory_1 (void)
 {
-  struct target_ops *t;
-
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     if (t->has_all_memory ())
       return 1;
 
@@ -280,9 +278,7 @@  target_has_all_memory_1 (void)
 int
 target_has_memory_1 (void)
 {
-  struct target_ops *t;
-
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     if (t->has_memory ())
       return 1;
 
@@ -292,9 +288,7 @@  target_has_memory_1 (void)
 int
 target_has_stack_1 (void)
 {
-  struct target_ops *t;
-
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     if (t->has_stack ())
       return 1;
 
@@ -304,9 +298,7 @@  target_has_stack_1 (void)
 int
 target_has_registers_1 (void)
 {
-  struct target_ops *t;
-
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     if (t->has_registers ())
       return 1;
 
@@ -316,9 +308,7 @@  target_has_registers_1 (void)
 int
 target_has_execution_1 (ptid_t the_ptid)
 {
-  struct target_ops *t;
-
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     if (t->has_execution (the_ptid))
       return 1;
 
@@ -654,7 +644,7 @@  push_target (struct target_ops *t)
   struct target_ops **cur;
 
   /* Find the proper stratum to install this target in.  */
-  for (cur = &g_current_top_target; (*cur) != NULL; cur = &(*cur)->beneath)
+  for (cur = &g_current_top_target; (*cur) != NULL; cur = &(*cur)->m_beneath)
     {
       if ((int) (t->to_stratum) >= (int) (*cur)->to_stratum)
 	break;
@@ -669,13 +659,13 @@  push_target (struct target_ops *t)
          and un-hook it from the stack.  */
       struct target_ops *tmp = (*cur);
 
-      (*cur) = (*cur)->beneath;
-      tmp->beneath = NULL;
+      (*cur) = (*cur)->m_beneath;
+      tmp->m_beneath = NULL;
       target_close (tmp);
     }
 
   /* We have removed all targets in our stratum, now add the new one.  */
-  t->beneath = (*cur);
+  t->m_beneath = (*cur);
   (*cur) = t;
 }
 
@@ -695,7 +685,7 @@  unpush_target (struct target_ops *t)
   /* Look for the specified target.  Note that we assume that a target
      can only occur once in the target stack.  */
 
-  for (cur = &g_current_top_target; (*cur) != NULL; cur = &(*cur)->beneath)
+  for (cur = &g_current_top_target; (*cur) != NULL; cur = &(*cur)->m_beneath)
     {
       if ((*cur) == t)
 	break;
@@ -708,8 +698,8 @@  unpush_target (struct target_ops *t)
 
   /* Unchain the target.  */
   tmp = (*cur);
-  (*cur) = (*cur)->beneath;
-  tmp->beneath = NULL;
+  (*cur) = (*cur)->m_beneath;
+  tmp->m_beneath = NULL;
 
   /* Finally close the target.  Note we do this after unchaining, so
      any target method calls from within the target_close
@@ -761,9 +751,9 @@  pop_all_targets (void)
 int
 target_is_pushed (struct target_ops *t)
 {
-  struct target_ops *cur;
-
-  for (cur = current_top_target (); cur != NULL; cur = cur->beneath)
+  for (target_ops *cur = current_top_target ();
+       cur != NULL;
+       cur = cur->beneath ())
     if (cur == t)
       return 1;
 
@@ -1060,7 +1050,7 @@  raw_memory_xfer_partial (struct target_ops *ops, gdb_byte *readbuf,
       if (ops->has_all_memory ())
 	break;
 
-      ops = ops->beneath;
+      ops = ops->beneath ();
     }
   while (ops != NULL);
 
@@ -1968,14 +1958,13 @@  target_remove_breakpoint (struct gdbarch *gdbarch,
 static void
 info_target_command (const char *args, int from_tty)
 {
-  struct target_ops *t;
   int has_all_mem = 0;
 
   if (symfile_objfile != NULL)
     printf_unfiltered (_("Symbols from \"%s\".\n"),
 		       objfile_name (symfile_objfile));
 
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     {
       if (!t->has_memory ())
 	continue;
@@ -2405,9 +2394,7 @@  target_search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
 void
 target_require_runnable (void)
 {
-  struct target_ops *t;
-
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_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
@@ -2497,7 +2484,7 @@  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_top_target (); t != NULL; t = t->beneath ())
     {
       if (t->can_attach ())
 	return t;
@@ -2513,7 +2500,7 @@  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_top_target (); t != NULL; t = t->beneath ())
     {
       if (t->can_create_inferior ())
 	return t;
@@ -2543,7 +2530,7 @@  target_info_proc (const char *args, enum info_proc_what what)
   if (t == NULL)
     t = find_default_run_target (NULL);
 
-  for (; t != NULL; t = t->beneath)
+  for (; t != NULL; t = t->beneath ())
     {
       if (t->info_proc (args, what))
 	{
@@ -2633,6 +2620,14 @@  target_thread_address_space (ptid_t ptid)
   return aspace;
 }
 
+/* See target.h.  */
+
+target_ops *
+target_ops::beneath () const
+{
+  return m_beneath;
+}
+
 void
 target_ops::close ()
 {
@@ -2672,9 +2667,7 @@  target_ops::can_run ()
 int
 target_can_run ()
 {
-  struct target_ops *t;
-
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     {
       if (t->can_run ())
 	return 1;
@@ -2856,9 +2849,7 @@  target_fileio_open_1 (struct inferior *inf, const char *filename,
 		      int flags, int mode, int warn_if_slow,
 		      int *target_errno)
 {
-  struct target_ops *t;
-
-  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
     {
       int fd = t->fileio_open (inf, filename, flags, mode,
 			       warn_if_slow, target_errno);
@@ -3014,9 +3005,7 @@  int
 target_fileio_unlink (struct inferior *inf, const char *filename,
 		      int *target_errno)
 {
-  struct target_ops *t;
-
-  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
     {
       int ret = t->fileio_unlink (inf, filename, target_errno);
 
@@ -3042,9 +3031,7 @@  gdb::optional<std::string>
 target_fileio_readlink (struct inferior *inf, const char *filename,
 			int *target_errno)
 {
-  struct target_ops *t;
-
-  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
     {
       gdb::optional<std::string> ret
 	= t->fileio_readlink (inf, filename, target_errno);
@@ -3231,7 +3218,7 @@  default_thread_architecture (struct target_ops *ops, ptid_t ptid)
 struct target_ops *
 find_target_beneath (struct target_ops *t)
 {
-  return t->beneath;
+  return t->beneath ();
 }
 
 /* See target.h.  */
@@ -3239,9 +3226,7 @@  find_target_beneath (struct target_ops *t)
 struct target_ops *
 find_target_at (enum strata stratum)
 {
-  struct target_ops *t;
-
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     if (t->to_stratum == stratum)
       return t;
 
@@ -3370,7 +3355,7 @@  dummy_target::info () const
 const target_info &
 debug_target::info () const
 {
-  return beneath->info ();
+  return beneath ()->info ();
 }
 
 
@@ -3906,11 +3891,9 @@  flash_erase_command (const char *cmd, int from_tty)
 static void
 maintenance_print_target_stack (const char *cmd, int from_tty)
 {
-  struct target_ops *t;
-
   printf_filtered (_("The current target stack is:\n"));
 
-  for (t = current_top_target (); t != NULL; t = t->beneath)
+  for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
     {
       if (t->to_stratum == debug_stratum)
 	continue;
diff --git a/gdb/target.h b/gdb/target.h
index fbd5c53f36..04047cea48 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -424,7 +424,9 @@  struct target_info
 
 struct target_ops
   {
-    struct target_ops *beneath;	/* To the target under this one.  */
+    /* To the target under this one.  */
+    target_ops *m_beneath;
+    target_ops *beneath () const;
 
     /* Free resources associated with the target.  Note that singleton
        targets, like e.g., native targets, are global objects, not