mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 11:04:18 +08:00
Remove some unnecessary inferior_ptid setting/restoring when fetching/storing registers
Now that the to_fetch_registers, to_store_registers and to_prepare_to_store target methods don't rely on the value of inferior_ptid anymore, we can remove a bunch of now unnecessary setting and restoring of inferior_ptid. The asserts added recently in target_fetch_registers and target_store_registers, which validate that inferior_ptid matches the regcache's ptid, must go away. It's the whole point of this effort, to not require inferior_ptid to have a particular value when calling these functions. One thing that I noticed is how sol-thread.c's ps_lgetregs and friends use the current value of inferior_ptid instead of what's passed as argument (ph->ptid), unlike proc-service.c's versions of the same functions. Is it expected? I left it like this in the current patch, but unless there's a good reason for it to be that way, I guess we should make it use the parameter. gdb/ChangeLog: * fbsd-tdep.c (fbsd_corefile_thread): Don't set/restore inferior_ptid. * proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs): Likewise. * regcache.c (regcache_raw_update, regcache_raw_write): Likewise. * sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs): Likewise. * target.c (target_fetch_registers, target_store_registers): Remove asserts.
This commit is contained in:
parent
077ae656a6
commit
3e00d44feb
@ -1,3 +1,15 @@
|
||||
2017-03-23 Simon Marchi <simon.marchi@ericsson.com>
|
||||
|
||||
* fbsd-tdep.c (fbsd_corefile_thread): Don't set/restore
|
||||
inferior_ptid.
|
||||
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
|
||||
ps_lsetfpregs): Likewise.
|
||||
* regcache.c (regcache_raw_update, regcache_raw_write): Likewise.
|
||||
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
|
||||
ps_lsetfpregs): Likewise.
|
||||
* target.c (target_fetch_registers, target_store_registers):
|
||||
Remove asserts.
|
||||
|
||||
2017-03-23 Alan Hayward <alan.hayward@arm.com>
|
||||
|
||||
* sol-thread.c (sol_thread_store_registers): Remove regcache calls.
|
||||
|
@ -193,15 +193,11 @@ static void
|
||||
fbsd_corefile_thread (struct thread_info *info,
|
||||
struct fbsd_corefile_thread_data *args)
|
||||
{
|
||||
struct cleanup *old_chain;
|
||||
struct regcache *regcache;
|
||||
|
||||
regcache = get_thread_arch_regcache (info->ptid, args->gdbarch);
|
||||
|
||||
old_chain = save_inferior_ptid ();
|
||||
inferior_ptid = info->ptid;
|
||||
target_fetch_registers (regcache, -1);
|
||||
do_cleanups (old_chain);
|
||||
|
||||
args->note_data = fbsd_collect_thread_registers
|
||||
(regcache, info->ptid, args->obfd, args->note_data,
|
||||
|
@ -158,16 +158,13 @@ ps_pdwrite (gdb_ps_prochandle_t ph, psaddr_t addr,
|
||||
ps_err_e
|
||||
ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset)
|
||||
{
|
||||
struct cleanup *old_chain = save_inferior_ptid ();
|
||||
struct regcache *regcache;
|
||||
|
||||
inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
|
||||
regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
||||
ptid_t ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
|
||||
struct regcache *regcache
|
||||
= get_thread_arch_regcache (ptid, target_gdbarch ());
|
||||
|
||||
target_fetch_registers (regcache, -1);
|
||||
fill_gregset (regcache, (gdb_gregset_t *) gregset, -1);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
@ -177,16 +174,13 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset)
|
||||
ps_err_e
|
||||
ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prgregset_t gregset)
|
||||
{
|
||||
struct cleanup *old_chain = save_inferior_ptid ();
|
||||
struct regcache *regcache;
|
||||
|
||||
inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
|
||||
regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
||||
ptid_t ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
|
||||
struct regcache *regcache
|
||||
= get_thread_arch_regcache (ptid, target_gdbarch ());
|
||||
|
||||
supply_gregset (regcache, (const gdb_gregset_t *) gregset);
|
||||
target_store_registers (regcache, -1);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
@ -197,16 +191,13 @@ ps_err_e
|
||||
ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||
gdb_prfpregset_t *fpregset)
|
||||
{
|
||||
struct cleanup *old_chain = save_inferior_ptid ();
|
||||
struct regcache *regcache;
|
||||
|
||||
inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
|
||||
regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
||||
ptid_t ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
|
||||
struct regcache *regcache
|
||||
= get_thread_arch_regcache (ptid, target_gdbarch ());
|
||||
|
||||
target_fetch_registers (regcache, -1);
|
||||
fill_fpregset (regcache, (gdb_fpregset_t *) fpregset, -1);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
@ -217,16 +208,13 @@ ps_err_e
|
||||
ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||
const gdb_prfpregset_t *fpregset)
|
||||
{
|
||||
struct cleanup *old_chain = save_inferior_ptid ();
|
||||
struct regcache *regcache;
|
||||
|
||||
inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
|
||||
regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
||||
ptid_t ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
|
||||
struct regcache *regcache
|
||||
= get_thread_arch_regcache (ptid, target_gdbarch ());
|
||||
|
||||
supply_fpregset (regcache, (const gdb_fpregset_t *) fpregset);
|
||||
target_store_registers (regcache, -1);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
|
@ -666,11 +666,7 @@ regcache_raw_update (struct regcache *regcache, int regnum)
|
||||
if (!regcache->readonly_p
|
||||
&& regcache_register_status (regcache, regnum) == REG_UNKNOWN)
|
||||
{
|
||||
struct cleanup *old_chain = save_inferior_ptid ();
|
||||
|
||||
inferior_ptid = regcache->ptid;
|
||||
target_fetch_registers (regcache, regnum);
|
||||
do_cleanups (old_chain);
|
||||
|
||||
/* A number of targets can't access the whole set of raw
|
||||
registers (because the debug API provides no means to get at
|
||||
@ -937,8 +933,7 @@ void
|
||||
regcache_raw_write (struct regcache *regcache, int regnum,
|
||||
const gdb_byte *buf)
|
||||
{
|
||||
struct cleanup *chain_before_save_inferior;
|
||||
struct cleanup *chain_before_invalidate_register;
|
||||
struct cleanup *old_chain;
|
||||
|
||||
gdb_assert (regcache != NULL && buf != NULL);
|
||||
gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
|
||||
@ -956,24 +951,18 @@ regcache_raw_write (struct regcache *regcache, int regnum,
|
||||
regcache->descr->sizeof_register[regnum]) == 0))
|
||||
return;
|
||||
|
||||
chain_before_save_inferior = save_inferior_ptid ();
|
||||
inferior_ptid = regcache->ptid;
|
||||
|
||||
target_prepare_to_store (regcache);
|
||||
regcache_raw_set_cached_value (regcache, regnum, buf);
|
||||
|
||||
/* Register a cleanup function for invalidating the register after it is
|
||||
written, in case of a failure. */
|
||||
chain_before_invalidate_register
|
||||
= make_cleanup_regcache_invalidate (regcache, regnum);
|
||||
old_chain = make_cleanup_regcache_invalidate (regcache, regnum);
|
||||
|
||||
target_store_registers (regcache, regnum);
|
||||
|
||||
/* The target did not throw an error so we can discard invalidating the
|
||||
register and restore the cleanup chain to what it was. */
|
||||
discard_cleanups (chain_before_invalidate_register);
|
||||
|
||||
do_cleanups (chain_before_save_inferior);
|
||||
discard_cleanups (old_chain);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -872,19 +872,13 @@ ps_ptwrite (gdb_ps_prochandle_t ph, gdb_ps_addr_t addr,
|
||||
ps_err_e
|
||||
ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset)
|
||||
{
|
||||
struct cleanup *old_chain;
|
||||
struct regcache *regcache;
|
||||
|
||||
old_chain = save_inferior_ptid ();
|
||||
|
||||
inferior_ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
||||
regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
||||
ptid_t ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
||||
struct regcache *regcache
|
||||
= get_thread_arch_regcache (ptid, target_gdbarch ());
|
||||
|
||||
target_fetch_registers (regcache, -1);
|
||||
fill_gregset (regcache, (gdb_gregset_t *) gregset, -1);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
@ -894,19 +888,13 @@ ps_err_e
|
||||
ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||
const prgregset_t gregset)
|
||||
{
|
||||
struct cleanup *old_chain;
|
||||
struct regcache *regcache;
|
||||
|
||||
old_chain = save_inferior_ptid ();
|
||||
|
||||
inferior_ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
||||
regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
||||
ptid_t ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
||||
struct regcache *regcache
|
||||
= get_thread_arch_regcache (ptid, target_gdbarch ());
|
||||
|
||||
supply_gregset (regcache, (const gdb_gregset_t *) gregset);
|
||||
target_store_registers (regcache, -1);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
@ -952,19 +940,13 @@ ps_err_e
|
||||
ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||
prfpregset_t *fpregset)
|
||||
{
|
||||
struct cleanup *old_chain;
|
||||
struct regcache *regcache;
|
||||
|
||||
old_chain = save_inferior_ptid ();
|
||||
|
||||
inferior_ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
||||
regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
||||
ptid_t ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
||||
struct regcache *regcache
|
||||
= get_thread_arch_regcache (ptid, target_gdbarch ());
|
||||
|
||||
target_fetch_registers (regcache, -1);
|
||||
fill_fpregset (regcache, (gdb_fpregset_t *) fpregset, -1);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
@ -974,19 +956,13 @@ ps_err_e
|
||||
ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||
const prfpregset_t * fpregset)
|
||||
{
|
||||
struct cleanup *old_chain;
|
||||
struct regcache *regcache;
|
||||
|
||||
old_chain = save_inferior_ptid ();
|
||||
|
||||
inferior_ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
||||
regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
||||
ptid_t ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
||||
struct regcache *regcache
|
||||
= get_thread_arch_regcache (ptid, target_gdbarch ());
|
||||
|
||||
supply_fpregset (regcache, (const gdb_fpregset_t *) fpregset);
|
||||
target_store_registers (regcache, -1);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
|
||||
return PS_OK;
|
||||
}
|
||||
|
||||
|
@ -3587,8 +3587,6 @@ debug_print_register (const char * func,
|
||||
void
|
||||
target_fetch_registers (struct regcache *regcache, int regno)
|
||||
{
|
||||
gdb_assert (ptid_equal (regcache_get_ptid (regcache), inferior_ptid));
|
||||
|
||||
current_target.to_fetch_registers (¤t_target, regcache, regno);
|
||||
if (targetdebug)
|
||||
debug_print_register ("target_fetch_registers", regcache, regno);
|
||||
@ -3600,8 +3598,6 @@ target_store_registers (struct regcache *regcache, int regno)
|
||||
if (!may_write_registers)
|
||||
error (_("Writing to registers is not allowed (regno %d)"), regno);
|
||||
|
||||
gdb_assert (ptid_equal (regcache_get_ptid (regcache), inferior_ptid));
|
||||
|
||||
current_target.to_store_registers (¤t_target, regcache, regno);
|
||||
if (targetdebug)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user