This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFC] "single step" atomic instruction sequences as a whole on PPC
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: drow at false dot org (Daniel Jacobowitz)
- Cc: emi-suzuki at tjsys dot co dot jp (Emi SUZUKI), jan dot kratochvil at redhat dot com, luisgpm at linux dot vnet dot ibm dot com, gdb-patches at sourceware dot org
- Date: Fri, 11 May 2007 00:58:28 +0200 (CEST)
- Subject: Re: [RFC] "single step" atomic instruction sequences as a whole on PPC
Daniel Jacobowitz wrote:
> On Thu, May 10, 2007 at 11:30:53PM +0200, Ulrich Weigand wrote:
> > This looks just like a problem we fixed for the combined debugger;
> > cancel_breakpoints_callback should cancel SIGTRAP events caused by
> > software single-step breakpoints just the same as those caused by
> > other breakpoints.
>
> Maybe it would be more elegant to anticipate the day that single step
> breakpoints are completely normal: make breakpoint_inserted_here_p
> check them? This is already the only caller.
Good point. Something like the patch below? I've also added the
check to software_breakpoint_inserted_here_p; that seemed to make
more sense that not.
(I'm suspicious about adjust_pc_after_break, the only caller of
software_breakpoint_inserted_here_p anyway; I think this may no
longer be correct after the software single-step changes ...)
Bye,
Ulrich
ChangeLog:
* breakpoint.c (single_step_breakpoint_inserted_here_p): New function.
(breakpoint_inserted_here_p): Call it.
(software_breakpoint_inserted_here_p): Likewise.
diff -urNp gdb-orig/gdb/breakpoint.c gdb-head/gdb/breakpoint.c
--- gdb-orig/gdb/breakpoint.c 2007-05-11 00:15:25.160082872 +0200
+++ gdb-head/gdb/breakpoint.c 2007-05-11 00:22:39.846579732 +0200
@@ -202,6 +202,8 @@ static void tcatch_command (char *arg, i
static void ep_skip_leading_whitespace (char **s);
+static int single_step_breakpoint_inserted_here_p (CORE_ADDR pc);
+
/* Prototypes for exported functions. */
/* If FALSE, gdb will not use hardware support for watchpoints, even
@@ -1841,6 +1843,10 @@ breakpoint_inserted_here_p (CORE_ADDR pc
}
}
+ /* Also check for software single-step breakpoints. */
+ if (single_step_breakpoint_inserted_here_p (pc))
+ return 1;
+
return 0;
}
@@ -1872,6 +1878,10 @@ software_breakpoint_inserted_here_p (COR
}
}
+ /* Also check for software single-step breakpoints. */
+ if (single_step_breakpoint_inserted_here_p (pc))
+ return 1;
+
return 0;
}
@@ -7951,6 +7961,23 @@ remove_single_step_breakpoints (void)
}
}
+/* Check whether a software single-step breakpoint is inserted at PC. */
+
+static int
+single_step_breakpoint_inserted_here_p (CORE_ADDR pc)
+{
+ int i;
+
+ for (i = 0; i < 2; i++)
+ {
+ struct bp_target_info *bp_tgt = single_step_breakpoints[i];
+ if (bp_tgt && bp_tgt->placed_address == pc)
+ return 1;
+ }
+
+ return 0;
+}
+
/* This help string is used for the break, hbreak, tbreak and thbreak commands.
It is defined as a macro to prevent duplication.
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com