[PATCH 16/18] powerpc/hw_breakpoints: Initial support for prefixed instructions
Jordan Niethe
jniethe5 at gmail.com
Tue Nov 26 16:21:39 AEDT 2019
Currently when getting an instruction to emulate in
hw_breakpoint_handler() we do not load the suffix of a prefixed
instruction. Ensure we load the suffix if the instruction we need to
emulate is a prefixed instruction.
Signed-off-by: Jordan Niethe <jniethe5 at gmail.com>
---
arch/powerpc/kernel/hw_breakpoint.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c
index f4530961998c..f7e1af8b9eae 100644
--- a/arch/powerpc/kernel/hw_breakpoint.c
+++ b/arch/powerpc/kernel/hw_breakpoint.c
@@ -240,15 +240,15 @@ dar_range_overlaps(unsigned long dar, int size, struct arch_hw_breakpoint *info)
static bool stepping_handler(struct pt_regs *regs, struct perf_event *bp,
struct arch_hw_breakpoint *info)
{
- unsigned int instr = 0;
+ unsigned int instr = 0, sufx = 0;
int ret, type, size;
struct instruction_op op;
unsigned long addr = info->address;
- if (__get_user_inatomic(instr, (unsigned int *)regs->nip))
+ if (__get_user_instr_inatomic(instr, sufx, (unsigned int *)regs->nip))
goto fail;
- ret = analyse_instr(&op, regs, instr, 0);
+ ret = analyse_instr(&op, regs, instr, sufx);
type = GETTYPE(op.type);
size = GETSIZE(op.type);
@@ -272,7 +272,7 @@ static bool stepping_handler(struct pt_regs *regs, struct perf_event *bp,
return false;
}
- if (!emulate_step(regs, instr, 0))
+ if (!emulate_step(regs, instr, sufx))
goto fail;
return true;
--
2.20.1
More information about the Linuxppc-dev
mailing list