This is the mail archive of the gdb-patches@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]

unbreak the 'stepping' alias for 'while-stepping'


The 'stepping' alias for 'while-stepping' got broken with
the recent tracepoints actions / breakpoint commands merge.
(GDB doesn't realize it starts a new command block, and also
later crashes at tstart.)

Bad:

 (gdb) actions
 Enter actions for tracepoint 1, one per line.
 End with a line saying just "end".
 >stepping 10
 >end
 (gdb) tstart
 Segmentation fault

Good:

 (gdb) actions
 Enter actions for tracepoint 1, one per line.
 End with a line saying just "end".
 >while-stepping 10
  >end
 >end
 (gdb) tstart
 (gdb)

I've applied the patch below to fix it.  Given that the 'ws' alias
was broken the same way in our tree at some point,
I'm tweaking the while-dyn.exp test to exercise all while-stepping
aliases.  I took the opportunity to clean up the test file a bit, by
making it use gdb_test_multiple instead of send_gdb/gdb_expect.
I've tested this against a gdbserver that supports tracepoints.  The
new tests fail with an unfixed GDB.

-- 
Pedro Alves

2010-03-28  Pedro Alves  <pedro@codesourcery.com>

	gdb/
	* cli/cli-script.c (process_next_line): Handle 'stepping'.

2010-03-28  Pedro Alves  <pedro@codesourcery.com>

	gdb/testsuite/
	* gdb.trace/while-dyn.exp (executable): New variable.
	(binfile): Use it.
	(test_while_stepping): New function.  Move most tests here.  Call
	it once for each of the while-stepping, stepping and ws aliases.

---
 gdb/cli/cli-script.c                  |    3 -
 gdb/testsuite/gdb.trace/while-dyn.exp |   80 ++++++++++++++++++++--------------
 2 files changed, 50 insertions(+), 33 deletions(-)

Index: src/gdb/cli/cli-script.c
===================================================================
--- src.orig/gdb/cli/cli-script.c	2010-03-28 18:55:20.000000000 +0100
+++ src/gdb/cli/cli-script.c	2010-03-28 18:56:21.000000000 +0100
@@ -932,7 +932,8 @@ process_next_line (char *p, struct comma
       /* Check for while, if, break, continue, etc and build a new command
 	 line structure for them.  */
       if ((p_end - p >= 14 && !strncmp (p, "while-stepping", 14))
-	  || (p_end -p >= 2 && !strncmp (p, "ws", 2)))
+	  || (p_end - p >= 8 && !strncmp (p, "stepping", 8))
+	  || (p_end - p >= 2 && !strncmp (p, "ws", 2)))
 	{
 	  /* Because validate_actionline and encode_action lookup
 	     command's line as command, we need the line to
Index: src/gdb/testsuite/gdb.trace/while-dyn.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.trace/while-dyn.exp	2010-03-28 18:55:20.000000000 +0100
+++ src/gdb/testsuite/gdb.trace/while-dyn.exp	2010-03-28 18:55:43.000000000 +0100
@@ -29,7 +29,8 @@ gdb_start
 
 set testfile "actions"
 set srcfile $testfile.c
-set binfile $objdir/$subdir/while-dyn
+set executable while-dyn
+set binfile $objdir/$subdir/$executable
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested while-dyn.exp
@@ -46,23 +47,12 @@ gdb_reinitialize_dir $srcdir/$subdir
 if { ![gdb_target_supports_trace] } then {
     pass "Current target does not support trace"
     return 1;
-
 }
 
-# If testing on a remote host, download the source file.
-# remote_download host $srcdir/$subdir/$srcfile
-
 #
 # test while-stepping dynamically (live target)
 #
 
-## verify number of trace frames collected matches stepcount
-
-gdb_delete_tracepoints
-gdb_test "trace gdb_c_test" \
-	"Tracepoint $decimal at .*" \
-	"Set tracepoint at gdb_c_test"
-
 if [istarget "x86_64-*"] then {
     set fpreg "\$rbp"
 } elseif [istarget "i?86-*"] then {
@@ -71,33 +61,59 @@ if [istarget "x86_64-*"] then {
     set fpreg "\$fp"
 }
 
-gdb_trace_setactions "5.12: define while-stepping <stepcount>" \
+proc test_while_stepping { while_stepping } {
+    global fpreg
+    global decimal
+    global gdb_prompt
+    global executable
+
+    clean_restart $executable
+
+    gdb_test "tstop" "" ""
+    gdb_test "tfind none" "" ""
+    runto_main
+
+    ## verify number of trace frames collected matches stepcount
+
+    gdb_delete_tracepoints
+    gdb_test "trace gdb_c_test" \
+	"Tracepoint $decimal at .*" \
+	"$while_stepping: Set tracepoint at gdb_c_test"
+
+    gdb_trace_setactions "5.12: define $while_stepping <stepcount>" \
 	"" \
 	"collect $fpreg" "^$" \
-	"while-stepping 5" "^$" \
+	"$while_stepping 5" "^$" \
 	"collect p" "^$" \
 	"end" "^$" \
 	"end" ""
 
-gdb_test "tstart" "" ""
-
-gdb_test "break end" "" ""
-gdb_test "continue" \
-    "Continuing.*Breakpoint $decimal, end.*" \
-    "run trace experiment"
-
-gdb_test "tstop" "" ""
-
-gdb_tfind_test "5.12: frame 5 should be the last one collected" "5" "5"
+    gdb_test "tstart" "" ""
 
-send_gdb "tfind 6\n"
-gdb_expect {
-    -re "failed to find.*$gdb_prompt $" {
-	pass "5.12: trace stopped after 5 stepping frames"
-    }
-    -re ".*$gdb_prompt $" {
-	fail "5.12: trace stopped after 5 stepping frames"
+    gdb_test "break end" "" ""
+    gdb_test "continue" \
+	"Continuing.*Breakpoint $decimal, end.*" \
+	"$while_stepping: run trace experiment"
+
+    gdb_test "tstop" "" ""
+
+    gdb_tfind_test "$while_stepping: frame 5 should be the last one collected" "5" "5"
+
+    set test "$while_stepping: trace stopped after 5 stepping frames"
+    gdb_test_multiple "tfind 6" "$test" {
+	-re "failed to find.*$gdb_prompt $" {
+	    pass "$test"
+	}
+	-re ".*$gdb_prompt $" {
+	    fail "$test"
+	}
     }
+
+    gdb_test "tfind none" "" ""
 }
 
-gdb_test "tfind none" "" ""
+# Test all while-stepping aliases.
+
+test_while_stepping "while-stepping"
+test_while_stepping "stepping"
+test_while_stepping "ws"


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