/* SPDX-License-Identifier: LGPL-2.1-or-later
* This file is generated. Do not edit! */
+/* Note: if this code looks strange, this is because it is derived from the same
+ * template as the per-syscall blocks below. */
+# if defined(__aarch64__)
+# elif defined(__alpha__)
+# elif defined(__arc__) || defined(__tilegx__)
+# elif defined(__arm__)
+# elif defined(__i386__)
+# elif defined(__ia64__)
+# elif defined(__m68k__)
+# elif defined(_MIPS_SIM)
+# if _MIPS_SIM == _MIPS_SIM_ABI32
+# elif _MIPS_SIM == _MIPS_SIM_NABI32
+# elif _MIPS_SIM == _MIPS_SIM_ABI64
+# else
+# error "Unknown MIPS ABI"
+# endif
+# elif defined(__powerpc__)
+# elif defined(__s390__)
+# elif defined(__sparc__)
+# elif defined(__x86_64__)
+# if defined(__ILP32__)
+# else
+# endif
+# elif !defined(missing_arch_template)
+# warning "Current architecture is missing from the template"
+# define missing_arch_template 1
+# endif
+
#ifndef __IGNORE_bpf
# if defined(__aarch64__)
# define systemd_NR_bpf 280
# else
# define systemd_NR_bpf 321
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "bpf() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_close_range 436
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "close_range() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_copy_file_range 326
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "copy_file_range() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_getrandom 318
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "getrandom() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_memfd_create 319
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "memfd_create() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_name_to_handle_at 303
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "name_to_handle_at() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_pidfd_open 434
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "pidfd_open() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_pidfd_send_signal 424
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "pidfd_send_signal() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_pkey_mprotect 329
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "pkey_mprotect() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_renameat2 316
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "renameat2() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_setns 308
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "setns() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_statx 332
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "statx() syscall number is unknown for your architecture"
# endif
# else
# define systemd_NR_epoll_pwait2 441
# endif
-# else
+# elif !defined(missing_arch_template)
# warning "epoll_pwait2() syscall number is unknown for your architecture"
# endif
return {filename.split('-')[-1][:-4]: parse_syscall_table(filename)
for filename in filenames}
-DEF_TEMPLATE = '''
+DEF_TEMPLATE_A = '''\
+
#ifndef __IGNORE_{syscall}
+'''
+
+DEF_TEMPLATE_B = '''\
# if defined(__aarch64__)
# define systemd_NR_{syscall} {nr_arm64}
# elif defined(__alpha__)
# else
# define systemd_NR_{syscall} {nr_x86_64}
# endif
-# else
-# warning "{syscall}() syscall number is unknown for your architecture"
+# elif !defined(missing_arch_template)
+%s
# endif
+'''
+
+DEF_TEMPLATE_C = '''\
/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
# if defined __NR_{syscall} && __NR_{syscall} >= 0
# define __NR_{syscall} systemd_NR_{syscall}
# endif
# endif
-#endif
-'''
+#endif'''
+
+DEF_TEMPLATE = (DEF_TEMPLATE_A +
+ DEF_TEMPLATE_B % '# warning "{syscall}() syscall number is unknown for your architecture"' +
+ DEF_TEMPLATE_C)
+
+ARCH_CHECK = '''\
+/* Note: if this code looks strange, this is because it is derived from the same
+ * template as the per-syscall blocks below. */
+''' + '\n'.join(line for line in DEF_TEMPLATE_B.splitlines()
+ if ' define ' not in line) % '''\
+# warning "Current architecture is missing from the template"
+# define missing_arch_template 1'''
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, end='')
+ file=out)
def print_syscall_defs(syscalls, tables, out):
print('''\
/* SPDX-License-Identifier: LGPL-2.1-or-later
* This file is generated. Do not edit! */
-''' , file=out, end='')
+''',
+ file=out)
+ print(ARCH_CHECK, file=out)
for syscall in syscalls:
print_syscall_def(syscall, tables, out)