]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/testsuite/gdb.arch/mips-octeon-bbit.exp
850b1544a0aa6966bed7c97fe946f06bb9bef705
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.arch / mips-octeon-bbit.exp
1 # Copyright (C) 2012-2013 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 # Test single-step on bbit.
17
18 if ![istarget "*octeon*"] {
19 return -1
20 }
21
22 proc current_insn {} {
23 global gdb_prompt
24
25 send_gdb "x/i \$pc\n"
26 gdb_expect {
27 -re ".*?:\\s+\(.*?\)\\s*$gdb_prompt $" {
28 set insn $expect_out(1,string)
29 return $insn
30 }
31 }
32 return ""
33 }
34
35 proc single_step {} {
36 global gdb_prompt
37
38 send_gdb "si\n"
39 gdb_expect {
40 -re "$gdb_prompt \$" {
41 return 1
42 }
43 }
44 return 0
45 }
46
47 proc single_step_until { match } {
48 global timeout
49
50 set insn [current_insn]
51 set start [timestamp]
52 while { $insn != "" && [timestamp] - $start < 3*$timeout } {
53 if [regexp $match $insn] {
54 return 1
55 }
56 if {![single_step]} {
57 return 0
58 }
59 set insn [current_insn]
60 }
61 return 0
62 }
63
64 proc test_bbit { name taken } {
65 if {![single_step_until "bbit"]} {
66 fail "$name single-step until bbit"
67 return
68 }
69 pass "$name single-step until bbit"
70 gdb_test "si" "" "$name single-step on bbit"
71 if [regexp "li\\s+\[sv\]0,$taken" [current_insn]] {
72 pass "$name check insn after bbit"
73 } else {
74 send_log "expected: li\\s+\[sv\]0,$taken found [current_insn]\n"
75 fail "$name check insn after bbit"
76 }
77 }
78
79 set testfile "mips-octeon-bbit"
80 set srcfile ${testfile}.c
81 set binfile ${objdir}/${subdir}/${testfile}
82
83 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
84 {debug nowarnings}] != "" } {
85 fail "compilation"
86 return
87 }
88
89 pass "compilation"
90
91 gdb_exit
92 gdb_start
93 gdb_reinitialize_dir $srcdir/$subdir
94 gdb_load ${binfile}
95 # Native needs run.
96 runto_main
97
98 set tests ""
99 foreach n [list "0_10" "0_36" "1_20" "1_49"] {
100 lappend tests "bbit_is_taken_$n"
101 }
102 foreach func $tests {
103 gdb_test "break $func" "Breakpoint.*at.*" "set breakpoint on $func"
104 }
105
106 foreach func $tests {
107 gdb_test "continue" "Continuing.*Breakpoint.*$func.*" "hit $func first"
108 test_bbit "$func branch taken" 1
109 gdb_test "continue" "Continuing.*Breakpoint.*$func.*" "hit $func second"
110 test_bbit "$func branch not taken" 0
111 }