1# Copyright 1998-2017 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# This file was written by Michael Snyder (msnyder@cygnus.com) 17 18load_lib "trace-support.exp" 19 20 21gdb_exit 22gdb_start 23standard_testfile actions.c 24if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ 25 executable {debug nowarnings}] != "" } { 26 untested "failed to compile" 27 return -1 28} 29gdb_reinitialize_dir $srcdir/$subdir 30 31# If testing on a remote host, download the source file. 32# remote_download host $srcdir/$subdir/$srcfile 33 34gdb_file_cmd $binfile 35 36# define relative source line numbers: 37# all subsequent line numbers are relative to this first one (baseline) 38set baseline [gdb_find_recursion_test_baseline $srcfile] 39if { $baseline == -1 } then { 40 fail "could not find gdb_recursion_test function" 41 return 42} 43 44set testline1 [expr $baseline + 1] 45set testline2 [expr $baseline + 3] 46 47# 48# test "help tracepoints" 49# 50 51set helpcnt 0 52test_class_help "tracepoints" { 53 "Tracing of program execution without stopping the program\.[\r\n\]+" 54} "1.0: help tracepoints" 55 56# 57# test trace command: 58# 59 60# 1.1 trace source line 61gdb_delete_tracepoints 62gdb_test "trace $srcfile:$testline2" \ 63 "Tracepoint $decimal at $hex: file.*$srcfile, line $testline2." \ 64 "1.1a: set tracepoint at sourceline" 65gdb_test "info trace" "in gdb_recursion_test.*$srcfile:$testline2. 66\[\t \]+not installed on target." \ 67 "1.1b: trace sourcefile:line" 68 69# 1.2 trace invalid source line 70gdb_delete_tracepoints 71gdb_test_no_output "set breakpoint pending off" 72gdb_test "trace $srcfile:99999" "No line 99999 in file \".*$srcfile\"." \ 73 "1.2a: trace invalid line in sourcefile" 74gdb_test "info trace" "No tracepoints.*" \ 75 "1.2b: reject invalid line in srcfile" 76 77# 1.3 trace line in invalid source file 78gdb_delete_tracepoints 79gdb_test "trace NoSuChFiLe.c:1" "No source file named NoSuChFiLe.c." \ 80 "1.3a: trace invalid source file" 81gdb_test "info trace" "No tracepoints.*" \ 82 "1.3b: reject invalid srcfile" 83 84# 1.4 trace function by name 85gdb_delete_tracepoints 86gdb_test "trace gdb_recursion_test" \ 87 "Tracepoint $decimal at $hex: file.*$srcfile, line $testline1." \ 88 "1.4a: trace function by name" 89gdb_test "info trace" "in gdb_recursion_test.*$srcfile:$testline1. 90\[\t \]+not installed on target." \ 91 "1.4b: trace function by name" 92 93# 1.5 trace non-existant function 94gdb_delete_tracepoints 95gdb_test "trace NoSuChFuNc" "Function \"NoSuChFuNc\" not defined." \ 96 "1.5a: trace invalid function" 97gdb_test "info trace" "No tracepoints.*" \ 98 "1.5b: reject invalid srcfile" 99 100# 1.6 trace at a specific address 101# Collect the address of "gdb_asm_test", and use that. 102gdb_test_multiple "print gdb_asm_test" "" { 103 -re "\[$\]\[0-9\].*0x(\[0-9a-fA-F\]+).*$gdb_prompt $" { 104 set asm_test_addr $expect_out(1,string) 105 } 106} 107 108gdb_delete_tracepoints 109gdb_test "trace \*0x$asm_test_addr" \ 110 "Tracepoint $decimal at .*$asm_test_addr.*" \ 111 "1.6a: trace at specific address" 112gdb_test "info trace" "$asm_test_addr.*gdb_asm_test.*" \ 113 "1.6b: verify trace at specific address" 114 115# 1.7 trace at function's exact address 116# Collect the address of the function for comparison 117gdb_test_multiple "print gdb_recursion_test" "" { 118 -re "\[$\]\[0-9\].*0x(\[0-9a-fA-F\]+).*$gdb_prompt $" { 119 set c_test_addr $expect_out(1,string) 120 } 121} 122 123gdb_delete_tracepoints 124gdb_test "trace \*gdb_recursion_test" \ 125 "Tracepoint $decimal at .*$c_test_addr.*" \ 126 "1.7a: trace at function label (before prologue)" 127gdb_test "info trace" "$c_test_addr.*in gdb_recursion_test.*:$baseline. 128\[\t \]+not installed on target." \ 129 "1.7b: verify trace at specific address" 130 131# 1.8 trace at invalid address 132# no address is invalid 133 134# 1.9 trace no arguments 135gdb_test "trace" "No default breakpoint address now." \ 136 "1.9: trace <no arguments>" 137 138# 1.10 there's no 1.10. 139 140# 1.11 tracepoint conditions 141gdb_delete_tracepoints 142gdb_test "trace gdb_recursion_test if q1 > 0" \ 143 "Tracepoint $decimal at $hex: file.*$srcfile, line $testline1." \ 144 "1.11a: conditional tracepoint" 145gdb_test "info trace" "in gdb_recursion_test.*$srcfile:$testline1. 146\[\t \]+trace only if q1 > 0. 147\[\t \]+not installed on target." \ 148 "1.11b: verify conditional tracepoint" 149 150# 1.12 set tracepoint in prologue 151# [see tfind.exp] 152 153# 1.13 trace on recursion 154# interesting only in "live" session: see backtrace.exp for live test. 155 156# 1.14 help trace 157gdb_test "help trace" "Set a tracepoint at .*" "1.14: help trace" 158 159# 1.15 ftrace 160 161gdb_delete_tracepoints 162 163# Acceptance vs rejection of a location are target-specific, so allow both. 164gdb_test_multiple "ftrace gdb_recursion_test" "set a fast tracepoint" { 165 -re "Fast tracepoint $decimal at $hex: file.*$srcfile, line $testline1.*$gdb_prompt $" { 166 pass "set a fast tracepoint" 167 } 168 -re ".*May not have a fast tracepoint at $hex.*$gdb_prompt $" { 169 pass "declined to set a fast tracepoint" 170 } 171} 172