Linux-RISC-V Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Vincent Chen <vincent.chen@sifive.com>
To: paul.walmsley@sifive.com, palmer@dabbelt.com, daniel.thompson@linaro.org
Cc: kgdb-bugreport@lists.sourceforge.net,
	linux-riscv@lists.infradead.org,
	Vincent Chen <vincent.chen@sifive.com>
Subject: [V5 patch 1/6] kgdb: Add kgdb_has_hit_break function
Date: Mon,  1 Jun 2020 11:39:06 +0800	[thread overview]
Message-ID: <1590982751-13401-2-git-send-email-vincent.chen@sifive.com> (raw)
In-Reply-To: <1590982751-13401-1-git-send-email-vincent.chen@sifive.com>

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>
---
 include/linux/kgdb.h      |  1 +
 kernel/debug/debug_core.c | 12 ++++++++++++
 2 files changed, 13 insertions(+)

diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h
index b072aeb1fd78..03c64aa8ba36 100644
--- a/include/linux/kgdb.h
+++ b/include/linux/kgdb.h
@@ -311,6 +311,7 @@ extern int kgdb_hex2mem(char *buf, char *mem, int count);
 
 extern int kgdb_isremovedbreak(unsigned long addr);
 extern void kgdb_schedule_breakpoint(void);
+extern int kgdb_has_hit_break(unsigned long addr);
 
 extern int
 kgdb_handle_exception(int ex_vector, int signo, int err_code,
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c
index 2b7c9b67931d..01bc3eea3d4d 100644
--- a/kernel/debug/debug_core.c
+++ b/kernel/debug/debug_core.c
@@ -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;
-- 
2.7.4



  reply	other threads:[~2020-06-01  3:40 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-01  3:39 [V5 patch 0/6] riscv: Add KGDB and KDB support Vincent Chen
2020-06-01  3:39 ` Vincent Chen [this message]
2020-06-01  3:39 ` [V5 patch 2/6] riscv: Add KGDB support Vincent Chen
2020-06-01  3:39 ` [V5 patch 3/6] kgdb: enable arch to support XML packet support Vincent Chen
2020-06-01  3:39 ` [V5 patch 4/6] riscv: enable the Kconfig prompt of STRICT_KERNEL_RWX Vincent Chen
2020-06-01  3:39 ` [V5 patch 5/6] riscv: Use the XML target descriptions to report 3 system registers Vincent Chen
2020-06-01  3:39 ` [V5 patch 6/6] riscv: Add SW single-step support for KDB Vincent Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1590982751-13401-2-git-send-email-vincent.chen@sifive.com \
    --to=vincent.chen@sifive.com \
    --cc=daniel.thompson@linaro.org \
    --cc=kgdb-bugreport@lists.sourceforge.net \
    --cc=linux-riscv@lists.infradead.org \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox