*-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.
This commit is contained in:
parent
97b6e0f6c8
commit
a4a688ffa4
7 changed files with 22 additions and 0 deletions
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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__
|
||||
|
|
Loading…
Add table
Reference in a new issue