This is the mail archive of the
gdb-prs@sourceware.org
mailing list for the GDB project.
Re: testsuite/2033: sigbpt.exp fails on Solaris10 and Solaris9 (possibly others)
- From: "Steve Williams" <steve dot williams at utstar dot com>
- To: unasigned at sourceware dot org
- Cc: gdb-prs at sources dot redhat dot com,
- Date: 4 Jan 2006 00:38:01 -0000
- Subject: Re: testsuite/2033: sigbpt.exp fails on Solaris10 and Solaris9 (possibly others)
- Reply-to: "Steve Williams" <steve dot williams at utstar dot com>
The following reply was made to PR testsuite/2033; it has been noted by GNATS.
From: "Steve Williams" <steve.williams@utstar.com>
To: <gdb-gnats@sources.redhat.com>
Cc:
Subject: Re: testsuite/2033: sigbpt.exp fails on Solaris10 and Solaris9 (possibly others)
Date: Tue, 3 Jan 2006 16:30:38 -0800
This is a multi-part message in MIME format.
------=_NextPart_000_0015_01C61083.15EFE000
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
Patch to allow single stepping to complete when a signal handler interrupts
a single step operation. The change involves looking back through the frame
stack for a signal trampoline, if one is present, gdb keeps single stepping.
------=_NextPart_000_0015_01C61083.15EFE000
Content-Type: application/octet-stream;
name="gdb64-infrun-sigtramp-step.patch"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="gdb64-infrun-sigtramp-step.patch"
--- gdb-6.4/gdb/infrun.c 2005-11-14 07:35:16.000000000 -0800=0A=
+++ gdb-6.4ppp/gdb/infrun.c 2005-12-15 18:19:25.799795000 -0800=0A=
@@ -2361,6 +2361,40 @@=0A=
return;=0A=
}=0A=
=0A=
+ if (step_range_end && step_range_end !=3D 1)=0A=
+ {=0A=
+ /* If stepping (step or next) check for signal handler and skip=0A=
+ Current tests expect any signal handler to be skipped=0A=
+ over if performing any step operation. Maybe, this behaviour=0A=
+ should be changed to behave like subroutine calls.=0A=
+ =0A=
+ i.e. If performing a step, stop in the signal handler as if=0A=
+ a function call were performed. If performing a next, then=0A=
+ skip over the signal handler. */=0A=
+=0A=
+ struct frame_info *frame=3Dget_current_frame ();=0A=
+ while(frame !=3D NULL)=0A=
+ {=0A=
+ struct frame_id fid =3D get_frame_id (frame);=0A=
+ /* stop searching at step frame */=0A=
+ if(frame_id_eq (step_frame_id, fid))=0A=
+ break;=0A=
+ /* stop searching at sentinel frame */=0A=
+ if (frame_id_eq(fid, get_frame_id(get_next_frame(frame))))=0A=
+ break;=0A=
+=0A=
+ if(get_frame_type (frame) =3D=3D SIGTRAMP_FRAME)=0A=
+ {=0A=
+ if (debug_infrun)=0A=
+ fprintf_unfiltered (gdb_stdlog,=0A=
+ "infrun: stepped to a signal handler function\n");=0A=
+ keep_going (ecs);=0A=
+ return;=0A=
+ }=0A=
+ frame=3Dget_prev_frame(frame);=0A=
+ }=0A=
+ }=0A=
+=0A=
if (frame_id_eq (frame_unwind_id (get_current_frame ()), =
step_frame_id))=0A=
{=0A=
/* It's a subroutine call. */=0A=
------=_NextPart_000_0015_01C61083.15EFE000--