| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: "Christopher M. Riedl" <cmr@informatik.wtf> |
| Date: Sat, 7 Sep 2019 01:11:23 -0500 |
| Subject: [PATCH 14/19] powerpc/xmon: Allow listing and clearing breakpoints in |
| read-only mode |
| |
| Read-only mode should not prevent listing and clearing any active |
| breakpoints. |
| |
| Tested-by: Daniel Axtens <dja@axtens.net> |
| Reviewed-by: Daniel Axtens <dja@axtens.net> |
| Signed-off-by: Christopher M. Riedl <cmr@informatik.wtf> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Link: https://lore.kernel.org/r/20190907061124.1947-2-cmr@informatik.wtf |
| (cherry picked from commit 96664dee5cf1815777286227b09884b4f019727f) |
| Signed-off-by: Joel Stanley <joel@jms.id.au> |
| --- |
| arch/powerpc/xmon/xmon.c | 16 +++++++++++----- |
| 1 file changed, 11 insertions(+), 5 deletions(-) |
| |
| diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c |
| index 6d130c89fbd8..ab6371aedfcb 100644 |
| --- a/arch/powerpc/xmon/xmon.c |
| +++ b/arch/powerpc/xmon/xmon.c |
| @@ -1096,10 +1096,6 @@ cmds(struct pt_regs *excp) |
| set_lpp_cmd(); |
| break; |
| case 'b': |
| - if (xmon_is_ro) { |
| - printf(xmon_ro_msg); |
| - break; |
| - } |
| bpt_cmds(); |
| break; |
| case 'C': |
| @@ -1368,11 +1364,16 @@ bpt_cmds(void) |
| struct bpt *bp; |
| |
| cmd = inchar(); |
| + |
| switch (cmd) { |
| #ifndef CONFIG_PPC_8xx |
| static const char badaddr[] = "Only kernel addresses are permitted for breakpoints\n"; |
| int mode; |
| case 'd': /* bd - hardware data breakpoint */ |
| + if (xmon_is_ro) { |
| + printf(xmon_ro_msg); |
| + break; |
| + } |
| if (!ppc_breakpoint_available()) { |
| printf("Hardware data breakpoint not supported on this cpu\n"); |
| break; |
| @@ -1400,6 +1401,10 @@ bpt_cmds(void) |
| break; |
| |
| case 'i': /* bi - hardware instr breakpoint */ |
| + if (xmon_is_ro) { |
| + printf(xmon_ro_msg); |
| + break; |
| + } |
| if (!cpu_has_feature(CPU_FTR_ARCH_207S)) { |
| printf("Hardware instruction breakpoint " |
| "not supported on this cpu\n"); |
| @@ -1458,7 +1463,8 @@ bpt_cmds(void) |
| break; |
| } |
| termch = cmd; |
| - if (!scanhex(&a)) { |
| + |
| + if (xmon_is_ro || !scanhex(&a)) { |
| /* print all breakpoints */ |
| printf(" type address\n"); |
| if (dabr.enabled) { |