summaryrefslogtreecommitdiffstats
path: root/sys/arm/include
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2004-11-20 16:52:10 +0000
committercognet <cognet@FreeBSD.org>2004-11-20 16:52:10 +0000
commit75354c7e52dc0f482ed3b77840e339ca9b478f51 (patch)
tree65d0ea876a97c633458ca53e65120dde16a5cd48 /sys/arm/include
parentc2bbd5fdeb4509ccc5f9da044dee45d30c218a88 (diff)
downloadFreeBSD-src-75354c7e52dc0f482ed3b77840e339ca9b478f51.zip
FreeBSD-src-75354c7e52dc0f482ed3b77840e339ca9b478f51.tar.gz
Implement enough to be able to enter and leave DDB.
Diffstat (limited to 'sys/arm/include')
-rw-r--r--sys/arm/include/cpufunc.h1
-rw-r--r--sys/arm/include/db_machdep.h22
2 files changed, 20 insertions, 3 deletions
diff --git a/sys/arm/include/cpufunc.h b/sys/arm/include/cpufunc.h
index a558b39..d1b5786 100644
--- a/sys/arm/include/cpufunc.h
+++ b/sys/arm/include/cpufunc.h
@@ -53,6 +53,7 @@
static __inline void
breakpoint(void)
{
+ __asm(".word 0xe7ffffff");
}
struct cpu_functions {
diff --git a/sys/arm/include/db_machdep.h b/sys/arm/include/db_machdep.h
index e0b255d..f40daa5 100644
--- a/sys/arm/include/db_machdep.h
+++ b/sys/arm/include/db_machdep.h
@@ -47,7 +47,7 @@ typedef int db_expr_t;
#define BKPT_SET(inst) (BKPT_INST)
#define BKPT_SKIP do { \
- kdb_frame->tf_pc -= BKPT_SIZE; \
+ kdb_frame->tf_pc += BKPT_SIZE; \
} while (0)
#define db_clear_single_step(regs)
@@ -56,9 +56,25 @@ typedef int db_expr_t;
#define IS_BREAKPOINT_TRAP(type, code) (type == T_BREAKPOINT)
#define IS_WATCHPOINT_TRAP(type, code) (0)
+
#define inst_trap_return(ins) (0)
-#define inst_return(ins) (0)
-#define inst_call(ins) (0)
+/* ldmxx reg, {..., pc}
+ 01800000 stack mode
+ 000f0000 register
+ 0000ffff register list */
+/* mov pc, reg
+ 0000000f register */
+#define inst_return(ins) (((ins) & 0x0e108000) == 0x08108000 || \
+ ((ins) & 0x0ff0fff0) == 0x01a0f000)
+/* bl ...
+ 00ffffff offset>>2 */
+#define inst_call(ins) (((ins) & 0x0f000000) == 0x0b000000)
+/* b ...
+ 00ffffff offset>>2 */
+/* ldr pc, [pc, reg, lsl #2]
+ 0000000f register */
+
+
#define inst_load(ins) (0)
#define inst_store(ins) (0)
OpenPOWER on IntegriCloud