aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2023-07-14 08:39:24 -0700
committerJohn Baldwin <jhb@FreeBSD.org>2023-07-14 08:39:24 -0700
commit97b6e0f6c88d02eac1df0254cdd5c80f40f4869d (patch)
treedfd8f70af406cbf2ea9c5aeeb370bc56ccb88540
parent36b6b4594e729c4a4502dc93c8c3c894287147a6 (diff)
downloadgdb-97b6e0f6c88d02eac1df0254cdd5c80f40f4869d.zip
gdb-97b6e0f6c88d02eac1df0254cdd5c80f40f4869d.tar.gz
gdb-97b6e0f6c88d02eac1df0254cdd5c80f40f4869d.tar.bz2
*-fbsd-nat: Handle null inferior in read_description.
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.
-rw-r--r--gdb/aarch64-fbsd-nat.c3
-rw-r--r--gdb/amd64-fbsd-nat.c3
-rw-r--r--gdb/arm-fbsd-nat.c3
-rw-r--r--gdb/i386-fbsd-nat.c3
4 files changed, 12 insertions, 0 deletions
diff --git a/gdb/aarch64-fbsd-nat.c b/gdb/aarch64-fbsd-nat.c
index 709f516..38fb093 100644
--- a/gdb/aarch64-fbsd-nat.c
+++ b/gdb/aarch64-fbsd-nat.c
@@ -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);
diff --git a/gdb/amd64-fbsd-nat.c b/gdb/amd64-fbsd-nat.c
index bae267f..43e83ff 100644
--- a/gdb/amd64-fbsd-nat.c
+++ b/gdb/amd64-fbsd-nat.c
@@ -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"));
diff --git a/gdb/arm-fbsd-nat.c b/gdb/arm-fbsd-nat.c
index 5181281..cf22fc6 100644
--- a/gdb/arm-fbsd-nat.c
+++ b/gdb/arm-fbsd-nat.c
@@ -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
diff --git a/gdb/i386-fbsd-nat.c b/gdb/i386-fbsd-nat.c
index 927771e..a2255c3 100644
--- a/gdb/i386-fbsd-nat.c
+++ b/gdb/i386-fbsd-nat.c
@@ -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)
{