mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 21:34:13 +08:00
Make RL78_PC_REGNUM a pseudo-register in rl78-tdep.c.
This commit is contained in:
@ -1,3 +1,12 @@
|
|||||||
|
2013-08-15 Kevin Buettner <kevinb@redhat.com>
|
||||||
|
|
||||||
|
* rl78-tdep.c (RL78_RAW_PC_REGNUM): New enum.
|
||||||
|
(RL78_PC_REGNUM): Move to list of pseudo-register enums.
|
||||||
|
(rl78_register_type, rl78_register_name, rl78_register_reggroup_p):
|
||||||
|
Update to account for fact that PC is now a pseudo-register.
|
||||||
|
(rl78_pseudo_register_write, rl78_pseudo_register_read): Add
|
||||||
|
cases for RL78_PC_REGNUM.
|
||||||
|
|
||||||
2013-08-15 Muhammad Bilal <mbilal@codesourcery.com>
|
2013-08-15 Muhammad Bilal <mbilal@codesourcery.com>
|
||||||
|
|
||||||
PR cli/15841
|
PR cli/15841
|
||||||
|
@ -94,7 +94,7 @@ enum
|
|||||||
RL78_PSW_REGNUM, /* 8 bits */
|
RL78_PSW_REGNUM, /* 8 bits */
|
||||||
RL78_ES_REGNUM, /* 8 bits */
|
RL78_ES_REGNUM, /* 8 bits */
|
||||||
RL78_CS_REGNUM, /* 8 bits */
|
RL78_CS_REGNUM, /* 8 bits */
|
||||||
RL78_PC_REGNUM, /* 20 bits; we'll use 32 bits for it. */
|
RL78_RAW_PC_REGNUM, /* 20 bits; we'll use 32 bits for it. */
|
||||||
|
|
||||||
/* Fixed address SFRs (some of those above are SFRs too.) */
|
/* Fixed address SFRs (some of those above are SFRs too.) */
|
||||||
RL78_SPL_REGNUM, /* 8 bits; lower half of SP */
|
RL78_SPL_REGNUM, /* 8 bits; lower half of SP */
|
||||||
@ -105,7 +105,8 @@ enum
|
|||||||
RL78_NUM_REGS,
|
RL78_NUM_REGS,
|
||||||
|
|
||||||
/* Pseudo registers. */
|
/* Pseudo registers. */
|
||||||
RL78_SP_REGNUM = RL78_NUM_REGS,
|
RL78_PC_REGNUM = RL78_NUM_REGS,
|
||||||
|
RL78_SP_REGNUM,
|
||||||
|
|
||||||
RL78_X_REGNUM,
|
RL78_X_REGNUM,
|
||||||
RL78_A_REGNUM,
|
RL78_A_REGNUM,
|
||||||
@ -243,6 +244,8 @@ rl78_register_type (struct gdbarch *gdbarch, int reg_nr)
|
|||||||
|
|
||||||
if (reg_nr == RL78_PC_REGNUM)
|
if (reg_nr == RL78_PC_REGNUM)
|
||||||
return tdep->rl78_code_pointer;
|
return tdep->rl78_code_pointer;
|
||||||
|
else if (reg_nr == RL78_RAW_PC_REGNUM)
|
||||||
|
return tdep->rl78_uint32;
|
||||||
else if (reg_nr <= RL78_MEM_REGNUM
|
else if (reg_nr <= RL78_MEM_REGNUM
|
||||||
|| (RL78_X_REGNUM <= reg_nr && reg_nr <= RL78_H_REGNUM)
|
|| (RL78_X_REGNUM <= reg_nr && reg_nr <= RL78_H_REGNUM)
|
||||||
|| (RL78_BANK0_R0_REGNUM <= reg_nr
|
|| (RL78_BANK0_R0_REGNUM <= reg_nr
|
||||||
@ -298,13 +301,14 @@ rl78_register_name (struct gdbarch *gdbarch, int regnr)
|
|||||||
"psw",
|
"psw",
|
||||||
"es",
|
"es",
|
||||||
"cs",
|
"cs",
|
||||||
"pc",
|
"",
|
||||||
|
|
||||||
"", /* spl */
|
"", /* spl */
|
||||||
"", /* sph */
|
"", /* sph */
|
||||||
"pmc",
|
"pmc",
|
||||||
"mem",
|
"mem",
|
||||||
|
|
||||||
|
"pc",
|
||||||
"sp",
|
"sp",
|
||||||
|
|
||||||
"x",
|
"x",
|
||||||
@ -394,9 +398,11 @@ rl78_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
|
|||||||
if (group == save_reggroup || group == restore_reggroup)
|
if (group == save_reggroup || group == restore_reggroup)
|
||||||
{
|
{
|
||||||
if ((regnum < RL78_NUM_REGS
|
if ((regnum < RL78_NUM_REGS
|
||||||
&& regnum != RL78_SPL_REGNUM
|
&& regnum != RL78_SPL_REGNUM
|
||||||
&& regnum != RL78_SPH_REGNUM)
|
&& regnum != RL78_SPH_REGNUM
|
||||||
|| regnum == RL78_SP_REGNUM)
|
&& regnum != RL78_RAW_PC_REGNUM)
|
||||||
|
|| regnum == RL78_SP_REGNUM
|
||||||
|
|| regnum == RL78_PC_REGNUM)
|
||||||
return 1;
|
return 1;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
@ -409,6 +415,7 @@ rl78_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
|
|||||||
|| regnum == RL78_SPH_REGNUM
|
|| regnum == RL78_SPH_REGNUM
|
||||||
|| regnum == RL78_PMC_REGNUM
|
|| regnum == RL78_PMC_REGNUM
|
||||||
|| regnum == RL78_MEM_REGNUM
|
|| regnum == RL78_MEM_REGNUM
|
||||||
|
|| regnum == RL78_RAW_PC_REGNUM
|
||||||
|| (RL78_BANK0_RP0_REGNUM <= regnum && regnum <= RL78_BANK3_RP3_REGNUM))
|
|| (RL78_BANK0_RP0_REGNUM <= regnum && regnum <= RL78_BANK3_RP3_REGNUM))
|
||||||
return group == system_reggroup;
|
return group == system_reggroup;
|
||||||
|
|
||||||
@ -464,6 +471,13 @@ rl78_pseudo_register_read (struct gdbarch *gdbarch,
|
|||||||
if (status == REG_VALID)
|
if (status == REG_VALID)
|
||||||
status = regcache_raw_read (regcache, RL78_SPH_REGNUM, buffer + 1);
|
status = regcache_raw_read (regcache, RL78_SPH_REGNUM, buffer + 1);
|
||||||
}
|
}
|
||||||
|
else if (reg == RL78_PC_REGNUM)
|
||||||
|
{
|
||||||
|
gdb_byte rawbuf[4];
|
||||||
|
|
||||||
|
status = regcache_raw_read (regcache, RL78_RAW_PC_REGNUM, rawbuf);
|
||||||
|
memcpy (buffer, rawbuf, 3);
|
||||||
|
}
|
||||||
else if (RL78_X_REGNUM <= reg && reg <= RL78_H_REGNUM)
|
else if (RL78_X_REGNUM <= reg && reg <= RL78_H_REGNUM)
|
||||||
{
|
{
|
||||||
ULONGEST psw;
|
ULONGEST psw;
|
||||||
@ -527,6 +541,14 @@ rl78_pseudo_register_write (struct gdbarch *gdbarch,
|
|||||||
regcache_raw_write (regcache, RL78_SPL_REGNUM, buffer);
|
regcache_raw_write (regcache, RL78_SPL_REGNUM, buffer);
|
||||||
regcache_raw_write (regcache, RL78_SPH_REGNUM, buffer + 1);
|
regcache_raw_write (regcache, RL78_SPH_REGNUM, buffer + 1);
|
||||||
}
|
}
|
||||||
|
else if (reg == RL78_PC_REGNUM)
|
||||||
|
{
|
||||||
|
gdb_byte rawbuf[4];
|
||||||
|
|
||||||
|
memcpy (rawbuf, buffer, 3);
|
||||||
|
rawbuf[3] = 0;
|
||||||
|
regcache_raw_write (regcache, RL78_RAW_PC_REGNUM, rawbuf);
|
||||||
|
}
|
||||||
else if (RL78_X_REGNUM <= reg && reg <= RL78_H_REGNUM)
|
else if (RL78_X_REGNUM <= reg && reg <= RL78_H_REGNUM)
|
||||||
{
|
{
|
||||||
ULONGEST psw;
|
ULONGEST psw;
|
||||||
|
Reference in New Issue
Block a user