gdb: move set_target_gdbarch to inferior::set_arch
authorSimon Marchi <simon.marchi@efficios.com>
Fri, 29 Sep 2023 18:24:37 +0000 (14:24 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 10 Oct 2023 14:44:35 +0000 (10:44 -0400)
set_target_gdbarch is basically a setter for the current inferior's
arch, that notifies other parts of GDB of the architecture change.  Move
the code of set_target_gdbarch to the inferior::set_arch method.

Add gdbarch_initialized_p, so we can keep the assertion.

Change-Id: I276e28eafd4740c94bc5233c81a86c01b4a6ae90
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
gdb/arch-utils.c
gdb/gdbarch.h
gdb/inferior.c
gdb/inferior.h

index b2b265a55346d747bba6033f4eea4b47cec78637..5768259d94fcea94149e2f4d7a8f24cd70a3664d 100644 (file)
@@ -625,7 +625,8 @@ gdbarch_update_p (struct gdbarch_info info)
                "New architecture %s (%s) selected\n",
                host_address_to_string (new_gdbarch),
                gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
-  set_target_gdbarch (new_gdbarch);
+
+  current_inferior ()->set_arch (new_gdbarch);
 
   return 1;
 }
@@ -657,7 +658,8 @@ set_gdbarch_from_file (bfd *abfd)
 
   if (gdbarch == NULL)
     error (_("Architecture of file not recognized."));
-  set_target_gdbarch (gdbarch);
+
+  current_inferior ()->set_arch (gdbarch);
 }
 
 /* Initialize the current architecture.  Update the ``set
@@ -1222,7 +1224,6 @@ gdbarch_obstack_strdup (struct gdbarch *arch, const char *string)
   return obstack_strdup (&arch->obstack, string);
 }
 
-
 /* Free a gdbarch struct.  This should never happen in normal
    operation --- once you've created a gdbarch, you keep it around.
    However, if an architecture's init function encounters an error
@@ -1481,17 +1482,12 @@ gdbarch_find_by_info (struct gdbarch_info info)
   return new_gdbarch;
 }
 
-/* Make the specified architecture current.  */
+/* See gdbarch.h.  */
 
-void
-set_target_gdbarch (struct gdbarch *new_gdbarch)
+bool
+gdbarch_initialized_p (gdbarch *arch)
 {
-  gdb_assert (new_gdbarch != NULL);
-  gdb_assert (new_gdbarch->initialized_p);
-  current_inferior ()->set_arch (new_gdbarch);
-  gdb::observers::architecture_changed.notify (current_inferior (),
-                                              new_gdbarch);
-  registers_changed ();
+  return arch->initialized_p;
 }
 
 /* Return the current inferior's arch.  */
index a9d6a4b175c580a235ff2b689537fe7bd4171ce9..5285f29b18b88bebc45838638b70a72fdc745841 100644 (file)
@@ -278,6 +278,9 @@ extern void gdbarch_register (enum bfd_architecture architecture,
                              gdbarch_dump_tdep_ftype *dump_tdep = nullptr,
                              gdbarch_supports_arch_info_ftype *supports_arch_info = nullptr);
 
+/* Return true if ARCH is initialized.  */
+
+bool gdbarch_initialized_p (gdbarch *arch);
 
 /* Return a vector of the valid architecture names.  Since architectures are
    registered during the _initialize phase this function only returns useful
@@ -355,12 +358,6 @@ extern int gdbarch_update_p (struct gdbarch_info info);
 
 extern struct gdbarch *gdbarch_find_by_info (struct gdbarch_info info);
 
-
-/* Helper function.  Set the target gdbarch to "gdbarch".  */
-
-extern void set_target_gdbarch (struct gdbarch *gdbarch);
-
-
 /* A registry adaptor for gdbarch.  This arranges to store the
    registry in the gdbarch.  */
 template<>
index 12419da2c3a976724deadcc19cbbb5bf42670946..21795a0d8a42b4b86038c7757d57cff769e61641 100644 (file)
@@ -173,6 +173,16 @@ inferior::set_args (gdb::array_view<char * const> args)
   set_args (construct_inferior_arguments (args));
 }
 
+void
+inferior::set_arch (gdbarch *arch)
+{
+  gdb_assert (arch != nullptr);
+  gdb_assert (gdbarch_initialized_p (arch));
+  m_gdbarch = arch;
+  gdb::observers::architecture_changed.notify (this, arch);
+  registers_changed ();
+}
+
 void
 inferior::add_continuation (std::function<void ()> &&cont)
 {
index 29e26a5846b44a138522d2aa9630c0fb96d45607..33eff7a91418a8b291e5950c9985c697bb5647da 100644 (file)
@@ -554,8 +554,7 @@ public:
   }
 
   /* Set this inferior's arch.  */
-  void set_arch (gdbarch *arch)
-  { m_gdbarch = arch; }
+  void set_arch (gdbarch *arch);
 
   /* Get this inferior's arch.  */
   gdbarch *arch ()