aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2012-01-03 02:38:37 +0000
committerYao Qi <yao@codesourcery.com>2012-01-03 02:38:37 +0000
commit3c2d6aff67c0d33ed51d588bd7780f2fc0cfad1b (patch)
treee04a97e3909c78b25c8baf935a600645185b0564 /gdb
parentf72429c5cc268535be510b223a732c31816a79f9 (diff)
downloadbinutils-3c2d6aff67c0d33ed51d588bd7780f2fc0cfad1b.zip
binutils-3c2d6aff67c0d33ed51d588bd7780f2fc0cfad1b.tar.gz
binutils-3c2d6aff67c0d33ed51d588bd7780f2fc0cfad1b.tar.bz2
gdb/testsuite/
* gdb.trace/strace.exp (strace_trace_on_same_addr): New. (strace_trace_on_diff_addr): New. * gdb.trace/strace.c: (main): Add two local variables.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.trace/strace.c5
-rw-r--r--gdb/testsuite/gdb.trace/strace.exp160
3 files changed, 171 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 40bedc5..cabffb5 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2012-01-03 Yao Qi <yao@codesourcery.com>
+
+ * gdb.trace/strace.exp (strace_trace_on_same_addr): New.
+ (strace_trace_on_diff_addr): New.
+ * gdb.trace/strace.c: (main): Add two local variables.
+
2011-01-02 Ulrich Weigand <uweigand@de.ibm.com>
* gdb.cell/fork.exp: Delete breakpoints after reaching main.
diff --git a/gdb/testsuite/gdb.trace/strace.c b/gdb/testsuite/gdb.trace/strace.c
index cec4c14..5e1e120 100644
--- a/gdb/testsuite/gdb.trace/strace.c
+++ b/gdb/testsuite/gdb.trace/strace.c
@@ -24,6 +24,11 @@ end (void)
int
main (void)
{
+ /* Some code to make sure that breakpoints on `main' and `ust/bar' marker
+ are set at different addresses. */
+ int a = 0;
+ int b = a;
+
trace_mark(ust, bar, "str %s", "FOOBAZ");
trace_mark(ust, bar2, "number1 %d number2 %d", 53, 9800);
diff --git a/gdb/testsuite/gdb.trace/strace.exp b/gdb/testsuite/gdb.trace/strace.exp
index 51a9f56..3992410 100644
--- a/gdb/testsuite/gdb.trace/strace.exp
+++ b/gdb/testsuite/gdb.trace/strace.exp
@@ -114,5 +114,165 @@ proc strace_probe_marker { } {
set pf_prefix $old_pf_prefix
}
+proc strace_trace_on_same_addr { type } {
+ global executable
+ global pf_prefix
+ global expect_out
+ global gdb_prompt
+ global hex
+
+ set old_pf_prefix $pf_prefix
+ lappend pf_prefix "trace_same_addr" "$type"
+
+ # Restart with a fresh gdb.
+ clean_restart $executable
+ if ![runto_main] {
+ fail "Can't run to main"
+ set pf_prefix $old_pf_prefix
+ return -1
+ }
+
+ set marker_bar_addr ""
+ set marker_bar2_addr ""
+
+ # List the markers in program. They should be disabled.
+ gdb_test_multiple "info static-tracepoint-markers" "info static-tracepoint-markers 1" {
+ -re ".*ust/bar\[\t \]+n.*${gdb_prompt} $" {
+ set ignore ""
+
+ regexp "ust/bar\[\t \]+n\[\t \]+($hex) .*ust/bar2\[\t \]+n\[\t \]+($hex) " \
+ "$expect_out(0,string)" ignore marker_bar_addr marker_bar2_addr
+
+ pass "info static-tracepoint-markers 1"
+ }
+ -re ".*${gdb_prompt} $" {
+ fail "info static-tracepoint-markers 1"
+ }
+ }
+
+ gdb_test "strace -m ust/bar" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
+ gdb_test "strace -m ust/bar2" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
+ # Two trace markers should be enabled.
+ gdb_test "info static-tracepoint-markers" \
+ "ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+y\[\t \]+$hex.*" \
+ "info static-tracepoint-markers 2"
+
+ # Set breapoints or tracepoints.
+ set test "${type} on marker bar"
+ gdb_test_multiple "${type} *${marker_bar_addr}" $test {
+ -re "\(Fast trace|Trace|Break\)point \[0-9\]+ at ${hex}: file.*\r\n$gdb_prompt $" {
+ pass $test
+ }
+ -re ".*\r\n$gdb_prompt $" {
+ if [string equal $type "ftrace"] {
+ # The instruction may be not long enough to set a fast tracepoint.
+ # Skip the rest of this test.
+ return -1;
+ } else {
+ fail $test
+ }
+ }
+ }
+ set test "${type} on marker bar2"
+ gdb_test_multiple "${type} *${marker_bar2_addr}" $test {
+ -re "\(Fast trace|Trace|Break\)point \[0-9\]+ at ${hex}: file.*" {
+ pass $test
+ }
+ -re ".*\r\n$gdb_prompt $" {
+ if [string equal $type "ftrace"] {
+ # The instruction may be not long enough to set a fast tracepoint.
+ # Skip the rest of this test.
+ return -1;
+ } else {
+ fail $test
+ }
+ }
+ }
+
+ gdb_test "break end" "Breakpoint \[0-9\]+ at.*"
+
+ if [string equal $type "break"] {
+ gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to bar"
+ gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to bar2"
+ gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
+ } else {
+
+ gdb_test_no_output "tstart"
+ gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
+ gdb_test_no_output "tstop"
+
+ gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
+ gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
+ gdb_test "tfind" "Found trace frame 2, tracepoint .*" "tfind frame 2"
+ gdb_test "tfind" "Found trace frame 3, tracepoint .*" "tfind frame 3"
+ gdb_test "tfind" "Target failed to find requested trace frame\\..*"
+ }
+ set pf_prefix $old_pf_prefix
+}
+
+proc strace_trace_on_diff_addr { } {
+ global executable
+ global pf_prefix
+ global expect_out
+ global gdb_prompt
+ global hex
+
+ set old_pf_prefix $pf_prefix
+ lappend pf_prefix "trace_diff_addr"
+
+ # Restart with a fresh gdb.
+ clean_restart $executable
+ if ![runto_main] {
+ fail "Can't run to main"
+ set pf_prefix $old_pf_prefix
+ return -1
+ }
+
+ set marker_bar_addr ""
+ set marker_bar2_addr ""
+
+ # List the markers in program. They should be disabled.
+ gdb_test_multiple "info static-tracepoint-markers" "info static-tracepoint-markers 1" {
+ -re ".*ust/bar\[\t \]+n.*${gdb_prompt} $" {
+ set ignore ""
+
+ regexp "ust/bar\[\t \]+n\[\t \]+($hex) .*ust/bar2\[\t \]+n\[\t \]+($hex) " \
+ "$expect_out(0,string)" ignore marker_bar_addr marker_bar2_addr
+
+ pass "info static-tracepoint-markers 1"
+ }
+ -re ".*${gdb_prompt} $" {
+ fail "info static-tracepoint-markers 1"
+ }
+ }
+
+ gdb_test "strace -m ust/bar" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
+
+ gdb_test "info static-tracepoint-markers" \
+ "ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+n\[\t \]+$hex.*" \
+ "info static-tracepoint-markers 2"
+
+
+ # Set common tracepoint.
+ gdb_test "trace *${marker_bar2_addr}" "Tracepoint \[0-9\]+ at ${hex}: file.*"
+
+ gdb_test "break end" "Breakpoint \[0-9\]+ at.*"
+
+ gdb_test_no_output "tstart"
+ gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
+ gdb_test_no_output "tstop"
+
+ gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
+ gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
+ gdb_test "tfind" "Target failed to find requested trace frame\\..*"
+
+ set pf_prefix $old_pf_prefix
+}
+
strace_info_marker
strace_probe_marker
+
+strace_trace_on_same_addr "trace"
+strace_trace_on_same_addr "ftrace"
+strace_trace_on_same_addr "break"
+strace_trace_on_diff_addr