* linux-arm-low.c (arm_eabi_breakpoint): New variable.
authorDaniel Jacobowitz <drow@false.org>
Sun, 13 Nov 2005 18:04:03 +0000 (18:04 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sun, 13 Nov 2005 18:04:03 +0000 (18:04 +0000)
(arm_breakpoint_at): Recognize both breakpoints.
(the_low_target): Use the correct breakpoint instruction.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-arm-low.c

index 0c9a47c..ec1e152 100644 (file)
@@ -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.
index 7c23b17..643da08 100644 (file)
@@ -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,