Understand arm breakpoints in aarch64_breakpoint_at
authorYao Qi <yao.qi@linaro.org>
Fri, 11 Dec 2015 11:19:52 +0000 (11:19 +0000)
committerYao Qi <yao.qi@linaro.org>
Fri, 11 Dec 2015 11:19:52 +0000 (11:19 +0000)
AArch64 GDBserver can debug ARM program, and it should recognize
various arm breakpoint instructions.  This patch should be included
in 17b1509a.

gdb/gdbserver:

2015-12-11  Yao Qi  <yao.qi@linaro.org>

* linux-aarch64-low.c (aarch64_breakpoint_at): Call
arm_breakpoint_at if the process is 32-bit.

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

index d8a817f..617c249 100644 (file)
@@ -1,5 +1,10 @@
 2015-12-11  Yao Qi  <yao.qi@linaro.org>
 
+       * linux-aarch64-low.c (aarch64_breakpoint_at): Call
+       arm_breakpoint_at if the process is 32-bit.
+
+2015-12-11  Yao Qi  <yao.qi@linaro.org>
+
        * linux-aarch32-low.c [__aarch64__]: Use arm_abi_breakpoint
        arm breakpoint.
 
index 5fd3f51..b4eb36b 100644 (file)
@@ -211,14 +211,19 @@ static const gdb_byte aarch64_breakpoint[] = {0x00, 0x00, 0x20, 0xd4};
 static int
 aarch64_breakpoint_at (CORE_ADDR where)
 {
-  gdb_byte insn[aarch64_breakpoint_len];
+  if (is_64bit_tdesc ())
+    {
+      gdb_byte insn[aarch64_breakpoint_len];
 
-  (*the_target->read_memory) (where, (unsigned char *) &insn,
-                             aarch64_breakpoint_len);
-  if (memcmp (insn, aarch64_breakpoint, aarch64_breakpoint_len) == 0)
-    return 1;
+      (*the_target->read_memory) (where, (unsigned char *) &insn,
+                                 aarch64_breakpoint_len);
+      if (memcmp (insn, aarch64_breakpoint, aarch64_breakpoint_len) == 0)
+       return 1;
 
-  return 0;
+      return 0;
+    }
+  else
+    return arm_breakpoint_at (where);
 }
 
 static void