This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [Fwd: Re: [PATCH] Program Breakpoints]
On Tuesday 19 May 2009 20:52:01, Ross Morley wrote:
> Thanks Pedro. This is the kind of feedback I was looking for
> in regard to effects on threads and other archs. I will have
> to go through your comments and think about those scenarios
> you mentioned with stepping. Before I do that I do want to
> clarify a couple of things for you.
>
> First, the intention is that a program breakpoint is not
> reported in the case of hitting a GDB breakpoint.
You mean, reported to the user, right? I agree. However,
the target will report to gdb a program breakpoint for
gdb breakpoints as well:
+ if (the_low_target.trap_size_at != NULL)
+ trap_size = (*the_low_target.trap_size_at) (stop_pc);
+ else if (the_low_target.breakpoint_at != NULL
+ && (*the_low_target.breakpoint_at) (stop_pc))
+ trap_size = the_low_target.breakpoint_len;
Only way to tell the difference is if there's a breakpoint
at PC in gdb's tables or not.
Hmm, isn't there an off-by-one error in the XCHAL_HAVE_BE
case here? :
+#if XCHAL_HAVE_BE
+ if (insn[1] == 0xd2 && (insn[2] & 0x0f) == 0x0f)
+#else
+ if (insn[0] == 0x2d && (insn[1] & 0xf0) == 0xf0)
+#endif
+ /* break.n s (density) */
> Test cases seem impossible to write completely generically
> because the test needs a target-specific break instruction.
> We have one (not in this patch) I could submit for Xtensa.
> It places 2 sizes of program breakpoints for Xtensa as follows:
> __asm__("break 7,15");
> __asm__("break.n 7");
> Is there a way to write a generic test with a program break?
I think you can do something reasonably generic enough by
passing "additional_flags=-DNOP=mysmallnopinsn -DBREAK_INSN1=foo -DBREAK_INSN2=bar"
to gdb_compile, and write the test in c with embedded asm, as:
int foo ()
{
NOP
NOP
BREAK_INSN1
jmphere:
NOP /* breakpoint here*/
NOP
BREAK_INSN1
NOP
goto jmphere;
}
etc, etc.
Then, the .exp file passes the appropriate defines/flags
based on target triplet.
if { ([istarget "xtensa*-*-*"] } {
additional_flags={-DNOP=mysmallnopinsn -DBREAK_INSN1="break 7,15" -DBREAK_INSN2="break.n 7"}
} else if { ([istarget "fooarch*-*-*"] } {
...
}
--
Pedro Alves