From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20320 invoked by alias); 28 Nov 2001 03:42:19 -0000 Mailing-List: contact gdb-patches-help@sourceware.cygnus.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 20275 invoked from network); 28 Nov 2001 03:42:18 -0000 Received: from unknown (HELO zwingli.cygnus.com) (208.245.165.35) by hostedprojects.ges.redhat.com with SMTP; 28 Nov 2001 03:42:18 -0000 Received: by zwingli.cygnus.com (Postfix, from userid 442) id D61B45E9D8; Tue, 27 Nov 2001 22:43:33 -0500 (EST) From: Jim Blandy To: gdb-patches@sources.redhat.com Subject: PATCH: S/390: backtrace properly through call dummy frames Message-Id: <20011128034333.D61B45E9D8@zwingli.cygnus.com> Date: Thu, 15 Nov 2001 12:32:00 -0000 X-SW-Source: 2001-11/txt/msg00308.txt.bz2 2001-11-27 Jim Blandy * 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. Index: gdb/s390-tdep.c =================================================================== RCS file: /cvs/cvsfiles/devo/gdb/s390-tdep.c,v retrieving revision 2.20 diff -c -r2.20 s390-tdep.c *** gdb/s390-tdep.c 2001/11/28 03:36:41 2.20 --- gdb/s390-tdep.c 2001/11/28 03:38:18 *************** *** 884,889 **** --- 884,893 ---- { 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,942 **** --- 941,949 ---- 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,1748 **** --- 1750,1756 ---- 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); From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Blandy To: gdb-patches@sources.redhat.com Subject: PATCH: S/390: backtrace properly through call dummy frames Date: Tue, 27 Nov 2001 19:42:00 -0000 Message-ID: <20011128034333.D61B45E9D8@zwingli.cygnus.com> X-SW-Source: 2001-11/msg00523.html Message-ID: <20011127194200.J68SNlFTW9Heh3moIr6eSL5bPRKvAuUgrwsClTn02jE@z> 2001-11-27 Jim Blandy * 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. Index: gdb/s390-tdep.c =================================================================== RCS file: /cvs/cvsfiles/devo/gdb/s390-tdep.c,v retrieving revision 2.20 diff -c -r2.20 s390-tdep.c *** gdb/s390-tdep.c 2001/11/28 03:36:41 2.20 --- gdb/s390-tdep.c 2001/11/28 03:38:18 *************** *** 884,889 **** --- 884,893 ---- { 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,942 **** --- 941,949 ---- 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,1748 **** --- 1750,1756 ---- 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);