*-fbsd-nat: Handle null inferior in read_description.
authorJohn Baldwin <jhb@FreeBSD.org>
Fri, 14 Jul 2023 15:39:24 +0000 (08:39 -0700)
committerJohn Baldwin <jhb@FreeBSD.org>
Fri, 14 Jul 2023 15:39:24 +0000 (08:39 -0700)
Don't invoke ptrace in the target read_description method if there is
not an active inferior to query via ptrace.  Instead, use the default
register set for the architecture.

Previously the native target could report an error from a failed
ptrace operation when fetching a tdesc without an attached process.
For example on FreeBSD/amd64:

(gdb) target native
Done.  Use the "run" command to start a process.
(gdb) unset tdesc filename
Couldn't get registers: Operation not permitted.

gdb/aarch64-fbsd-nat.c
gdb/amd64-fbsd-nat.c
gdb/arm-fbsd-nat.c
gdb/i386-fbsd-nat.c

index 709f5162ce05501b3c62356e0fd4fd3979444afe..38fb093f1390be421dc7414f80305ae34fe70d11 100644 (file)
@@ -120,6 +120,9 @@ aarch64_fbsd_nat_target::store_registers (struct regcache *regcache,
 const struct target_desc *
 aarch64_fbsd_nat_target::read_description ()
 {
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
+
   aarch64_features features;
   features.tls = have_regset (inferior_ptid, NT_ARM_TLS)? 1 : 0;
   return aarch64_read_description (features);
index bae267f230ffe324bc10e2e10d4cf66bc7585657..43e83ff24859274f6d801f255921e007a24abcd8 100644 (file)
@@ -310,6 +310,9 @@ amd64_fbsd_nat_target::read_description ()
   struct reg regs;
   int is64;
 
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
+
   if (ptrace (PT_GETREGS, inferior_ptid.pid (),
              (PTRACE_TYPE_ARG3) &regs, 0) == -1)
     perror_with_name (_("Couldn't get registers"));
index 5181281b27d4d6239aefbb1b010d5c2de6ca9691..cf22fc6cce968d70dcf506ac8cb1099e8c6276ff 100644 (file)
@@ -93,6 +93,9 @@ arm_fbsd_nat_target::read_description ()
   const struct target_desc *desc;
   bool tls = false;
 
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
+
 #ifdef PT_GETREGSET
   tls = have_regset (inferior_ptid, NT_ARM_TLS) != 0;
 #endif
index 927771e8b20bb7741f0a1297e73ca4ac4ca0c9e3..a2255c3c26b426849c0b5231b29abf7d3949624c 100644 (file)
@@ -315,6 +315,9 @@ i386_fbsd_nat_target::read_description ()
 #endif
   static int xmm_probed;
 
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
+
 #ifdef PT_GETXSTATE_INFO
   if (!xsave_probed)
     {