From 5d60cd8539b8c931ac157cc4c94e71df094610cd Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Tue, 12 May 2026 21:54:06 +0200 Subject: [PATCH] syscall: add kexec_file_load to the generated override header This makes __NR_kexec_file_load available on architectures where the kernel UAPI headers don't define it, matching the runtime fallback path in src/libc/kexec.c which is gated on #ifdef __NR_kexec_file_load. --- src/include/override/sys/generate-syscall.py | 1 + src/include/override/sys/syscall.h | 70 ++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/src/include/override/sys/generate-syscall.py b/src/include/override/sys/generate-syscall.py index 1c90ad0e38..4391df6da3 100755 --- a/src/include/override/sys/generate-syscall.py +++ b/src/include/override/sys/generate-syscall.py @@ -7,6 +7,7 @@ import functools # We only generate numbers for a dozen or so syscalls SYSCALLS = [ 'fchmodat2', # defined in glibc header since glibc-2.39 + 'kexec_file_load', 'open_tree_attr', 'quotactl_fd', # defined in glibc header since glibc-2.35 'removexattrat', diff --git a/src/include/override/sys/syscall.h b/src/include/override/sys/syscall.h index 0233f254b4..108885b725 100644 --- a/src/include/override/sys/syscall.h +++ b/src/include/override/sys/syscall.h @@ -124,6 +124,76 @@ static_assert(__NR_fchmodat2 == systemd_NR_fchmodat2, ""); # endif #endif +#ifndef __IGNORE_kexec_file_load +# if defined(__aarch64__) +# define systemd_NR_kexec_file_load 294 +# elif defined(__alpha__) +# define systemd_NR_kexec_file_load -1 +# elif defined(__arc__) || defined(__tilegx__) +# define systemd_NR_kexec_file_load 294 +# elif defined(__arm__) +# define systemd_NR_kexec_file_load 401 +# elif defined(__i386__) +# define systemd_NR_kexec_file_load -1 +# elif defined(__ia64__) +# define systemd_NR_kexec_file_load -1 +# elif defined(__loongarch_lp64) +# define systemd_NR_kexec_file_load 294 +# elif defined(__m68k__) +# define systemd_NR_kexec_file_load -1 +# elif defined(_MIPS_SIM) +# if _MIPS_SIM == _MIPS_SIM_ABI32 +# define systemd_NR_kexec_file_load -1 +# elif _MIPS_SIM == _MIPS_SIM_NABI32 +# define systemd_NR_kexec_file_load -1 +# elif _MIPS_SIM == _MIPS_SIM_ABI64 +# define systemd_NR_kexec_file_load -1 +# else +# error "Unknown MIPS ABI" +# endif +# elif defined(__hppa__) +# define systemd_NR_kexec_file_load 355 +# elif defined(__powerpc__) +# define systemd_NR_kexec_file_load 382 +# elif defined(__riscv) +# if __riscv_xlen == 32 +# define systemd_NR_kexec_file_load 294 +# elif __riscv_xlen == 64 +# define systemd_NR_kexec_file_load 294 +# else +# error "Unknown RISC-V ABI" +# endif +# elif defined(__s390__) +# define systemd_NR_kexec_file_load 381 +# elif defined(__sh__) +# define systemd_NR_kexec_file_load -1 +# elif defined(__sparc__) +# define systemd_NR_kexec_file_load -1 +# elif defined(__x86_64__) +# if defined(__ILP32__) +# define systemd_NR_kexec_file_load (320 | /* __X32_SYSCALL_BIT */ 0x40000000) +# else +# define systemd_NR_kexec_file_load 320 +# endif +# elif !defined(missing_arch_template) +# warning "kexec_file_load() syscall number is unknown for your architecture" +# endif + +/* may be an (invalid) negative number due to libseccomp, see PR 13319 */ +# if defined __NR_kexec_file_load && __NR_kexec_file_load >= 0 +# if defined systemd_NR_kexec_file_load +static_assert(__NR_kexec_file_load == systemd_NR_kexec_file_load, ""); +# endif +# else +# if defined __NR_kexec_file_load +# undef __NR_kexec_file_load +# endif +# if defined systemd_NR_kexec_file_load && systemd_NR_kexec_file_load >= 0 +# define __NR_kexec_file_load systemd_NR_kexec_file_load +# endif +# endif +#endif + #ifndef __IGNORE_open_tree_attr # if defined(__aarch64__) # define systemd_NR_open_tree_attr 467