aboutsummaryrefslogtreecommitdiff
path: root/gdb
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
commita4a688ffa46533bf26d5d27dc7f75c22d90fd638 (patch)
treefd2a899df1fc435a910b32bdcbd2352eb93e5966 /gdb
parent97b6e0f6c88d02eac1df0254cdd5c80f40f4869d (diff)
downloadgdb-a4a688ffa46533bf26d5d27dc7f75c22d90fd638.zip
gdb-a4a688ffa46533bf26d5d27dc7f75c22d90fd638.tar.gz
gdb-a4a688ffa46533bf26d5d27dc7f75c22d90fd638.tar.bz2
*-linux-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 Linux x86-64: (gdb) target native Done. Use the "run" command to start a process. (gdb) unset tdesc filename Couldn't get CS register: No such process.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/aarch64-linux-nat.c3
-rw-r--r--gdb/arm-linux-nat.c3
-rw-r--r--gdb/mips-linux-nat.c4
-rw-r--r--gdb/ppc-linux-nat.c3
-rw-r--r--gdb/riscv-linux-nat.c3
-rw-r--r--gdb/s390-linux-nat.c3
-rw-r--r--gdb/x86-linux-nat.c3
7 files changed, 22 insertions, 0 deletions
diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
index ecb2eeb..eeb9761 100644
--- a/gdb/aarch64-linux-nat.c
+++ b/gdb/aarch64-linux-nat.c
@@ -785,6 +785,9 @@ aarch64_linux_nat_target::read_description ()
gdb_byte regbuf[ARM_VFP3_REGS_SIZE];
struct iovec iovec;
+ if (inferior_ptid == null_ptid)
+ return this->beneath ()->read_description ();
+
tid = inferior_ptid.pid ();
iovec.iov_base = regbuf;
diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c
index ef3fa00..70c6bc6 100644
--- a/gdb/arm-linux-nat.c
+++ b/gdb/arm-linux-nat.c
@@ -531,6 +531,9 @@ ps_get_thread_area (struct ps_prochandle *ph,
const struct target_desc *
arm_linux_nat_target::read_description ()
{
+ if (inferior_ptid == null_ptid)
+ return this->beneath ()->read_description ();
+
CORE_ADDR arm_hwcap = linux_get_hwcap ();
if (have_ptrace_getregset == TRIBOOL_UNKNOWN)
diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
index 972b5db..8a7cc95 100644
--- a/gdb/mips-linux-nat.c
+++ b/gdb/mips-linux-nat.c
@@ -458,6 +458,10 @@ mips_linux_nat_target::read_description ()
if (have_dsp < 0)
{
+ /* Assume no DSP if there is no inferior to inspect with ptrace. */
+ if (inferior_ptid == null_ptid)
+ return _MIPS_SIM == _ABIO32 ? tdesc_mips_linux : tdesc_mips64_linux;
+
int tid = get_ptrace_pid (inferior_ptid);
errno = 0;
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
index 55dcda9..d14aba6 100644
--- a/gdb/ppc-linux-nat.c
+++ b/gdb/ppc-linux-nat.c
@@ -1941,6 +1941,9 @@ ppc_linux_nat_target::auxv_parse (const gdb_byte **readptr,
const struct target_desc *
ppc_linux_nat_target::read_description ()
{
+ if (inferior_ptid == null_ptid)
+ return this->beneath ()->read_description ();
+
int tid = inferior_ptid.pid ();
if (have_ptrace_getsetevrregs)
diff --git a/gdb/riscv-linux-nat.c b/gdb/riscv-linux-nat.c
index 8be4a5a..9492cb6 100644
--- a/gdb/riscv-linux-nat.c
+++ b/gdb/riscv-linux-nat.c
@@ -201,6 +201,9 @@ fill_fpregset (const struct regcache *regcache, prfpregset_t *fpregs,
const struct target_desc *
riscv_linux_nat_target::read_description ()
{
+ if (inferior_ptid == null_ptid)
+ return this->beneath ()->read_description ();
+
const struct riscv_gdbarch_features features
= riscv_linux_read_features (inferior_ptid.pid ());
return riscv_lookup_target_description (features);
diff --git a/gdb/s390-linux-nat.c b/gdb/s390-linux-nat.c
index fc3917d..8f54e9f 100644
--- a/gdb/s390-linux-nat.c
+++ b/gdb/s390-linux-nat.c
@@ -987,6 +987,9 @@ s390_linux_nat_target::auxv_parse (const gdb_byte **readptr,
const struct target_desc *
s390_linux_nat_target::read_description ()
{
+ if (inferior_ptid == null_ptid)
+ return this->beneath ()->read_description ();
+
int tid = inferior_ptid.pid ();
have_regset_last_break
diff --git a/gdb/x86-linux-nat.c b/gdb/x86-linux-nat.c
index fd21452..ca4eaf5 100644
--- a/gdb/x86-linux-nat.c
+++ b/gdb/x86-linux-nat.c
@@ -115,6 +115,9 @@ x86_linux_nat_target::read_description ()
static uint64_t xcr0;
uint64_t xcr0_features_bits;
+ if (inferior_ptid == null_ptid)
+ return this->beneath ()->read_description ();
+
tid = inferior_ptid.pid ();
#ifdef __x86_64__