struct value * dwarf2_tailcall_prev_register_first (struct frame_info *this_frame, void **tailcall_cachep, int regnum) { struct gdbarch *this_gdbarch = get_frame_arch (this_frame); struct tailcall_cache *cache = *tailcall_cachep; CORE_ADDR addr; if (regnum == gdbarch_pc_regnum (this_gdbarch)) addr = pretend_pc (this_frame, cache); else if (cache->prev_sp_p && regnum == gdbarch_sp_regnum (this_gdbarch)) { int next_levels = existing_next_levels (this_frame, cache); if (next_levels == cache->chain_levels - 1) addr = cache->prev_sp; else addr = dwarf2_frame_cfa (this_frame) - cache->entry_cfa_sp_offset; } else return NULL; return frame_unwind_got_address (this_frame, regnum, addr); }
static CORE_ADDR dwarf_expr_frame_cfa (void *baton) { struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton; return dwarf2_frame_cfa (debaton->frame); }