Blackfin: add support for the DBGA (debug assert) pseudo insn
[platform/adaptation/renesas_rcar/renesas_kernel.git] / arch / blackfin / kernel / traps.c
index fffcf8a..9369836 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/irq.h>
 #include <asm/trace.h>
 #include <asm/fixed_code.h>
+#include <asm/pseudo_instructions.h>
 
 #ifdef CONFIG_KGDB
 # include <linux/kgdb.h>
@@ -68,6 +69,9 @@ asmlinkage notrace void trap_c(struct pt_regs *fp)
 #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
        int j;
 #endif
+#ifdef CONFIG_BFIN_PSEUDODBG_INSNS
+       int opcode;
+#endif
        unsigned int cpu = raw_smp_processor_id();
        const char *strerror = NULL;
        int sig = 0;
@@ -200,6 +204,17 @@ asmlinkage notrace void trap_c(struct pt_regs *fp)
                        }
                }
 #endif
+#ifdef CONFIG_BFIN_PSEUDODBG_INSNS
+               /*
+                * Support for the fake instructions, if the instruction fails,
+                * then just execute a illegal opcode failure (like normal).
+                * Don't support these instructions inside the kernel
+                */
+               if (!kernel_mode_regs(fp) && get_instruction(&opcode, (unsigned short *)fp->pc)) {
+                       if (execute_pseudodbg_assert(fp, opcode))
+                               goto traps_done;
+               }
+#endif
                info.si_code = ILL_ILLOPC;
                sig = SIGILL;
                strerror = KERN_NOTICE EXC_0x21(KERN_NOTICE);