Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Mark Kettenis <kettenis@chello.nl>
To: gdb-patches@sources.redhat.com
Subject: [PATCH/RFC] Simplify adjust_pc_after_break?
Date: Sun, 16 May 2004 23:28:00 -0000	[thread overview]
Message-ID: <200405162328.i4GNSaNS000789@elgar.kettenis.dyndns.org> (raw)

The signal tests are failing horribly on Solaris x86.  The problem is
that upon hitting a breakpoint in the signal handler, we don't
properly back up the PC.

The problem here seems to stem from the fact that we were
single-stepping when the signal arrived.  The signal takes us out of
the single-stepping range, and when we hit the breakpoint, we're atan
address that's miles away from PREV_PC.  As a result
adjust_pc_after_break decides that there is no reason to back up the
PC.

Why don't we see this on other i386 targets?  There is some code in
handle_inferior_event() that notices when a signal takes us out of the
single-stepping range.  However, procfs(4) has this nice feature that
you can tell it what signals to report.  We tell it to only report
signals that we're interested in.  In this particular case we're not
interested in the SIGALRM, so GDB never sees it, and the code in
handle_inferior_event() is never executed.

Looking at adjust_pc_after_break() I couldn't figure out why we're
trying do.  I could imagine that we shouldn't back up the PC if a
breakpoint and single-step coalesce, but that's exactly the condition
where we *do* back up the PC.  So why not simplify things and just
back up the PC if we detect an inserted breakpoint?

The attached patch works for me on Solaris x86 and various other i386
and amd64 targets.  But I'm probably overlooking something.

Mark


Index: infrun.c
===================================================================
RCS file: /cvs/src/src/gdb/infrun.c,v
retrieving revision 1.163
diff -u -p -r1.163 infrun.c
--- infrun.c 14 May 2004 18:45:42 -0000 1.163
+++ infrun.c 16 May 2004 23:12:52 -0000
@@ -1234,29 +1234,8 @@ adjust_pc_after_break (struct execution_
     }
   else
     {
-      /* When using hardware single-step, a SIGTRAP is reported for
-	 both a completed single-step and a software breakpoint.  Need
-	 to differentiate between the two as the latter needs
-	 adjusting but the former does not.  */
-      if (currently_stepping (ecs))
-	{
-	  if (prev_pc == breakpoint_pc
-	      && software_breakpoint_inserted_here_p (breakpoint_pc))
-	    /* Hardware single-stepped a software breakpoint (as
-	       occures when the inferior is resumed with PC pointing
-	       at not-yet-hit software breakpoint).  Since the
-	       breakpoint really is executed, the inferior needs to be
-	       backed up to the breakpoint address.  */
-	    write_pc_pid (breakpoint_pc, ecs->ptid);
-	}
-      else
-	{
-	  if (software_breakpoint_inserted_here_p (breakpoint_pc))
-	    /* The inferior was free running (i.e., no hardware
-	       single-step and no possibility of a false SIGTRAP) and
-	       hit a software breakpoint.  */
-	    write_pc_pid (breakpoint_pc, ecs->ptid);
-	}
+      if (software_breakpoint_inserted_here_p (breakpoint_pc))
+	write_pc_pid (breakpoint_pc, ecs->ptid);
     }
 }
 


             reply	other threads:[~2004-05-16 23:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-16 23:28 Mark Kettenis [this message]
2004-05-17 14:23 ` Andrew Cagney
2004-05-17 15:07   ` Mark Kettenis
2005-03-26 22:22 ` Daniel Jacobowitz
2005-03-26 22:34   ` Daniel Jacobowitz
2005-03-26 22:37   ` Mark Kettenis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200405162328.i4GNSaNS000789@elgar.kettenis.dyndns.org \
    --to=kettenis@chello.nl \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox