On Tue, Feb 28, 2023 at 11:35 AM Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx> wrote: > > Clang is unable to handle the situation that a chunk of inline > assembly ends with a compat branch instruction and then compiler > generates another control transfer instruction immediately after > this compat branch. The later instruction will end up in forbidden > slot and cause exception. > > Workaround by add a option to control the use of compact branch. > Currently it's selected by CC_IS_CLANG and hopefully we can change > it to a version check in future if clang manages to fix it. > > Fix boot on boston board. > > Link: https://github.com/llvm/llvm-project/issues/61045 > Signed-off-by: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx> > Acked-by: Nathan Chancellor <nathan@xxxxxxxxxx> Thanks for the patch! Acked-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > --- > v2: Add Link tag to LLVM bug > v3: Docuement issue link in Kconfig as well > --- > arch/mips/Kconfig | 4 ++++ > arch/mips/include/asm/asm.h | 2 +- > 2 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig > index 37072e15b263..c8b878aa690f 100644 > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > @@ -3206,6 +3206,10 @@ config CC_HAS_MNO_BRANCH_LIKELY > def_bool y > depends on $(cc-option,-mno-branch-likely) > > +# https://github.com/llvm/llvm-project/issues/61045 > +config CC_HAS_BROKEN_INLINE_COMPAT_BRANCH > + def_bool y if CC_IS_CLANG > + > menu "Power management options" > > config ARCH_HIBERNATION_POSSIBLE > diff --git a/arch/mips/include/asm/asm.h b/arch/mips/include/asm/asm.h > index 336ac9b65235..2e99450f4228 100644 > --- a/arch/mips/include/asm/asm.h > +++ b/arch/mips/include/asm/asm.h > @@ -336,7 +336,7 @@ symbol = value > */ > #ifdef CONFIG_WAR_R10000_LLSC > # define SC_BEQZ beqzl > -#elif MIPS_ISA_REV >= 6 > +#elif !defined(CONFIG_CC_HAS_BROKEN_INLINE_COMPAT_BRANCH) && MIPS_ISA_REV >= 6 > # define SC_BEQZ beqzc > #else > # define SC_BEQZ beqz > -- > 2.37.1 (Apple Git-137.1) > > -- Thanks, ~Nick Desaulniers