[ARM] perror_with_name when failed to fetch/store registers

I see the following test fail on native arm-linux gdb testing...

(gdb) PASS: gdb.base/killed-outside.exp: registers: get pid of inferior
Executing on target: kill -9 2346    (timeout = 300)
spawn kill -9 2346^M
flushregs^M
Register cache flushed.^M
warning: Unable to fetch general registers.^M
PC not available^M
(gdb) PASS: gdb.base/killed-outside.exp: registers: flushregs
info threads^M
  Id   Target Id         Frame ^M
* 1    process 2346 "killed-outside" (gdb) FAIL: gdb.base/killed-outside.exp: registers: info threads (timeout)

since the inferior disappeared, ptrace will fail.  In that case, the
exception should be thrown, so that the caller can handle that.

gdb:

2016-01-22  Yao Qi  <yao.qi@linaro.org>

	* arm-linux-nat.c (fetch_fpregs): Call perror_with_name
	instead of warning.
	(store_fpregs, fetch_regs, store_regs): Likewise.
	(fetch_wmmx_regs, store_wmmx_regs): Likewise.
	(fetch_vfp_regs, store_vfp_regs): Likewise.
This commit is contained in:
Yao Qi 2016-01-22 09:01:09 +00:00
parent b35a8b2f1f
commit d86feca31b
2 changed files with 20 additions and 48 deletions

View File

@ -1,3 +1,11 @@
2016-01-22 Yao Qi <yao.qi@linaro.org>
* arm-linux-nat.c (fetch_fpregs): Call perror_with_name
instead of warning.
(store_fpregs, fetch_regs, store_regs): Likewise.
(fetch_wmmx_regs, store_wmmx_regs): Likewise.
(fetch_vfp_regs, store_vfp_regs): Likewise.
2016-01-21 Doug Evans <dje@google.com>
* breakpoint.c (init_breakpoint_sal): Add comment.

View File

@ -92,10 +92,7 @@ fetch_fpregs (struct regcache *regcache)
ret = ptrace (PT_GETFPREGS, tid, 0, fp);
if (ret < 0)
{
warning (_("Unable to fetch the floating point registers."));
return;
}
perror_with_name (_("Unable to fetch the floating point registers."));
/* Fetch fpsr. */
regcache_raw_supply (regcache, ARM_FPS_REGNUM,
@ -133,10 +130,7 @@ store_fpregs (const struct regcache *regcache)
ret = ptrace (PT_GETFPREGS, tid, 0, fp);
if (ret < 0)
{
warning (_("Unable to fetch the floating point registers."));
return;
}
perror_with_name (_("Unable to fetch the floating point registers."));
/* Store fpsr. */
if (REG_VALID == regcache_register_status (regcache, ARM_FPS_REGNUM))
@ -160,10 +154,7 @@ store_fpregs (const struct regcache *regcache)
ret = ptrace (PTRACE_SETFPREGS, tid, 0, fp);
if (ret < 0)
{
warning (_("Unable to store floating point registers."));
return;
}
perror_with_name (_("Unable to store floating point registers."));
}
/* Fetch all general registers of the process and store into
@ -191,10 +182,7 @@ fetch_regs (struct regcache *regcache)
ret = ptrace (PTRACE_GETREGS, tid, 0, &regs);
if (ret < 0)
{
warning (_("Unable to fetch general registers."));
return;
}
perror_with_name (_("Unable to fetch general registers."));
aarch32_gp_regcache_supply (regcache, (uint32_t *) regs, arm_apcs_32);
}
@ -222,10 +210,7 @@ store_regs (const struct regcache *regcache)
ret = ptrace (PTRACE_GETREGS, tid, 0, &regs);
if (ret < 0)
{
warning (_("Unable to fetch general registers."));
return;
}
perror_with_name (_("Unable to fetch general registers."));
aarch32_gp_regcache_collect (regcache, (uint32_t *) regs, arm_apcs_32);
@ -242,10 +227,7 @@ store_regs (const struct regcache *regcache)
ret = ptrace (PTRACE_SETREGS, tid, 0, &regs);
if (ret < 0)
{
warning (_("Unable to store general registers."));
return;
}
perror_with_name (_("Unable to store general registers."));
}
/* Fetch all WMMX registers of the process and store into
@ -264,10 +246,7 @@ fetch_wmmx_regs (struct regcache *regcache)
ret = ptrace (PTRACE_GETWMMXREGS, tid, 0, regbuf);
if (ret < 0)
{
warning (_("Unable to fetch WMMX registers."));
return;
}
perror_with_name (_("Unable to fetch WMMX registers."));
for (regno = 0; regno < 16; regno++)
regcache_raw_supply (regcache, regno + ARM_WR0_REGNUM,
@ -293,10 +272,7 @@ store_wmmx_regs (const struct regcache *regcache)
ret = ptrace (PTRACE_GETWMMXREGS, tid, 0, regbuf);
if (ret < 0)
{
warning (_("Unable to fetch WMMX registers."));
return;
}
perror_with_name (_("Unable to fetch WMMX registers."));
for (regno = 0; regno < 16; regno++)
if (REG_VALID == regcache_register_status (regcache,
@ -319,10 +295,7 @@ store_wmmx_regs (const struct regcache *regcache)
ret = ptrace (PTRACE_SETWMMXREGS, tid, 0, regbuf);
if (ret < 0)
{
warning (_("Unable to store WMMX registers."));
return;
}
perror_with_name (_("Unable to store WMMX registers."));
}
static void
@ -348,10 +321,7 @@ fetch_vfp_regs (struct regcache *regcache)
ret = ptrace (PTRACE_GETVFPREGS, tid, 0, regbuf);
if (ret < 0)
{
warning (_("Unable to fetch VFP registers."));
return;
}
perror_with_name (_("Unable to fetch VFP registers."));
aarch32_vfp_regcache_supply (regcache, regbuf,
tdep->vfp_register_count);
@ -380,10 +350,7 @@ store_vfp_regs (const struct regcache *regcache)
ret = ptrace (PTRACE_GETVFPREGS, tid, 0, regbuf);
if (ret < 0)
{
warning (_("Unable to fetch VFP registers (for update)."));
return;
}
perror_with_name (_("Unable to fetch VFP registers (for update)."));
aarch32_vfp_regcache_collect (regcache, regbuf,
tdep->vfp_register_count);
@ -400,10 +367,7 @@ store_vfp_regs (const struct regcache *regcache)
ret = ptrace (PTRACE_SETVFPREGS, tid, 0, regbuf);
if (ret < 0)
{
warning (_("Unable to store VFP registers."));
return;
}
perror_with_name (_("Unable to store VFP registers."));
}
/* Fetch registers from the child process. Fetch all registers if