mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-29 08:24:05 +08:00
* gdb.mi/mi-nonstop.exp: Fix the check for non-stop
support. Adjust the order of "*running" notifications. * gdb.mi/non-stop.c: Don't cast from int to void* and back.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2008-08-21 Vladimir Prus <vladimir@codesourcery.com>
|
||||||
|
|
||||||
|
* gdb.mi/mi-nonstop.exp: Fix the check for non-stop
|
||||||
|
support. Adjust the order of "*running" notifications.
|
||||||
|
* gdb.mi/non-stop.c: Don't cast from int to void* and
|
||||||
|
back.
|
||||||
|
|
||||||
2008-08-20 Mark Kettenis <kettenis@gnu.org>
|
2008-08-20 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
* gdb.arch/powerpc-prologue.exp: Code doesn't save %r31 so don't
|
* gdb.arch/powerpc-prologue.exp: Code doesn't save %r31 so don't
|
||||||
|
@ -76,17 +76,32 @@ gdb_expect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if { $supported == 0 } {
|
|
||||||
verbose -log "Non-stop mode not supported by the target, skipping tests"
|
|
||||||
return
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
mi_gdb_test "-gdb-set non-stop 1" ".*"
|
mi_gdb_test "-gdb-set non-stop 1" ".*"
|
||||||
mi_gdb_test "-gdb-set target-async 1" ".*"
|
mi_gdb_test "-gdb-set target-async 1" ".*"
|
||||||
detect_async
|
detect_async
|
||||||
|
|
||||||
mi_runto main
|
mi_gdb_test "200-break-insert -t main" ".*"
|
||||||
|
# Note: presently, we skip this test on non-native targets,
|
||||||
|
# so 'run' is OK. As soon as we start to run this on remote
|
||||||
|
# target, the logic from mi_run_cmd will have to be refactored.
|
||||||
|
send_gdb "-exec-run\n"
|
||||||
|
gdb_expect {
|
||||||
|
-re ".*\\^running.*$mi_gdb_prompt$" {
|
||||||
|
}
|
||||||
|
-re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
|
||||||
|
verbose -log "Non-stop mode not supported, skipping all tests"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
-re ".*\r\n$mi_gdb_prompt$" {
|
||||||
|
perror "Cannot start target (unknown output after running)"
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
timeout {
|
||||||
|
perror "Cannot start target (timeout)"
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" { "" "disp=\"del\"" } "run to main"
|
||||||
|
|
||||||
mi_create_breakpoint break_at_me 2 keep break_at_me .* .* .* "breakpoint at marker"
|
mi_create_breakpoint break_at_me 2 keep break_at_me .* .* .* "breakpoint at marker"
|
||||||
|
|
||||||
@ -130,12 +145,9 @@ gdb_expect {
|
|||||||
sleep 1
|
sleep 1
|
||||||
check_thread_states {"stopped" "stopped" "stopped"} "thread state, stop 4"
|
check_thread_states {"stopped" "stopped" "stopped"} "thread state, stop 4"
|
||||||
|
|
||||||
# Note that the order of *running notifications below is 'unnatural'. This is because
|
|
||||||
# we do only one out-of-line step at the time, so one thread gets resumed immediately
|
|
||||||
# and another has to wait.
|
|
||||||
send_gdb "-exec-continue --all\n"
|
send_gdb "-exec-continue --all\n"
|
||||||
gdb_expect {
|
gdb_expect {
|
||||||
-re ".*\\*running,thread-id=\"3\".*\\*running,thread-id=\"1\".*\\*running,thread-id=\"2\"\r\n" {
|
-re ".*\\*running,thread-id=\"3\"\r\n\\*running,thread-id=\"2\"\r\n\\*running,thread-id=\"1\"\r\n$mi_gdb_prompt" {
|
||||||
pass "resume all"
|
pass "resume all"
|
||||||
}
|
}
|
||||||
timeout {
|
timeout {
|
||||||
|
@ -42,7 +42,7 @@ void break_at_me (int id, int i)
|
|||||||
void *
|
void *
|
||||||
worker (void *arg)
|
worker (void *arg)
|
||||||
{
|
{
|
||||||
int id = (int)arg;
|
int id = *(int *)arg;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
/* When gdb is running, it sets hidden breakpoints in the thread
|
/* When gdb is running, it sets hidden breakpoints in the thread
|
||||||
@ -66,8 +66,11 @@ pthread_t
|
|||||||
create_thread (int id)
|
create_thread (int id)
|
||||||
{
|
{
|
||||||
pthread_t tid;
|
pthread_t tid;
|
||||||
|
/* This memory will be leaked, we don't care for a test. */
|
||||||
|
int *id2 = malloc (sizeof (int));
|
||||||
|
*id2 = id;
|
||||||
|
|
||||||
if (pthread_create (&tid, PTHREAD_CREATE_NULL_ARG2, worker, (void *) id))
|
if (pthread_create (&tid, PTHREAD_CREATE_NULL_ARG2, worker, (void *) id2))
|
||||||
{
|
{
|
||||||
perror ("pthread_create 1");
|
perror ("pthread_create 1");
|
||||||
exit (1);
|
exit (1);
|
||||||
|
Reference in New Issue
Block a user