S390: Fix internal error with stackless inferior

This fixes a GDB internal error that may occur when the inferior has no
valid stack pointer in r15.

gdb/testsuite/ChangeLog:

	* gdb.arch/s390-stackless.S: New.
	* gdb.arch/s390-stackless.exp: New.

gdb/ChangeLog:

	* s390-linux-tdep.c (s390_backchain_frame_unwind_cache): Avoid
	exception when attempting to access the inferior's backchain.
This commit is contained in:
Andreas Arnez 2016-03-01 12:43:55 +01:00
parent 020efce52a
commit f24894771e
5 changed files with 86 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2016-03-01 Andreas Arnez <arnez@linux.vnet.ibm.com>
* s390-linux-tdep.c (s390_backchain_frame_unwind_cache): Avoid
exception when attempting to access the inferior's backchain.
2016-02-29 Yao Qi <yao.qi@linaro.org> 2016-02-29 Yao Qi <yao.qi@linaro.org>
* aarch64-linux-tdep.c (aarch64_canonicalize_syscall): Support * aarch64-linux-tdep.c (aarch64_canonicalize_syscall): Support

View file

@ -2180,7 +2180,7 @@ s390_backchain_frame_unwind_cache (struct frame_info *this_frame,
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR backchain; CORE_ADDR backchain;
ULONGEST reg; ULONGEST reg;
LONGEST sp; LONGEST sp, tmp;
int i; int i;
/* Set up ABI call-saved/call-clobbered registers. */ /* Set up ABI call-saved/call-clobbered registers. */
@ -2193,7 +2193,9 @@ s390_backchain_frame_unwind_cache (struct frame_info *this_frame,
/* Get the backchain. */ /* Get the backchain. */
reg = get_frame_register_unsigned (this_frame, S390_SP_REGNUM); reg = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
backchain = read_memory_unsigned_integer (reg, word_size, byte_order); if (!safe_read_memory_integer (reg, word_size, byte_order, &tmp))
tmp = 0;
backchain = (CORE_ADDR) tmp;
/* A zero backchain terminates the frame chain. As additional /* A zero backchain terminates the frame chain. As additional
sanity check, let's verify that the spill slot for SP in the sanity check, let's verify that the spill slot for SP in the

View file

@ -1,3 +1,8 @@
2016-03-01 Andreas Arnez <arnez@linux.vnet.ibm.com>
* gdb.arch/s390-stackless.S: New.
* gdb.arch/s390-stackless.exp: New.
2016-02-28 Iain Buclaw <ibuclaw@gdcproject.org> 2016-02-28 Iain Buclaw <ibuclaw@gdcproject.org>
* gdb.dlang/circular.c: New file. * gdb.dlang/circular.c: New file.

View file

@ -0,0 +1,33 @@
/* Copyright 2015-2016 Free Software Foundation, Inc.
This file is part of GDB.
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/>. */
.text
.align 8
.globl main
.type main, @function
/* Ensure an invalid stack pointer and link register. Don't
use zero, since that may be handled specially. */
main: la %r15,3(0,0)
la %r14,1(0,0)
j 1f
.size main, .-main
/* Outside any function. */
.byte 0,1
1: st %r15,0(%r15)
br %r14

View file

@ -0,0 +1,39 @@
# Copyright 2016 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 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, see <http://www.gnu.org/licenses/>.
if {![istarget "s390*-*-*"]} then {
verbose "Skipping s390 stackless test."
return
}
standard_testfile .S
if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
return -1
}
# Run until SIGSEGV.
gdb_run_cmd
set test "run until SIGSEGV"
gdb_test_multiple "" $test {
-re "Program received signal SIGSEGV.*$gdb_prompt $" {
pass $test
}
}
# Ensure that 'info registers' works properly and does not generate
# an internal-error.
gdb_test "info registers" "r0.*" "info registers"