aboutsummaryrefslogtreecommitdiff
path: root/gdb/s390-tdep.c
diff options
context:
space:
mode:
authorJim Blandy <jimb@codesourcery.com>2001-11-28 03:40:50 +0000
committerJim Blandy <jimb@codesourcery.com>2001-11-28 03:40:50 +0000
commit5c3cf190c0ee98cfade016748df228c6dc559fab (patch)
tree3c0602f3de420f91a18ab91a5cc1ebf40863abaf /gdb/s390-tdep.c
parent31c4d430c4ae6068c12ed5bb965fe7a1641b9bba (diff)
downloadfsf-binutils-gdb-5c3cf190c0ee98cfade016748df228c6dc559fab.zip
fsf-binutils-gdb-5c3cf190c0ee98cfade016748df228c6dc559fab.tar.gz
fsf-binutils-gdb-5c3cf190c0ee98cfade016748df228c6dc559fab.tar.bz2
* s390-tdep.c: Get frame chains and saved pc values properly from
dummy frames. (s390_frame_saved_pc_nofix): if `*fi' is a dummy frame, get the saved PC from the dummy frame's registers. (s390_frame_chain): Same for the saved SP. (s390_gdbarch_init): Register `generic_save_dummy_frame_tos' as the `SAVE_DUMMY_FRAME_TOS' method, so the dummy frame's `top' gets set correctly.
Diffstat (limited to 'gdb/s390-tdep.c')
-rw-r--r--gdb/s390-tdep.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index afefc7f..61f4ae8 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -884,6 +884,10 @@ s390_frame_saved_pc_nofix (struct frame_info *fi)
{
if (fi->extra_info && fi->extra_info->saved_pc_valid)
return fi->extra_info->saved_pc;
+
+ if (generic_find_dummy_frame (fi->pc, fi->frame))
+ return generic_read_register_dummy (fi->pc, fi->frame, S390_PC_REGNUM);
+
s390_frame_init_saved_regs (fi);
if (fi->extra_info)
{
@@ -937,6 +941,9 @@ s390_frame_chain (struct frame_info *thisframe)
if (thisframe->prev && thisframe->prev->frame)
prev_fp = thisframe->prev->frame;
+ else if (generic_find_dummy_frame (thisframe->pc, thisframe->frame))
+ return generic_read_register_dummy (thisframe->pc, thisframe->frame,
+ S390_SP_REGNUM);
else
{
int sigreturn = 0;
@@ -1743,6 +1750,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_at_entry_point);
set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
set_gdbarch_push_arguments (gdbarch, s390_push_arguments);
+ set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);