From ea7963f00bb6e14fb0d8e103f928e06fa08eed67 Mon Sep 17 00:00:00 2001 From: Frederic Riss Date: Tue, 29 Nov 2005 07:52:39 +0000 Subject: [PATCH] * dwarf2-frame.c (dwarf2_frame_prev_register): Handle DWARF2_FRAME_REG_CFA_OFFSET. * dwarf2-frame.h (enum dwarf2_frame_reg_rule): Add DWARF2_FRAME_REG_CFA_OFFSET. --- gdb/ChangeLog | 7 +++++++ gdb/dwarf2-frame.c | 13 +++++++++++++ gdb/dwarf2-frame.h | 3 ++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d630731680..475eb7696f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2005-11-25 Christophe Lyon + + * dwarf2-frame.c (dwarf2_frame_prev_register): Handle + DWARF2_FRAME_REG_CFA_OFFSET. + * dwarf2-frame.h (enum dwarf2_frame_reg_rule): Add + DWARF2_FRAME_REG_CFA_OFFSET. + 2005-11-28 Mark Mitchell * remote-sim.c (gdbsim_wait): Pass target signal numbers to diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index c65967fcff..81e862b9c0 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -928,6 +928,19 @@ dwarf2_frame_prev_register (struct frame_info *next_frame, void **this_cache, } break; + case DWARF2_FRAME_REG_CFA_OFFSET: + *optimizedp = 0; + *lvalp = not_lval; + *addrp = 0; + *realnump = -1; + if (valuep) + { + /* Store the value. */ + store_typed_address (valuep, builtin_type_void_data_ptr, + cache->cfa + cache->reg[regnum].loc.offset); + } + break; + case DWARF2_FRAME_REG_RA_OFFSET: *optimizedp = 0; *lvalp = not_lval; diff --git a/gdb/dwarf2-frame.h b/gdb/dwarf2-frame.h index 7f951e7c6d..c5dea7bcbb 100644 --- a/gdb/dwarf2-frame.h +++ b/gdb/dwarf2-frame.h @@ -55,7 +55,8 @@ enum dwarf2_frame_reg_rule used internally by GDB. */ DWARF2_FRAME_REG_RA, /* Return Address. */ DWARF2_FRAME_REG_RA_OFFSET, /* Return Address with offset. */ - DWARF2_FRAME_REG_CFA /* Call Frame Address. */ + DWARF2_FRAME_REG_CFA, /* Call Frame Address. */ + DWARF2_FRAME_REG_CFA_OFFSET /* Call Frame Address with offset. */ }; /* Register state. */