diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2011-04-01 11:57:03 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2011-04-01 11:57:03 +0000 |
commit | 18819fa6ffa0c1b99a7e378b625e4aca04707bfe (patch) | |
tree | b2ed66f9c764c9407abcc82e4c06de6eff6ef6b6 /gdb/testsuite/gdb.arch | |
parent | 592588f3f8da9c17397807caeb3ed66039784ecc (diff) | |
download | gdb-18819fa6ffa0c1b99a7e378b625e4aca04707bfe.zip gdb-18819fa6ffa0c1b99a7e378b625e4aca04707bfe.tar.gz gdb-18819fa6ffa0c1b99a7e378b625e4aca04707bfe.tar.bz2 |
gdb/
* arm-tdep.h (arm_insert_single_step_breakpoint): Add prototype.
* arm-tdep.c (arm_override_mode): New global.
(arm_pc_is_thumb): Respect arm_override_mode. Remove single-step
execution mode heuristics.
(thumb_get_next_pc_raw): Remove INSERT_BKTP argument; always insert
second single-step breakpoint if needed, using
arm_insert_single_step_breakpoint.
(arm_get_next_pc_raw): Remove INSERT_BKTP argument. Only handle
ARM execution mode, do not call thumb_get_next_pc_raw.
(arm_get_next_pc): Encode execution mode in return value. Call
either arm_get_next_pc_raw or thumb_get_next_pc_raw.
(arm_insert_single_step_breakpoint): New function.
(arm_software_single_step): Call it.
* arm-linux-tdep.c (arm_linux_sigreturn_return_addr): Add IS_THUMB
argument to return execution mode of sigreturn target.
(arm_linux_syscall_next_pc): Use it.
(arm_linux_copy_svc): Update call.
(arm_linux_software_single_step): Call
arm_insert_single_step_breakpoint.
gdb/testsuite/
* gdb.arch/thumb-singlestep.S: New file.
* gdb.arch/thumb-singlestep.exp: Likewise.
Diffstat (limited to 'gdb/testsuite/gdb.arch')
-rw-r--r-- | gdb/testsuite/gdb.arch/thumb-singlestep.S | 40 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/thumb-singlestep.exp | 38 |
2 files changed, 78 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.arch/thumb-singlestep.S b/gdb/testsuite/gdb.arch/thumb-singlestep.S new file mode 100644 index 0000000..63884ca --- /dev/null +++ b/gdb/testsuite/gdb.arch/thumb-singlestep.S @@ -0,0 +1,40 @@ +/* Test program with deliberately incorrect execution mode transition + + Copyright 2011 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 2 + .global foo + .thumb + /* .thumb_func deliberately omitted */ +foo: + mov r0,#42 + bx lr + + .text + .align 2 + .global main + .thumb + .thumb_func + .type main, %function +main: + push {r3, lr} + blx foo + pop {r3, pc} + .size main, .-main + diff --git a/gdb/testsuite/gdb.arch/thumb-singlestep.exp b/gdb/testsuite/gdb.arch/thumb-singlestep.exp new file mode 100644 index 0000000..da47c36 --- /dev/null +++ b/gdb/testsuite/gdb.arch/thumb-singlestep.exp @@ -0,0 +1,38 @@ +# Copyright 2011 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 single-stepping into incorrectly marked Thumb routine + +if {![istarget arm*-*]} then { + verbose "Skipping ARM tests." + return +} + +set testfile "thumb-singlestep" +set srcfile ${testfile}.S + +set additional_flags "additional_flags=-mthumb" +if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} [list debug $additional_flags]] { + untested ${testfile}.exp + return -1 +} + +if ![runto_main] then { + untested ${testfile}.exp + return -1 +} + +gdb_test "si" "foo \\(\\) at .*${srcfile}.*mov r0,#42.*" "step into foo" + |