Crash in __do_IRQ with gcc 15
LEROY Christophe
christophe.leroy2 at cs-soprasteria.com
Wed May 21 22:56:01 AEST 2025
Le 14/05/2025 à 04:06, Paul Mackerras a écrit :
> 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.
>
I have now done some tests with both gcc 14 and gcc 15 and they behave
the same, so at the end I think all we need is:
#ifdef CONFIG_PPC_KERNEL_PCREL
without any mention to GCC version.
More information about the Linuxppc-dev
mailing list