1# Copyright 2011-2020 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 16load_lib dwarf.exp 17 18standard_testfile .S 19set test "clztest" 20 21# This test can only be run on targets which support DWARF-2 and use gas. 22if ![dwarf2_support] { 23 return 0 24} 25 26# This test can only be run on x86-64 targets. 27if {![istarget x86_64-*] || ![is_lp64_target]} { 28 return 0 29} 30 31if { [prepare_for_testing "failed to prepare" "${test}" ${test}.S \ 32 {nodebug nopie additional_flags=-nostdlib}] } { 33 return -1 34} 35 36if ![runto_main] { 37 return -1 38} 39 40# Initialize tests to be an empty array. 41unset -nocomplain tests 42array set tests {} 43 44proc gdb-test {line var value} { 45 global tests 46 47 lappend tests($line) [list $var $value 0] 48} 49 50proc xfail-gdb-test {line var value} { 51 global tests 52 53 lappend tests($line) [list $var $value 1] 54} 55 56proc scan_gdb_tests {} { 57 global srcdir subdir test 58 59 set file "$srcdir/$subdir/$test.c" 60 61 set fd [open "$file"] 62 while {![eof $fd]} { 63 set line [gets $fd] 64 if {! [regexp "\{ (gdb-test .+) \} \}" $line ignore test_cmd]} { 65 continue 66 } 67 68 eval $test_cmd 69 } 70 close $fd 71} 72 73scan_gdb_tests 74 75foreach line [lsort [array names tests]] { 76 gdb_test "break ${test}.c:$line" "Breakpoint .*" \ 77 "set breakpoint at ${test}.c:$line" 78 gdb_continue_to_breakpoint "continue to ${test}.c:$line" 79 80 foreach testvec $tests($line) { 81 set var [lindex $testvec 0] 82 set value [lindex $testvec 1] 83 set should_xfail [lindex $testvec 2] 84 85 if {$should_xfail} { 86 setup_xfail *-*-* 87 } 88 89 gdb_test "print $var" \ 90 " = $value" \ 91 "check value of $var at ${test}.c:$line" 92 } 93} 94