]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
src/basic: generate missing syscall headers programatically 18263/head
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 15 Jan 2021 16:06:19 +0000 (17:06 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 15 Jan 2021 17:36:16 +0000 (18:36 +0100)
Getting the numbers right for all architectures has proven to be a
constant chore. Let's autogenerate the header from the tables that
were imported in one of the previous commits.

Fixes #18074. (Hopefully. I cannot verify this on all architectures.)

To update the lists, or to update the header after template changes:
ninja -C build update-syscall-tables update-syscall-header

Note: the generated file is saved in git. Initially I wanted to only
store the tables in git, and generate the header during each build.
Generation is quick enough, but the header is used in many many
places (wherever missing_syscall.h is included, directly or indirectly),
which means that we would need to declare the dependency in meson, so
the header would be generated early enough. This turned out to be very
noisy. Storing the generated header in version control avoids the hassle.

src/basic/meson.build
src/basic/missing_syscall.h
src/basic/missing_syscall_def.h [new file with mode: 0644]
src/basic/missing_syscalls.py [new file with mode: 0644]

index 84e5ad481fd62dd41fb47068750dffd7e4bc0a40..d791f77c6525cbdc12411bb116e466d4ebe7d1b1 100644 (file)
@@ -262,6 +262,9 @@ missing_audit_h = files('missing_audit.h')
 missing_capability_h = files('missing_capability.h')
 missing_socket_h = files('missing_socket.h')
 
+missing_syscall_def_h = files('missing_syscall_def.h')
+basic_sources += missing_syscall_def_h
+
 generate_af_list = find_program('generate-af-list.sh')
 af_list_txt = custom_target(
         'af-list.txt',
@@ -330,32 +333,6 @@ foreach item : [['af',     af_list_txt,     'af',         ''],
 endforeach
 
 basic_sources += generated_gperf_headers
-basic_gcrypt_sources = files(
-        'gcrypt-util.c',
-        'gcrypt-util.h')
-
-libbasic = static_library(
-        'basic',
-        basic_sources,
-        include_directories : includes,
-        dependencies : [versiondep,
-                        threads,
-                        libcap,
-                        libseccomp,
-                        libselinux,
-                        libm,
-                        libdl],
-        c_args : ['-fvisibility=default'],
-        install : false)
-
-# A convenience library that is separate from libbasic to avoid
-# unnecessary linking to libgcrypt.
-libbasic_gcrypt = static_library(
-        'basic-gcrypt',
-        basic_gcrypt_sources,
-        include_directories : includes,
-        dependencies : [libgcrypt],
-        c_args : ['-fvisibility=default'])
 
 ############################################################
 
@@ -382,3 +359,47 @@ run_target(
         command : [syscall_table_update_sh, meson.current_source_dir()] + arch_list)
 
 syscall_names_text = files('syscall-names.text')
+
+syscall_lists = []
+foreach arch: arch_list
+        syscall_lists += files('syscalls-@0@'.format(arch))
+endforeach
+
+missing_syscalls_py = find_program('missing_syscalls.py')
+
+run_target(
+        'update-syscall-header',
+        command : [missing_syscalls_py,
+                   missing_syscall_def_h,
+                   syscall_lists])
+
+############################################################
+
+libbasic = static_library(
+        'basic',
+        basic_sources,
+        include_directories : includes,
+        dependencies : [versiondep,
+                        threads,
+                        libcap,
+                        libseccomp,
+                        libselinux,
+                        libm,
+                        libdl],
+        c_args : ['-fvisibility=default'],
+        install : false)
+
+############################################################
+
+basic_gcrypt_sources = files(
+        'gcrypt-util.c',
+        'gcrypt-util.h')
+
+# A convenience library that is separate from libbasic to avoid
+# unnecessary linking to libgcrypt.
+libbasic_gcrypt = static_library(
+        'basic-gcrypt',
+        basic_gcrypt_sources,
+        include_directories : includes,
+        dependencies : [libgcrypt],
+        c_args : ['-fvisibility=default'])
index 06166b3fb3f3fa30ce132633981e78f8351a4769..52e9d5dea48dd73f00aeadad08ffe37c1979b4ff 100644 (file)
 #include <asm/sgidefs.h>
 #endif
 
-#if defined(__alpha__)
-#  define systemd_SC_arch_bias(x) (110 + (x))
-#elif defined(__ia64__)
-#  define systemd_SC_arch_bias(x) (1024 + (x))
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_SC_arch_bias(x) (4000 + (x))
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_SC_arch_bias(x) (6000 + (x))
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_SC_arch_bias(x) (5000 + (x))
-#  else
-#    error "Unknown MIPS ABI"
-#  endif
-#elif defined(__x86_64__) && defined(__ILP32__)
-#  define systemd_SC_arch_bias(x) ((x) | /* __X32_SYSCALL_BIT */ 0x40000000)
-#else
-#  define systemd_SC_arch_bias(x) (x)
-#endif
-
 #include "missing_keyctl.h"
 #include "missing_stat.h"
+#include "missing_syscall_def.h"
 
 /* linux/kcmp.h */
 #ifndef KCMP_FILE /* 3f4994cfc15f38a3159c6e3a4b3ab2e1481a6b02 (3.19) */
 #define KCMP_FILE 0
 #endif
 
+/* ======================================================================= */
+
 #if !HAVE_PIVOT_ROOT
 static inline int missing_pivot_root(const char *new_root, const char *put_old) {
         return syscall(__NR_pivot_root, new_root, put_old);
@@ -53,54 +36,6 @@ static inline int missing_pivot_root(const char *new_root, const char *put_old)
 
 /* ======================================================================= */
 
-#if defined(__aarch64__)
-#  define systemd_NR_memfd_create 279
-#elif defined(__alpha__)
-#  define systemd_NR_memfd_create 512
-#elif defined(__arc__) || defined(__tilegx__)
-#  define systemd_NR_memfd_create 279
-#elif defined(__arm__)
-#  define systemd_NR_memfd_create 385
-#elif defined(__i386__)
-#  define systemd_NR_memfd_create 356
-#elif defined(__ia64__)
-#  define systemd_NR_memfd_create systemd_SC_arch_bias(316)
-#elif defined(__m68k__)
-#  define systemd_NR_memfd_create 353
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_NR_memfd_create systemd_SC_arch_bias(354)
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_NR_memfd_create systemd_SC_arch_bias(318)
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_NR_memfd_create systemd_SC_arch_bias(314)
-#  endif
-#elif defined(__powerpc__)
-#  define systemd_NR_memfd_create 360
-#elif defined(__s390__)
-#  define systemd_NR_memfd_create 350
-#elif defined(__sparc__)
-#  define systemd_NR_memfd_create 348
-#elif defined(__x86_64__)
-#  define systemd_NR_memfd_create systemd_SC_arch_bias(319)
-#else
-#  warning "memfd_create() syscall number is unknown for your architecture"
-#endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_memfd_create && __NR_memfd_create >= 0
-#  if defined systemd_NR_memfd_create
-assert_cc(__NR_memfd_create == systemd_NR_memfd_create);
-#  endif
-#else
-#  if defined __NR_memfd_create
-#    undef __NR_memfd_create
-#  endif
-#  if defined systemd_NR_memfd_create
-#    define __NR_memfd_create systemd_NR_memfd_create
-#  endif
-#endif
-
 #if !HAVE_MEMFD_CREATE
 static inline int missing_memfd_create(const char *name, unsigned int flags) {
 #  ifdef __NR_memfd_create
@@ -116,54 +51,6 @@ static inline int missing_memfd_create(const char *name, unsigned int flags) {
 
 /* ======================================================================= */
 
-#if defined(__aarch64__)
-#  define systemd_NR_getrandom 278
-#elif defined(__alpha__)
-#  define systemd_NR_getrandom 511
-#elif defined(__arc__) || defined(__tilegx__)
-#  define systemd_NR_getrandom 278
-#elif defined(__arm__)
-#  define systemd_NR_getrandom 384
-#elif defined(__i386__)
-#  define systemd_NR_getrandom 355
-#elif defined(__ia64__)
-#  define systemd_NR_getrandom systemd_SC_arch_bias(318)
-#elif defined(__m68k__)
-#  define systemd_NR_getrandom 352
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_NR_getrandom systemd_SC_arch_bias(353)
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_NR_getrandom systemd_SC_arch_bias(317)
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_NR_getrandom systemd_SC_arch_bias(313)
-#  endif
-#elif defined(__powerpc__)
-#  define systemd_NR_getrandom 359
-#elif defined(__s390__)
-#  define systemd_NR_getrandom 349
-#elif defined(__sparc__)
-#  define systemd_NR_getrandom 347
-#elif defined(__x86_64__)
-#  define systemd_NR_getrandom systemd_SC_arch_bias(318)
-#else
-#  warning "getrandom() syscall number is unknown for your architecture"
-#endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_getrandom && __NR_getrandom >= 0
-#  if defined systemd_NR_getrandom
-assert_cc(__NR_getrandom == systemd_NR_getrandom);
-#  endif
-#else
-#  if defined __NR_getrandom
-#    undef __NR_getrandom
-#  endif
-#  if defined systemd_NR_getrandom
-#    define __NR_getrandom systemd_NR_getrandom
-#  endif
-#endif
-
 #if !HAVE_GETRANDOM
 static inline int missing_getrandom(void *buffer, size_t count, unsigned flags) {
 #  ifdef __NR_getrandom
@@ -194,54 +81,6 @@ static inline pid_t missing_gettid(void) {
 
 /* ======================================================================= */
 
-#if defined(__aarch64__)
-#  define systemd_NR_name_to_handle_at 264
-#elif defined(__alpha__)
-#  define systemd_NR_name_to_handle_at 497
-#elif defined(__arc__) || defined(__tilegx__)
-#  define systemd_NR_name_to_handle_at 264
-#elif defined(__arm__)
-#  define systemd_NR_name_to_handle_at 370
-#elif defined(__i386__)
-#  define systemd_NR_name_to_handle_at 341
-#elif defined(__ia64__)
-#  define systemd_NR_name_to_handle_at systemd_SC_arch_bias(302)
-#elif defined(__m68k__)
-#  define systemd_NR_name_to_handle_at 340
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_NR_name_to_handle_at systemd_SC_arch_bias(339)
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_NR_name_to_handle_at systemd_SC_arch_bias(303)
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_NR_name_to_handle_at systemd_SC_arch_bias(298)
-#  endif
-#elif defined(__powerpc__)
-#  define systemd_NR_name_to_handle_at 345
-#elif defined(__s390__)
-#  define systemd_NR_name_to_handle_at 335
-#elif defined(__sparc__)
-#  define systemd_NR_name_to_handle_at 332
-#elif defined(__x86_64__)
-#  define systemd_NR_name_to_handle_at systemd_SC_arch_bias(303)
-#else
-#  warning "name_to_handle_at() syscall number is unknown for your architecture"
-#endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_name_to_handle_at && __NR_name_to_handle_at >= 0
-#  if defined systemd_NR_name_to_handle_at
-assert_cc(__NR_name_to_handle_at == systemd_NR_name_to_handle_at);
-#  endif
-#else
-#  if defined __NR_name_to_handle_at
-#    undef __NR_name_to_handle_at
-#  endif
-#  if defined systemd_NR_name_to_handle_at
-#    define __NR_name_to_handle_at systemd_NR_name_to_handle_at
-#  endif
-#endif
-
 #if !HAVE_NAME_TO_HANDLE_AT
 struct file_handle {
         unsigned int handle_bytes;
@@ -263,54 +102,6 @@ static inline int missing_name_to_handle_at(int fd, const char *name, struct fil
 
 /* ======================================================================= */
 
-#if defined(__aarch64__)
-#  define systemd_NR_setns 268
-#elif defined(__alpha__)
-#  define systemd_NR_setns 501
-#elif defined(__arc__) || defined(__tilegx__)
-#  define systemd_NR_setns 268
-#elif defined(__arm__)
-#  define systemd_NR_setns 375
-#elif defined(__i386__)
-#  define systemd_NR_setns 346
-#elif defined(__ia64__)
-#  define systemd_NR_setns systemd_SC_arch_bias(306)
-#elif defined(__m68k__)
-#  define systemd_NR_setns 344
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_NR_setns systemd_SC_arch_bias(344)
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_NR_setns systemd_SC_arch_bias(308)
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_NR_setns systemd_SC_arch_bias(303)
-#  endif
-#elif defined(__powerpc__)
-#  define systemd_NR_setns 350
-#elif defined(__s390__)
-#  define systemd_NR_setns 339
-#elif defined(__sparc__)
-#  define systemd_NR_setns 337
-#elif defined(__x86_64__)
-#  define systemd_NR_setns systemd_SC_arch_bias(308)
-#else
-#  warning "setns() syscall number is unknown for your architecture"
-#endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_setns && __NR_setns >= 0
-#  if defined systemd_NR_setns
-assert_cc(__NR_setns == systemd_NR_setns);
-#  endif
-#else
-#  if defined __NR_setns
-#    undef __NR_setns
-#  endif
-#  if defined systemd_NR_setns
-#    define __NR_setns systemd_NR_setns
-#  endif
-#endif
-
 #if !HAVE_SETNS
 static inline int missing_setns(int fd, int nstype) {
 #  ifdef __NR_setns
@@ -336,54 +127,6 @@ static inline pid_t raw_getpid(void) {
 
 /* ======================================================================= */
 
-#if defined(__aarch64__)
-#  define systemd_NR_renameat2 276
-#elif defined(__alpha__)
-#  define systemd_NR_renameat2 510
-#elif defined(__arc__) || defined(__tilegx__)
-#  define systemd_NR_renameat2 276
-#elif defined(__arm__)
-#  define systemd_NR_renameat2 382
-#elif defined(__i386__)
-#  define systemd_NR_renameat2 353
-#elif defined(__ia64__)
-#  define systemd_NR_renameat2 systemd_SC_arch_bias(314)
-#elif defined(__m68k__)
-#  define systemd_NR_renameat2 351
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_NR_renameat2 systemd_SC_arch_bias(351)
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_NR_renameat2 systemd_SC_arch_bias(315)
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_NR_renameat2 systemd_SC_arch_bias(311)
-#  endif
-#elif defined(__powerpc__)
-#  define systemd_NR_renameat2 357
-#elif defined(__s390__)
-#  define systemd_NR_renameat2 347
-#elif defined(__sparc__)
-#  define systemd_NR_renameat2 345
-#elif defined(__x86_64__)
-#  define systemd_NR_renameat2 systemd_SC_arch_bias(316)
-#else
-#  warning "renameat2() syscall number is unknown for your architecture"
-#endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_renameat2 && __NR_renameat2 >= 0
-#  if defined systemd_NR_renameat2
-assert_cc(__NR_renameat2 == systemd_NR_renameat2);
-#  endif
-#else
-#  if defined __NR_renameat2
-#    undef __NR_renameat2
-#  endif
-#  if defined systemd_NR_renameat2
-#    define __NR_renameat2 systemd_NR_renameat2
-#  endif
-#endif
-
 #if !HAVE_RENAMEAT2
 static inline int missing_renameat2(int oldfd, const char *oldname, int newfd, const char *newname, unsigned flags) {
 #  ifdef __NR_renameat2
@@ -451,54 +194,6 @@ static inline key_serial_t missing_request_key(const char *type, const char *des
 
 /* ======================================================================= */
 
-#if defined(__aarch64__)
-#  define systemd_NR_copy_file_range 285
-#elif defined(__alpha__)
-#  define systemd_NR_copy_file_range 519
-#elif defined(__arc__) || defined(__tilegx__)
-#  define systemd_NR_copy_file_range 285
-#elif defined(__arm__)
-#  define systemd_NR_copy_file_range 391
-#elif defined(__i386__)
-#  define systemd_NR_copy_file_range 377
-#elif defined(__ia64__)
-#  define systemd_NR_copy_file_range systemd_SC_arch_bias(323)
-#elif defined(__m68k__)
-#  define systemd_NR_copy_file_range 376
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_NR_copy_file_range systemd_SC_arch_bias(360)
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_NR_copy_file_range systemd_SC_arch_bias(324)
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_NR_copy_file_range systemd_SC_arch_bias(320)
-#  endif
-#elif defined(__powerpc__)
-#  define systemd_NR_copy_file_range 379
-#elif defined(__s390__)
-#  define systemd_NR_copy_file_range 375
-#elif defined(__sparc__)
-#  define systemd_NR_copy_file_range 357
-#elif defined(__x86_64__)
-#  define systemd_NR_copy_file_range systemd_SC_arch_bias(326)
-#else
-#  warning "copy_file_range() syscall number is unknown for your architecture"
-#endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_copy_file_range && __NR_copy_file_range >= 0
-#  if defined systemd_NR_copy_file_range
-assert_cc(__NR_copy_file_range == systemd_NR_copy_file_range);
-#  endif
-#else
-#  if defined __NR_copy_file_range
-#    undef __NR_copy_file_range
-#  endif
-#  if defined systemd_NR_copy_file_range
-#    define __NR_copy_file_range systemd_NR_copy_file_range
-#  endif
-#endif
-
 #if !HAVE_COPY_FILE_RANGE
 static inline ssize_t missing_copy_file_range(int fd_in, loff_t *off_in,
                                               int fd_out, loff_t *off_out,
@@ -517,54 +212,6 @@ static inline ssize_t missing_copy_file_range(int fd_in, loff_t *off_in,
 
 /* ======================================================================= */
 
-#if defined(__aarch64__)
-#  define systemd_NR_bpf 280
-#elif defined(__alpha__)
-#  define systemd_NR_bpf 515
-#elif defined(__arc__) || defined(__tilegx__)
-#  define systemd_NR_bpf 280
-#elif defined(__arm__)
-#  define systemd_NR_bpf 386
-#elif defined(__i386__)
-#  define systemd_NR_bpf 357
-#elif defined(__ia64__)
-#  define systemd_NR_bpf systemd_SC_arch_bias(317)
-#elif defined(__m68k__)
-#  define systemd_NR_bpf 354
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_NR_bpf systemd_SC_arch_bias(355)
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_NR_bpf systemd_SC_arch_bias(319)
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_NR_bpf systemd_SC_arch_bias(315)
-#  endif
-#elif defined(__powerpc__)
-#  define systemd_NR_bpf 361
-#elif defined(__s390__)
-#  define systemd_NR_bpf 351
-#elif defined(__sparc__)
-#  define systemd_NR_bpf 349
-#elif defined(__x86_64__)
-#  define systemd_NR_bpf systemd_SC_arch_bias(321)
-#else
-#  warning "bpf() syscall number is unknown for your architecture"
-#endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_bpf && __NR_bpf >= 0
-#  if defined systemd_NR_bpf
-assert_cc(__NR_bpf == systemd_NR_bpf);
-#  endif
-#else
-#  if defined __NR_bpf
-#    undef __NR_bpf
-#  endif
-#  if defined systemd_NR_bpf
-#    define __NR_bpf systemd_NR_bpf
-#  endif
-#endif
-
 #if !HAVE_BPF
 union bpf_attr;
 
@@ -582,106 +229,6 @@ static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
 
 /* ======================================================================= */
 
-#ifndef __IGNORE_pkey_mprotect
-#  if defined(__aarch64__)
-#    define systemd_NR_pkey_mprotect 288
-#  elif defined(__alpha__)
-#    define systemd_NR_pkey_mprotect 524
-#  elif defined(__arc__) || defined(__tilegx__)
-#    define systemd_NR_pkey_mprotect 226
-#  elif defined(__arm__)
-#    define systemd_NR_pkey_mprotect 394
-#  elif defined(__i386__)
-#    define systemd_NR_pkey_mprotect 380
-#  elif defined(__ia64__)
-#    define systemd_NR_pkey_mprotect systemd_SC_arch_bias(330)
-#  elif defined(__m68k__)
-#    define systemd_NR_pkey_mprotect 381
-#  elif defined(_MIPS_SIM)
-#    if _MIPS_SIM == _MIPS_SIM_ABI32
-#      define systemd_NR_pkey_mprotect systemd_SC_arch_bias(363)
-#    elif _MIPS_SIM == _MIPS_SIM_NABI32
-#      define systemd_NR_pkey_mprotect systemd_SC_arch_bias(327)
-#    elif _MIPS_SIM == _MIPS_SIM_ABI64
-#      define systemd_NR_pkey_mprotect systemd_SC_arch_bias(323)
-#    endif
-#  elif defined(__powerpc__)
-#    define systemd_NR_pkey_mprotect 386
-#  elif defined(__s390__)
-#    define systemd_NR_pkey_mprotect 384
-#  elif defined(__sparc__)
-#    define systemd_NR_pkey_mprotect 362
-#  elif defined(__x86_64__)
-#    define systemd_NR_pkey_mprotect systemd_SC_arch_bias(329)
-#  else
-#    warning "pkey_mprotect() syscall number is unknown for your architecture"
-#  endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#  if defined __NR_pkey_mprotect && __NR_pkey_mprotect >= 0
-#    if defined systemd_NR_pkey_mprotect
-assert_cc(__NR_pkey_mprotect == systemd_NR_pkey_mprotect);
-#    endif
-#  else
-#    if defined __NR_pkey_mprotect
-#      undef __NR_pkey_mprotect
-#    endif
-#    if defined systemd_NR_pkey_mprotect
-#      define __NR_pkey_mprotect systemd_NR_pkey_mprotect
-#    endif
-#  endif
-#endif
-
-/* ======================================================================= */
-
-#if defined(__aarch64__)
-#  define systemd_NR_statx 291
-#elif defined(__alpha__)
-#  define systemd_NR_statx 522
-#elif defined(__arc__) || defined(__tilegx__)
-#  define systemd_NR_statx 291
-#elif defined(__arm__)
-#  define systemd_NR_statx 397
-#elif defined(__i386__)
-#  define systemd_NR_statx 383
-#elif defined(__ia64__)
-#  define systemd_NR_statx systemd_SC_arch_bias(326)
-#elif defined(__m68k__)
-#  define systemd_NR_statx 379
-#elif defined(_MIPS_SIM)
-#  if _MIPS_SIM == _MIPS_SIM_ABI32
-#    define systemd_NR_statx systemd_SC_arch_bias(366)
-#  elif _MIPS_SIM == _MIPS_SIM_NABI32
-#    define systemd_NR_statx systemd_SC_arch_bias(330)
-#  elif _MIPS_SIM == _MIPS_SIM_ABI64
-#    define systemd_NR_statx systemd_SC_arch_bias(326)
-#  endif
-#elif defined(__powerpc__)
-#  define systemd_NR_statx 383
-#elif defined(__s390__)
-#  define systemd_NR_statx 379
-#elif defined(__sparc__)
-#  define systemd_NR_statx 360
-#elif defined(__x86_64__)
-#  define systemd_NR_statx systemd_SC_arch_bias(332)
-#else
-#  warning "statx() syscall number is unknown for your architecture"
-#endif
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_statx && __NR_statx >= 0
-#  if defined systemd_NR_statx
-assert_cc(__NR_statx == systemd_NR_statx);
-#  endif
-#else
-#  if defined __NR_statx
-#    undef __NR_statx
-#  endif
-#  if defined systemd_NR_statx
-#    define __NR_statx systemd_NR_statx
-#  endif
-#endif
-
 #if !HAVE_STATX
 struct statx;
 
@@ -747,21 +294,6 @@ static inline long missing_get_mempolicy(int *mode, unsigned long *nodemask,
 
 /* ======================================================================= */
 
-/* should be always defined, see kernel 39036cd2727395c3369b1051005da74059a85317 */
-#define systemd_NR_pidfd_send_signal systemd_SC_arch_bias(424)
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_pidfd_send_signal && __NR_pidfd_send_signal >= 0
-#  if defined systemd_NR_pidfd_send_signal
-assert_cc(__NR_pidfd_send_signal == systemd_NR_pidfd_send_signal);
-#  endif
-#else
-#  if defined __NR_pidfd_send_signal
-#    undef __NR_pidfd_send_signal
-#  endif
-#  define __NR_pidfd_send_signal systemd_NR_pidfd_send_signal
-#endif
-
 #if !HAVE_PIDFD_SEND_SIGNAL
 static inline int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, unsigned flags) {
 #  ifdef __NR_pidfd_send_signal
@@ -775,21 +307,6 @@ static inline int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, un
 #  define pidfd_send_signal missing_pidfd_send_signal
 #endif
 
-/* should be always defined, see kernel 7615d9e1780e26e0178c93c55b73309a5dc093d7 */
-#define systemd_NR_pidfd_open systemd_SC_arch_bias(434)
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_pidfd_open && __NR_pidfd_open >= 0
-#  if defined systemd_NR_pidfd_open
-assert_cc(__NR_pidfd_open == systemd_NR_pidfd_open);
-#  endif
-#else
-#  if defined __NR_pidfd_open
-#    undef __NR_pidfd_open
-#  endif
-#  define __NR_pidfd_open systemd_NR_pidfd_open
-#endif
-
 #if !HAVE_PIDFD_OPEN
 static inline int missing_pidfd_open(pid_t pid, unsigned flags) {
 #  ifdef __NR_pidfd_open
@@ -838,22 +355,6 @@ static inline int missing_execveat(int dirfd, const char *pathname,
 
 /* ======================================================================= */
 
-#define systemd_NR_close_range systemd_SC_arch_bias(436)
-
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
-#if defined __NR_close_range && __NR_close_range >= 0
-#  if defined systemd_NR_close_range
-assert_cc(__NR_close_range == systemd_NR_close_range);
-#  endif
-#else
-#  if defined __NR_close_range
-#    undef __NR_close_range
-#  endif
-#  if defined systemd_NR_close_range
-#    define __NR_close_range systemd_NR_close_range
-#  endif
-#endif
-
 #if !HAVE_CLOSE_RANGE
 static inline int missing_close_range(int first_fd, int end_fd, unsigned flags) {
 #  ifdef __NR_close_range
diff --git a/src/basic/missing_syscall_def.h b/src/basic/missing_syscall_def.h
new file mode 100644 (file)
index 0000000..5117075
--- /dev/null
@@ -0,0 +1,674 @@
+/* This file is generated. Do not edit! */
+
+#ifndef __IGNORE_bpf
+#  if defined(__aarch64__)
+#    define systemd_NR_bpf 280
+#  elif defined(__alpha__)
+#    define systemd_NR_bpf 515
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_bpf 280
+#  elif defined(__arm__)
+#    define systemd_NR_bpf 386
+#  elif defined(__i386__)
+#    define systemd_NR_bpf 357
+#  elif defined(__ia64__)
+#    define systemd_NR_bpf 1341
+#  elif defined(__m68k__)
+#    define systemd_NR_bpf 354
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_bpf 4355
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_bpf 6319
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_bpf 5315
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_bpf 361
+#  elif defined(__s390__)
+#    define systemd_NR_bpf 351
+#  elif defined(__sparc__)
+#    define systemd_NR_bpf 349
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_bpf (321 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_bpf 321
+#    endif
+#  else
+#    warning "bpf() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_bpf && __NR_bpf >= 0
+#    if defined systemd_NR_bpf
+assert_cc(__NR_bpf == systemd_NR_bpf);
+#    endif
+#  else
+#    if defined __NR_bpf
+#      undef __NR_bpf
+#    endif
+#    if defined systemd_NR_bpf && systemd_NR_bpf >= 0
+#      define __NR_bpf systemd_NR_bpf
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_close_range
+#  if defined(__aarch64__)
+#    define systemd_NR_close_range 436
+#  elif defined(__alpha__)
+#    define systemd_NR_close_range 546
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_close_range 436
+#  elif defined(__arm__)
+#    define systemd_NR_close_range 436
+#  elif defined(__i386__)
+#    define systemd_NR_close_range 436
+#  elif defined(__ia64__)
+#    define systemd_NR_close_range 1460
+#  elif defined(__m68k__)
+#    define systemd_NR_close_range 436
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_close_range 4436
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_close_range 6436
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_close_range 5436
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_close_range 436
+#  elif defined(__s390__)
+#    define systemd_NR_close_range 436
+#  elif defined(__sparc__)
+#    define systemd_NR_close_range 436
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_close_range (436 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_close_range 436
+#    endif
+#  else
+#    warning "close_range() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_close_range && __NR_close_range >= 0
+#    if defined systemd_NR_close_range
+assert_cc(__NR_close_range == systemd_NR_close_range);
+#    endif
+#  else
+#    if defined __NR_close_range
+#      undef __NR_close_range
+#    endif
+#    if defined systemd_NR_close_range && systemd_NR_close_range >= 0
+#      define __NR_close_range systemd_NR_close_range
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_copy_file_range
+#  if defined(__aarch64__)
+#    define systemd_NR_copy_file_range 285
+#  elif defined(__alpha__)
+#    define systemd_NR_copy_file_range 519
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_copy_file_range 285
+#  elif defined(__arm__)
+#    define systemd_NR_copy_file_range 391
+#  elif defined(__i386__)
+#    define systemd_NR_copy_file_range 377
+#  elif defined(__ia64__)
+#    define systemd_NR_copy_file_range 1347
+#  elif defined(__m68k__)
+#    define systemd_NR_copy_file_range 376
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_copy_file_range 4360
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_copy_file_range 6324
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_copy_file_range 5320
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_copy_file_range 379
+#  elif defined(__s390__)
+#    define systemd_NR_copy_file_range 375
+#  elif defined(__sparc__)
+#    define systemd_NR_copy_file_range 357
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_copy_file_range (326 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_copy_file_range 326
+#    endif
+#  else
+#    warning "copy_file_range() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_copy_file_range && __NR_copy_file_range >= 0
+#    if defined systemd_NR_copy_file_range
+assert_cc(__NR_copy_file_range == systemd_NR_copy_file_range);
+#    endif
+#  else
+#    if defined __NR_copy_file_range
+#      undef __NR_copy_file_range
+#    endif
+#    if defined systemd_NR_copy_file_range && systemd_NR_copy_file_range >= 0
+#      define __NR_copy_file_range systemd_NR_copy_file_range
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_getrandom
+#  if defined(__aarch64__)
+#    define systemd_NR_getrandom 278
+#  elif defined(__alpha__)
+#    define systemd_NR_getrandom 511
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_getrandom 278
+#  elif defined(__arm__)
+#    define systemd_NR_getrandom 384
+#  elif defined(__i386__)
+#    define systemd_NR_getrandom 355
+#  elif defined(__ia64__)
+#    define systemd_NR_getrandom 1339
+#  elif defined(__m68k__)
+#    define systemd_NR_getrandom 352
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_getrandom 4353
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_getrandom 6317
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_getrandom 5313
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_getrandom 359
+#  elif defined(__s390__)
+#    define systemd_NR_getrandom 349
+#  elif defined(__sparc__)
+#    define systemd_NR_getrandom 347
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_getrandom (318 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_getrandom 318
+#    endif
+#  else
+#    warning "getrandom() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_getrandom && __NR_getrandom >= 0
+#    if defined systemd_NR_getrandom
+assert_cc(__NR_getrandom == systemd_NR_getrandom);
+#    endif
+#  else
+#    if defined __NR_getrandom
+#      undef __NR_getrandom
+#    endif
+#    if defined systemd_NR_getrandom && systemd_NR_getrandom >= 0
+#      define __NR_getrandom systemd_NR_getrandom
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_memfd_create
+#  if defined(__aarch64__)
+#    define systemd_NR_memfd_create 279
+#  elif defined(__alpha__)
+#    define systemd_NR_memfd_create 512
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_memfd_create 279
+#  elif defined(__arm__)
+#    define systemd_NR_memfd_create 385
+#  elif defined(__i386__)
+#    define systemd_NR_memfd_create 356
+#  elif defined(__ia64__)
+#    define systemd_NR_memfd_create 1340
+#  elif defined(__m68k__)
+#    define systemd_NR_memfd_create 353
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_memfd_create 4354
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_memfd_create 6318
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_memfd_create 5314
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_memfd_create 360
+#  elif defined(__s390__)
+#    define systemd_NR_memfd_create 350
+#  elif defined(__sparc__)
+#    define systemd_NR_memfd_create 348
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_memfd_create (319 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_memfd_create 319
+#    endif
+#  else
+#    warning "memfd_create() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_memfd_create && __NR_memfd_create >= 0
+#    if defined systemd_NR_memfd_create
+assert_cc(__NR_memfd_create == systemd_NR_memfd_create);
+#    endif
+#  else
+#    if defined __NR_memfd_create
+#      undef __NR_memfd_create
+#    endif
+#    if defined systemd_NR_memfd_create && systemd_NR_memfd_create >= 0
+#      define __NR_memfd_create systemd_NR_memfd_create
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_name_to_handle_at
+#  if defined(__aarch64__)
+#    define systemd_NR_name_to_handle_at 264
+#  elif defined(__alpha__)
+#    define systemd_NR_name_to_handle_at 497
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_name_to_handle_at 264
+#  elif defined(__arm__)
+#    define systemd_NR_name_to_handle_at 370
+#  elif defined(__i386__)
+#    define systemd_NR_name_to_handle_at 341
+#  elif defined(__ia64__)
+#    define systemd_NR_name_to_handle_at 1326
+#  elif defined(__m68k__)
+#    define systemd_NR_name_to_handle_at 340
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_name_to_handle_at 4339
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_name_to_handle_at 6303
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_name_to_handle_at 5298
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_name_to_handle_at 345
+#  elif defined(__s390__)
+#    define systemd_NR_name_to_handle_at 335
+#  elif defined(__sparc__)
+#    define systemd_NR_name_to_handle_at 332
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_name_to_handle_at (303 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_name_to_handle_at 303
+#    endif
+#  else
+#    warning "name_to_handle_at() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_name_to_handle_at && __NR_name_to_handle_at >= 0
+#    if defined systemd_NR_name_to_handle_at
+assert_cc(__NR_name_to_handle_at == systemd_NR_name_to_handle_at);
+#    endif
+#  else
+#    if defined __NR_name_to_handle_at
+#      undef __NR_name_to_handle_at
+#    endif
+#    if defined systemd_NR_name_to_handle_at && systemd_NR_name_to_handle_at >= 0
+#      define __NR_name_to_handle_at systemd_NR_name_to_handle_at
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_pidfd_open
+#  if defined(__aarch64__)
+#    define systemd_NR_pidfd_open 434
+#  elif defined(__alpha__)
+#    define systemd_NR_pidfd_open 544
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_pidfd_open 434
+#  elif defined(__arm__)
+#    define systemd_NR_pidfd_open 434
+#  elif defined(__i386__)
+#    define systemd_NR_pidfd_open 434
+#  elif defined(__ia64__)
+#    define systemd_NR_pidfd_open 1458
+#  elif defined(__m68k__)
+#    define systemd_NR_pidfd_open 434
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_pidfd_open 4434
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_pidfd_open 6434
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_pidfd_open 5434
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_pidfd_open 434
+#  elif defined(__s390__)
+#    define systemd_NR_pidfd_open 434
+#  elif defined(__sparc__)
+#    define systemd_NR_pidfd_open 434
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_pidfd_open (434 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_pidfd_open 434
+#    endif
+#  else
+#    warning "pidfd_open() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_pidfd_open && __NR_pidfd_open >= 0
+#    if defined systemd_NR_pidfd_open
+assert_cc(__NR_pidfd_open == systemd_NR_pidfd_open);
+#    endif
+#  else
+#    if defined __NR_pidfd_open
+#      undef __NR_pidfd_open
+#    endif
+#    if defined systemd_NR_pidfd_open && systemd_NR_pidfd_open >= 0
+#      define __NR_pidfd_open systemd_NR_pidfd_open
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_pidfd_send_signal
+#  if defined(__aarch64__)
+#    define systemd_NR_pidfd_send_signal 424
+#  elif defined(__alpha__)
+#    define systemd_NR_pidfd_send_signal 534
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_pidfd_send_signal 424
+#  elif defined(__arm__)
+#    define systemd_NR_pidfd_send_signal 424
+#  elif defined(__i386__)
+#    define systemd_NR_pidfd_send_signal 424
+#  elif defined(__ia64__)
+#    define systemd_NR_pidfd_send_signal 1448
+#  elif defined(__m68k__)
+#    define systemd_NR_pidfd_send_signal 424
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_pidfd_send_signal 4424
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_pidfd_send_signal 6424
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_pidfd_send_signal 5424
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_pidfd_send_signal 424
+#  elif defined(__s390__)
+#    define systemd_NR_pidfd_send_signal 424
+#  elif defined(__sparc__)
+#    define systemd_NR_pidfd_send_signal 424
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_pidfd_send_signal (424 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_pidfd_send_signal 424
+#    endif
+#  else
+#    warning "pidfd_send_signal() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_pidfd_send_signal && __NR_pidfd_send_signal >= 0
+#    if defined systemd_NR_pidfd_send_signal
+assert_cc(__NR_pidfd_send_signal == systemd_NR_pidfd_send_signal);
+#    endif
+#  else
+#    if defined __NR_pidfd_send_signal
+#      undef __NR_pidfd_send_signal
+#    endif
+#    if defined systemd_NR_pidfd_send_signal && systemd_NR_pidfd_send_signal >= 0
+#      define __NR_pidfd_send_signal systemd_NR_pidfd_send_signal
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_pkey_mprotect
+#  if defined(__aarch64__)
+#    define systemd_NR_pkey_mprotect 288
+#  elif defined(__alpha__)
+#    define systemd_NR_pkey_mprotect 524
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_pkey_mprotect 288
+#  elif defined(__arm__)
+#    define systemd_NR_pkey_mprotect 394
+#  elif defined(__i386__)
+#    define systemd_NR_pkey_mprotect 380
+#  elif defined(__ia64__)
+#    define systemd_NR_pkey_mprotect 1354
+#  elif defined(__m68k__)
+#    define systemd_NR_pkey_mprotect 381
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_pkey_mprotect 4363
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_pkey_mprotect 6327
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_pkey_mprotect 5323
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_pkey_mprotect 386
+#  elif defined(__s390__)
+#    define systemd_NR_pkey_mprotect 384
+#  elif defined(__sparc__)
+#    define systemd_NR_pkey_mprotect 362
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_pkey_mprotect (329 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_pkey_mprotect 329
+#    endif
+#  else
+#    warning "pkey_mprotect() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_pkey_mprotect && __NR_pkey_mprotect >= 0
+#    if defined systemd_NR_pkey_mprotect
+assert_cc(__NR_pkey_mprotect == systemd_NR_pkey_mprotect);
+#    endif
+#  else
+#    if defined __NR_pkey_mprotect
+#      undef __NR_pkey_mprotect
+#    endif
+#    if defined systemd_NR_pkey_mprotect && systemd_NR_pkey_mprotect >= 0
+#      define __NR_pkey_mprotect systemd_NR_pkey_mprotect
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_renameat2
+#  if defined(__aarch64__)
+#    define systemd_NR_renameat2 276
+#  elif defined(__alpha__)
+#    define systemd_NR_renameat2 510
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_renameat2 276
+#  elif defined(__arm__)
+#    define systemd_NR_renameat2 382
+#  elif defined(__i386__)
+#    define systemd_NR_renameat2 353
+#  elif defined(__ia64__)
+#    define systemd_NR_renameat2 1338
+#  elif defined(__m68k__)
+#    define systemd_NR_renameat2 351
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_renameat2 4351
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_renameat2 6315
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_renameat2 5311
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_renameat2 357
+#  elif defined(__s390__)
+#    define systemd_NR_renameat2 347
+#  elif defined(__sparc__)
+#    define systemd_NR_renameat2 345
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_renameat2 (316 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_renameat2 316
+#    endif
+#  else
+#    warning "renameat2() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_renameat2 && __NR_renameat2 >= 0
+#    if defined systemd_NR_renameat2
+assert_cc(__NR_renameat2 == systemd_NR_renameat2);
+#    endif
+#  else
+#    if defined __NR_renameat2
+#      undef __NR_renameat2
+#    endif
+#    if defined systemd_NR_renameat2 && systemd_NR_renameat2 >= 0
+#      define __NR_renameat2 systemd_NR_renameat2
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_setns
+#  if defined(__aarch64__)
+#    define systemd_NR_setns 268
+#  elif defined(__alpha__)
+#    define systemd_NR_setns 501
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_setns 268
+#  elif defined(__arm__)
+#    define systemd_NR_setns 375
+#  elif defined(__i386__)
+#    define systemd_NR_setns 346
+#  elif defined(__ia64__)
+#    define systemd_NR_setns 1330
+#  elif defined(__m68k__)
+#    define systemd_NR_setns 344
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_setns 4344
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_setns 6308
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_setns 5303
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_setns 350
+#  elif defined(__s390__)
+#    define systemd_NR_setns 339
+#  elif defined(__sparc__)
+#    define systemd_NR_setns 337
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_setns (308 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_setns 308
+#    endif
+#  else
+#    warning "setns() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_setns && __NR_setns >= 0
+#    if defined systemd_NR_setns
+assert_cc(__NR_setns == systemd_NR_setns);
+#    endif
+#  else
+#    if defined __NR_setns
+#      undef __NR_setns
+#    endif
+#    if defined systemd_NR_setns && systemd_NR_setns >= 0
+#      define __NR_setns systemd_NR_setns
+#    endif
+#  endif
+#endif
+
+#ifndef __IGNORE_statx
+#  if defined(__aarch64__)
+#    define systemd_NR_statx 291
+#  elif defined(__alpha__)
+#    define systemd_NR_statx 522
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_statx 291
+#  elif defined(__arm__)
+#    define systemd_NR_statx 397
+#  elif defined(__i386__)
+#    define systemd_NR_statx 383
+#  elif defined(__ia64__)
+#    define systemd_NR_statx 1350
+#  elif defined(__m68k__)
+#    define systemd_NR_statx 379
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_statx 4366
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_statx 6330
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_statx 5326
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_statx 383
+#  elif defined(__s390__)
+#    define systemd_NR_statx 379
+#  elif defined(__sparc__)
+#    define systemd_NR_statx 360
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_statx (332 | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_statx 332
+#    endif
+#  else
+#    warning "statx() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_statx && __NR_statx >= 0
+#    if defined systemd_NR_statx
+assert_cc(__NR_statx == systemd_NR_statx);
+#    endif
+#  else
+#    if defined __NR_statx
+#      undef __NR_statx
+#    endif
+#    if defined systemd_NR_statx && systemd_NR_statx >= 0
+#      define __NR_statx systemd_NR_statx
+#    endif
+#  endif
+#endif
+
diff --git a/src/basic/missing_syscalls.py b/src/basic/missing_syscalls.py
new file mode 100644 (file)
index 0000000..750b724
--- /dev/null
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+import sys
+import os
+import functools
+
+# We only generate numbers for a dozen or so syscalls
+SYSCALLS = [
+    'bpf',
+    'close_range',
+    'copy_file_range',
+    'getrandom',
+    'memfd_create',
+    'name_to_handle_at',
+    'pidfd_open',
+    'pidfd_send_signal',
+    'pkey_mprotect',
+    'renameat2',
+    'setns',
+    'statx']
+
+def dictify(f):
+    def wrap(*args, **kwargs):
+        return dict(f(*args, **kwargs))
+    return functools.update_wrapper(wrap, f)
+
+@dictify
+def parse_syscall_table(filename):
+    print(f'Reading {filename}…')
+    for line in open(filename):
+        items = line.split()
+        if len(items) >= 2:
+            yield items[0], int(items[1])
+
+def parse_syscall_tables(filenames):
+    return {filename.split('-')[-1]: parse_syscall_table(filename)
+            for filename in filenames}
+
+DEF_TEMPLATE = '''\
+#ifndef __IGNORE_{syscall}
+#  if defined(__aarch64__)
+#    define systemd_NR_{syscall} {nr_arm64}
+#  elif defined(__alpha__)
+#    define systemd_NR_{syscall} {nr_alpha}
+#  elif defined(__arc__) || defined(__tilegx__)
+#    define systemd_NR_{syscall} {nr_arc}
+#  elif defined(__arm__)
+#    define systemd_NR_{syscall} {nr_arm}
+#  elif defined(__i386__)
+#    define systemd_NR_{syscall} {nr_i386}
+#  elif defined(__ia64__)
+#    define systemd_NR_{syscall} {nr_ia64}
+#  elif defined(__m68k__)
+#    define systemd_NR_{syscall} {nr_m68k}
+#  elif defined(_MIPS_SIM)
+#    if _MIPS_SIM == _MIPS_SIM_ABI32
+#      define systemd_NR_{syscall} {nr_mipso32}
+#    elif _MIPS_SIM == _MIPS_SIM_NABI32
+#      define systemd_NR_{syscall} {nr_mips64n32}
+#    elif _MIPS_SIM == _MIPS_SIM_ABI64
+#      define systemd_NR_{syscall} {nr_mips64}
+#    else
+#      error "Unknown MIPS ABI"
+#    endif
+#  elif defined(__powerpc__)
+#    define systemd_NR_{syscall} {nr_powerpc}
+#  elif defined(__s390__)
+#    define systemd_NR_{syscall} {nr_s390}
+#  elif defined(__sparc__)
+#    define systemd_NR_{syscall} {nr_sparc}
+#  elif defined(__x86_64__)
+#    if defined(__ILP32__)
+#      define systemd_NR_{syscall} ({nr_x86_64} | /* __X32_SYSCALL_BIT */ 0x40000000)
+#    else
+#      define systemd_NR_{syscall} {nr_x86_64}
+#    endif
+#  else
+#    warning "{syscall}() syscall number is unknown for your architecture"
+#  endif
+
+/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+#  if defined __NR_{syscall} && __NR_{syscall} >= 0
+#    if defined systemd_NR_{syscall}
+assert_cc(__NR_{syscall} == systemd_NR_{syscall});
+#    endif
+#  else
+#    if defined __NR_{syscall}
+#      undef __NR_{syscall}
+#    endif
+#    if defined systemd_NR_{syscall} && systemd_NR_{syscall} >= 0
+#      define __NR_{syscall} systemd_NR_{syscall}
+#    endif
+#  endif
+#endif
+'''
+
+def print_syscall_def(syscall, tables, out):
+    mappings = {f'nr_{arch}':t.get(syscall, -1)
+                for arch, t in tables.items()}
+    print(DEF_TEMPLATE.format(syscall=syscall, **mappings),
+          file=out)
+
+def print_syscall_defs(syscalls, tables, out):
+    print('/* This file is generated. Do not edit! */\n', file=out)
+    for syscall in syscalls:
+        print_syscall_def(syscall, tables, out)
+
+if __name__ == '__main__':
+    output_file = sys.argv[1]
+    arch_files = sys.argv[2:]
+    out = open(output_file, 'wt')
+
+    tables = parse_syscall_tables(arch_files)
+    print_syscall_defs(SYSCALLS, tables, out)
+
+    print(f'Wrote {output_file}')