diff options
author | Yao Qi <yao.qi@linaro.org> | 2017-08-11 09:30:02 +0100 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2017-08-11 09:30:02 +0100 |
commit | b348037fd8c0de5c39cc43970697c51048a8ec9c (patch) | |
tree | e8dc533380fb70ea14033f9d3c4547fecd8d3142 | |
parent | 5af3691c758717e295ba4d03b800f3462a404056 (diff) | |
download | gdb-b348037fd8c0de5c39cc43970697c51048a8ec9c.zip gdb-b348037fd8c0de5c39cc43970697c51048a8ec9c.tar.gz gdb-b348037fd8c0de5c39cc43970697c51048a8ec9c.tar.bz2 |
Move dwarf2_frame_state_reg.exp_len to union .loc
dwarf2_frame_state_reg.exp_len is only used together with .loc.exp, so
it makes more sense to exp_len to the union as well.
gdb:
2017-08-11 Yao Qi <yao.qi@linaro.org>
* dwarf2-frame.h (struct dwarf2_frame_state_reg) <exp_len>: Remove.
<loc.exp>: New field.
* dwarf2-frame.c (execute_cfa_program): Update.
(dwarf2_frame_prev_register): Update.
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/dwarf2-frame.c | 16 | ||||
-rw-r--r-- | gdb/dwarf2-frame.h | 7 |
3 files changed, 20 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f670f99..f8f47bb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2017-08-11 Yao Qi <yao.qi@linaro.org> + + * dwarf2-frame.h (struct dwarf2_frame_state_reg) <exp_len>: Remove. + <loc.exp>: New field. + * dwarf2-frame.c (execute_cfa_program): Update. + (dwarf2_frame_prev_register): Update. + 2017-08-10 Pedro Alves <palves@redhat.com> * common/gdb_unique_ptr.h (xfree_deleter<T[]>): Define. diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index d7f985b..191f60a 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -561,8 +561,8 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"), reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1); insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - fs->regs.reg[reg].loc.exp = insn_ptr; - fs->regs.reg[reg].exp_len = utmp; + fs->regs.reg[reg].loc.exp.start = insn_ptr; + fs->regs.reg[reg].loc.exp.len = utmp; fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP; insn_ptr += utmp; break; @@ -599,8 +599,8 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"), insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1); insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - fs->regs.reg[reg].loc.exp = insn_ptr; - fs->regs.reg[reg].exp_len = utmp; + fs->regs.reg[reg].loc.exp.start = insn_ptr; + fs->regs.reg[reg].loc.exp.len = utmp; fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_EXP; insn_ptr += utmp; break; @@ -1286,8 +1286,8 @@ dwarf2_frame_prev_register (struct frame_info *this_frame, void **this_cache, return frame_unwind_got_register (this_frame, regnum, realnum); case DWARF2_FRAME_REG_SAVED_EXP: - addr = execute_stack_op (cache->reg[regnum].loc.exp, - cache->reg[regnum].exp_len, + addr = execute_stack_op (cache->reg[regnum].loc.exp.start, + cache->reg[regnum].loc.exp.len, cache->addr_size, cache->text_offset, this_frame, cache->cfa, 1); return frame_unwind_got_memory (this_frame, regnum, addr); @@ -1297,8 +1297,8 @@ dwarf2_frame_prev_register (struct frame_info *this_frame, void **this_cache, return frame_unwind_got_constant (this_frame, regnum, addr); case DWARF2_FRAME_REG_SAVED_VAL_EXP: - addr = execute_stack_op (cache->reg[regnum].loc.exp, - cache->reg[regnum].exp_len, + addr = execute_stack_op (cache->reg[regnum].loc.exp.start, + cache->reg[regnum].loc.exp.len, cache->addr_size, cache->text_offset, this_frame, cache->cfa, 1); return frame_unwind_got_constant (this_frame, regnum, addr); diff --git a/gdb/dwarf2-frame.h b/gdb/dwarf2-frame.h index 9e8668e..69a7a20 100644 --- a/gdb/dwarf2-frame.h +++ b/gdb/dwarf2-frame.h @@ -74,11 +74,14 @@ struct dwarf2_frame_state_reg union { LONGEST offset; ULONGEST reg; - const gdb_byte *exp; + struct + { + const gdb_byte *start; + ULONGEST len; + } exp; struct value *(*fn) (struct frame_info *this_frame, void **this_cache, int regnum); } loc; - ULONGEST exp_len; enum dwarf2_frame_reg_rule how; }; |