mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
202054aea6
This patch adds a file with the ISA 3.1 check. The ISA 3.1 check is added to the test to ensure the test is only run on ISA 3.1 or newer. gdb/testsuite/ChangeLog 2021-06-25 Carl Love <cel@us.ibm.com> * gdb.arch/powerpc-plxv-norel.exp: Add call to skip_power_isa_3_1_tests. * lib/gdb.exp(skip_power_isa_3_1_tests): New gdb_caching_proc test.
132 lines
3.8 KiB
Plaintext
132 lines
3.8 KiB
Plaintext
# Copyright 2021 Free Software Foundation, 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
|
|
# Test to see if gdb is properly single stepping over the
|
|
# displaced plxv instruction.
|
|
|
|
if { ![istarget powerpc*-*] || [skip_power_isa_3_1_tests] } {
|
|
verbose "Skipping powerpc ISA 3.1 plxv test."
|
|
return
|
|
}
|
|
|
|
set retval 0
|
|
|
|
standard_testfile .s
|
|
|
|
if { [prepare_for_testing "failed to prepare" $testfile "$srcfile" \
|
|
{debug quiet}] } {
|
|
return -1
|
|
}
|
|
|
|
gdb_test "set radix 0b10000"
|
|
gdb_test "set debug displaced"
|
|
|
|
if ![runto_main] then {
|
|
return
|
|
}
|
|
|
|
gdb_test "set debug displaced on"
|
|
|
|
# Proc to extract the uint128 hex value from the output of
|
|
# a print vector statement.
|
|
proc get_vector_hexadecimal_valueof { exp default {test ""} } {
|
|
set val "0x0000"
|
|
global gdb_prompt
|
|
if {$test == ""} {
|
|
set test "get vector_hexadecimal valueof \"${exp}\""
|
|
}
|
|
gdb_test_multiple "print $${exp}.uint128" $test {
|
|
-re -wrap "\\$\[0-9\]* = (0x\[0-9a-zA-Z\]+).*" {
|
|
set val $expect_out(1,string)
|
|
pass "$test"
|
|
}
|
|
-re -wrap ".*Illegal instruction.* $" {
|
|
fail "Illegal instruction on print."
|
|
set val 0xffff
|
|
}
|
|
}
|
|
return ${val}
|
|
}
|
|
|
|
# Proc to do a single-step, and ensure we gently handle
|
|
# an illegal instruction situation.
|
|
proc stepi_over_instruction { xyz } {
|
|
global gdb_prompt
|
|
gdb_test_multiple "stepi" "${xyz} " {
|
|
-re -wrap ".*Illegal instruction.*" {
|
|
fail "Illegal instruction on single step."
|
|
return
|
|
}
|
|
-re -wrap ".*" {
|
|
pass "stepi ${xyz}"
|
|
}
|
|
}
|
|
}
|
|
|
|
set check_pc [get_hexadecimal_valueof "\$pc" "default0"]
|
|
|
|
# set some breakpoints on the instructions below main().
|
|
gdb_test "disas /r main"
|
|
set bp1 *$check_pc+4
|
|
set bp2 *$check_pc+0d12
|
|
set bp3 *$check_pc+0d20
|
|
set bp4 *$check_pc+0d28
|
|
gdb_breakpoint $bp1
|
|
gdb_breakpoint $bp2
|
|
gdb_breakpoint $bp3
|
|
gdb_breakpoint $bp4
|
|
|
|
# single-step through the plxv instructions, and retrieve the
|
|
# register values as we proceed.
|
|
|
|
stepi_over_instruction "stepi over NOP"
|
|
stepi_over_instruction "stepi over lnia"
|
|
stepi_over_instruction "stepi over addi"
|
|
|
|
stepi_over_instruction "stepi over vs4 assignment"
|
|
set check_vs4 [get_vector_hexadecimal_valueof "vs4" "default0"]
|
|
|
|
stepi_over_instruction "stepi over vs5 assignment"
|
|
set check_vs5 [get_vector_hexadecimal_valueof "vs5" "default0"]
|
|
|
|
stepi_over_instruction "stepi over vs6 assignment"
|
|
set check_vs6 [get_vector_hexadecimal_valueof "vs6" "default0"]
|
|
|
|
stepi_over_instruction "stepi over vs7 assignment"
|
|
set check_vs7 [get_vector_hexadecimal_valueof "vs7" "default0"]
|
|
|
|
set vs4_expected 0xa5b5c5d5a4b4c4d4a3b3c3d3a2b2c2d2
|
|
set vs5_expected 0xa7b7c7d7a6b6c6d6a5b5c5d5a4b4c4d4
|
|
set vs6_expected 0xa9b9c9d9a8b8c8d8a7b7c7d7a6b6c6d6
|
|
set vs7_expected 0xabbbcbdbaabacadaa9b9c9d9a8b8c8d8
|
|
|
|
if [expr $check_vs4 != $vs4_expected] {
|
|
fail "unexpected value vs4; actual:$check_vs4 expected:$vs4_expected"
|
|
}
|
|
if [expr $check_vs5 != $vs5_expected ] {
|
|
fail "unexpected value vs5; actual:$check_vs5 expected:$vs5_expected"
|
|
}
|
|
if [expr $check_vs6 != $vs6_expected ] {
|
|
fail "unexpected value vs6; actual:$check_vs6 expected:$vs6_expected"
|
|
}
|
|
if [expr $check_vs7 != $vs7_expected ] {
|
|
fail "unexpected value vs7; actual:$check_vs7 expected:$vs7_expected"
|
|
}
|
|
|
|
gdb_test "info break"
|
|
gdb_test "info register vs4 vs5 vs6 vs7 "
|
|
gdb_test "disas main #2"
|
|
|