gdb: scope down registers_changed call in inferior::set_arch
authorSimon Marchi <simon.marchi@efficios.com>
Fri, 29 Sep 2023 18:24:39 +0000 (14:24 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 10 Oct 2023 14:44:35 +0000 (10:44 -0400)
inferior::set_arch calls registers_changed, which invalidates all
regcaches.  It would be enough to invalidate only regcaches of threads
belonging to this inferior.  Call registers_changed_ptid instead, with
the proper process target / ptid.  If the inferior does not have a
process target, there should be no regcaches for that inferior, so no
need to invalidate anything.

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

index 21795a0d8a42b4b86038c7757d57cff769e61641..efe57cceae3ec1c706c58018b2499461ddb50641 100644 (file)
@@ -180,7 +180,10 @@ inferior::set_arch (gdbarch *arch)
   gdb_assert (gdbarch_initialized_p (arch));
   m_gdbarch = arch;
   gdb::observers::architecture_changed.notify (this, arch);
-  registers_changed ();
+
+  process_stratum_target *proc_target = this->process_target ();
+  if (proc_target != nullptr)
+    registers_changed_ptid (proc_target, ptid_t (this->pid));
 }
 
 void