gdb: Add process record and replay support for s390.
gdb/ChangeLog: PR/18376 * gdb/configure.tgt: Add linux-record.o to s390*-linux. * gdb/s390-linux-tdep.c: #include "linux-record.h", "record-full.h" (s390_linux_record_tdep): New static global variable. (s390x_linux_record_tdep): New static global variable. (s390_all_but_pc_registers_record): New function. (s390_canonicalize_syscall): New function. (s390_linux_syscall_record): New function. (s390_linux_record_signal): New function. (s390_record_calc_disp_common): New function. (s390_record_calc_disp): New function. (s390_record_calc_disp_vsce): New function. (s390_record_calc_rl): New function. (s390_record_gpr_g): New function. (s390_record_gpr_h): New function. (s390_record_vr): New function. (s390_process_record): New function. (s390_init_linux_record_tdep): New function. (s390_gdbarch_init): Fill record function slots. gdb/testsuite/ChangeLog: * gdb.reverse/s390-mvcle.c: New test. * gdb.reverse/s390-mvcle.exp: New file. * lib/gdb.exp: Enable reverse tests on s390*-linux.
This commit is contained in:
parent
394816ee10
commit
566c56c911
@ -1,3 +1,25 @@
|
||||
2015-11-04 Marcin Kościelnicki <koriakin@0x04.net>
|
||||
|
||||
PR/18376
|
||||
* gdb/configure.tgt: Add linux-record.o to s390*-linux.
|
||||
* gdb/s390-linux-tdep.c: #include "linux-record.h", "record-full.h"
|
||||
(s390_linux_record_tdep): New static global variable.
|
||||
(s390x_linux_record_tdep): New static global variable.
|
||||
(s390_all_but_pc_registers_record): New function.
|
||||
(s390_canonicalize_syscall): New function.
|
||||
(s390_linux_syscall_record): New function.
|
||||
(s390_linux_record_signal): New function.
|
||||
(s390_record_calc_disp_common): New function.
|
||||
(s390_record_calc_disp): New function.
|
||||
(s390_record_calc_disp_vsce): New function.
|
||||
(s390_record_calc_rl): New function.
|
||||
(s390_record_gpr_g): New function.
|
||||
(s390_record_gpr_h): New function.
|
||||
(s390_record_vr): New function.
|
||||
(s390_process_record): New function.
|
||||
(s390_init_linux_record_tdep): New function.
|
||||
(s390_gdbarch_init): Fill record function slots.
|
||||
|
||||
2015-11-04 Marcin Kościelnicki <koriakin@0x04.net>
|
||||
|
||||
* record-full.c (record_full_exec_insn): Use xmalloc for temporary
|
||||
|
@ -455,7 +455,8 @@ powerpc*-*-*)
|
||||
|
||||
s390*-*-linux*)
|
||||
# Target: S390 running Linux
|
||||
gdb_target_obs="s390-linux-tdep.o solib-svr4.o linux-tdep.o"
|
||||
gdb_target_obs="s390-linux-tdep.o solib-svr4.o linux-tdep.o \
|
||||
linux-record.o"
|
||||
build_gdbserver=yes
|
||||
;;
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,9 @@
|
||||
2015-11-04 Marcin Kościelnicki <koriakin@0x04.net>
|
||||
|
||||
* gdb.reverse/s390-mvcle.c: New test.
|
||||
* gdb.reverse/s390-mvcle.exp: New file.
|
||||
* lib/gdb.exp: Enable reverse tests on s390*-linux.
|
||||
|
||||
2015-11-02 Marcin Kościelnicki <koriakin@0x04.net>
|
||||
|
||||
* gdb.reverse/readv-reverse.exp: Obvious typo fixed.
|
||||
|
54
gdb/testsuite/gdb.reverse/s390-mvcle.c
Normal file
54
gdb/testsuite/gdb.reverse/s390-mvcle.c
Normal file
@ -0,0 +1,54 @@
|
||||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2015 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/>. */
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
char dst[0x1000000];
|
||||
char src[8] = "abcdefgh";
|
||||
|
||||
void
|
||||
marker1 (void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
marker2 (void)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
mvcle (void)
|
||||
{
|
||||
register void *pdst asm("r2") = dst;
|
||||
register size_t ndst asm("r3") = sizeof dst;
|
||||
register void *psrc asm("r4") = src;
|
||||
register size_t nsrc asm("r5") = sizeof src;
|
||||
asm volatile ("0: mvcle 2, 4, 0x69\n"
|
||||
"jo 0b\n"
|
||||
: "=r" (pdst), "=r" (ndst), "=r" (psrc), "=r" (nsrc)
|
||||
: "0" (pdst), "1" (ndst), "2" (psrc), "3" (nsrc)
|
||||
: "cc", "memory");
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
marker1 ();
|
||||
mvcle ();
|
||||
marker2 ();
|
||||
return 0;
|
||||
}
|
63
gdb/testsuite/gdb.reverse/s390-mvcle.exp
Normal file
63
gdb/testsuite/gdb.reverse/s390-mvcle.exp
Normal file
@ -0,0 +1,63 @@
|
||||
# Copyright (C) 2015 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 test tests s390 MVCLE opcode for reverse execution.
|
||||
#
|
||||
|
||||
if ![supports_reverse] {
|
||||
return
|
||||
}
|
||||
|
||||
if { ! [istarget "s390*-*-*"] } {
|
||||
verbose "Skipping s390 MVCLE instruction recording tests."
|
||||
return
|
||||
}
|
||||
|
||||
standard_testfile
|
||||
|
||||
if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
|
||||
return -1
|
||||
}
|
||||
|
||||
runto main
|
||||
|
||||
if [supports_process_record] {
|
||||
# Activate process record/replay
|
||||
gdb_test_no_output "record" "Turn on process record"
|
||||
}
|
||||
|
||||
gdb_test "break marker1" \
|
||||
"Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
|
||||
"set breakpoint at marker1"
|
||||
|
||||
gdb_test "break marker2" \
|
||||
"Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
|
||||
"set breakpoint at marker2"
|
||||
|
||||
gdb_continue_to_breakpoint "marker1" ".*$srcfile:.*"
|
||||
|
||||
gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"
|
||||
|
||||
gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"
|
||||
|
||||
# If the variable was recorded properly on syscall, the old contents (0)
|
||||
# will be remembered. If not, new contents ([abcdefghi]) will be used, and
|
||||
# the test will fail.
|
||||
|
||||
gdb_test "print (int)dst\[0]" ".* = 0" "check MVCLE record 1"
|
||||
gdb_test "print (int)dst\[0x100000]" ".* = 0" "check MVCLE record 2"
|
||||
gdb_test "print (int)dst\[0xffffff]" ".* = 0" "check MVCLE record 3"
|
||||
|
@ -2185,7 +2185,8 @@ proc supports_process_record {} {
|
||||
if { [istarget "arm*-*-linux*"] || [istarget "x86_64-*-linux*"]
|
||||
|| [istarget "i\[34567\]86-*-linux*"]
|
||||
|| [istarget "aarch64*-*-linux*"]
|
||||
|| [istarget "powerpc*-*-linux*"] } {
|
||||
|| [istarget "powerpc*-*-linux*"]
|
||||
|| [istarget "s390*-*-linux*"] } {
|
||||
return 1
|
||||
}
|
||||
|
||||
@ -2203,7 +2204,8 @@ proc supports_reverse {} {
|
||||
if { [istarget "arm*-*-linux*"] || [istarget "x86_64-*-linux*"]
|
||||
|| [istarget "i\[34567\]86-*-linux*"]
|
||||
|| [istarget "aarch64*-*-linux*"]
|
||||
|| [istarget "powerpc*-*-linux*"] } {
|
||||
|| [istarget "powerpc*-*-linux*"]
|
||||
|| [istarget "s390*-*-linux*"] } {
|
||||
return 1
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user