1# Copyright 2012-2016 Free Software Foundation, Inc. 2# This program is free software; you can redistribute it and/or modify 3# it under the terms of the GNU General Public License as published by 4# the Free Software Foundation; either version 3 of the License, or 5# (at your option) any later version. 6# 7# This program is distributed in the hope that it will be useful, 8# but WITHOUT ANY WARRANTY; without even the implied warranty of 9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10# GNU General Public License for more details. 11# 12# You should have received a copy of the GNU General Public License 13# along with this program. If not, see <http://www.gnu.org/licenses/>. 14 15load_lib "trace-support.exp" 16 17standard_testfile 18set executable $testfile 19set expfile $testfile.exp 20 21# Some targets have leading underscores on assembly symbols. 22set additional_flags [gdb_target_symbol_prefix_flags] 23 24if { [gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile \ 25 executable [list debug $additional_flags] ] != "" } { 26 untested "Couldn't compile test program" 27 return -1 28} 29 30clean_restart ${testfile} 31 32if ![runto_main] { 33 fail "Can't run to main to check for trace support" 34 return -1 35} 36 37if ![gdb_target_supports_trace] { 38 unsupported "target does not support trace" 39 return -1 40} 41 42proc step_over_tracepoint { trace_type } \ 43{with_test_prefix "step over $trace_type" \ 44{ 45 global executable 46 global hex 47 48 # Start with a fresh gdb. 49 clean_restart ${executable} 50 # Make sure inferior is running in all-stop mode. 51 gdb_test_no_output "set non-stop 0" 52 if ![runto_main] { 53 fail "Can't run to main" 54 return -1 55 } 56 57 gdb_test "break set_point1" "Breakpoint \[0-9\] at $hex: file.*" 58 gdb_test "continue" "Continuing\\.\[ \r\n\]+.*Breakpoint.*" "continue to set_point1" 59 60 gdb_test "${trace_type} *\$pc" "\(Fast t|T\)racepoint \[0-9\] at $hex: file.*" 61 gdb_test_no_output "tstart" 62 63 gdb_test "stepi" ".*" 64 gdb_test_no_output "tstop" 65}} 66 67# Set breakpoint and tracepoint at the same address. 68 69proc break_trace_same_addr { trace_type option } \ 70{with_test_prefix "$trace_type $option" \ 71{ 72 global executable 73 global hex 74 75 # Start with a fresh gdb. 76 clean_restart ${executable} 77 if ![runto_main] { 78 fail "Can't run to main" 79 return -1 80 } 81 82 gdb_test_no_output "set breakpoint always-inserted ${option}" 83 84 gdb_test "break end" "Breakpoint \[0-9\] at $hex: file.*" 85 86 gdb_test "break set_point1" "Breakpoint \[0-9\] at $hex: file.*" 87 gdb_test "${trace_type} set_point1" "\(Fast t|T\)racepoint \[0-9\] at $hex: file.*" 88 89 gdb_test_no_output "tstart" 90 91 gdb_test "continue" "Continuing\\.\[ \r\n\]+.*Breakpoint.*" "continue to set_point1 1" 92 gdb_test "continue" "Continuing\\.\[ \r\n\]+.*Breakpoint.*" "continue to set_point1 2" 93 94 gdb_test "continue" "Continuing\\.\[ \r\n\]+.*Breakpoint.*" "continue to end" 95 gdb_test_no_output "tstop" 96 97 gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0" 98 gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1" 99 100 gdb_test "tfind" "Target failed to find requested trace frame\\..*" 101}} 102 103foreach break_always_inserted { "on" "off" } { 104 break_trace_same_addr "trace" ${break_always_inserted} 105} 106 107step_over_tracepoint "trace" 108 109set libipa [get_in_proc_agent] 110set remote_libipa [gdb_load_shlib $libipa] 111 112# Compile test case again with IPA. 113if { [gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile \ 114 executable [list debug $additional_flags shlib=$libipa] ] != "" } { 115 untested "failed to compile ftrace tests" 116 return -1 117} 118clean_restart ${executable} 119 120if ![runto_main] { 121 fail "Can't run to main for ftrace tests" 122 return 0 123} 124 125gdb_reinitialize_dir $srcdir/$subdir 126if { [gdb_test "info sharedlibrary" ".*${remote_libipa}.*" "IPA loaded"] != 0 } { 127 untested "Could not find IPA lib loaded" 128} else { 129 foreach break_always_inserted { "on" "off" } { 130 break_trace_same_addr "ftrace" ${break_always_inserted} 131 } 132 133 step_over_tracepoint "ftrace" 134} 135