From 8cb5cc78eb33afcccfc5ce623273e07336c0c049 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Fri, 7 Jun 2013 00:29:19 +0000 Subject: [PATCH] gdb/testsuite/ * gdb.trace/mi-trace-unavailable.exp: New. * gdb.trace/trace-unavailable.c: New. --- gdb/testsuite/ChangeLog | 5 + .../gdb.trace/mi-trace-unavailable.exp | 134 ++++++++++++++++++ gdb/testsuite/gdb.trace/trace-unavailable.c | 40 ++++++ 3 files changed, 179 insertions(+) create mode 100644 gdb/testsuite/gdb.trace/mi-trace-unavailable.exp create mode 100644 gdb/testsuite/gdb.trace/trace-unavailable.c diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 698f11623f2..81c6648324d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-06-07 Yao Qi + + * gdb.trace/mi-trace-unavailable.exp: New. + * gdb.trace/trace-unavailable.c: New. + 2013-06-06 Doug Evans * gdb.cp/derivation.exp: Make tests have unique names. diff --git a/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp b/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp new file mode 100644 index 00000000000..3098f9aa5fc --- /dev/null +++ b/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp @@ -0,0 +1,134 @@ +# Copyright 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 +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +load_lib trace-support.exp + +standard_testfile trace-unavailable.c + +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug}] } { + return -1 +} + +if ![runto_main] { + fail "Can't run to main to check for trace support" + return -1 +} + +if ![gdb_target_supports_trace] { + unsupported "Current target does not support trace" + return -1 +} + +gdb_exit + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +if [mi_gdb_start] { + return +} +mi_run_to_main + +mi_gdb_test "-break-insert marker" \ + "\\^done,bkpt=\{number=\"${decimal}\",type=\"breakpoint\".*\"\}" \ + "insert tracepoint on marker" +mi_gdb_test "-break-insert -a bar" \ + "\\^done,bkpt=\{number=\"${decimal}\",type=\"tracepoint\".*\"\}" \ + "insert tracepoint on bar" + +# Define an action. +mi_gdb_test "-break-commands 3 \"collect array\" \"collect j\" \"end\" " \ + {\^done} "set action" + +mi_gdb_test "-trace-start" {.*\^done} "trace start" +mi_send_resuming_command "exec-continue" "continuing to marker" +mi_expect_stop \ + "breakpoint-hit" "marker" ".*" ".*" ".*" {"" "disp=\"keep\""} \ + "stop at marker" +mi_gdb_test "-trace-stop" {.*} "trace stop" + +# Save trace frames to tfile. +set tracefile [standard_output_file ${testfile}] +mi_gdb_test "-trace-save ${tracefile}.tf" ".*\\^done" \ + "save tfile trace file" +# Save trace frames to ctf. +mi_gdb_test "-trace-save -ctf ${tracefile}.ctf" ".*\\^done" \ + "save ctf trace file" + +mi_gdb_test "-gdb-set print entry-values no" {\^done} \ + "-gdb-set print entry-values no" + +proc test_trace_unavailable { data_source } { + global decimal + + with_test_prefix "$data_source" { + + # Test MI commands '-stack-list-locals', '-stack-list-arguments', + # and '-stack-list-variables'. + mi_gdb_test "-trace-find frame-number 0" \ + ".*\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"0\",frame=\{.*" \ + "-trace-find frame-number 0" + + # Test MI command '-stack-list-locals'. + mi_gdb_test "-stack-list-locals --simple-values" \ + ".*\\^done,locals=\\\[\{name=\"array\",type=\"unsigned char \\\[2\\\]\"\},\{name=\"i\",type=\"int\",value=\"\"\}\\\]" \ + "-stack-list-locals --simple-values" + + # Test MI command '-stack-list-arguments'. + mi_gdb_test "-stack-list-arguments --simple-values" \ + ".*\\^done,stack-args=\\\[frame=\{level=\"0\",args=\\\[\{name=\"j\",type=\"int\",value=\"4\"\},\{name=\"s\",type=\"char \\\*\",value=\"\"\}\\\]\},.*\}.*" \ + "-stack-list-arguments --simple-values" + + # Test MI command '-stack-list-variables'. + mi_gdb_test "-stack-list-variables --simple-values" \ + ".*\\^done,variables=\\\[\{name=\"j\",arg=\"1\",type=\"int\",value=\"4\"\},\{name=\"s\",arg=\"1\",type=\"char \\\*\",value=\"\"\},\{name=\"array\",type=\"unsigned char \\\[2\\\]\"\},\{name=\"i\",type=\"int\",value=\"\"\}\\\]" \ + "-stack-list-variables --simple-values" + + # Don't issue command '-trace-find none' to return from + # tfind mode (examining trace frames) on purpose, in order + # to test that GDB is able to clear its tracing-related local state + # in the next -target-select. + # mi_gdb_test "-trace-find none" ".*\\^done,found=\"0\".*" "-trace-find none" + } +} + +test_trace_unavailable "live" + +# Change target to ctf if GDB supports it. +set msg "-target-select ctf" +send_gdb "-target-select ctf ${tracefile}.ctf\n" +gdb_expect { + -re ".*\\^connected.*${mi_gdb_prompt}$" { + # GDB supports ctf, do the test. + test_trace_unavailable "ctf" + } + -re ".*\\^error,msg=\"Undefined target command.*${mi_gdb_prompt}$" { + # GDB doesn't support ctf, skip the test. + unsupported "gdb does not support ctf target" + } + -re ".*$mi_gdb_prompt$" { + fail "$msg" + } + timeout { + fail "$msg (timeout)" + } +} + +# Change target to tfile. +mi_gdb_test "-target-select tfile ${tracefile}.tf" ".*\\^connected.*" \ + "-target-select tfile" +test_trace_unavailable "tfile" + +mi_gdb_exit diff --git a/gdb/testsuite/gdb.trace/trace-unavailable.c b/gdb/testsuite/gdb.trace/trace-unavailable.c new file mode 100644 index 00000000000..9b3e230292e --- /dev/null +++ b/gdb/testsuite/gdb.trace/trace-unavailable.c @@ -0,0 +1,40 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +static void +bar (int j, char *s) +{ + unsigned char array[2]; + int i = 0; + + array[0] = 'c'; + array[1] = 'd'; +} + +static void +marker (void) +{} + +int +main (void) +{ + char s[4]; + + bar (4, s); + marker (); + return 0; +} -- 2.30.2