This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Move dwarf2_frame_state_reg.exp_len to union .loc


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b348037fd8c0de5c39cc43970697c51048a8ec9c

commit b348037fd8c0de5c39cc43970697c51048a8ec9c
Author: Yao Qi <yao.qi@linaro.org>
Date:   Fri Aug 11 09:30:02 2017 +0100

    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.

Diff:
---
 gdb/ChangeLog      |  7 +++++++
 gdb/dwarf2-frame.c | 16 ++++++++--------
 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, &reg);
 	      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;
 };


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]