blob: e958b5fbf61b73e7c8080bbb9ec8fcb5004664c4 [file] [log] [blame]
if $tracelevel {
strace $tracelevel
}
# Test single-stepping zero-overhead-loops and delay slots
if ![istarget "arc-*-*"] then {
verbose "Skipping ARC single-step tests."
return
}
if ![istarget "*linux*"] then {
verbose "Skipping ARC linux single-step tests."
return
}
set testfile "arc-step"
set srcfile ${testfile}.s
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable ""] != "" } {
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
#
# Run to `main' where we begin our tests.
#
gdb_test "adv _main" ".* in _main .*" "advance to _main"
gdb_test "stepi" ".* Lmov .*" "step mov instruction"
gdb_test "p \$r0" ".*= 1" "r0 value after mov instruction"
gdb_test "stepi" ".* Lmov_s .*" "step mov_s instruction"
gdb_test "p \$r0" ".*= 2" "r0 value after mov_s instruction"
gdb_test "stepi" ".* Lb .*" "step b instruction"
gdb_test "stepi" ".* Lb_s .*" "step b_s instruction"
gdb_test "stepi" ".* Lbdotd .*" "step b.d instruction"
gdb_test "p \$r0" ".*= 5" "r0 value after b.d instruction"
gdb_test "stepi" ".* Lbl .*" "step bl instruction"
gdb_test "stepi" ".* Lj_sdotd .*" "step j_s.d \[blink\] instruction"
gdb_test "p \$r0" ".*= 6" "r0 value after j_s.d \[blink\] instruction"
gdb_test "stepi" ".* Lj .*" "step j instruction"
gdb_test "stepi" ".*" "step mov instruction"
gdb_test "stepi" ".* ZOLstart .*" "step lp instruction"
gdb_test "p \$lp_count" ".*= 3" "lp_count value"
gdb_test "p \$lp_end - \$lp_start" \
".* = 8" "lp_end - lp_start == 8"
gdb_test "p \$r0" ".* = 6" "r0 value before loop"
# step thru the loop, checking the value of r0
# first iteration
gdb_test "stepi" ".* ZOLmiddle .*" "step add instruction (inside ZOL)"
gdb_test "p \$r0" ".* = 7" "r0 value after 1 iteration"
gdb_test "stepi" ".* ZOLstart .*" "step across end of ZOL"
# second iteration
gdb_test "stepi" ".* ZOLmiddle .*" "step add instruction (inside ZOL)"
gdb_test "p \$r0" ".* = 8" "r0 value after 1 iteration"
gdb_test "stepi" ".* ZOLstart .*" "step across end of ZOL"
# last iteration
gdb_test "stepi" ".* ZOLmiddle .*" "step add instruction (inside ZOL)"
gdb_test "p \$r0" ".* = 9" "r0 value after 1 iteration"
gdb_test "stepi" ".* ZOLend .*" "step out of end of ZOL"
# exit(r0)
gdb_test "continue" ".*Program exited.*011.*" \
"value of r0 on exit"