FAILED: patch "[PATCH] ARM: Fix kgdb breakpoint for Thumb2" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d920eaa4c4559f59be7b4c2d26fa0a2e1aaa3da9 Mon Sep 17 00:00:00 2001
From: "Russell King (Oracle)" <[email protected]>
Date: Wed, 16 Feb 2022 15:37:38 +0000
Subject: [PATCH] ARM: Fix kgdb breakpoint for Thumb2
The kgdb code needs to register an undef hook for the Thumb UDF instruction that will fault in order to be functional on Thumb2 platforms.
Reported-by Johannes Stezenbach <[email protected]>
Tested-by Johannes Stezenbach <[email protected]>
Fixes 5cbad0ebf45c ("kgdb: support for ARCH=arm")
Signed-off-by Russell King (Oracle) <[email protected]>
arch/arm/kernel/kgdb.c +28 -8
@@ -154,22 +154,38 @@ static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int instr)return 0 ; } -static struct undef_hook kgdb_brkpt_hook = { +static struct undef_hook kgdb_brkpt_arm_hook = { .instr_mask =0xffffffff , .instr_val =KGDB_BREAKINST , - .cpsr_mask =MODE_MASK , + .cpsr_mask =PSR_T_BIT |MODE_MASK , .cpsr_val =SVC_MODE , .fn = kgdb_brk_fn }; -static struct undef_hook kgdb_compiled_brkpt_hook = { +static struct undef_hook kgdb_brkpt_thumb_hook = { + .instr_mask =0xffff , + .instr_val =KGDB_BREAKINST &0xffff , + .cpsr_mask =PSR_T_BIT |MODE_MASK , + .cpsr_val =PSR_T_BIT |SVC_MODE , + .fn = kgdb_brk_fn +}; + +static struct undef_hook kgdb_compiled_brkpt_arm_hook = { .instr_mask =0xffffffff , .instr_val =KGDB_COMPILED_BREAK , - .cpsr_mask =MODE_MASK , + .cpsr_mask =PSR_T_BIT |MODE_MASK , .cpsr_val =SVC_MODE , .fn = kgdb_compiled_brk_fn }; +static struct undef_hook kgdb_compiled_brkpt_thumb_hook = { + .instr_mask =0xffff , + .instr_val =KGDB_COMPILED_BREAK &0xffff , + .cpsr_mask =PSR_T_BIT |MODE_MASK , + .cpsr_val =PSR_T_BIT |SVC_MODE , + .fn = kgdb_compiled_brk_fn +}; +static int __kgdb_notify (struct die_args *args,unsigned long cmd) {struct pt_regs *regs = args->regs;
@@ -210,8 +226,10 @@ int kgdb_arch_init(void)if (ret !=0 )return ret; -register_undef_hook (&kgdb_brkpt_hook); -register_undef_hook (&kgdb_compiled_brkpt_hook); +register_undef_hook (&kgdb_brkpt_arm_hook); +register_undef_hook (&kgdb_brkpt_thumb_hook); +register_undef_hook (&kgdb_compiled_brkpt_arm_hook); +register_undef_hook (&kgdb_compiled_brkpt_thumb_hook);return 0 ; }
@@ -224,8 +242,10 @@ int kgdb_arch_init(void)*/ void kgdb_arch_exit (void ) { -unregister_undef_hook (&kgdb_brkpt_hook); -unregister_undef_hook (&kgdb_compiled_brkpt_hook); +unregister_undef_hook (&kgdb_brkpt_arm_hook); +unregister_undef_hook (&kgdb_brkpt_thumb_hook); +unregister_undef_hook (&kgdb_compiled_brkpt_arm_hook); +unregister_undef_hook (&kgdb_compiled_brkpt_thumb_hook);unregister_die_notifier (&kgdb_notifier); }