summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2005-11-13 18:04:03 +0000
committerDaniel Jacobowitz <dan@debian.org>2005-11-13 18:04:03 +0000
commitf8e2347a54b72aa4b4f3dcfaafde3255804569f9 (patch)
treeed4024b56a683d0b0126d07d43107b30cf2c8498
parent528cdd7c3cbc5c0b824ebab321977b0a3e13af9e (diff)
downloadgdb-f8e2347a54b72aa4b4f3dcfaafde3255804569f9.tar.gz
* linux-arm-low.c (arm_eabi_breakpoint): New variable.
(arm_breakpoint_at): Recognize both breakpoints. (the_low_target): Use the correct breakpoint instruction.
-rw-r--r--gdb/gdbserver/ChangeLog6
-rw-r--r--gdb/gdbserver/linux-arm-low.c16
2 files changed, 21 insertions, 1 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 0c9a47c8283..ec1e152706f 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * linux-arm-low.c (arm_eabi_breakpoint): New variable.
+ (arm_breakpoint_at): Recognize both breakpoints.
+ (the_low_target): Use the correct breakpoint instruction.
+
2005-11-02 Daniel Jacobowitz <dan@codesourcery.com>
* configure.srv (x86_64-*-linux*): Turn on thread_db support.
diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c
index 7c23b17789a..643da0853a3 100644
--- a/gdb/gdbserver/linux-arm-low.c
+++ b/gdb/gdbserver/linux-arm-low.c
@@ -70,6 +70,12 @@ arm_set_pc (CORE_ADDR pc)
static const unsigned long arm_breakpoint = 0xef9f0001;
#define arm_breakpoint_len 4
+/* For new EABI binaries. We recognize it regardless of which ABI
+ is used for gdbserver, so single threaded debugging should work
+ OK, but for multi-threaded debugging we only insert the current
+ ABI's breakpoint instruction. For now at least. */
+static const unsigned long arm_eabi_breakpoint = 0xe7f001f0;
+
static int
arm_breakpoint_at (CORE_ADDR where)
{
@@ -79,8 +85,12 @@ arm_breakpoint_at (CORE_ADDR where)
if (insn == arm_breakpoint)
return 1;
+ if (insn == arm_eabi_breakpoint)
+ return 1;
+
/* If necessary, recognize more trap instructions here. GDB only uses the
- one. */
+ two. */
+
return 0;
}
@@ -102,7 +112,11 @@ struct linux_target_ops the_low_target = {
arm_cannot_store_register,
arm_get_pc,
arm_set_pc,
+#ifndef __ARM_EABI__
(const unsigned char *) &arm_breakpoint,
+#else
+ (const unsigned char *) &arm_eabi_breakpoint,
+#endif
arm_breakpoint_len,
arm_reinsert_addr,
0,