Browse Source
breakpoint is set in a `ta 0x6d´ which is not a sigreturn syscall. In
these cases no rt_frame exists in the stack and thus the read PC is
wrong.
ChangeLog
2014-01-29 Jose E. Marchesi <jose.marchesi@oracle.com>
* sparc64-linux-tdep.c (sparc64_linux_step_trap): Get PC from
the sigreturn register save area only if the syscall is
sigreturn.
testsuite/ChangeLog
2014-01-29 Jose E. Marchesi <jose.marchesi@oracle.com>
* gdb.arch/sparc-sysstep.exp: New file.
* gdb.arch/sparc-sysstep.c: Likewise.
* gdb.arch/Makefile.in (EXECUTABLES): Add sparc-sysstep.
gdb-7.8-branch
6 changed files with 101 additions and 2 deletions
@ -0,0 +1,35 @@ |
|||
/* Test single-stepping system call instructions in sparc.
|
|||
|
|||
Copyright 2014 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/>. */
|
|||
|
|||
#include <signal.h> |
|||
|
|||
int global; |
|||
|
|||
static void |
|||
handler (int sig) |
|||
{ |
|||
} |
|||
|
|||
int |
|||
main () |
|||
{ |
|||
signal (SIGALRM, handler); |
|||
kill (getpid (), SIGALRM); |
|||
return 0; /* sparc-sysstep.exp: last */ |
|||
} |
|||
@ -0,0 +1,49 @@ |
|||
# Copyright 2014 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. |
|||
|
|||
# Test single-stepping system call instructions (ta 0x6d) in the two |
|||
# cases distinguished by the implementation: sigreturn and all others. |
|||
# The sigreturn syscall requires a special analysis since the return |
|||
# PC must be extracted from the sigreturn register save area in the |
|||
# stack. |
|||
|
|||
if ![istarget "sparc*-*-linux*"] then { |
|||
return 0 |
|||
} |
|||
|
|||
set testfile sparc-sysstep |
|||
set srcfile ${testfile}.c |
|||
set binfile ${objdir}/${subdir}/${testfile} |
|||
set opts {} |
|||
|
|||
if {[prepare_for_testing ${testfile}.exp ${binfile} $srcfile {additional_flags=-g}]} { |
|||
return -1 |
|||
} |
|||
|
|||
if ![runto_main] { |
|||
return -1 |
|||
} |
|||
|
|||
# Watching the global variable will guarantee that gdb will |
|||
# single-step through the whole program. |
|||
|
|||
set lno [gdb_get_line_number "sparc-sysstep.exp: last" $srcfile] |
|||
|
|||
gdb_test "break $srcfile:$lno" "Breakpoint \[0-9\] at .*" |
|||
gdb_test_no_output "set can-use-hw-watchpoints 0" "" |
|||
gdb_test "watch global" "Watchpoint .*: global" |
|||
gdb_test "continue" "Continuing.*${srcfile}:${lno}.*" |
|||
Loading…
Reference in new issue