aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/disasm-selftests.c7
-rw-r--r--gdb/riscv-tdep.c49
3 files changed, 49 insertions, 20 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index df22c00..56645e9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,16 @@
+2018-09-28 John Baldwin <jhb@FreeBSD.org>
+
+ * disasm-selftests.c (print_one_insn_test): Add bfd_arch_riscv to
+ case with explicit breakpoint kind.
+ * riscv-tdep.c (show_use_compressed_breakpoints): Remove
+ 'additional_info' and related logic.
+ (riscv_debug_breakpoints): New variable.
+ (riscv_breakpoint_kind_from_pc): Use the length of the existing
+ instruction to determine the breakpoint kind.
+ (_initialize_riscv_tdep): Add 'set/show debug riscv breakpoints'
+ flag. Update description of 'set/show riscv
+ use-compressed-breakpoints' flag.
+
2018-09-28 Andrew Burgess <andrew.burgess@embecosm.com>
(NEWS): Mention changes to frame related commands.
diff --git a/gdb/disasm-selftests.c b/gdb/disasm-selftests.c
index f7d0ecc..8cc2676 100644
--- a/gdb/disasm-selftests.c
+++ b/gdb/disasm-selftests.c
@@ -77,9 +77,10 @@ print_one_insn_test (struct gdbarch *gdbarch)
/* fall through */
case bfd_arch_nios2:
case bfd_arch_score:
- /* nios2 and score need to know the current instruction to select
- breakpoint instruction. Give the breakpoint instruction kind
- explicitly. */
+ case bfd_arch_riscv:
+ /* nios2, riscv, and score need to know the current instruction
+ to select breakpoint instruction. Give the breakpoint
+ instruction kind explicitly. */
int bplen;
insn = gdbarch_sw_breakpoint_from_kind (gdbarch, 4, &bplen);
len = bplen;
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 163c8ec..319e01b 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -210,20 +210,9 @@ show_use_compressed_breakpoints (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
- const char *additional_info;
- struct gdbarch *gdbarch = target_gdbarch ();
-
- if (use_compressed_breakpoints == AUTO_BOOLEAN_AUTO)
- if (riscv_has_feature (gdbarch, 'C'))
- additional_info = _(" (currently on)");
- else
- additional_info = _(" (currently off)");
- else
- additional_info = "";
-
fprintf_filtered (file,
_("Debugger's use of compressed breakpoints is set "
- "to %s%s.\n"), value, additional_info);
+ "to %s.\n"), value);
}
/* The set and show lists for 'set riscv' and 'show riscv' prefixes. */
@@ -284,6 +273,11 @@ show_riscv_debug_variable (struct ui_file *file, int from_tty,
c->name, value);
}
+/* When this is set to non-zero debugging information about breakpoint
+ kinds will be printed. */
+
+static unsigned int riscv_debug_breakpoints = 0;
+
/* When this is set to non-zero debugging information about inferior calls
will be printed. */
@@ -417,7 +411,18 @@ riscv_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
{
if (use_compressed_breakpoints == AUTO_BOOLEAN_AUTO)
{
- if (riscv_has_feature (gdbarch, 'C'))
+ gdb_byte buf[1];
+
+ /* Read the opcode byte to determine the instruction length. */
+ read_code (*pcptr, buf, 1);
+
+ if (riscv_debug_breakpoints)
+ fprintf_unfiltered
+ (gdb_stdlog,
+ "Using %s for breakpoint at %s (instruction length %d)\n",
+ riscv_insn_length (buf[0]) == 2 ? "C.EBREAK" : "EBREAK",
+ paddress (gdbarch, *pcptr), riscv_insn_length (buf[0]));
+ if (riscv_insn_length (buf[0]) == 2)
return 2;
else
return 4;
@@ -2953,6 +2958,16 @@ _initialize_riscv_tdep (void)
&showdebugriscvcmdlist, "show debug riscv ", 0,
&showdebuglist);
+ add_setshow_zuinteger_cmd ("breakpoints", class_maintenance,
+ &riscv_debug_breakpoints, _("\
+Set riscv breakpoint debugging."), _("\
+Show riscv breakpoint debugging."), _("\
+When non-zero, print debugging information for the riscv specific parts\n\
+of the breakpoint mechanism."),
+ NULL,
+ show_riscv_debug_variable,
+ &setdebugriscvcmdlist, &showdebugriscvcmdlist);
+
add_setshow_zuinteger_cmd ("infcall", class_maintenance,
&riscv_debug_infcall, _("\
Set riscv inferior call debugging."), _("\
@@ -2989,10 +3004,10 @@ of the stack unwinding mechanism."),
_("\
Set debugger's use of compressed breakpoints."), _(" \
Show debugger's use of compressed breakpoints."), _("\
-Debugging compressed code requires compressed breakpoints to be used. If\n \
-left to 'auto' then gdb will use them if $misa indicates the C extension\n \
-is supported. If that doesn't give the correct behavior, then this option\n\
-can be used."),
+Debugging compressed code requires compressed breakpoints to be used. If\n\
+left to 'auto' then gdb will use them if the existing instruction is a\n\
+compressed instruction. If that doesn't give the correct behavior, then\n\
+this option can be used."),
NULL,
show_use_compressed_breakpoints,
&setriscvcmdlist,