/* Target-dependent code for the S+core architecture, for GDB,
the GNU Debugger.
- Copyright (C) 2006-2020 Free Software Foundation, Inc.
+ Copyright (C) 2006-2021 Free Software Foundation, Inc.
Contributed by Qinwei (qinwei@sunnorth.com.cn)
Contributed by Ching-Peng Lin (cplin@sunplus.com)
{
CORE_ADDR base;
CORE_ADDR fp;
- struct trad_frame_saved_reg *saved_regs;
+ trad_frame_saved_reg *saved_regs;
};
static int target_mach = bfd_mach_score7;
/* Save RA. */
if (ra_offset_p == 1)
{
- if (this_cache->saved_regs[SCORE_PC_REGNUM].addr == -1)
- this_cache->saved_regs[SCORE_PC_REGNUM].addr =
- sp + sp_offset - ra_offset;
+ if (this_cache->saved_regs[SCORE_PC_REGNUM].is_realreg ()
+ && this_cache->saved_regs[SCORE_PC_REGNUM].realreg ()
+ == SCORE_PC_REGNUM)
+ this_cache->saved_regs[SCORE_PC_REGNUM].set_addr (sp + sp_offset
+ - ra_offset);
}
else
{
/* Save FP. */
if (fp_offset_p == 1)
{
- if (this_cache->saved_regs[SCORE_FP_REGNUM].addr == -1)
- this_cache->saved_regs[SCORE_FP_REGNUM].addr =
- sp + sp_offset - fp_offset;
+ if (this_cache->saved_regs[SCORE_FP_REGNUM].is_realreg ()
+ && this_cache->saved_regs[SCORE_FP_REGNUM].realreg ()
+ == SCORE_FP_REGNUM)
+ this_cache->saved_regs[SCORE_FP_REGNUM].set_addr (sp + sp_offset
+ - fp_offset);
}
/* Save SP and FP. */
/* Save RA. */
if (ra_offset_p == 1)
{
- if (this_cache->saved_regs[SCORE_PC_REGNUM].addr == -1)
- this_cache->saved_regs[SCORE_PC_REGNUM].addr =
- sp + sp_offset - ra_offset;
+ if (this_cache->saved_regs[SCORE_PC_REGNUM].is_realreg ()
+ && this_cache->saved_regs[SCORE_PC_REGNUM].realreg ()
+ == SCORE_PC_REGNUM)
+ this_cache->saved_regs[SCORE_PC_REGNUM].set_addr (sp + sp_offset
+ - ra_offset);
}
else
{
/* Save FP. */
if (fp_offset_p == 1)
{
- if (this_cache->saved_regs[SCORE_FP_REGNUM].addr == -1)
- this_cache->saved_regs[SCORE_FP_REGNUM].addr =
- sp + sp_offset - fp_offset;
+ if (this_cache->saved_regs[SCORE_FP_REGNUM].is_realreg ()
+ && this_cache->saved_regs[SCORE_FP_REGNUM].realreg ()
+ == SCORE_FP_REGNUM)
+ this_cache->saved_regs[SCORE_FP_REGNUM].set_addr (sp + sp_offset
+ - fp_offset);
}
/* Save SP and FP. */
}
/* Save SP. */
- trad_frame_set_value (cache->saved_regs, SCORE_SP_REGNUM, cache->base);
+ cache->saved_regs[SCORE_SP_REGNUM].set_value (cache->base);
return (struct score_frame_cache *) (*this_cache);
}