kgdb: Add kgdb_has_hit_break function
authorVincent Chen <vincent.chen@sifive.com>
Thu, 16 Apr 2020 02:38:04 +0000 (10:38 +0800)
committerPalmer Dabbelt <palmerdabbelt@google.com>
Mon, 18 May 2020 18:38:09 +0000 (11:38 -0700)
The break instruction in RISC-V does not have an immediate value field, so
the kernel cannot identify the purpose of each trap exception through the
opcode. This makes the existing identification schemes in other
architecture unsuitable for the RISC-V kernel. To solve this problem, this
patch adds kgdb_has_hit_break(), which can help RISC-V kernel identify
the KGDB trap exception.

Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com>
Acked-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
kernel/debug/debug_core.c

index 2b7c9b67931d6818d85d5066544172f2df8693ac..01bc3eea3d4dbd0eac6f5e3d445eb91914e917d3 100644 (file)
@@ -417,6 +417,18 @@ int kgdb_isremovedbreak(unsigned long addr)
        return 0;
 }
 
+int kgdb_has_hit_break(unsigned long addr)
+{
+       int i;
+
+       for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
+               if (kgdb_break[i].state == BP_ACTIVE &&
+                   kgdb_break[i].bpt_addr == addr)
+                       return 1;
+       }
+       return 0;
+}
+
 int dbg_remove_all_break(void)
 {
        int error;