This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix gdb.trace/actions.exp race


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9f6dbe2bbbdcc3694f264878e10c6b80285b4608

commit 9f6dbe2bbbdcc3694f264878e10c6b80285b4608
Author: Pedro Alves <palves@redhat.com>
Date:   Thu Mar 5 22:01:06 2015 +0000

    Fix gdb.trace/actions.exp race
    
    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.

Diff:
---
 gdb/testsuite/ChangeLog             |  6 ++++++
 gdb/testsuite/gdb.trace/actions.exp | 10 ++++++++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 723bfd1..94e1b5e 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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.
diff --git a/gdb/testsuite/gdb.trace/actions.exp b/gdb/testsuite/gdb.trace/actions.exp
index 5246282..913a2ec 100644
--- a/gdb/testsuite/gdb.trace/actions.exp
+++ b/gdb/testsuite/gdb.trace/actions.exp
@@ -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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]