Re: include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'
From: Thomas Gleixner
Date: Fri Sep 04 2026 - 18:45:29 EST
On Fri, Sep 04 2026 at 21:42, Philip Li wrote:
> On Thu, Sep 03, 2026 at 10:03:56PM +0200, Thomas Gleixner wrote:
>> > All errors (new ones prefixed by >>):
>> >
>> > riscv64-linux-ld: arch/riscv/kernel/traps.o: in function `__exit_to_user_mode_validate':
>> >>> include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'
>>
>> Seriously?
>>
>> >
>> > vim +218 include/linux/irq-entry-common.h
>> >
>> > a70e9f647f501e3 Jinjie Ruan 2025-06-24 212
>> > 70fe25a3bc53a89 Thomas Gleixner 2025-10-27 213 static __always_inline void __exit_to_user_mode_validate(void)
>> > 70fe25a3bc53a89 Thomas Gleixner 2025-10-27 214 {
>> > a70e9f647f501e3 Jinjie Ruan 2025-06-24 215 /* Ensure that kernel state is sane for a return to userspace */
>> > a70e9f647f501e3 Jinjie Ruan 2025-06-24 216 kmap_assert_nomap();
>> > a70e9f647f501e3 Jinjie Ruan 2025-06-24 217 lockdep_assert_irqs_disabled();
>> > a70e9f647f501e3 Jinjie Ruan 2025-06-24 @218 lockdep_sys_exit();
>>
>> What the heck has line 218 to do with that failure?
>>
>> This is getting stupid. It seems there is yet another compiler aside of
>> s390 gcc which fails to do dead code elimination but this time it's
>> worse it also points to the wrong place ....
>
> Sorry for the confusion, I give a try with riscv gcc 12.5.0 for the same kconfig, the
> result is below
>
> include/asm-generic/preempt.h:54:(.noinstr.text+0x1a20): undefined reference to 'syscall_enter_audit'
which has nothing to do with the unresolved reference either. preempt.h
definitely does not invoke syscall_enter_audit(). I love broken tools.
IIRC I saw something like this before with some broken S390 compiler
failing to eliminate the call because it out of lined the condition
inline which when inlined causes the dead code elimination to get rid of
it. I'll grab that config tomorrow and look at the output.