OLD | NEW |
(Empty) | |
| 1 # Copyright 2013 Free Software Foundation, Inc. |
| 2 |
| 3 # This program is free software; you can redistribute it and/or modify |
| 4 # it under the terms of the GNU General Public License as published by |
| 5 # the Free Software Foundation; either version 3 of the License, or |
| 6 # (at your option) any later version. |
| 7 # |
| 8 # This program is distributed in the hope that it will be useful, |
| 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 # GNU General Public License for more details. |
| 12 # |
| 13 # You should have received a copy of the GNU General Public License |
| 14 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 15 |
| 16 load_lib trace-support.exp |
| 17 |
| 18 standard_testfile trace-unavailable.c |
| 19 |
| 20 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug}] } { |
| 21 return -1 |
| 22 } |
| 23 |
| 24 if ![runto_main] { |
| 25 fail "Can't run to main to check for trace support" |
| 26 return -1 |
| 27 } |
| 28 |
| 29 if ![gdb_target_supports_trace] { |
| 30 unsupported "Current target does not support trace" |
| 31 return -1 |
| 32 } |
| 33 |
| 34 gdb_exit |
| 35 |
| 36 load_lib mi-support.exp |
| 37 set MIFLAGS "-i=mi" |
| 38 |
| 39 if [mi_gdb_start] { |
| 40 return |
| 41 } |
| 42 mi_run_to_main |
| 43 |
| 44 mi_gdb_test "-break-insert marker" \ |
| 45 "\\^done,bkpt=\{number=\"${decimal}\",type=\"breakpoint\".*\"\}" \ |
| 46 "insert tracepoint on marker" |
| 47 mi_gdb_test "-break-insert -a bar" \ |
| 48 "\\^done,bkpt=\{number=\"${decimal}\",type=\"tracepoint\".*\"\}" \ |
| 49 "insert tracepoint on bar" |
| 50 |
| 51 # Define an action. |
| 52 mi_gdb_test "-break-commands 3 \"collect array\" \"collect j\" \"end\" " \ |
| 53 {\^done} "set action" |
| 54 |
| 55 mi_gdb_test "-break-insert -a foo" \ |
| 56 "\\^done,bkpt=\{number=\"${decimal}\",type=\"tracepoint\".*\"\}" \ |
| 57 "insert tracepoint on foo" |
| 58 |
| 59 # Collect 'main' to make sure no registers are collected except PC. |
| 60 mi_gdb_test "-break-commands 4 \"collect main\" \"end\" " \ |
| 61 {\^done} "set action on tracepoint 4" |
| 62 |
| 63 mi_gdb_test "-trace-start" {.*\^done} "trace start" |
| 64 mi_send_resuming_command "exec-continue" "continuing to marker" |
| 65 mi_expect_stop \ |
| 66 "breakpoint-hit" "marker" ".*" ".*" ".*" {"" "disp=\"keep\""} \ |
| 67 "stop at marker" |
| 68 mi_gdb_test "-trace-stop" {.*} "trace stop" |
| 69 |
| 70 # Save trace frames to tfile. |
| 71 set tracefile [standard_output_file ${testfile}] |
| 72 mi_gdb_test "-trace-save ${tracefile}.tf" ".*\\^done" \ |
| 73 "save tfile trace file" |
| 74 # Save trace frames to ctf. |
| 75 mi_gdb_test "-trace-save -ctf ${tracefile}.ctf" ".*\\^done" \ |
| 76 "save ctf trace file" |
| 77 |
| 78 proc test_trace_unavailable { data_source } { |
| 79 global decimal |
| 80 |
| 81 with_test_prefix "$data_source" { |
| 82 |
| 83 # Test MI commands '-stack-list-locals', '-stack-list-arguments', |
| 84 # and '-stack-list-variables'. |
| 85 mi_gdb_test "-trace-find frame-number 0" \ |
| 86 ".*\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"0\",fr
ame=\{.*" \ |
| 87 "-trace-find frame-number 0" |
| 88 |
| 89 # The "print entry-values" option shouldn't affect the output of |
| 90 # '-stack-list-locals'. |
| 91 foreach entry_values { no only preferred if-needed both compact default
} { |
| 92 mi_gdb_test "-gdb-set print entry-values $entry_values" {\^done} "" |
| 93 |
| 94 with_test_prefix "$entry_values" { |
| 95 # Test MI command '-stack-list-locals'. |
| 96 mi_gdb_test "-stack-list-locals --simple-values" \ |
| 97 ".*\\^done,locals=\\\[\{name=\"array\",type=\"unsigned char
\\\[2\\\]\"\},\{name=\"i\",type=\"int\",value=\"<unavailable>\"\}\\\]" \ |
| 98 "-stack-list-locals --simple-values" |
| 99 } |
| 100 } |
| 101 |
| 102 mi_gdb_test "-gdb-set print entry-values no" {\^done} \ |
| 103 "-gdb-set print entry-values no" |
| 104 |
| 105 # Test MI command '-stack-list-locals'. |
| 106 mi_gdb_test "-stack-list-locals --simple-values" \ |
| 107 ".*\\^done,locals=\\\[\{name=\"array\",type=\"unsigned char \\\[2\\\
]\"\},\{name=\"i\",type=\"int\",value=\"<unavailable>\"\}\\\]" \ |
| 108 "-stack-list-locals --simple-values" |
| 109 mi_gdb_test "-stack-list-locals --skip-unavailable --simple-values" \ |
| 110 ".*\\^done,locals=\\\[\{name=\"array\",type=\"unsigned char \\\[2\\\
]\"\}\\\]" \ |
| 111 "-stack-list-locals --skip-unavailable --simple-values" |
| 112 |
| 113 # Test MI command '-stack-list-arguments'. |
| 114 mi_gdb_test "-stack-list-arguments --simple-values" \ |
| 115 ".*\\^done,stack-args=\\\[frame=\{level=\"0\",args=\\\[\{name=\"j\",
type=\"int\",value=\"4\"\},\{name=\"s\",type=\"char \\\*\",value=\"<unavailable>
\"\}\\\]\},.*\}.*" \ |
| 116 "-stack-list-arguments --simple-values" |
| 117 mi_gdb_test "-stack-list-arguments --skip-unavailable --simple-values" \ |
| 118 ".*\\^done,stack-args=\\\[frame=\{level=\"0\",args=\\\[\{name=\"j\",
type=\"int\",value=\"4\"\}\\\]\},.*\}.*" \ |
| 119 "-stack-list-arguments --skip-unavailable --simple-values" |
| 120 |
| 121 # Test MI command '-stack-list-variables'. |
| 122 mi_gdb_test "-stack-list-variables --simple-values" \ |
| 123 ".*\\^done,variables=\\\[\{name=\"j\",arg=\"1\",type=\"int\",value=\
"4\"\},\{name=\"s\",arg=\"1\",type=\"char \\\*\",value=\"<unavailable>\"\},\{nam
e=\"array\",type=\"unsigned char \\\[2\\\]\"\},\{name=\"i\",type=\"int\",value=\
"<unavailable>\"\}\\\]" \ |
| 124 "-stack-list-variables --simple-values" |
| 125 mi_gdb_test "-stack-list-variables --skip-unavailable --simple-values" \ |
| 126 ".*\\^done,variables=\\\[\{name=\"j\",arg=\"1\",type=\"int\",value=\
"4\"\},\{name=\"array\",type=\"unsigned char \\\[2\\\]\"\}\\\]" \ |
| 127 "-stack-list-variables --skip-unavailable --simple-values" |
| 128 |
| 129 mi_gdb_test "-trace-find frame-number 1" \ |
| 130 ".*\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"1\",fr
ame=\{.*" \ |
| 131 "-trace-find frame-number 1" |
| 132 |
| 133 set pcnum 0 |
| 134 if [is_amd64_regs_target] { |
| 135 set pcnum 16 |
| 136 } elseif [is_x86_like_target] { |
| 137 set pcnum 8 |
| 138 } else { |
| 139 # Other ports support tracepoint should define the number |
| 140 # of its own pc register. |
| 141 } |
| 142 |
| 143 if { $pcnum != 0 } { |
| 144 global hex |
| 145 # Test that register 0 and PC are displayed, and register |
| 146 # 0 is unavailable. |
| 147 mi_gdb_test "-data-list-register-values x 0 ${pcnum}" \ |
| 148 ".*\\^done,register-values=\\\[\{number=\"0\",value=\"<unavailab
le>\"\},\{number=\"${pcnum}\",value=\"${hex}\"\}\\\]" \ |
| 149 "-data-list-register-values x" |
| 150 |
| 151 # Test that only available register PC is displayed. |
| 152 mi_gdb_test "-data-list-register-values --skip-unavailable x 0 ${pcn
um}" \ |
| 153 ".*\\^done,register-values=\\\[\{number=\"${pcnum}\",value=\"${h
ex}\"\}\\\]" \ |
| 154 "-data-list-register-values --skip-unavailable x" |
| 155 } |
| 156 |
| 157 # Don't issue command '-trace-find none' to return from |
| 158 # tfind mode (examining trace frames) on purpose, in order |
| 159 # to test that GDB is able to clear its tracing-related local state |
| 160 # in the next -target-select. |
| 161 # mi_gdb_test "-trace-find none" ".*\\^done,found=\"0\".*" "-trace-find
none" |
| 162 } |
| 163 } |
| 164 |
| 165 test_trace_unavailable "live" |
| 166 |
| 167 # Change target to ctf if GDB supports it. |
| 168 set msg "-target-select ctf" |
| 169 send_gdb "-target-select ctf ${tracefile}.ctf\n" |
| 170 gdb_expect { |
| 171 -re ".*\\^connected.*${mi_gdb_prompt}$" { |
| 172 # GDB supports ctf, do the test. |
| 173 test_trace_unavailable "ctf" |
| 174 } |
| 175 -re ".*\\^error,msg=\"Undefined target command.*${mi_gdb_prompt}$" { |
| 176 # GDB doesn't support ctf, skip the test. |
| 177 unsupported "gdb does not support ctf target" |
| 178 } |
| 179 -re ".*$mi_gdb_prompt$" { |
| 180 fail "$msg" |
| 181 } |
| 182 timeout { |
| 183 fail "$msg (timeout)" |
| 184 } |
| 185 } |
| 186 |
| 187 # Change target to tfile. |
| 188 mi_gdb_test "-target-select tfile ${tracefile}.tf" ".*\\^connected.*" \ |
| 189 "-target-select tfile" |
| 190 test_trace_unavailable "tfile" |
| 191 |
| 192 mi_gdb_exit |
OLD | NEW |