From 80f73d716b037b1ad4f8e8582852887ba1016d1d Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Thu, 21 Aug 2008 15:09:42 +0000 Subject: [PATCH] * 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. --- gdb/testsuite/ChangeLog | 7 ++++++ gdb/testsuite/gdb.mi/mi-nonstop.exp | 34 +++++++++++++++++++---------- gdb/testsuite/gdb.mi/non-stop.c | 7 ++++-- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index eced7020653..3d7333fc972 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2008-08-21 Vladimir Prus + + * 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 * gdb.arch/powerpc-prologue.exp: Code doesn't save %r31 so don't diff --git a/gdb/testsuite/gdb.mi/mi-nonstop.exp b/gdb/testsuite/gdb.mi/mi-nonstop.exp index 9c2c2997608..4aa3a5a8a12 100644 --- a/gdb/testsuite/gdb.mi/mi-nonstop.exp +++ b/gdb/testsuite/gdb.mi/mi-nonstop.exp @@ -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 target-async 1" ".*" 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" @@ -130,12 +145,9 @@ gdb_expect { sleep 1 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" 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" } timeout { diff --git a/gdb/testsuite/gdb.mi/non-stop.c b/gdb/testsuite/gdb.mi/non-stop.c index 9b006ebf576..83acc8223b7 100644 --- a/gdb/testsuite/gdb.mi/non-stop.c +++ b/gdb/testsuite/gdb.mi/non-stop.c @@ -42,7 +42,7 @@ void break_at_me (int id, int i) void * worker (void *arg) { - int id = (int)arg; + int id = *(int *)arg; int i = 0; /* When gdb is running, it sets hidden breakpoints in the thread @@ -66,8 +66,11 @@ pthread_t create_thread (int id) { 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"); exit (1); -- 2.30.2