]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/testsuite/gdb.trace/collection.exp
Update years in copyright notice for the GDB files.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.trace / collection.exp
index 6b731841f8cfe6dffa53c2db8cfb914b3abc9880..ed7149d28d1f5cf2532329ad5ff42d5641a48e09 100644 (file)
@@ -1,5 +1,4 @@
-# Copyright 1998, 2005, 2007, 2008, 2009, 2010, 2011
-# Free Software Foundation, Inc.
+# Copyright 1998-2013 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 
 load_lib "trace-support.exp"
 
-if $tracelevel then {
-       strace $tracelevel
-}
-
 
-set testfile "collection"
-set srcfile ${testfile}.c
+standard_testfile
 set executable $testfile
-set binfile $objdir/$subdir/$executable
 
-if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-       executable {debug nowarnings}] != "" } {
-    untested collection.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug nowarnings}]} {
     return -1
 }
 
@@ -589,6 +580,7 @@ proc gdb_collect_global_in_pieces_test { } {
 }
 
 proc gdb_collect_return_test { } {
+    global gdb_prompt
 
     prepare_for_trace_test
 
@@ -606,10 +598,10 @@ proc gdb_collect_return_test { } {
     # Since we can't guarantee that $_ret will give us the caller,
     # pass either way, but giving different messages.
     gdb_test_multiple "backtrace" "" {
-       -re ".*#1 .* in main .*" {
+       -re ".*#1 .* in main .*\r\n$gdb_prompt $" {
            pass "collect \$_ret: backtrace lists main"
        }
-       -re ".*#1 .* in ?? .*" {
+       -re ".*#1 .* in ?? .*\r\n$gdb_prompt $" {
            pass "collect \$_ret: backtrace not listing main"
        }
     }
@@ -619,6 +611,49 @@ proc gdb_collect_return_test { } {
            "collect \$_ret: cease trace debugging"
 }
 
+proc gdb_collect_strings_test { func mystr myrslt mylim msg } {
+    global hex
+    global cr
+    global gdb_prompt
+
+    prepare_for_trace_test
+
+    # Find the comment-identified line for setting this tracepoint.
+    set testline 0
+    gdb_test_multiple "list $func, +30" "collect $msg: find tracepoint line" {
+       -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" {
+           set testline $expect_out(1,string)
+           pass "collect $msg: find tracepoint line"
+       }
+       -re ".*$gdb_prompt " {
+           fail "collect $msg: find tracepoint line (skipping strings test)"
+           return
+       }
+       timeout {
+           fail "collect $msg: find tracepoint line (skipping strings test)"
+           return
+       }
+    }
+
+    gdb_test "trace $testline" \
+           "Tracepoint \[0-9\]+ at .*" \
+           "collect $msg: set tracepoint"
+    gdb_trace_setactions "collect $msg: define actions" \
+           "" \
+           "collect/s$mylim $mystr" "^$"
+
+    # Begin the test.
+    run_trace_experiment $msg $func
+
+    gdb_test "print $mystr" \
+       "\\$\[0-9\]+ = $hex \"$myrslt\".*$cr" \
+           "collect $msg: collected local string"
+
+    gdb_test "tfind none" \
+           "#0  end .*" \
+           "collect $msg: cease trace debugging"
+}
+
 proc gdb_trace_collection_test {} {
     global fpreg
     global spreg
@@ -728,15 +763,19 @@ proc gdb_trace_collection_test {} {
            "globalarr\[\(l6, l7\)\]" "7"    "a\[\(b, c\)\]"
 
     gdb_collect_return_test
+
+    gdb_collect_strings_test strings_test_func "locstr" "abcdef" "" \
+           "local string"
+
+    gdb_collect_strings_test strings_test_func "longloc" "how now brown c" 15 \
+           "long local string"
+
 }
 
-clean_restart $executable
 runto_main
 
-# We generously give ourselves one "pass" if we successfully
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 }