Re: [PATCH] arm: mediatek: fix secondary CPU boot on Thumb-2 kernels with Clang
Akari Tsuyukusa <[email protected]> Thu, 23 Jul 2026 18:15:47 +0900
| Newsgroups | dev.linux.lists.llvm,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <amHYO1c-5vzqSekt@buffalo-ssd> |
Hi Nick, On Wed, Jul 22, 2026 at 02:03:31PM -0700, Nick Desaulniers wrote: > On Wed, Jul 22, 2026 at 10:25 AM Akari Tsuyukusa <[email protected]> wrote: > > > > When building with CONFIG_THUMB2_KERNEL=y and Clang, secondary CPUs > > Specifically, was LLVM=1 or CC=clang or something else used? I used ARCH=arm LLVM=1 config is here: https://github.com/TeamYogaBlade2/linux/blob/d7633f01ec25209fc6cdde012128b19ac336ab18/arch/arm/configs/lenovo-blade_defconfig > > secondary_startup_arm is ARM-mode code (.arm) and, on a Thumb-2 kernel, > > expects to be entered in ARM mode in order to switch to Thumb via the > > standard sequence at that label. Starting in Thumb mode causes the CPU > > to execute ARM instructions as Thumb, resulting in an immediate crash. > > > > Clear bit 0 of the entry address so the CPU always starts in ARM mode. > > Thanks for the patch. Any idea why this isn't an issue for > GCC+GAS+BFD? Perhaps there's a difference in the LLVM tools that we > need to address? > > There's definitely some difference between clang and GAS here. > https://github.com/llvm/llvm-project/issues/211376 > > I wonder if perhaps a better machine-agnostic assembler-agnostic > assembler-version-agnostic patch would be something like: > > ``` > diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S > index f22c50d4bd41..687ee7063a73 100644 > --- a/arch/arm/kernel/head.S > +++ b/arch/arm/kernel/head.S > @@ -383,6 +383,7 @@ ENDPROC(__create_page_tables) > ENTRY(secondary_startup_arm) > THUMB( badr r9, 1f ) @ Kernel is entered in ARM. > THUMB( bx r9 ) @ If this is a Thumb-2 kernel, > +ENDPROC(secondary_startup_arm) > THUMB( .thumb ) @ switch to Thumb now. > THUMB(1: ) > ENTRY(secondary_startup) > @@ -429,7 +430,6 @@ ARM_BE8(eor r4, r4, r5) @ > without using a temp reg. > @ (return control reg) > ret r12 > ENDPROC(secondary_startup) > -ENDPROC(secondary_startup_arm) > > ENTRY(__secondary_switched) > #if defined(CONFIG_VMAP_STACK) && !defined(CONFIG_ARM_LPAE) > > ``` > > Can you perhaps help test/verify that Akari? I tested your suggested patch and confirmed that it fixes the issue. Device: Lenovo YOGA Tablet 10 (Wi-Fi) (MT8125) Toolchain: Clang/LLVM 22.1.8-2 (cachyos-v3) Tested-by: Akari Tsuyukusa <[email protected]> Can you send your fix as PATCH? I think your approach is better than mine. Best Regards, Akari