testsuite/2033: sigbpt.exp fails on Solaris10 and Solaris9 (possibly others)

Steve Williams steve.williams@utstar.com
Wed Jan 4 00:38:00 GMT 2006

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>
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.
 Content-Type: text/plain;
 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.
 Content-Type: application/octet-stream;
 Content-Transfer-Encoding: quoted-printable
 Content-Disposition: attachment;
 --- 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=
 +  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=
 +      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=
 +	  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=
    if (frame_id_eq (frame_unwind_id (get_current_frame ()), =
        /* It's a subroutine call.  */=0A=

More information about the Gdb-prs mailing list