On Mon, 21 Mar 2011, Tixy wrote:
From: Jon Medhurst tixy@yxit.co.uk
Signed-off-by: Jon Medhurst tixy@yxit.co.uk
arch/arm/kernel/traps.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 21ac43f..6468100 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c @@ -356,7 +356,12 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs) pc = (void __user *)instruction_pointer(regs); if (processor_mode(regs) == SVC_MODE) {
instr = *(u32 *) pc;
+#ifdef CONFIG_THUMB2_KERNEL
if (thumb_mode(regs))
instr = *(u16 *) pc;
else
+#endif
instr = *(u32 *) pc;
Although I suggested always using a 16-bit instruction for kprobe breakpoint, the above looks to be broken for 32-bit Thumb instructions.
Nicolas