]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix gdb.trace/actions.exp race
authorPedro Alves <palves@redhat.com>
Thu, 5 Mar 2015 22:01:06 +0000 (22:01 +0000)
committerPedro Alves <palves@redhat.com>
Tue, 7 Apr 2015 16:04:18 +0000 (17:04 +0100)
I saw this on PPC64 once:

  not installed on target
  (gdb) PASS: gdb.trace/actions.exp: 5.10a: verify teval actions set for two tracepoints
  break main
  Breakpoint 4 at 0x10000c6c: file ../../../src/gdb/testsuite/gdb.trace/actions.c, line 139.
  (gdb) PASS: gdb.trace/actions.exp: break main
  run
  Starting program: /home/palves/gdb/build/gdb/testsuite/outputs/gdb.trace/actions/actions
  tstatus

  Breakpoint 4, main (argc=1, argv=0x3fffffffebb8, envp=0x3fffffffebc8) at ../../../src/gdb/testsuite/gdb.trace/actions.c:139
  139       begin ();
  (gdb) tstatus
  Trace can not be run on this target.
  (gdb) actions 1
  Enter actions for tracepoint 1, one per line.
  End with a line saying just "end".
  >collect $regs
  >end
  (gdb) PASS: gdb.trace/actions.exp: set actions for first tracepoint
  tstart
  You can't do that when your target is `native'
  (gdb) FAIL: gdb.trace/actions.exp: tstart
  info tracepoints 1
  Num     Type           Disp Enb Address            What
  1       tracepoint     keep y   0x00000000100007c8 in gdb_c_test at ../../../src/gdb/testsuite/gdb.trace/actions.c:74
  collect $regs
  not installed on target
  ...

followed by a cascade of FAILs.  The "tstatus" was supposed to detect
that this target (native) can't do tracepoints, but, alas, it didn't.

That detection failed because 'gdb_test "break main"' doesn't expect
anything, and then the output was slow enough that 'gdb_test ""
"Breakpoint .*"' matched the output of "break main"...

The fix is to use gdb_breakpoint instead.  Also check the result of
gdb_test while at it.

Tested on x86-64 Fedora 20, native and gdbserver.

gdb/testsuite/ChangeLog:
2015-04-07  Pedro Alves  <palves@redhat.com>

* gdb.trace/actions.exp: Use gdb_breakpoint instead of gdb_test
that doesn't expect anything.  Return early if running to main
fails.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.trace/actions.exp

index 723bfd113755ba8f9b1c45484b5f04eb94935382..94e1b5eed6196921a598536c7debae56e6924818 100644 (file)
@@ -1,3 +1,9 @@
+2015-04-07  Pedro Alves  <palves@redhat.com>
+
+       * gdb.trace/actions.exp: Use gdb_breakpoint instead of gdb_test
+       that doesn't expect anything.  Return early if running to main
+       fails.
+
 2015-04-07  Yao Qi  <yao.qi@linaro.org>
 
        * gdb.threads/non-stop-fair-events.c (SECONDS): New macro.
index 52462821a56ba6af2564e90e31498ee8ac528d5e..913a2ec7cb21c256c47ea3907b1c1417a60183f3 100644 (file)
@@ -235,9 +235,15 @@ gdb_test "info tracepoints" \
 \[\t \]+not installed on target." \
                "5.10a: verify teval actions set for two tracepoints"
 
-gdb_test "break main"
+# Can't use runto_main here, because that would delete the tracepoints
+# created above.
+gdb_breakpoint "main"
 gdb_run_cmd
-gdb_test "" "Breakpoint .*"
+if {[gdb_test "" "Breakpoint .*"] != 0} {
+    fail "Can't run to main"
+    return -1
+}
+
 if ![gdb_target_supports_trace] {
     unsupported "target does not support trace"
     return -1