diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2007-06-15 22:34:13 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2007-06-15 22:34:13 +0000 |
commit | 9c9acae0c28d2b85588c305ed58aeef034e69e86 (patch) | |
tree | ebd33e2dc59a92cb7c19b028156c99a4f20653dc /gdb/xtensa-tdep.c | |
parent | d2ca4222d5a14ae1a0bcc28fc7ce667baec76ff0 (diff) | |
download | gdb-9c9acae0c28d2b85588c305ed58aeef034e69e86.zip gdb-9c9acae0c28d2b85588c305ed58aeef034e69e86.tar.gz gdb-9c9acae0c28d2b85588c305ed58aeef034e69e86.tar.bz2 |
* arm-tdep.c (arm_print_float_info): Use register value from FRAME
instead of calling read_register.
* avr-tdep.c (avr_push_dummy_call): Write to REGCACHE instead of
calling write_register.
* hppa-tdep.c (hppa32_push_dummy_call): Write to REGCACHE instead of
calling write_register.
* ia64-tdep.c (find_func_descr): Add REGCACHE parameter. Use it
instead of calling read_register.
(ia64_push_dummy_call): Update call to find_func_descr. Use REGCACHE
instead of calling read_register and write_register.
* m32r-tdep.c (m32r_linux_supply_gregset): Use REGCACHE parameter
instead of current_regcache.
* mn10300-tdep.c (mn10300_push_dummy_call): Write to REGCACHE instead
of calling write_register.
* mn10300-linux-tdep.c (am33_supply_fpregset_method): Use REGCACHE
parameter instead of current_regcache.
* mips-tdep.c (mips2_fp_compat): Add FRAME parameter. Use it
instead of calling read_register.
(mips_read_fp_register_double, mips_print_fp_register): Update calls.
(mips_eabi_push_dummy_call): Use REGCACHE instead of write_register.
(mips_n32n64_push_dummy_call): Likewise.
(mips_o32_push_dummy_call): Likewise.
(mips_o64_push_dummy_call): Likewise.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call): Use REGCACHE
parameter instead of current_regcache.
* xtensa-tdep.c (xtensa_register_write_masked): Add REGCACHE parameter.
Use it instead of read_register and write_register.
(xtensa_register_read_masked): Likewise.
(xtensa_pseudo_register_read): Update call.
(xtensa_pseudo_register_write): Likewise.
(xtensa_frame_cache): Use register values unwound from NEXT_FRAME
instead of calling read_register.
(xtensa_push_dummy_call): Update comment.
Diffstat (limited to 'gdb/xtensa-tdep.c')
-rw-r--r-- | gdb/xtensa-tdep.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c index 77de43a..0db4935 100644 --- a/gdb/xtensa-tdep.c +++ b/gdb/xtensa-tdep.c @@ -314,7 +314,8 @@ xtensa_reg_to_regnum (int regnum) (Note: The size of masked registers is always less or equal 32 bits.) */ static void -xtensa_register_write_masked (xtensa_register_t *reg, unsigned char *buffer) +xtensa_register_write_masked (struct regcache *regcache, + xtensa_register_t *reg, const gdb_byte *buffer) { unsigned int value[(MAX_REGISTER_SIZE + 3) / 4]; @@ -383,10 +384,12 @@ xtensa_register_write_masked (xtensa_register_t *reg, unsigned char *buffer) if (r >= 0 && size > 0) { /* Don't overwrite the unmasked areas. */ + ULONGEST old_val; + regcache_cooked_read_unsigned (regcache, r, &old_val); m = 0xffffffff >> (32 - size) << start; regval <<= start; - regval = (regval & m) | (read_register (r) & ~m); - write_register (r, regval); + regval = (regval & m) | (old_val & ~m); + regcache_cooked_write_unsigned (regcache, r, regval); } } } @@ -396,7 +399,8 @@ xtensa_register_write_masked (xtensa_register_t *reg, unsigned char *buffer) register. */ static void -xtensa_register_read_masked (xtensa_register_t *reg, unsigned char *buffer) +xtensa_register_read_masked (struct regcache *regcache, + xtensa_register_t *reg, gdb_byte *buffer) { unsigned int value[(MAX_REGISTER_SIZE + 3) / 4]; @@ -419,7 +423,15 @@ xtensa_register_read_masked (xtensa_register_t *reg, unsigned char *buffer) for (i = 0; i < mask->count; i++) { int r = mask->mask[i].reg_num; - regval = (r >= 0) ? read_register (r) : 0; + if (r >= 0) + { + ULONGEST val; + regcache_cooked_read_unsigned (regcache, r, &val); + regval = (unsigned int) val; + } + else + regval = 0; + start = mask->mask[i].bit_start; size = mask->mask[i].bit_size; @@ -541,7 +553,7 @@ xtensa_pseudo_register_read (struct gdbarch *gdbarch, /* We can always read mapped registers. */ else if (type == xtRegisterTypeMapped || type == xtRegisterTypeTieState) { - xtensa_register_read_masked (reg, (unsigned char *) buffer); + xtensa_register_read_masked (regcache, reg, buffer); return; } @@ -629,7 +641,7 @@ xtensa_pseudo_register_write (struct gdbarch *gdbarch, /* We can always write mapped registers. */ else if (type == xtRegisterTypeMapped || type == xtRegisterTypeTieState) { - xtensa_register_write_masked (reg, (unsigned char *) buffer); + xtensa_register_write_masked (regcache, reg, buffer); return; } @@ -910,10 +922,9 @@ xtensa_frame_cache (struct frame_info *next_frame, void **this_cache) pc = frame_unwind_register_unsigned (next_frame, PC_REGNUM); op1 = read_memory_integer (pc, 1); - if (XTENSA_IS_ENTRY (op1) || !windowing_enabled (read_register (PS_REGNUM))) + if (XTENSA_IS_ENTRY (op1) || !windowing_enabled (ps)) { - int callinc = CALLINC (frame_unwind_register_unsigned (next_frame, - PS_REGNUM)); + int callinc = CALLINC (ps); ra = frame_unwind_register_unsigned (next_frame, A0_REGNUM + callinc * 4); @@ -924,7 +935,7 @@ xtensa_frame_cache (struct frame_info *next_frame, void **this_cache) cache->callsize = 0; cache->wb = wb; cache->ws = ws; - cache->prev_sp = read_register (A1_REGNUM); + cache->prev_sp = frame_unwind_register_unsigned (next_frame, A1_REGNUM); } else { @@ -987,7 +998,7 @@ xtensa_frame_cache (struct frame_info *next_frame, void **this_cache) int regnum = AREG_NUMBER (A1_REGNUM, cache->wb); - cache->prev_sp = read_register (regnum); + cache->prev_sp = frame_unwind_register_unsigned (next_frame, regnum); } } @@ -1467,7 +1478,7 @@ xtensa_push_dummy_call (struct gdbarch *gdbarch, /* ULONGEST v = extract_unsigned_integer (cp, REGISTER_SIZE);*/ regcache_cooked_write (regcache, r, cp); - /* write_register (r, v); */ + /* regcache_cooked_write_unsigned (regcache, r, v); */ cp += REGISTER_SIZE; n -= REGISTER_SIZE; r++; |