1# Copyright 2014-2023 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 testcase is for PR breakpoints/16889 17 18standard_testfile ".S" 19 20if { ![istarget "x86_64-*-*"] || ![is_lp64_target] } { 21 verbose "Skipping $testfile.exp" 22 return 23} 24 25if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { 26 return -1 27} 28 29# Helper procedure to go to probe NAME 30 31proc goto_probe { name } { 32 global decimal hex 33 34 gdb_test "break -pstap $name" "Breakpoint $decimal at $hex" 35 gdb_test "continue" "Breakpoint $decimal, main \\(\\) at .*\r\n.*STAP_PROBE1.*${name},.*\\)" 36} 37 38# Helper procedure to test the probe's argument 39 40proc test_probe_value { value reg_val } { 41 gdb_test "print \$_probe_argc" "= 1" 42 gdb_test "print \$_probe_arg0" "= $value" 43 gdb_test "print \$_probe_arg0 == *((unsigned int *) (${reg_val}))" "= 1" 44} 45 46proc test_probe_value_without_reg { value } { 47 gdb_test "print \$_probe_argc" "= 1" 48 gdb_test "print \$_probe_arg0" "= $value" 49} 50 51if { ![runto_main] } { 52 return -1 53} 54 55foreach probe_name [list "foo" "bar" "foo_prefix" "bar_prefix"] \ 56 probe_val [list "42" "42" "42" "42"] \ 57 probe_reg_val [list "\$rsp" "\$rbp - 8" "\$rsp" "\$rbp - 8"] { 58 with_test_prefix $probe_name { 59 goto_probe $probe_name 60 test_probe_value $probe_val $probe_reg_val 61 } 62} 63 64# Testing normal probes, with several prefixes. 65 66set normal_probes_names { } 67 68foreach bit [list 8 16 32 64] { 69 lappend normal_probes_names "uint${bit}_probe" 70 lappend normal_probes_names "int${bit}_probe" 71} 72 73foreach probe_name $normal_probes_names \ 74 probe_val [list 8 -8 16 -16 32 -32 64 -64] { 75 with_test_prefix $probe_name { 76 goto_probe $probe_name 77 test_probe_value_without_reg $probe_val 78 } 79} 80 81# Testing the fail probes. 82 83with_test_prefix "fail_probe" { 84 goto_probe "fail_probe" 85 gdb_test "print \$_probe_arg0" "warning: unrecognized bitness `-7' for probe `fail_probe'\r\nInvalid probe argument 0 -- probe has 0 arguments available" 86} 87 88with_test_prefix "fail2_probe" { 89 goto_probe "fail2_probe" 90 gdb_test "print \$_probe_arg0" "Unknown numeric token on expression `23-@\\\$16'." 91} 92