diff options
author | Pedro Alves <palves@redhat.com> | 2011-03-18 18:38:44 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-03-18 18:38:44 +0000 |
commit | 05d1431c1e0a4ecf30462109f5fb9876d78b7b4a (patch) | |
tree | 76012c85051dd07166944e314a83502d47b1ba1a /gdb/xtensa-tdep.c | |
parent | 5548b4ce8ccff9f4a198fdfbcc47a83baa9ed876 (diff) | |
download | gdb-05d1431c1e0a4ecf30462109f5fb9876d78b7b4a.zip gdb-05d1431c1e0a4ecf30462109f5fb9876d78b7b4a.tar.gz gdb-05d1431c1e0a4ecf30462109f5fb9876d78b7b4a.tar.bz2 |
gdb/
* regcache.h (regcache_raw_read, regcache_raw_read_signed)
(regcache_raw_read_unsigned, regcache_raw_read_signed)
(regcache_raw_read_unsigned, regcache_raw_read_part)
(regcache_cooked_read, regcache_cooked_read_signed)
(regcache_cooked_read_unsigned, regcache_cooked_read_part)
(regcache_cooked_read_ftype): Change return to enum
register_status.
* regcache.c: Include exceptions.h
(regcache_save): Adjust to handle REG_UNAVAILABLE registers.
(do_cooked_read): Change return to enum register_status. Always
forward to regcache_cooked_read.
(regcache_raw_read): Change return to enum register_status. If
the register is not REG_VALID, memset the buffer. Return the
register's status.
(regcache_raw_read_signed): Handle non-REG_VALID registers and
return the register's status.
(regcache_raw_read_unsigned): Ditto.
(regcache_cooked_read): Change return to enum register_status.
Assert that with read-only regcaches, the register's status must
be known. If the regcache is read-only, and the register is not
REG_VALID, memset the buffer. Return the register's status.
(regcache_cooked_read_signed): Change return to enum
register_status. Handle non-REG_VALID registers and return the
register's status.
(regcache_cooked_read_unsigned): Change return to enum
register_status. Handle non-REG_VALID registers and return the
register's status.
(regcache_xfer_part, regcache_raw_read_part)
(regcache_cooked_read_part): Change return to enum
register_status. Return the register's status.
(regcache_read_pc): Throw NOT_AVAILABLE_ERROR if the register is
unavailable.
(regcache_dump): Handle unavailable cooked registers.
* frame.c (do_frame_register_read): Adjust interface to match
regcache_cooked_read_ftype.
* gdbarch.sh (pseudo_register_read): Change return to enum
register_status.
* gdbarch.h, gdbarch.c: Regenerate.
* i386-tdep.h (i386_pseudo_register_read): Change return to enum
register_status.
* i386-tdep.c (i386_pseudo_register_read): Change return to enum
register_status. If reading a raw register indicates the raw
register is not valid, return the raw register's status,
otherwise, return REG_VALID.
* amd64-tdep.c (amd64_pseudo_register_read): Change return to enum
register_status. Handle non-REG_VALID raw registers and return
the register's status.
* arm-tdep.c (arm_neon_quad_read)
(arm_pseudo_read): Change return to enum register_status. Handle
non-REG_VALID raw registers and return the register's status.
* avr-tdep.c (avr_pseudo_register_read): Ditto.
* frv-tdep.c (frv_pseudo_register_read): Ditto.
* h8300-tdep.c (h8300_pseudo_register_read): Ditto.
* hppa-tdep.c (hppa_pseudo_register_read): Ditto.
* m32c-tdep.c (m32c_move_reg_t): Change return to enum
register_status.
(m32c_raw_read, m32c_raw_write, m32c_banked_read)
(m32c_banked_write, m32c_sb_read, m32c_sb_write, m32c_part_read)
(m32c_part_write, m32c_cat_read, m32c_cat_write)
(m32c_r3r2r1r0_read, m32c_r3r2r1r0_write)
(m32c_pseudo_register_read): Change return to enum
register_status. Adjust.
* m68hc11-tdep.c (m68hc11_pseudo_register_read): Change return to
enum register_status. Return the register's status.
* mep-tdep.c (mep_pseudo_cr32_read): Change return to enum
register_status. Return the register's status.
(mep_pseudo_cr64_read, mep_pseudo_register_read): Ditto.
* mips-tdep.c (mips_pseudo_register_read): Ditto.
* mt-tdep.c (mt_pseudo_register_read): Ditto.
* rs6000-tdep.c (move_ev_register_func): New typedef.
(e500_move_ev_register): Use it. Change return to enum
register_status. Return the register's status.
(do_regcache_raw_read): New function.
(do_regcache_raw_write): New function.
(e500_pseudo_register_read): Change return to enum
register_status. Return the register's status. Use
do_regcache_raw_read.
(e500_pseudo_register_write): Adjust. Use do_regcache_raw_write.
(dfp_pseudo_register_read): Change return to enum register_status.
Return the register's status.
(vsx_pseudo_register_read): Ditto.
(efpr_pseudo_register_read): Ditto.
(rs6000_pseudo_register_read): Ditto.
* s390-tdep.c (s390_pseudo_register_read): Change return to enum
register_status. Return the register's status.
* sh64-tdep.c (pseudo_register_read_portions): New function.
(sh64_pseudo_register_read): Change return to enum
register_status. Use pseudo_register_read_portions. Return the
register's status.
* ia64-tdep.c (ia64_pseudo_register_read): Change return to enum
register_status. Return the register's status.
* sh-tdep.c (pseudo_register_read_portions): New function.
(sh_pseudo_register_read): Change return to enum register_status.
Use pseudo_register_read_portions. Return the register's status.
* sparc-tdep.c (sparc32_pseudo_register_read): Change return to
enum register_status. Return the register's status.
* sparc64-tdep.c (sparc64_pseudo_register_read): Ditto.
* spu-tdep.c (spu_pseudo_register_read_spu)
(spu_pseudo_register_read): Ditto.
* xtensa-tdep.c (xtensa_register_read_masked)
(xtensa_pseudo_register_read): Ditto.
* bfin-tdep.c (bfin_pseudo_register_read): Ditto.
Diffstat (limited to 'gdb/xtensa-tdep.c')
-rw-r--r-- | gdb/xtensa-tdep.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c index 1bb97ba..316a8cf 100644 --- a/gdb/xtensa-tdep.c +++ b/gdb/xtensa-tdep.c @@ -453,7 +453,7 @@ xtensa_register_write_masked (struct regcache *regcache, /* Read a tie state or mapped registers. Read the masked areas of the registers and assemble them into a single value. */ -static void +static enum register_status xtensa_register_read_masked (struct regcache *regcache, xtensa_register_t *reg, gdb_byte *buffer) { @@ -479,8 +479,12 @@ xtensa_register_read_masked (struct regcache *regcache, int r = mask->mask[i].reg_num; if (r >= 0) { + enum register_status status; ULONGEST val; - regcache_cooked_read_unsigned (regcache, r, &val); + + status = regcache_cooked_read_unsigned (regcache, r, &val); + if (status != REG_VALID) + return status; regval = (unsigned int) val; } else @@ -535,12 +539,14 @@ xtensa_register_read_masked (struct regcache *regcache, buffer[i] = mem & 0xff; mem >>= 8; } + + return REG_VALID; } /* Read pseudo registers. */ -static void +static enum register_status xtensa_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, int regnum, @@ -561,16 +567,20 @@ xtensa_pseudo_register_read (struct gdbarch *gdbarch, && (regnum <= gdbarch_tdep (gdbarch)->a0_base + 15)) { gdb_byte *buf = (gdb_byte *) alloca (MAX_REGISTER_SIZE); + enum register_status status; - regcache_raw_read (regcache, gdbarch_tdep (gdbarch)->wb_regnum, buf); + status = regcache_raw_read (regcache, + gdbarch_tdep (gdbarch)->wb_regnum, + buf); + if (status != REG_VALID) + return status; regnum = arreg_number (gdbarch, regnum, extract_unsigned_integer (buf, 4, byte_order)); } /* We can always read non-pseudo registers. */ if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch)) - regcache_raw_read (regcache, regnum, buffer); - + return regcache_raw_read (regcache, regnum, buffer); /* We have to find out how to deal with priveleged registers. Let's treat them as pseudo-registers, but we cannot read/write them. */ @@ -581,6 +591,7 @@ xtensa_pseudo_register_read (struct gdbarch *gdbarch, buffer[1] = (gdb_byte)0; buffer[2] = (gdb_byte)0; buffer[3] = (gdb_byte)0; + return REG_VALID; } /* Pseudo registers. */ else if (regnum >= 0 @@ -598,7 +609,7 @@ xtensa_pseudo_register_read (struct gdbarch *gdbarch, { warning (_("cannot read register %s"), xtensa_register_name (gdbarch, regnum)); - return; + return REG_VALID; } } @@ -609,26 +620,23 @@ xtensa_pseudo_register_read (struct gdbarch *gdbarch, if (flags & xtTargetFlagsUseFetchStore) { warning (_("cannot read register")); - return; + return REG_VALID; } /* On some targets (esp. simulators), we can always read the reg. */ else if ((flags & xtTargetFlagsNonVisibleRegs) == 0) { warning (_("cannot read register")); - return; + return REG_VALID; } } /* We can always read mapped registers. */ else if (type == xtRegisterTypeMapped || type == xtRegisterTypeTieState) - { - xtensa_register_read_masked (regcache, reg, buffer); - return; - } + return xtensa_register_read_masked (regcache, reg, buffer); /* Assume that we can read the register. */ - regcache_raw_read (regcache, regnum, buffer); + return regcache_raw_read (regcache, regnum, buffer); } else internal_error (__FILE__, __LINE__, |