binutils-gdb/gdb/testsuite/gdb.arch/powerpc-vsx-gcore.exp
Pedro Franco de Carvalho 2c3305f6b0 [PowerPC] Fix VSX registers in linux core files
The functions used by the VSX regset to collect and supply registers
from core files where incorrect. This patch changes the regset to use
the standard regset collect/supply functions to fix this. The native
target is also changed to use the same regset.

gdb/ChangeLog:
2018-05-22  Pedro Franco de Carvalho  <pedromfc@linux.vnet.ibm.com>

	* ppc-linux-tdep.c (ppc_linux_vsxregset): New function.
	(ppc32_linux_vsxregmap): New global.
	(ppc32_linux_vsxregset): Initialize with ppc32_linux_vsxregmap,
	regcache_supply_regset, and regcache_collect_regset.
	* ppc-linux-tdep.h (ppc_linux_vsxregset): Declare.
	* ppc-linux-nat.c (supply_vsxregset, fill_vsxregset): Remove.
	(fetch_vsx_register, store_vsx_register): Remove.
	(fetch_vsx_registers): Add regno parameter. Get regset using
	ppc_linux_vsxregset. Use regset to supply registers.
	(store_vsx_registers): Add regno parameter. Get regset using
	ppc_linux_vsxregset. Use regset to collect registers.
	(fetch_register): Call fetch_vsx_registers instead of
	fetch_vsx_register.
	(store_register): Call store_vsx_registers instead of
	store_vsx_register.
	(fetch_ppc_registers): Call fetch_vsx_registers with -1 for the
	new regno parameter.
	(store_ppc_registers): Call store_vsx_registers with -1 for the
	new regno parameter.
	* rs6000-tdep.c (ppc_vsx_support_p, ppc_supply_vsxreget)
	(ppc_collect_vsxregset): Remove.

gdb/testsuite/ChangeLog:
2018-05-22  Pedro Franco de Carvalho  <pedromfc@linux.vnet.ibm.com>

	* gdb.arch/powerpc-vsx-gcore.exp: New file.
2018-05-22 11:52:03 -03:00

91 lines
2.1 KiB
Plaintext

# Copyright (C) 2018 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/>.
# This file is part of the gdb testsuite.
# This test checks that generating and loading a core file preserves
# the correct VSX register state.
if {![istarget "powerpc*-*-linux*"] || [skip_vsx_tests]} then {
verbose "Skipping PowerPC test for corefiles with VSX registers."
return
}
standard_testfile .c
set gen_src [standard_output_file $srcfile]
gdb_produce_source $gen_src {
int main() {
return 0;
}
}
if {[build_executable "compile" $binfile $gen_src] == -1} {
return -1
}
clean_restart $binfile
if ![runto_main] then {
fail "could not run to main"
return -1
}
# Check if VSX register access through gdb is supported
proc check_vsx_access {} {
global gdb_prompt
set test "vsx register access"
gdb_test_multiple "info reg vs0" "$test" {
-re "Invalid register.*\r\n$gdb_prompt $" {
unsupported "$test"
return 0
}
-re "\r\nvs0.*\r\n$gdb_prompt $" {
pass "$test"
return 1
}
}
return 0
}
if { ![check_vsx_access] } {
return -1
}
for {set i 0} {$i < 64} {incr i 1} {
gdb_test_no_output "set \$vs$i.uint128 = $i"
}
set core_filename [standard_output_file "$testfile.core"]
set core_generated [gdb_gcore_cmd "$core_filename" "generate core file"]
if { !$core_generated } {
return -1
}
clean_restart
set core_loaded [gdb_core_cmd "$core_filename" "load core file"]
if { $core_loaded != 1 } {
return -1
}
for {set i 0} {$i < 64} {incr i 1} {
gdb_test "print \$vs$i.uint128" ".* = $i" "print vs$i"
}