aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.threads
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-01-29 08:48:53 +0100
committerTom de Vries <tdevries@suse.de>2020-01-29 08:48:53 +0100
commitee2a6fc60413a2f5bc6641fd6d06f460c9deab3f (patch)
treeca8d7682a7efb1eff01d29fcf95b5f038df6a4d0 /gdb/testsuite/gdb.threads
parentef8f08ca13f6c111cc549a3e13be5c5e2d95ca82 (diff)
downloadgdb-ee2a6fc60413a2f5bc6641fd6d06f460c9deab3f.zip
gdb-ee2a6fc60413a2f5bc6641fd6d06f460c9deab3f.tar.gz
gdb-ee2a6fc60413a2f5bc6641fd6d06f460c9deab3f.tar.bz2
[gdb/testsuite] Fix gdb.threads/watchpoint-fork.exp race
I ran into: ... Thread 3.1 "watchpoint-fork" hit Breakpoint 3, marker () at \ watchpoint-fork-mt.c:42^M 42 }^M (gdb) parent2: 1945^M FAIL: gdb.threads/watchpoint-fork.exp: child: multithreaded: breakpoint (A) \ after the second fork (timeout) ... The problem is that the FAILing gdb_test expects '(gdb) ' to be the last thing printed, but the inferior prints something after that. A similar FAIL is described in the sources in watchpoint-fork-parent.c: ... printf ("child%d: %d\n", nr, (int) getpid ()); /* Delay to get both the "child%d" and "parent%d" message printed without a race breaking expect by its endless wait on `$gdb_prompt$': Breakpoint 3, marker () at watchpoint-fork.c:33 33 } (gdb) parent2: 14223 */ i = sleep (1); ... I noticed that while the executables print output, the output is not verified in the test-case, so it's merely debug output. Fix this by: - guarding the prints in the executables (as well as related sleep and setbuf calls) with #if DEBUG, and - compiling by default with DEBUG=0. gdb/testsuite/ChangeLog: 2020-01-29 Tom de Vries <tdevries@suse.de> * gdb.threads/watchpoint-fork-child.c: Guard prints with #if DEBUG. * gdb.threads/watchpoint-fork-mt.c: Same. * gdb.threads/watchpoint-fork-parent.c: Same. * gdb.threads/watchpoint-fork-st.c: Same. * gdb.threads/watchpoint-fork.exp: Compile with DEBUG=0. Change-Id: I63efd4c7771f96b5f5cd87ef2ab36795484ae2be
Diffstat (limited to 'gdb/testsuite/gdb.threads')
-rw-r--r--gdb/testsuite/gdb.threads/watchpoint-fork-child.c4
-rw-r--r--gdb/testsuite/gdb.threads/watchpoint-fork-mt.c2
-rw-r--r--gdb/testsuite/gdb.threads/watchpoint-fork-parent.c4
-rw-r--r--gdb/testsuite/gdb.threads/watchpoint-fork-st.c2
-rw-r--r--gdb/testsuite/gdb.threads/watchpoint-fork.exp13
5 files changed, 23 insertions, 2 deletions
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-child.c b/gdb/testsuite/gdb.threads/watchpoint-fork-child.c
index 1da75c9..96860bb 100644
--- a/gdb/testsuite/gdb.threads/watchpoint-fork-child.c
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-child.c
@@ -59,7 +59,9 @@ forkoff (int nr)
case -1:
assert (0);
default:
+#if DEBUG
printf ("parent%d: %d\n", nr, (int) child);
+#endif
/* Sleep for a while to possibly get incorrectly ATTACH_THREADed by GDB
tracing the child fork with no longer valid thread/lwp entries of the
@@ -95,7 +97,9 @@ forkoff (int nr)
_exit (0);
case 0:
+#if DEBUG
printf ("child%d: %d\n", nr, (int) getpid ());
+#endif
/* Let the parent signal us about its success. Be careful of races. */
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c b/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
index 4b195f97..7b1bbf4 100644
--- a/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
@@ -114,8 +114,10 @@ main (void)
int i;
void *thread_result;
+#if DEBUG
setbuf (stdout, NULL);
printf ("main: %d\n", (int) gettid ());
+#endif
/* General hardware breakpoints and watchpoints validity. */
marker ();
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c b/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c
index 511c951..2b325b0 100644
--- a/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c
@@ -40,6 +40,7 @@ forkoff (int nr)
case -1:
assert (0);
case 0:
+#if DEBUG
printf ("child%d: %d\n", nr, (int) getpid ());
/* Delay to get both the "child%d" and "parent%d" message printed without
a race breaking expect by its endless wait on `$gdb_prompt$':
@@ -48,6 +49,7 @@ forkoff (int nr)
(gdb) parent2: 14223 */
i = sleep (1);
assert (i == 0);
+#endif
/* We must not get caught here (against a forgotten breakpoint). */
var++;
@@ -55,11 +57,13 @@ forkoff (int nr)
_exit (exit_code);
default:
+#if DEBUG
printf ("parent%d: %d\n", nr, (int) child);
/* Delay to get both the "child%d" and "parent%d" message printed, see
above. */
i = sleep (1);
assert (i == 0);
+#endif
pid_got = wait (&status);
assert (pid_got == child);
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-st.c b/gdb/testsuite/gdb.threads/watchpoint-fork-st.c
index b75deb6..8a7caec 100644
--- a/gdb/testsuite/gdb.threads/watchpoint-fork-st.c
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-st.c
@@ -40,8 +40,10 @@ mark_exit (void)
int
main (void)
{
+#if DEBUG
setbuf (stdout, NULL);
printf ("main: %d\n", (int) getpid ());
+#endif
/* General hardware breakpoints and watchpoints validity. */
marker ();
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork.exp b/gdb/testsuite/gdb.threads/watchpoint-fork.exp
index 5f38fca..6500c0d 100644
--- a/gdb/testsuite/gdb.threads/watchpoint-fork.exp
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork.exp
@@ -17,7 +17,11 @@
set testfile watchpoint-fork
+# Set DEBUG to 0 or 1 in sources
+set debug 0
+
proc test {type symbol} {
+ global debug
with_test_prefix "$type" {
global testfile subdir srcdir gdb_prompt
@@ -30,7 +34,8 @@ proc test {type symbol} {
set srcfile_main ${testfile}-st.c
if {[build_executable $testfile.exp $executable \
[list $srcfile_main ${testfile}-${type}.c] \
- [list debug additional_flags=-D$symbol]] == -1} {
+ [list debug additional_flags=-D$symbol \
+ additional_flags=-DDEBUG=$debug]] == -1} {
return -1
}
@@ -96,7 +101,11 @@ proc test {type symbol} {
with_test_prefix "multithreaded" {
set executable ${testfile}-${type}-mt
set srcfile_main ${srcdir}/${subdir}/${testfile}-mt.c
- if { [gdb_compile_pthreads "${srcfile_main} ${srcfile_type}" [standard_output_file ${executable}] executable [list debug "additional_flags=-D$symbol -DTHREAD"]] != "" } {
+ if { [gdb_compile_pthreads "${srcfile_main} ${srcfile_type}" \
+ [standard_output_file ${executable}] executable \
+ [list debug "additional_flags=-D$symbol" \
+ "additional_flags=-DDEBUG=$debug" \
+ "-DTHREAD"]] != "" } {
untested "failed to compile"
return
}