binutils-gdb/gdb/testsuite/gdb.arch/mips-octeon-bbit.exp
Andrew Pinski f94363d720 2012-08-19 Andrew Pinski <apinski@cavium.com>
* mips-tdep.c (is_octeon): New function.
	(is_octeon_bbit_op): New function.
	(mips32_next_pc): Handle Octeon's bbit instructions.
	(mips32_instruction_has_delay_slot): Likewise.

012-08-19  Andrew Pinski  <apinski@cavium.com>

        * gdb.arch/mips-octeon-bbit.c: New file.
        * gdb.arch/mips-octeon-bbit.exp: New Test.
2012-08-19 22:22:49 +00:00

113 lines
2.7 KiB
Plaintext

# Copyright 2007 Cavium Networks, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Test single-step on bbit.
if ![istarget "*octeon*"] {
return -1
}
proc current_insn {} {
global gdb_prompt
send_gdb "x/i \$pc\n"
gdb_expect {
-re ".*?:\\s+\(.*?\)\\s*$gdb_prompt $" {
set insn $expect_out(1,string)
return $insn
}
}
return ""
}
proc single_step {} {
global gdb_prompt
send_gdb "si\n"
gdb_expect {
-re "$gdb_prompt \$" {
return 1
}
}
return 0;
}
proc single_step_until { match } {
global timeout
set insn [current_insn]
set start [timestamp]
while { $insn != "" && [timestamp] - $start < 3*$timeout } {
if [regexp $match $insn] {
return 1
}
if {![single_step]} {
return 0
}
set insn [current_insn]
}
return 0;
}
proc test_bbit { name taken } {
if {![single_step_until "bbit"]} {
fail "$name single-step until bbit"
return
}
pass "$name single-step until bbit"
gdb_test "si" "" "$name single-step on bbit"
if [regexp "li\\s+\[sv\]0,$taken" [current_insn]] {
pass "$name check insn after bbit"
} else {
send_log "expected: li\\s+\[sv\]0,$taken found [current_insn]\n"
fail "$name check insn after bbit"
}
}
set testfile "mips-octeon-bbit"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
{debug nowarnings}] != "" } {
fail "compilation"
return
}
pass "compilation"
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
# Native needs run.
runto_main
set tests ""
foreach n [list "0_10" "0_36" "1_20" "1_49"] {
lappend tests "bbit_is_taken_$n"
}
foreach func $tests {
gdb_test "break $func" "Breakpoint.*at.*" "set breakpoint on $func"
}
foreach func $tests {
gdb_test "continue" "Continuing.*Breakpoint.*$func.*" "hit $func first"
test_bbit "$func branch taken" 1
gdb_test "continue" "Continuing.*Breakpoint.*$func.*" "hit $func second"
test_bbit "$func branch not taken" 0
}