1*b725ae77Skettenis# Copyright 1998 Free Software Foundation, Inc. 2*b725ae77Skettenis# 3*b725ae77Skettenis# This program is free software; you can redistribute it and/or modify 4*b725ae77Skettenis# it under the terms of the GNU General Public License as published by 5*b725ae77Skettenis# the Free Software Foundation; either version 2 of the License, or 6*b725ae77Skettenis# (at your option) any later version. 7*b725ae77Skettenis# 8*b725ae77Skettenis# This program is distributed in the hope that it will be useful, 9*b725ae77Skettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of 10*b725ae77Skettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11*b725ae77Skettenis# GNU General Public License for more details. 12*b725ae77Skettenis# 13*b725ae77Skettenis# You should have received a copy of the GNU General Public License 14*b725ae77Skettenis# along with this program; if not, write to the Free Software 15*b725ae77Skettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 16*b725ae77Skettenis 17*b725ae77Skettenis# Please email any bugs, comments, and/or additions to this file to: 18*b725ae77Skettenis# bug-gdb@prep.ai.mit.edu 19*b725ae77Skettenis 20*b725ae77Skettenis# This file was written by Michael Snyder (msnyder@cygnus.com) 21*b725ae77Skettenis 22*b725ae77Skettenisload_lib "trace-support.exp"; 23*b725ae77Skettenis 24*b725ae77Skettenisif $tracelevel then { 25*b725ae77Skettenis strace $tracelevel 26*b725ae77Skettenis} 27*b725ae77Skettenis 28*b725ae77Skettenisset prms_id 0 29*b725ae77Skettenisset bug_id 0 30*b725ae77Skettenis 31*b725ae77Skettenisgdb_exit 32*b725ae77Skettenisgdb_start 33*b725ae77Skettenisif [istarget "m68k-*-elf"] then { 34*b725ae77Skettenis set srcfile gdb_c_test.c 35*b725ae77Skettenis set binfile [board_info target d490_binfile]; 36*b725ae77Skettenis} else { 37*b725ae77Skettenis set testfile "actions" 38*b725ae77Skettenis set srcfile ${testfile}.c 39*b725ae77Skettenis set binfile $objdir/$subdir/$testfile 40*b725ae77Skettenis if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ 41*b725ae77Skettenis executable {debug additional_flags=-w}] != "" } { 42*b725ae77Skettenis gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 43*b725ae77Skettenis } 44*b725ae77Skettenis} 45*b725ae77Skettenisgdb_reinitialize_dir $srcdir/$subdir 46*b725ae77Skettenis 47*b725ae77Skettenis# If testing on a remote host, download the source file. 48*b725ae77Skettenis# remote_download host $srcdir/$subdir/$srcfile 49*b725ae77Skettenis 50*b725ae77Skettenisgdb_file_cmd $binfile 51*b725ae77Skettenis 52*b725ae77Skettenis# define relative source line numbers: 53*b725ae77Skettenis# all subsequent line numbers are relative to this first one (baseline) 54*b725ae77Skettenisset baseline [gdb_find_recursion_test_baseline $srcfile]; 55*b725ae77Skettenisif { $baseline == -1 } then { 56*b725ae77Skettenis fail "Could not find gdb_recursion_test function" 57*b725ae77Skettenis return; 58*b725ae77Skettenis} 59*b725ae77Skettenis 60*b725ae77Skettenisset testline1 [expr $baseline + 1] 61*b725ae77Skettenisset testline2 [expr $baseline + 3] 62*b725ae77Skettenis 63*b725ae77Skettenis# 64*b725ae77Skettenis# test "help tracepoints" 65*b725ae77Skettenis# 66*b725ae77Skettenis 67*b725ae77Skettenisset helpcnt 0; 68*b725ae77Skettenissend_gdb "help tracepoints\n" 69*b725ae77Skettenisgdb_expect { 70*b725ae77Skettenis -re "Tracing of program execution without stopping the program." { 71*b725ae77Skettenis incr helpcnt; 72*b725ae77Skettenis exp_continue 73*b725ae77Skettenis } 74*b725ae77Skettenis -re "actions -- Specify the actions to be taken at a tracepoint" { 75*b725ae77Skettenis incr helpcnt; 76*b725ae77Skettenis exp_continue 77*b725ae77Skettenis } 78*b725ae77Skettenis -re "collect -- Specify one or more data items to be collected" { 79*b725ae77Skettenis incr helpcnt; 80*b725ae77Skettenis exp_continue 81*b725ae77Skettenis } 82*b725ae77Skettenis -re "delete tracepoints -- Delete specified tracepoints" { 83*b725ae77Skettenis incr helpcnt; 84*b725ae77Skettenis exp_continue 85*b725ae77Skettenis } 86*b725ae77Skettenis -re "end -- Ends a list of.*actions" { 87*b725ae77Skettenis incr helpcnt; 88*b725ae77Skettenis exp_continue 89*b725ae77Skettenis } 90*b725ae77Skettenis -re "info tracepoints -- Status of tracepoints" { 91*b725ae77Skettenis incr helpcnt; 92*b725ae77Skettenis exp_continue 93*b725ae77Skettenis } 94*b725ae77Skettenis -re "passcount -- Set the passcount for a tracepoint" { 95*b725ae77Skettenis incr helpcnt; 96*b725ae77Skettenis exp_continue 97*b725ae77Skettenis } 98*b725ae77Skettenis -re "save-tracepoints -- Save current tracepoint definitions" { 99*b725ae77Skettenis incr helpcnt; 100*b725ae77Skettenis exp_continue 101*b725ae77Skettenis } 102*b725ae77Skettenis -re "tdump -- Print everything collected at the current tracepoint" { 103*b725ae77Skettenis incr helpcnt; 104*b725ae77Skettenis exp_continue 105*b725ae77Skettenis } 106*b725ae77Skettenis -re "tfind -- Select a trace frame" { 107*b725ae77Skettenis incr helpcnt; 108*b725ae77Skettenis exp_continue 109*b725ae77Skettenis } 110*b725ae77Skettenis -re "tfind end -- Synonym for 'none'" { 111*b725ae77Skettenis incr helpcnt; 112*b725ae77Skettenis exp_continue 113*b725ae77Skettenis } 114*b725ae77Skettenis -re "tfind line -- Select a trace frame by line number" { 115*b725ae77Skettenis incr helpcnt; 116*b725ae77Skettenis exp_continue 117*b725ae77Skettenis } 118*b725ae77Skettenis -re "tfind none -- De-select any trace frame and resume 'live' debugging" { 119*b725ae77Skettenis incr helpcnt; 120*b725ae77Skettenis exp_continue 121*b725ae77Skettenis } 122*b725ae77Skettenis -re "tfind outside -- Select a trace frame whose PC is outside" { 123*b725ae77Skettenis incr helpcnt; 124*b725ae77Skettenis exp_continue 125*b725ae77Skettenis } 126*b725ae77Skettenis -re "tfind pc -- Select a trace frame by PC" { 127*b725ae77Skettenis incr helpcnt; 128*b725ae77Skettenis exp_continue 129*b725ae77Skettenis } 130*b725ae77Skettenis -re "tfind range -- Select a trace frame whose PC is in the given" { 131*b725ae77Skettenis incr helpcnt; 132*b725ae77Skettenis exp_continue 133*b725ae77Skettenis } 134*b725ae77Skettenis -re "tfind start -- Select the first trace frame in the trace buffer" { 135*b725ae77Skettenis incr helpcnt; 136*b725ae77Skettenis exp_continue 137*b725ae77Skettenis } 138*b725ae77Skettenis -re "tfind tracepoint -- Select a trace frame by tracepoint number" { 139*b725ae77Skettenis incr helpcnt; 140*b725ae77Skettenis exp_continue 141*b725ae77Skettenis } 142*b725ae77Skettenis -re "trace -- Set a tracepoint at a specified line or function or addr" { 143*b725ae77Skettenis incr helpcnt; 144*b725ae77Skettenis exp_continue 145*b725ae77Skettenis } 146*b725ae77Skettenis -re "tstart -- Start trace data collection" { 147*b725ae77Skettenis incr helpcnt; 148*b725ae77Skettenis exp_continue 149*b725ae77Skettenis } 150*b725ae77Skettenis -re "tstatus -- Display the status of the current trace data collection" { 151*b725ae77Skettenis incr helpcnt; 152*b725ae77Skettenis exp_continue 153*b725ae77Skettenis } 154*b725ae77Skettenis -re "tstop -- Stop trace data collection" { 155*b725ae77Skettenis incr helpcnt; 156*b725ae77Skettenis exp_continue 157*b725ae77Skettenis } 158*b725ae77Skettenis -re "while-stepping -- Specify single-stepping behavior at a tracepoint" { 159*b725ae77Skettenis incr helpcnt; 160*b725ae77Skettenis exp_continue 161*b725ae77Skettenis } 162*b725ae77Skettenis -re ".*$gdb_prompt $" { 163*b725ae77Skettenis if { $helpcnt == 21 } { 164*b725ae77Skettenis pass "1.0: help tracepoints" 165*b725ae77Skettenis } else { 166*b725ae77Skettenis warning "$helpcnt"; 167*b725ae77Skettenis fail "1.0: help tracepoints" 168*b725ae77Skettenis } 169*b725ae77Skettenis } 170*b725ae77Skettenis} 171*b725ae77Skettenis 172*b725ae77Skettenis# 173*b725ae77Skettenis# test trace command: 174*b725ae77Skettenis# 175*b725ae77Skettenis 176*b725ae77Skettenis# 1.1 trace source line 177*b725ae77Skettenisgdb_delete_tracepoints 178*b725ae77Skettenisgdb_test "trace $srcfile:$testline2" \ 179*b725ae77Skettenis "Tracepoint $decimal at $hex: file.*$srcfile, line $testline2." \ 180*b725ae77Skettenis "1.1a: set tracepoint at sourceline" 181*b725ae77Skettenisgdb_test "info trace" "in gdb_recursion_test.*$srcfile:$testline2" \ 182*b725ae77Skettenis "1.1b: trace sourcefile:line" 183*b725ae77Skettenis 184*b725ae77Skettenis# 1.2 trace invalid source line 185*b725ae77Skettenisgdb_delete_tracepoints 186*b725ae77Skettenisgdb_test "trace $srcfile:99999" "No line 99999 in file \".*$srcfile\"." \ 187*b725ae77Skettenis "1.2a: trace invalid line in sourcefile" 188*b725ae77Skettenisgdb_test "info trace" "No tracepoints.*" \ 189*b725ae77Skettenis "1.2b: reject invalid line in srcfile" 190*b725ae77Skettenis 191*b725ae77Skettenis# 1.3 trace line in invalid source file 192*b725ae77Skettenisgdb_delete_tracepoints 193*b725ae77Skettenisgdb_test "trace NoSuChFiLe.c:1" "No source file named NoSuChFiLe.c." \ 194*b725ae77Skettenis "1.3a: trace invalid source file" 195*b725ae77Skettenisgdb_test "info trace" "No tracepoints.*" \ 196*b725ae77Skettenis "1.3b: reject invalid srcfile" 197*b725ae77Skettenis 198*b725ae77Skettenis# 1.4 trace function by name 199*b725ae77Skettenisgdb_delete_tracepoints 200*b725ae77Skettenisgdb_test "trace gdb_recursion_test" \ 201*b725ae77Skettenis "Tracepoint $decimal at $hex: file.*$srcfile, line $testline1." \ 202*b725ae77Skettenis "1.4a: trace function by name" 203*b725ae77Skettenisgdb_test "info trace" "in gdb_recursion_test.*$srcfile:$testline1" \ 204*b725ae77Skettenis "1.4b: trace function by name" 205*b725ae77Skettenis 206*b725ae77Skettenis# 1.5 trace non-existant function 207*b725ae77Skettenisgdb_delete_tracepoints 208*b725ae77Skettenisgdb_test "trace NoSuChFuNc" "Function \"NoSuChFuNc\" not defined." \ 209*b725ae77Skettenis "1.5a: trace invalid function" 210*b725ae77Skettenisgdb_test "info trace" "No tracepoints.*" \ 211*b725ae77Skettenis "1.5b: reject invalid srcfile" 212*b725ae77Skettenis 213*b725ae77Skettenis# 1.6 trace at a specific address 214*b725ae77Skettenis# Collect the address of "gdb_asm_test", and use that. 215*b725ae77Skettenissend_gdb "print gdb_asm_test\n" 216*b725ae77Skettenisgdb_expect { 217*b725ae77Skettenis -re "\[$\]\[0-9\].*0x(\[0-9a-fA-F\]+).*$gdb_prompt $" { 218*b725ae77Skettenis set asm_test_addr $expect_out(1,string) 219*b725ae77Skettenis } 220*b725ae77Skettenis timeout { } 221*b725ae77Skettenis} 222*b725ae77Skettenis 223*b725ae77Skettenisgdb_delete_tracepoints 224*b725ae77Skettenisgdb_test "trace \*0x$asm_test_addr" \ 225*b725ae77Skettenis "Tracepoint $decimal at .*$asm_test_addr.*" \ 226*b725ae77Skettenis "1.6a: trace at specific address" 227*b725ae77Skettenisgdb_test "info trace" "$asm_test_addr.*gdb_asm_test.*" \ 228*b725ae77Skettenis "1.6b: verify trace at specific address" 229*b725ae77Skettenis 230*b725ae77Skettenis# 1.7 trace at function's exact address 231*b725ae77Skettenis# Collect the address of the function for comparison 232*b725ae77Skettenissend_gdb "print gdb_recursion_test\n" 233*b725ae77Skettenisgdb_expect { 234*b725ae77Skettenis -re "\[$\]\[0-9\].*0x(\[0-9a-fA-F\]+).*$gdb_prompt $" { 235*b725ae77Skettenis set c_test_addr $expect_out(1,string) 236*b725ae77Skettenis } 237*b725ae77Skettenis timeout { } 238*b725ae77Skettenis} 239*b725ae77Skettenis 240*b725ae77Skettenisgdb_delete_tracepoints 241*b725ae77Skettenisgdb_test "trace \*gdb_recursion_test" \ 242*b725ae77Skettenis "Tracepoint $decimal at .*$c_test_addr.*" \ 243*b725ae77Skettenis "1.7a: trace at function label (before prologue)" 244*b725ae77Skettenisgdb_test "info trace" "$c_test_addr.*in gdb_recursion_test.*:$baseline" \ 245*b725ae77Skettenis "1.7b: verify trace at specific address" 246*b725ae77Skettenis 247*b725ae77Skettenis# 1.8 trace at invalid address 248*b725ae77Skettenis# no address is invalid 249*b725ae77Skettenis 250*b725ae77Skettenis# 1.9 trace no arguments 251*b725ae77Skettenisgdb_test "trace" "trace command requires an argument" \ 252*b725ae77Skettenis "1.9: trace <no arguments>" 253*b725ae77Skettenis 254*b725ae77Skettenis# 1.10 set large number of tracepoints 255*b725ae77Skettenis# deferred to limits test module 256*b725ae77Skettenis 257*b725ae77Skettenis# 1.11 tracepoint conditions 258*b725ae77Skettenis# conditions on tracepoints not implemented 259*b725ae77Skettenis 260*b725ae77Skettenis# 1.12 set tracepoint in prologue 261*b725ae77Skettenis# [see tfind.exp] 262*b725ae77Skettenis 263*b725ae77Skettenis# 1.13 trace on recursion 264*b725ae77Skettenis# interesting only in "live" session: see backtrace.exp for live test. 265*b725ae77Skettenis 266*b725ae77Skettenis# 1.14 help trace 267*b725ae77Skettenisgdb_test "help trace" "Set a tracepoint at .*" "1.14: help trace" 268*b725ae77Skettenis 269*b725ae77Skettenis 270