mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
PR gdb/8704
* breakpoint.c (find_condition_and_thread): Correct task error message. * c-exp.y (yylex): Stop before "thread N", "task N", or abbreviations of those. doc/ * gdb.texinfo (Thread-Specific Breakpoints): Thread specifiers are allowed after the breakpoint condition. testsuite/ * gdb.base/condbreak.exp: Test combinations of "break *EXP", "if", and "thread". Correct matching in the previous test.
This commit is contained in:
parent
b22a051097
commit
b6199126ee
@ -1,3 +1,11 @@
|
||||
2009-11-24 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
PR gdb/8704
|
||||
|
||||
* breakpoint.c (find_condition_and_thread): Correct task error message.
|
||||
* c-exp.y (yylex): Stop before "thread N", "task N", or abbreviations
|
||||
of those.
|
||||
|
||||
2009-11-24 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* acinclude.m4: Include ../config/zlib.m4.
|
||||
|
@ -6636,7 +6636,7 @@ find_condition_and_thread (char *tok, CORE_ADDR pc,
|
||||
if (tok == tmptok)
|
||||
error (_("Junk after task keyword."));
|
||||
if (!valid_task_id (*task))
|
||||
error (_("Unknown task %d\n"), *task);
|
||||
error (_("Unknown task %d."), *task);
|
||||
}
|
||||
else
|
||||
error (_("Junk at end of arguments."));
|
||||
|
18
gdb/c-exp.y
18
gdb/c-exp.y
@ -2250,6 +2250,24 @@ yylex (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* For the same reason (breakpoint conditions), "thread N"
|
||||
terminates the expression. "thread" could be an identifier, but
|
||||
an identifier is never followed by a number without intervening
|
||||
punctuation. "task" is similar. Handle abbreviations of these,
|
||||
similarly to breakpoint.c:find_condition_and_thread. */
|
||||
if (namelen >= 1
|
||||
&& (strncmp (tokstart, "thread", namelen) == 0
|
||||
|| strncmp (tokstart, "task", namelen) == 0)
|
||||
&& (tokstart[namelen] == ' ' || tokstart[namelen] == '\t')
|
||||
&& ! scanning_macro_expansion ())
|
||||
{
|
||||
char *p = tokstart + namelen + 1;
|
||||
while (*p == ' ' || *p == '\t')
|
||||
p++;
|
||||
if (*p >= '0' && *p <= '9')
|
||||
return 0;
|
||||
}
|
||||
|
||||
lexptr += namelen;
|
||||
|
||||
tryname:
|
||||
|
@ -1,3 +1,10 @@
|
||||
2009-11-24 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
PR gdb/8704
|
||||
|
||||
* gdb.texinfo (Thread-Specific Breakpoints): Thread specifiers
|
||||
are allowed after the breakpoint condition.
|
||||
|
||||
2009-11-23 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
PR python/10782:
|
||||
|
@ -5214,8 +5214,8 @@ breakpoint, the breakpoint applies to @emph{all} threads of your
|
||||
program.
|
||||
|
||||
You can use the @code{thread} qualifier on conditional breakpoints as
|
||||
well; in this case, place @samp{thread @var{threadno}} before the
|
||||
breakpoint condition, like this:
|
||||
well; in this case, place @samp{thread @var{threadno}} before or
|
||||
after the breakpoint condition, like this:
|
||||
|
||||
@smallexample
|
||||
(@value{GDBP}) break frik.c:13 thread 28 if bartab > lim
|
||||
|
@ -1,3 +1,10 @@
|
||||
2009-11-24 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
PR gdb/8704
|
||||
|
||||
* gdb.base/condbreak.exp: Test combinations of "break *EXP",
|
||||
"if", and "thread". Correct matching in the previous test.
|
||||
|
||||
2009-11-25 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* gdb.cp/extern-c.cc, gdb.cp/extern-c.exp: New test.
|
||||
|
@ -207,10 +207,10 @@ gdb_expect {
|
||||
setup_xfail hppa2.0w-*-* 11512CLLbs
|
||||
send_gdb "continue\n"
|
||||
gdb_expect {
|
||||
-re "Continuing\\..*Breakpoint \[0-9\]+, marker2 \\(a=43\\) at .*$srcfile1:($bp_location8|$bp_location9).*($bp_location8|$bp_location9)\[\t \]+.*" {
|
||||
-re "Continuing\\..*Breakpoint \[0-9\]+, marker2 \\(a=43\\) at .*$srcfile1:($bp_location8|$bp_location9).*($bp_location8|$bp_location9)\[\t \]+.*$gdb_prompt $" {
|
||||
pass "run until breakpoint at marker2"
|
||||
}
|
||||
-re "Continuing\\..*Breakpoint \[0-9\]+, $hex in marker2 \\(a=43\\) at .*$srcfile1:($bp_location8|$bp_location9).*($bp_location8|$bp_location9)\[\t \]+.*" {
|
||||
-re "Continuing\\..*Breakpoint \[0-9\]+, $hex in marker2 \\(a=43\\) at .*$srcfile1:($bp_location8|$bp_location9).*($bp_location8|$bp_location9)\[\t \]+.*$gdb_prompt $" {
|
||||
xfail "run until breakpoint at marker2"
|
||||
}
|
||||
-re "$gdb_prompt $" {
|
||||
@ -220,3 +220,30 @@ gdb_expect {
|
||||
fail "(timeout) run until breakpoint at marker2"
|
||||
}
|
||||
}
|
||||
|
||||
# Test combinations of conditional and thread-specific breakpoints.
|
||||
gdb_test "break main if (1==1) thread 999" \
|
||||
"Unknown thread 999\\."
|
||||
gdb_test "break main thread 999 if (1==1)" \
|
||||
"Unknown thread 999\\."
|
||||
|
||||
# Verify that both if and thread can be distinguished from a breakpoint
|
||||
# address expression.
|
||||
gdb_test "break *main if (1==1) thread 999" \
|
||||
"Unknown thread 999\\."
|
||||
gdb_test "break *main thread 999 if (1==1)" \
|
||||
"Unknown thread 999\\."
|
||||
|
||||
# Similarly for task.
|
||||
gdb_test "break *main if (1==1) task 999" \
|
||||
"Unknown task 999\\."
|
||||
gdb_test "break *main task 999 if (1==1)" \
|
||||
"Unknown task 999\\."
|
||||
|
||||
# GDB accepts abbreviations for "thread" and "task".
|
||||
gdb_test "break *main if (1==1) t 999" \
|
||||
"Unknown thread 999\\."
|
||||
gdb_test "break *main if (1==1) th 999" \
|
||||
"Unknown thread 999\\."
|
||||
gdb_test "break *main if (1==1) ta 999" \
|
||||
"Unknown task 999\\."
|
||||
|
Loading…
Reference in New Issue
Block a user