Crash in __do_IRQ with gcc 15
Paul Mackerras
paulus at ozlabs.org
Wed May 14 12:06:41 AEST 2025
On Sun, May 11, 2025 at 06:32:25PM +0530, Madhavan Srinivasan wrote:
>
> Can you try with this patch, I am testing this in my setup.
>
> Maddy
>
>
> diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
> index a0e8b998c9b5..2ce7a4f2b2fb 100644
> --- a/arch/powerpc/kernel/irq.c
> +++ b/arch/powerpc/kernel/irq.c
> @@ -276,7 +276,11 @@ static __always_inline void call_do_irq(struct pt_regs *regs, void *sp)
> [callee] "i" (__do_irq)
> : // Clobbers
> "lr", "xer", "ctr", "memory", "cr0", "cr1", "cr5", "cr6",
> +#if __GNUC__ >= 15
> + "cr7", "r0", "r2", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
> +#else
> "cr7", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
> +#endif
> "r11", "r12"
> );
> }
That works as long as I have CONFIG_PPC_KERNEL_PCREL enabled, but with
it disabled, it fails to compile. With PCREL disabled, the kernel
runs just fine without the r2 clobber. I guess it needs to be:
#if __GNUC__ >= 15 && IS_ENABLED(CONFIG_PPC_KERNEL_PCREL)
or something like that.
Thanks,
Paul.
More information about the Linuxppc-dev
mailing list