]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* arm-tdep.c (thumb_get_next_pc_raw): Mask off low bits for bx pc
authorJoseph Myers <joseph@codesourcery.com>
Wed, 22 Aug 2012 19:47:58 +0000 (19:47 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 22 Aug 2012 19:47:58 +0000 (19:47 +0000)
and blx pc.

testsuite:
* gdb.arch/thumb-bx-pc.S: New file.
* gdb.arch/thumb-bx-pc.exp: New file.

gdb/ChangeLog
gdb/arm-tdep.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/thumb-bx-pc.S [new file with mode: 0644]
gdb/testsuite/gdb.arch/thumb-bx-pc.exp [new file with mode: 0644]

index d6e8cf654805ca9101527c44de47f8df5dae5ea6..3c6dba960714ddff28918f743f668fcfca80f8e0 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-22  Joseph Myers  <joseph@codesourcery.com>
+
+       * arm-tdep.c (thumb_get_next_pc_raw): Mask off low bits for bx pc
+       and blx pc.
+
 2012-08-22  Khoo Yit Phang <khooyp@cs.umd.edu>
 
        Add a new "python-interactive" command that starts a standard
index 063c1db078747a571732a30349bb3e286095659f..cddb88c44ae120b07919c3d8559fc8d29964f58d 100644 (file)
@@ -4540,7 +4540,7 @@ thumb_get_next_pc_raw (struct frame_info *frame, CORE_ADDR pc)
   else if ((inst1 & 0xff00) == 0x4700) /* bx REG, blx REG */
     {
       if (bits (inst1, 3, 6) == 0x0f)
-       nextpc = pc_val;
+       nextpc = UNMAKE_THUMB_ADDR (pc_val);
       else
        nextpc = get_frame_register_unsigned (frame, bits (inst1, 3, 6));
     }
index 58744043891e364f63a5d21dc9d63096dba0d251..6360f98a4ae0bf1c5ebb36b4c6d70cf4a30b9bc9 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-22  Joseph Myers  <joseph@codesourcery.com>
+
+       * gdb.arch/thumb-bx-pc.S: New file.
+       * gdb.arch/thumb-bx-pc.exp: New file.
+
 2012-08-22  Tom Tromey  <tromey@redhat.com>
 
        * gdb.base/maint.exp: Update.
diff --git a/gdb/testsuite/gdb.arch/thumb-bx-pc.S b/gdb/testsuite/gdb.arch/thumb-bx-pc.S
new file mode 100644 (file)
index 0000000..437e66e
--- /dev/null
@@ -0,0 +1,34 @@
+/* Test PC adjustment from Thumb-mode "bx pc" instruction.
+
+   Copyright 2012 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/>.  */
+
+       .syntax unified
+       .thumb
+       .text
+       .p2align 2
+       .global main
+       .thumb
+       .thumb_func
+       .type main, %function
+main:
+       bx      pc
+       nop
+.code 32
+       mov     r0, #0
+       bx      lr
+       .size   main, .-main
diff --git a/gdb/testsuite/gdb.arch/thumb-bx-pc.exp b/gdb/testsuite/gdb.arch/thumb-bx-pc.exp
new file mode 100644 (file)
index 0000000..5a6b477
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2012 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 PC adjustment from Thumb-mode "bx pc" instruction.
+
+if {![istarget arm*-*]} then {
+    verbose "Skipping ARM tests."
+    return
+}
+
+set testfile "thumb-bx-pc"
+set srcfile ${testfile}.S
+set opts {}
+
+if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $opts] {
+    untested "Failed to compile $srcfile"
+    return -1
+}
+
+if ![runto_main] then {
+    untested "could not run to main"
+    return -1
+}
+
+gdb_test "stepi" "$hex in main \\(\\)" "stepi for bx pc"
+
+gdb_test "x /i \$pc" \
+    "$hex <main\\+4>:\[ \t\]+mov\[ \t\]+r0,\[ \t\]+#0.*" \
+    "stepi reached correct instruction"