On Wed, Aug 12, 2026 at 02:13:00PM +0100, Puranjay Mohan wrote:
> Applying the patch below fixes it:
> 
> -- >8 --
> 
> From 93c99313870d7375ab07e494c2d0d971758578eb Mon Sep 17 00:00:00 2001
> From: Puranjay Mohan <[email protected]>
> Date: Fri, 7 Aug 2026 11:16:29 -0700
> Subject: [PATCH] objtool/klp: Fix vmlinux .klp.symid link error for
>  .exitcall.exit symbols
> 
> Building a kernel via klp-build fails to link:
> 
>   `__exitcall_aes_mod_exit' referenced in section `.klp.symid' of vmlinux.o: 
> defined in discarded section `.exitcall.exit' of vmlinux.o
>   `__exitcall_dax_exit' referenced in section `.klp.symid' of vmlinux.o: 
> defined in discarded section `.exitcall.exit' of vmlinux.o
>   `__exitcall_hid_exit' referenced in section `.klp.symid' of vmlinux.o: 
> defined in discarded section `.exitcall.exit' of vmlinux.o
>   `__exitcall_usb_serial_module_exit' referenced in section `.klp.symid' of 
> vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
> 
> module_exit() on a built-in emits a static __exitcall_$fn pointer into
> .exitcall.exit, which vmlinux.lds.h discards unconditionally via
> EXIT_CALL.  When two built-in translation units define a module_exit()
> function of the same name, the resulting local symbols collide,
> symid_needed() sees a duplicate and emits a .klp.symid entry for each,
> referencing symbols the linker then throws away.
> 
> Same-named module_exit() functions are not rare:
> 
>   dax_exit                drivers/dax/device.c, drivers/dax/fsdev.c
>   hid_exit                drivers/hid/hid-core.c, 
> drivers/hid/usbhid/hid-core.c
>   aes_mod_exit            arch/arm64/crypto/aes-ce-ccm-glue.c, 
> lib/crypto/aes.c
>   usb_serial_module_exit  module_usb_serial_driver() expands to this fixed
>                           name in each of its ~49 users
> 
> The last one makes the collision structural rather than accidental: any
> kernel with two built-in USB serial drivers has it.  This is not arch
> specific either; it only requires the objects to be built in rather than
> modular, which is why a monolithic config trips it while a typical
> distro config does not.
> 
> Add .exitcall.exit to the discarded section list so its symbols don't get
> symids.
> 
> This is the same failure mode as "objtool/klp: Fix vmlinux .klp.symid
> link error for .no_trim_symbol symbols", for another unconditionally
> discarded allocated section.
> 
> Fixes: 029223d30162 ("objtool/klp: Add .klp.symid for sympos disambiguation")
> Signed-off-by: Puranjay Mohan <[email protected]>

Indeed, I'll add it to the queue, thanks!

-- 
Josh

Reply via email to