diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index a489b55661..8c0ec63d40 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -41,7 +41,7 @@ jobs: - uses: systemd/mkosi@184472f0f1f831ca29953546ec01fd941ff763a6 - name: Check that tabs are not used in Python code - run: sh -c '! git grep -P "\\t" -- src/basic/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py' + run: sh -c '! git grep -P "\\t" -- src/core/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py' - name: Build tools tree run: | @@ -56,20 +56,20 @@ jobs: - name: Run mypy run: | mkosi box -- mypy --version - mkosi box -- mypy src/basic/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/test/generate-sym-test.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py + mkosi box -- mypy src/core/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/test/generate-sym-test.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py - name: Run ruff check run: | mkosi box -- ruff --version - mkosi box -- ruff check src/basic/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/test/generate-sym-test.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py + mkosi box -- ruff check src/core/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/test/generate-sym-test.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py - name: Run ruff format run: | mkosi box -- ruff --version - if ! mkosi box -- ruff format --check src/basic/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/test/generate-sym-test.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py + if ! mkosi box -- ruff format --check src/core/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/test/generate-sym-test.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py then echo "Please run 'ruff format' on the above files or apply the diffs below manually" - mkosi box -- ruff format --check --quiet --diff src/basic/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/test/generate-sym-test.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py + mkosi box -- ruff format --check --quiet --diff src/core/generate-bpf-delegate-configs.py src/boot/generate-hwids-section.py src/test/generate-sym-test.py src/ukify/ukify.py test/integration-tests/integration-test-wrapper.py fi - name: Configure meson diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index ff6c8975d5..33bd992ae9 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -20,6 +20,9 @@ There are many, and more are constantly added, so we will not enumerate them all The code that is shared between components is split into a few directories, each with a different purpose: +- 'src/include/uapi/' contains copy of kernel headers we use. + 'src/include/override/' contains wrappers for libc and kernel headers, to provide several missing symbols. + - `src/basic/` and `src/fundamental/` — those directories contain code primitives that are used by all other code. `src/fundamental/` is stricter, because it used for EFI and user-space code, while `src/basic/` is only used for user-space code. The code in `src/fundamental/` cannot depend on any other code in the tree, and `src/basic/` can depend only on itself and `src/fundamental/`. @@ -43,6 +46,12 @@ Any code that is used only for EFI goes under `src/boot/efi/`, and `src/fundamen To summarize: +`src/include/uapi/` +- copy of kernel headers + +`src/include/override/` +- wrappers for libc and kernel headers + `src/fundamental/` - may be used by all code in the tree - may not use any code outside of `src/fundamental/` diff --git a/man/meson.build b/man/meson.build index 15f3fdb34b..89e813ee32 100644 --- a/man/meson.build +++ b/man/meson.build @@ -20,9 +20,10 @@ xsltproc_flags = [ '--stringparam', 'man.copyright.section.enabled', '0', '--stringparam', 'systemd.version', '@0@'.format(meson.project_version()), '--path', - '@0@:@1@:@2@'.format(meson.current_build_dir(), + '@0@:@1@:@2@:@3@'.format(meson.current_build_dir(), meson.current_source_dir(), - libshared_build_dir)] + libshared_build_dir, + libcore_build_dir)] custom_man_xsl = files('custom-man.xsl') custom_html_xsl = files('custom-html.xsl') @@ -35,17 +36,6 @@ custom_entities_ent = custom_target( man_page_depends += custom_entities_ent -generate_bpf_delegate_configs = find_program('../src/basic/generate-bpf-delegate-configs.py') - -bpf_delegate_xml = custom_target( - input : files('../src/basic/include/linux/bpf.h'), - output : 'bpf-delegate.xml', - command : [generate_bpf_delegate_configs, - 'doc', - '@INPUT@'], - capture : true) -man_page_depends += bpf_delegate_xml - man_pages = [] html_pages = [] source_xml_files = [] diff --git a/meson.build b/meson.build index 6f8397c966..f5362ece8a 100644 --- a/meson.build +++ b/meson.build @@ -580,7 +580,6 @@ foreach ident : [ ['fsconfig', '''#include '''], # since glibc-2.36 ['fsmount', '''#include '''], # since glibc-2.36 ['fsopen', '''#include '''], # since glibc-2.36 - ['fspick', '''#include '''], # since glibc-2.36 ['mount_setattr', '''#include '''], # since glibc-2.36 ['move_mount', '''#include '''], # since glibc-2.36 ['open_tree', '''#include '''], # since glibc-2.36 @@ -591,15 +590,17 @@ foreach ident : [ ['ioprio_get', '''#include '''], # no known header declares ioprio_get ['ioprio_set', '''#include '''], # no known header declares ioprio_set ['rt_tgsigqueueinfo', '''#include '''], # no known header declares rt_tgsigqueueinfo + ['open_tree_attr', '''#include '''], # no known header declares open_tree_attr ['quotactl_fd', '''#include '''], # no known header declares quotactl_fd ['fchmodat2', '''#include '''], # no known header declares fchmodat2 ['bpf', '''#include '''], # no known header declares bpf ['kcmp', '''#include '''], # no known header declares kcmp ['keyctl', '''#include '''], # no known header declares keyctl - ['pivot_root', '''#include '''], # no known header declares pivot_root + ['add_key', '''#include '''], # no known header declares add_key + ['request_key', '''#include '''], # no known header declares request_key ['setxattrat', '''#include '''], # no known header declares setxattrat ['removexattrat', '''#include '''], # no known header declares removexattrat - ['open_tree_attr', '''#include '''], # no known header declares open_tree_attr + ['pivot_root', '''#include '''], # no known header declares pivot_root ] have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE') @@ -2008,16 +2009,33 @@ dbus_programs = [] # A list of boot stubs. Required for testing of ukify. boot_stubs = [] +# This is similar to system_includes below, but for passing custom_target(). +system_include_args = [ + '-isystem', meson.project_build_root() / 'src/include/override', + '-isystem', meson.project_source_root() / 'src/include/override', + '-isystem', meson.project_build_root() / 'src/include/uapi', + '-isystem', meson.project_source_root() / 'src/include/uapi', +] + +system_includes = [ + include_directories( + # gcc(1) says + # "Directories specified with -isystem options are scanned in left-to-right order", + # and meson puts the directories in the reversed order. Hence, a directory with a lower + # priority must be listed earlier. + 'src/include/uapi', + 'src/include/override', + is_system : true, + ), +] + basic_includes = [ include_directories( 'src/basic', 'src/fundamental', 'src/systemd', ), - include_directories( - 'src/basic/include', - is_system : true, - ), + system_includes, version_include, ] @@ -2039,6 +2057,8 @@ includes = [libsystemd_includes, include_directories('src/shared')] subdir('po') subdir('catalog') +subdir('src/include') +subdir('src/libc') subdir('src/fundamental') subdir('src/basic') subdir('src/libsystemd') @@ -2054,7 +2074,8 @@ libsystemd = shared_library( # Make sure our library is never deleted from memory, so that our open logging fds don't leak on dlopen/dlclose cycles. '-z', 'nodelete', '-Wl,--version-script=' + libsystemd_sym_path], - link_with : [libbasic_static], + link_with : [libc_wrapper_static, + libbasic_static], link_whole : [libsystemd_static], dependencies : [librt, threads, @@ -2067,6 +2088,7 @@ libsystemd = shared_library( if static_libsystemd != 'false' install_libsystemd_static = static_library( 'systemd', + libc_wrapper_sources, libsystemd_sources, basic_sources, fundamental_sources, @@ -2112,6 +2134,7 @@ libudev = shared_library( if static_libudev != 'false' install_libudev_static = static_library( 'udev', + libc_wrapper_sources, basic_sources, fundamental_sources, shared_sources, @@ -2216,6 +2239,7 @@ nss_template = { # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned 'link_args' : ['-z', 'nodelete'], 'link_with' : [ + libc_wrapper_static, libsystemd_static, libshared_static, libbasic_static, diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index e643c71714..f3270ff278 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include +#include #include #include #include @@ -18,8 +20,6 @@ #include "fs-util.h" #include "log.h" #include "login-util.h" -#include "missing_fs.h" -#include "missing_magic.h" #include "parse-util.h" #include "path-util.h" #include "pidref.h" diff --git a/src/basic/check-filesystems.sh b/src/basic/check-filesystems.sh index 696ef610ac..e36890cca1 100755 --- a/src/basic/check-filesystems.sh +++ b/src/basic/check-filesystems.sh @@ -3,19 +3,14 @@ set -eu set -o pipefail -cpp="$1" -filesystems_gperf="$2" +cpp="${1:?}" +filesystems_gperf="${2:?}" shift 2 -includes="" -for i in "$@"; do - includes="$includes -include $i" -done - error=false # shellcheck disable=SC2086 -for fs in $($cpp -dM $includes - #include -#include #include +#include #include #include #include @@ -16,7 +16,6 @@ #include "format-util.h" #include "fs-util.h" #include "log.h" -#include "missing_syscall.h" #include "mountpoint-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/basic/filesystems-gperf.gperf b/src/basic/filesystems-gperf.gperf index 23c9372af2..13db51db22 100644 --- a/src/basic/filesystems-gperf.gperf +++ b/src/basic/filesystems-gperf.gperf @@ -6,7 +6,6 @@ _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"") #include #include "filesystems.h" -#include "missing_magic.h" #include "stat-util.h" struct FilesystemMagic { diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index 3a3b09776a..9fb6f5d0b8 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -16,7 +16,6 @@ #include "label.h" #include "lock-util.h" #include "log.h" -#include "missing_syscall.h" #include "mkdir.h" #include "path-util.h" #include "process-util.h" diff --git a/src/basic/generate-af-list.sh b/src/basic/generate-af-list.sh index 4fec46a2ef..d7c777507b 100755 --- a/src/basic/generate-af-list.sh +++ b/src/basic/generate-af-list.sh @@ -3,6 +3,9 @@ set -eu set -o pipefail -${1:?} -E -dM -include sys/socket.h -include "${2:?}" - - -#include_next diff --git a/src/basic/keyring-util.c b/src/basic/keyring-util.c index 6bfc5e38f6..4158537bd4 100644 --- a/src/basic/keyring-util.c +++ b/src/basic/keyring-util.c @@ -3,7 +3,6 @@ #include "alloc-util.h" #include "keyring-util.h" #include "log.h" -#include "missing_syscall.h" int keyring_read(key_serial_t serial, void **ret, size_t *ret_size) { size_t bufsize = 100; diff --git a/src/basic/keyring-util.h b/src/basic/keyring-util.h index a949f8907e..b8a36a9ad6 100644 --- a/src/basic/keyring-util.h +++ b/src/basic/keyring-util.h @@ -1,8 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include /* IWYU pragma: export */ + #include "forward.h" -#include "missing_keyctl.h" /* Like TAKE_PTR() but for key_serial_t, resetting them to -1 */ #define TAKE_KEY_SERIAL(key_serial) TAKE_GENERIC(key_serial, key_serial_t, -1) diff --git a/src/basic/meson.build b/src/basic/meson.build index 2627cdb164..d8591d49e2 100644 --- a/src/basic/meson.build +++ b/src/basic/meson.build @@ -84,6 +84,7 @@ basic_sources = files( 'psi-util.c', 'random-util.c', 'ratelimit.c', + 'raw-clone.c', 'recurse-dir.c', 'replace-var.c', 'rlimit-util.c', @@ -119,44 +120,26 @@ basic_sources = files( sources += basic_sources -missing_audit_h = files('missing_audit.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( - output : 'af-list.txt', - command : [generate_af_list, cpp, files('include/sys/socket.h')], - capture : true) - -generate_arphrd_list = find_program('generate-arphrd-list.sh') -arphrd_list_txt = custom_target( - output : 'arphrd-list.txt', - command : [generate_arphrd_list, cpp, files('include/linux/if_arp.h')], - capture : true) - -generate_cap_list = find_program('generate-cap-list.sh') -cap_list_txt = custom_target( - output : 'cap-list.txt', - command : [generate_cap_list, cpp, files('include/linux/capability.h')], - capture : true) - -generate_errno_list = find_program('generate-errno-list.sh') -errno_list_txt = custom_target( - output : 'errno-list.txt', - command : [generate_errno_list, cpp], - capture : true) - generated_gperf_headers = [] -foreach item : [['af', af_list_txt, 'af', '', ['']], - ['arphrd', arphrd_list_txt, 'arphrd', 'ARPHRD_', []], - ['cap', cap_list_txt, 'capability', '', []], - ['errno', errno_list_txt, 'errno', '', []]] +foreach item : [ + # name, source, struct name, prefix, headers + ['af', af_sources, 'af', '', [''], ], + ['arphrd', arphrd_sources, 'arphrd', 'ARPHRD_', [''], ], + ['cap', cap_sources, 'capability', '', [''], ], + ['errno', [], 'errno', '', [''], ], +] + + fname = '@0@-list.txt'.format(item[0]) + generate_list = files('generate-@0@-list.sh'.format(item[0])) + list_txt = custom_target( + input : [generate_list, item[1]], + output : fname, + command : [env, 'bash', generate_list, cpp, system_include_args], + capture : true) fname = '@0@-from-name.gperf'.format(item[0]) gperf_file = custom_target( - input : item[1], + input : list_txt, output : fname, command : [generate_gperfs, item[2], item[3], '@INPUT@'] + item[4], capture : true) @@ -176,7 +159,7 @@ foreach item : [['af', af_list_txt, 'af', '', [' -#include -#include -#include -#include -#include - -#ifdef ARCH_MIPS -#include -#endif - -#include "forward.h" -#include "missing_keyctl.h" -#include "missing_syscall_def.h" - -/* ======================================================================= */ - -#if !HAVE_FCHMODAT2 -/* since kernel v6.6 (78252deb023cf0879256fcfbafe37022c390762b) */ -static inline int missing_fchmodat2(int dirfd, const char *path, mode_t mode, int flags) { - return syscall(__NR_fchmodat2, dirfd, path, mode, flags); -} - -# define fchmodat2 missing_fchmodat2 -#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); -} - -# define pivot_root missing_pivot_root -#endif - -/* ======================================================================= */ - -#if !HAVE_IOPRIO_GET -static inline int missing_ioprio_get(int which, int who) { - return syscall(__NR_ioprio_get, which, who); -} - -# define ioprio_get missing_ioprio_get -#endif - -/* ======================================================================= */ - -#if !HAVE_IOPRIO_SET -static inline int missing_ioprio_set(int which, int who, int ioprio) { - return syscall(__NR_ioprio_set, which, who, ioprio); -} - -# define ioprio_set missing_ioprio_set -#endif - -/* ======================================================================= */ - -#if !HAVE_KCMP -static inline int missing_kcmp(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2) { - return syscall(__NR_kcmp, pid1, pid2, type, idx1, idx2); -} - -# define kcmp missing_kcmp -#endif - -/* ======================================================================= */ - -#if !HAVE_KEYCTL -static inline long missing_keyctl(int cmd, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5) { - return syscall(__NR_keyctl, cmd, arg2, arg3, arg4, arg5); - -# define keyctl missing_keyctl -} - -/* ======================================================================= */ - -static inline key_serial_t missing_add_key(const char *type, const char *description, const void *payload, size_t plen, key_serial_t ringid) { - return syscall(__NR_add_key, type, description, payload, plen, ringid); - -# define add_key missing_add_key -} - -/* ======================================================================= */ - -static inline key_serial_t missing_request_key(const char *type, const char *description, const char * callout_info, key_serial_t destringid) { - return syscall(__NR_request_key, type, description, callout_info, destringid); - -# define request_key missing_request_key -} -#endif - -/* ======================================================================= */ - -#if !HAVE_BPF -union bpf_attr; - -static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) { - return (int) syscall(__NR_bpf, cmd, attr, size); -} - -# define bpf missing_bpf -#endif - -/* ======================================================================= */ - -#if !HAVE_SET_MEMPOLICY -static inline long missing_set_mempolicy(int mode, const unsigned long *nodemask, - unsigned long maxnode) { - return syscall(__NR_set_mempolicy, mode, nodemask, maxnode); -} - -# define set_mempolicy missing_set_mempolicy -#endif - -#if !HAVE_GET_MEMPOLICY -static inline long missing_get_mempolicy(int *mode, unsigned long *nodemask, - unsigned long maxnode, void *addr, - unsigned long flags) { - return syscall(__NR_get_mempolicy, mode, nodemask, maxnode, addr, flags); -} - -# define get_mempolicy missing_get_mempolicy -#endif - -/* ======================================================================= */ - -#if !HAVE_PIDFD_SEND_SIGNAL -/* since kernel v5.1 (3eb39f47934f9d5a3027fe00d906a45fe3a15fad) */ -static inline int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, unsigned flags) { - return syscall(__NR_pidfd_send_signal, fd, sig, info, flags); -} - -# define pidfd_send_signal missing_pidfd_send_signal -#endif - -/* ======================================================================= */ - -#if !HAVE_PIDFD_OPEN -/* since kernel v5.3 (7615d9e1780e26e0178c93c55b73309a5dc093d7) */ -static inline int missing_pidfd_open(pid_t pid, unsigned flags) { - return syscall(__NR_pidfd_open, pid, flags); -} - -# define pidfd_open missing_pidfd_open -#endif - -/* ======================================================================= */ - -#if !HAVE_RT_TGSIGQUEUEINFO -static inline int missing_rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, siginfo_t *info) { - return syscall(__NR_rt_tgsigqueueinfo, tgid, tid, sig, info); -} - -# define rt_tgsigqueueinfo missing_rt_tgsigqueueinfo -#endif - -/* ======================================================================= */ - -#if !HAVE_EXECVEAT -/* since kernel v3.19 (51f39a1f0cea1cacf8c787f652f26dfee9611874) */ -static inline int missing_execveat(int dirfd, const char *pathname, - char *const argv[], char *const envp[], - int flags) { - return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags); -} - -# define execveat missing_execveat -#endif - -/* ======================================================================= */ - -#if !HAVE_CLOSE_RANGE -/* since kernel v5.9 (9b4feb630e8e9801603f3cab3a36369e3c1cf88d) */ -static inline int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags) { - /* Kernel-side the syscall expects fds as unsigned integers (just like close() actually), while - * userspace exclusively uses signed integers for fds. glibc chose to expose it 1:1 however, hence we - * do so here too, even if we end up passing signed fds to it most of the time. */ - return syscall(__NR_close_range, - first_fd, - end_fd, - flags); -} - -# define close_range missing_close_range -#endif - -/* ======================================================================= */ - -#if !HAVE_SCHED_SETATTR -/* since kernel 3.14 (e6cfc0295c7d51b008999a8b13a44fb43f8685ea) */ -static inline ssize_t missing_sched_setattr(pid_t pid, struct sched_attr *attr, unsigned int flags) { - return syscall(__NR_sched_setattr, pid, attr, flags); -} - -# define sched_setattr missing_sched_setattr -#endif - -/* ======================================================================= */ - -/* glibc does not provide clone() on ia64, only clone2(). Not only that, but it also doesn't provide a - * prototype, only the symbol in the shared library (it provides a prototype for clone(), but not the - * symbol in the shared library). */ -#if defined(__ia64__) -int __clone2(int (*fn)(void *), void *stack_base, size_t stack_size, int flags, void *arg); -#define HAVE_CLONE 0 -#else -/* We know that everywhere else clone() is available, so we don't bother with a meson check (that takes time - * at build time) and just define it. Once the kernel drops ia64 support, we can drop this too. */ -#define HAVE_CLONE 1 -#endif - -/* ======================================================================= */ - -#if !HAVE_QUOTACTL_FD -/* since kernel v5.14 (64c2c2c62f92339b176ea24403d8db16db36f9e6) */ -static inline int missing_quotactl_fd(int fd, int cmd, int id, void *addr) { - return syscall(__NR_quotactl_fd, fd, cmd, id, addr); -} - -# define quotactl_fd missing_quotactl_fd -#endif - -/* ======================================================================= */ - -#if !HAVE_SETXATTRAT -/* since kernel v6.13 (6140be90ec70c39fa844741ca3cc807dd0866394) */ -static inline int missing_setxattrat(int fd, const char *path, int at_flags, const char *name, const struct xattr_args *args, size_t size) { - return syscall(__NR_setxattrat, fd, path, at_flags, name, args, size); -} - -# define setxattrat missing_setxattrat -#endif - -/* ======================================================================= */ - -#if !HAVE_REMOVEXATTRAT -/* since kernel v6.13 (6140be90ec70c39fa844741ca3cc807dd0866394) */ -static inline int missing_removexattrat(int fd, const char *path, int at_flags, const char *name) { - return syscall(__NR_removexattrat, fd, path, at_flags, name); -} - -# define removexattrat missing_removexattrat -#endif diff --git a/src/basic/namespace-util.c b/src/basic/namespace-util.c index ba1941a0a5..c8ee38b4f1 100644 --- a/src/basic/namespace-util.c +++ b/src/basic/namespace-util.c @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include +#include #include #include #include @@ -10,8 +12,6 @@ #include "fd-util.h" #include "fileio.h" #include "log.h" -#include "missing_magic.h" -#include "missing_namespace.h" #include "mountpoint-util.h" #include "namespace-util.h" #include "parse-util.h" diff --git a/src/basic/pidfd-util.c b/src/basic/pidfd-util.c index 78f8dc41c6..965f0b86da 100644 --- a/src/basic/pidfd-util.c +++ b/src/basic/pidfd-util.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include +#include #include #include #include @@ -7,8 +9,6 @@ #include "errno-util.h" #include "fd-util.h" #include "fileio.h" -#include "missing_fs.h" -#include "missing_magic.h" #include "mountpoint-util.h" #include "parse-util.h" #include "pidfd-util.h" diff --git a/src/basic/pidfd-util.h b/src/basic/pidfd-util.h index 0cc247ced1..811d40dce9 100644 --- a/src/basic/pidfd-util.h +++ b/src/basic/pidfd-util.h @@ -4,7 +4,6 @@ #include /* IWYU pragma: export */ #include "forward.h" -#include "missing_syscall.h" /* IWYU pragma: export */ int pidfd_get_namespace(int fd, unsigned long ns_type_cmd); diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 1d341aa0a7..de97843816 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -34,7 +34,6 @@ #include "locale-util.h" #include "log.h" #include "memory-util.h" -#include "missing_syscall.h" #include "mountpoint-util.h" #include "namespace-util.h" #include "nulstr-util.h" diff --git a/src/basic/raw-clone.c b/src/basic/raw-clone.c new file mode 100644 index 0000000000..aa750acb6d --- /dev/null +++ b/src/basic/raw-clone.c @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +/*** + Copyright © 2016 Michael Karcher +***/ + +#include +#include +#include +#include + +#include "process-util.h" +#include "raw-clone.h" + +/** + * raw_clone() - uses clone to create a new process with clone flags + * @flags: Flags to pass to the clone system call + * + * Uses the clone system call to create a new process with the cloning flags and termination signal passed in the flags + * parameter. Opposed to glibc's clone function, using this function does not set up a separate stack for the child, but + * relies on copy-on-write semantics on the one stack at a common virtual address, just as fork does. + * + * To obtain copy-on-write semantics, flags must not contain CLONE_VM, and thus CLONE_THREAD and CLONE_SIGHAND + * (which require CLONE_VM) are not usable. + * + * Additionally, as this function does not pass the ptid (pidfd in the case of CLONE_PIDFD), newtls and ctid + * parameters to the kernel, flags must not contain CLONE_PARENT_SETTID, CLONE_CHILD_SETTID, CLONE_CHILD_CLEARTID, + * CLONE_SETTLS, or CLONE_PIDFD. + * + * WARNING: 💣 this call (just like glibc's own clone() wrapper) will not synchronize on glibc's malloc + * locks, which means they will be in an undefined state in the child if the parent is + * threaded. This means: the parent must either never use threads, or the child cannot use memory + * allocation itself. This is a major pitfall, hence be careful! 💣 + * + * Returns: 0 in the child process and the child process id in the parent. + */ +pid_t raw_clone(unsigned long flags) { + pid_t ret; + + assert((flags & (CLONE_VM|CLONE_PARENT_SETTID|CLONE_CHILD_SETTID|CLONE_CHILD_CLEARTID|CLONE_SETTLS|CLONE_PIDFD)) == 0); +#if defined(__s390x__) || defined(__s390__) || defined(__CRIS__) + /* On s390/s390x and cris the order of the first and second arguments + * of the raw clone() system call is reversed. */ + ret = (pid_t) syscall(__NR_clone, NULL, flags); +#elif defined(__sparc__) + { + /** + * sparc always returns the other process id in %o0, and + * a boolean flag whether this is the child or the parent in + * %o1. Inline assembly is needed to get the flag returned + * in %o1. + */ + int in_child, child_pid, error; + + asm volatile("mov %3, %%g1\n\t" + "mov %4, %%o0\n\t" + "mov 0 , %%o1\n\t" +#if defined(__arch64__) + "t 0x6d\n\t" +#else + "t 0x10\n\t" +#endif + "addx %%g0, 0, %2\n\t" + "mov %%o1, %0\n\t" + "mov %%o0, %1" : + "=r"(in_child), "=r"(child_pid), "=r"(error) : + "i"(__NR_clone), "r"(flags) : + "%o1", "%o0", "%g1", "cc" ); + + if (error) { + errno = child_pid; + ret = -1; + } else + ret = in_child ? 0 : child_pid; + } +#else + ret = (pid_t) syscall(__NR_clone, flags, NULL); +#endif + + if (ret == 0) + reset_cached_pid(); + + return ret; +} diff --git a/src/basic/raw-clone.h b/src/basic/raw-clone.h index 36202cc0ba..af20cde73b 100644 --- a/src/basic/raw-clone.h +++ b/src/basic/raw-clone.h @@ -1,85 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -/*** - Copyright © 2016 Michael Karcher -***/ +#include /* IWYU pragma: export */ -#include -#include -#include +#include "forward.h" -#include "log.h" -#include "macro.h" -#include "process-util.h" - -/** - * raw_clone() - uses clone to create a new process with clone flags - * @flags: Flags to pass to the clone system call - * - * Uses the clone system call to create a new process with the cloning flags and termination signal passed in the flags - * parameter. Opposed to glibc's clone function, using this function does not set up a separate stack for the child, but - * relies on copy-on-write semantics on the one stack at a common virtual address, just as fork does. - * - * To obtain copy-on-write semantics, flags must not contain CLONE_VM, and thus CLONE_THREAD and CLONE_SIGHAND - * (which require CLONE_VM) are not usable. - * - * Additionally, as this function does not pass the ptid (pidfd in the case of CLONE_PIDFD), newtls and ctid - * parameters to the kernel, flags must not contain CLONE_PARENT_SETTID, CLONE_CHILD_SETTID, CLONE_CHILD_CLEARTID, - * CLONE_SETTLS, or CLONE_PIDFD. - * - * WARNING: 💣 this call (just like glibc's own clone() wrapper) will not synchronize on glibc's malloc - * locks, which means they will be in an undefined state in the child if the parent is - * threaded. This means: the parent must either never use threads, or the child cannot use memory - * allocation itself. This is a major pitfall, hence be careful! 💣 - * - * Returns: 0 in the child process and the child process id in the parent. - */ -static inline pid_t raw_clone(unsigned long flags) { - pid_t ret; - - assert((flags & (CLONE_VM|CLONE_PARENT_SETTID|CLONE_CHILD_SETTID|CLONE_CHILD_CLEARTID|CLONE_SETTLS|CLONE_PIDFD)) == 0); -#if defined(__s390x__) || defined(__s390__) || defined(__CRIS__) - /* On s390/s390x and cris the order of the first and second arguments - * of the raw clone() system call is reversed. */ - ret = (pid_t) syscall(__NR_clone, NULL, flags); -#elif defined(__sparc__) - { - /** - * sparc always returns the other process id in %o0, and - * a boolean flag whether this is the child or the parent in - * %o1. Inline assembly is needed to get the flag returned - * in %o1. - */ - int in_child, child_pid, error; - - asm volatile("mov %3, %%g1\n\t" - "mov %4, %%o0\n\t" - "mov 0 , %%o1\n\t" -#if defined(__arch64__) - "t 0x6d\n\t" -#else - "t 0x10\n\t" -#endif - "addx %%g0, 0, %2\n\t" - "mov %%o1, %0\n\t" - "mov %%o0, %1" : - "=r"(in_child), "=r"(child_pid), "=r"(error) : - "i"(__NR_clone), "r"(flags) : - "%o1", "%o0", "%g1", "cc" ); - - if (error) { - errno = child_pid; - ret = -1; - } else - ret = in_child ? 0 : child_pid; - } -#else - ret = (pid_t) syscall(__NR_clone, flags, NULL); -#endif - - if (ret == 0) - reset_cached_pid(); - - return ret; -} +pid_t raw_clone(unsigned long flags); diff --git a/src/basic/raw-reboot.h b/src/basic/raw-reboot.h deleted file mode 100644 index d72ae1e955..0000000000 --- a/src/basic/raw-reboot.h +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -#pragma once - -#include -#include -#include -#include - -/* glibc defines the reboot() API call, which is a wrapper around the system call of the same name, but without the - * extra "arg" parameter. Since we need that parameter for some calls, let's add a "raw" wrapper that is defined the - * same way, except it takes the additional argument. */ - -static inline int raw_reboot(int cmd, const void *arg) { - return (int) syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, arg); -} diff --git a/src/basic/signal-util.c b/src/basic/signal-util.c index 5a14046f01..459328a3c7 100644 --- a/src/basic/signal-util.c +++ b/src/basic/signal-util.c @@ -4,7 +4,6 @@ #include #include "errno-util.h" -#include "missing_syscall.h" #include "parse-util.h" #include "signal-util.h" #include "stdio-util.h" diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c index 94b4f55c34..72360daadf 100644 --- a/src/basic/stat-util.c +++ b/src/basic/stat-util.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include @@ -13,7 +14,6 @@ #include "fs-util.h" #include "hash-funcs.h" #include "log.h" -#include "missing_magic.h" #include "mountpoint-util.h" #include "path-util.h" #include "siphash24.h" diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 65bdd75f31..e15004981b 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -27,7 +28,6 @@ #include "inotify-util.h" #include "io-util.h" #include "log.h" -#include "missing_magic.h" #include "namespace-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/basic/xattr-util.c b/src/basic/xattr-util.c index 15072add78..1bde725d1a 100644 --- a/src/basic/xattr-util.c +++ b/src/basic/xattr-util.c @@ -8,7 +8,6 @@ #include "errno-util.h" #include "fd-util.h" #include "fs-util.h" -#include "missing_syscall.h" #include "nulstr-util.h" #include "parse-util.h" #include "sparse-endian.h" diff --git a/src/core/bpf-devices.c b/src/core/bpf-devices.c index 7e6a1d15a4..ef8ba3d572 100644 --- a/src/core/bpf-devices.c +++ b/src/core/bpf-devices.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include @@ -12,7 +13,6 @@ #include "fd-util.h" #include "fileio.h" #include "log.h" -#include "missing_bpf.h" #include "nulstr-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/core/bpf-foreign.c b/src/core/bpf-foreign.c index 962ff88b55..73933e131a 100644 --- a/src/core/bpf-foreign.c +++ b/src/core/bpf-foreign.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include "alloc-util.h" #include "bpf-foreign.h" @@ -8,7 +9,6 @@ #include "cgroup.h" #include "hash-funcs.h" #include "hashmap.h" -#include "missing_magic.h" #include "siphash24.h" #include "stat-util.h" #include "unit.h" diff --git a/src/core/emergency-action.c b/src/core/emergency-action.c index 989bb1753e..439228c899 100644 --- a/src/core/emergency-action.c +++ b/src/core/emergency-action.c @@ -1,12 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include #include #include "ansi-color.h" #include "emergency-action.h" #include "manager.h" -#include "raw-reboot.h" #include "reboot-util.h" #include "special.h" #include "string-table.h" diff --git a/src/core/exec-invoke.c b/src/core/exec-invoke.c index 3853aef4af..771308848a 100644 --- a/src/core/exec-invoke.c +++ b/src/core/exec-invoke.c @@ -1,13 +1,14 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include -#include #include #include #include #include #include #include +#include +#include #include #include #include @@ -54,7 +55,6 @@ #include "journal-send.h" #include "manager.h" #include "memfd-util.h" -#include "missing_syscall.h" #include "mkdir-label.h" #include "mount-util.h" #include "namespace-util.h" diff --git a/src/basic/generate-bpf-delegate-configs.py b/src/core/generate-bpf-delegate-configs.py similarity index 100% rename from src/basic/generate-bpf-delegate-configs.py rename to src/core/generate-bpf-delegate-configs.py diff --git a/src/core/meson.build b/src/core/meson.build index a515704a1f..991c3bb0d1 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -100,15 +100,34 @@ load_fragment_gperf_nulstr_c = custom_target( command : [awk, '-f', '@INPUT0@', '@INPUT1@'], capture : true) -generated_sources += [load_fragment_gperf_c, load_fragment_gperf_nulstr_c] +generate_bpf_delegate_configs = files('generate-bpf-delegate-configs.py') +bpf_delegate_configs_inc = custom_target( + input : [generate_bpf_delegate_configs, bpf_delegate_sources], + output : 'bpf-delegate-configs.inc', + command : [python, + generate_bpf_delegate_configs, + 'code', + bpf_delegate_sources], + capture : true) +bpf_delegate_xml = custom_target( + input : [generate_bpf_delegate_configs, bpf_delegate_sources], + output : 'bpf-delegate.xml', + command : [python, + generate_bpf_delegate_configs, + 'doc', + bpf_delegate_sources], + capture : true) +man_page_depends += bpf_delegate_xml + +generated_sources += [load_fragment_gperf_c, load_fragment_gperf_nulstr_c, bpf_delegate_configs_inc] +libcore_sources += [load_fragment_gperf_c, load_fragment_gperf_nulstr_c, bpf_delegate_configs_inc] +libcore_build_dir = meson.current_build_dir() libcore_name = 'systemd-core-@0@'.format(shared_lib_tag) libcore_static = static_library( libcore_name, libcore_sources, - load_fragment_gperf_c, - load_fragment_gperf_nulstr_c, include_directories : [includes, include_directories('.')], implicit_include_directories : false, c_args : ['-fvisibility=default'], @@ -162,6 +181,7 @@ executor_libs = get_option('link-executor-shared') ? \ libcore, libshared, ] : [ + libc_wrapper_static, libcore_static, libshared_static, libbasic_static, diff --git a/src/core/namespace.c b/src/core/namespace.c index 166fdf253a..c384d67898 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include #include @@ -29,7 +30,6 @@ #include "log.h" #include "loop-util.h" #include "loopback-setup.h" -#include "missing_magic.h" #include "mkdir-label.h" #include "mount-util.h" #include "mountpoint-util.h" diff --git a/src/core/service.c b/src/core/service.c index aabaaedf5d..8d7dade83d 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include #include @@ -31,7 +32,6 @@ #include "image-policy.h" #include "log.h" #include "manager.h" -#include "missing_audit.h" #include "mount-util.h" #include "namespace.h" #include "open-file.h" diff --git a/src/creds/creds.c b/src/creds/creds.c index d9845987ad..a121d0695b 100644 --- a/src/creds/creds.c +++ b/src/creds/creds.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include "sd-json.h" @@ -23,7 +24,6 @@ #include "log.h" #include "main-func.h" #include "memory-util.h" -#include "missing_magic.h" #include "pager.h" #include "parse-argument.h" #include "parse-util.h" diff --git a/src/home/homework-fscrypt.c b/src/home/homework-fscrypt.c index 8a3bb27655..bfcfb6774f 100644 --- a/src/home/homework-fscrypt.c +++ b/src/home/homework-fscrypt.c @@ -22,8 +22,6 @@ #include "keyring-util.h" #include "log.h" #include "memory-util.h" -#include "missing_keyctl.h" -#include "missing_syscall.h" #include "mkdir.h" #include "mount-util.h" #include "nulstr-util.h" diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c index 326f941312..2d6a549c22 100644 --- a/src/home/homework-luks.c +++ b/src/home/homework-luks.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include #include @@ -45,8 +46,6 @@ #include "keyring-util.h" #include "loop-util.h" #include "memory-util.h" -#include "missing_magic.h" -#include "missing_syscall.h" #include "mkdir.h" #include "mkfs-util.h" #include "openssl-util.h" diff --git a/src/home/homework-password-cache.c b/src/home/homework-password-cache.c index cd497b46e7..fb205153bc 100644 --- a/src/home/homework-password-cache.c +++ b/src/home/homework-password-cache.c @@ -4,7 +4,6 @@ #include "homework-password-cache.h" #include "keyring-util.h" #include "log.h" -#include "missing_syscall.h" #include "string-util.h" #include "user-record.h" diff --git a/src/home/homework-quota.c b/src/home/homework-quota.c index f8affe58ed..448f8f1729 100644 --- a/src/home/homework-quota.c +++ b/src/home/homework-quota.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "btrfs-util.h" #include "errno-util.h" #include "fd-util.h" @@ -7,7 +9,6 @@ #include "homework-quota.h" #include "log.h" #include "memory-util.h" -#include "missing_magic.h" #include "quota-util.h" #include "stat-util.h" #include "user-record.h" diff --git a/src/home/homework.c b/src/home/homework.c index 57a7b77344..e796f125fb 100644 --- a/src/home/homework.c +++ b/src/home/homework.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include #include @@ -35,8 +36,6 @@ #include "loop-util.h" #include "main-func.h" #include "memory-util.h" -#include "missing_magic.h" -#include "missing_syscall.h" #include "mount-util.h" #include "path-util.h" #include "recovery-key.h" diff --git a/src/home/homework.h b/src/home/homework.h index abd1c482da..2060d15827 100644 --- a/src/home/homework.h +++ b/src/home/homework.h @@ -2,11 +2,11 @@ #pragma once #include +#include #include "sd-id128.h" #include "homework-forward.h" -#include "missing_keyctl.h" #include "user-record-util.h" typedef struct HomeSetup { diff --git a/src/include/meson.build b/src/include/meson.build new file mode 100644 index 0000000000..8277574b4d --- /dev/null +++ b/src/include/meson.build @@ -0,0 +1,45 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +subdir('override/sys') + +# Source files that provides AF_XYZ +af_sources = files( + 'override/sys/socket.h', +) + +# Source files that provides ARPHRD_XYZ +arphrd_sources = files( + 'uapi/linux/if_arp.h', +) + +# Source files that provides CAP_XYZ +cap_sources = files( + 'uapi/linux/capability.h', +) + +# Source files that provides BPF delegate options +bpf_delegate_sources = files( + 'uapi/linux/bpf.h', +) + +# Source files that provides ETHTOOL_LINK_MODE_XYZ +ethtool_link_mode_sources = files( + 'uapi/linux/ethtool.h', +) + +# Source files that provides IPPROTO_XYZ +ipproto_sources = files( + 'override/netinet/in.h', + 'uapi/linux/in.h', +) + +# Source files that provides AUDIT_XYZ +audit_sources = files( + 'override/linux/audit.h', +) + +# Source files that provides KEY_XYZ +keyboard_sources = files( + 'uapi/linux/input.h', + 'uapi/linux/input-event-codes.h', +) diff --git a/src/basic/include/fcntl.h b/src/include/override/fcntl.h similarity index 100% rename from src/basic/include/fcntl.h rename to src/include/override/fcntl.h diff --git a/src/basic/missing_audit.h b/src/include/override/linux/audit.h similarity index 66% rename from src/basic/missing_audit.h rename to src/include/override/linux/audit.h index ff95e5e88a..abdd25b379 100644 --- a/src/basic/missing_audit.h +++ b/src/include/override/linux/audit.h @@ -1,13 +1,15 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include /* IWYU pragma: export */ +#include_next /* IWYU pragma: export */ #if HAVE_AUDIT # include /* IWYU pragma: export */ #endif -/* We use _Static_assert() directly here instead of assert_cc() +#include + +/* We use static_assert() directly here instead of assert_cc() * because if we include macro.h in this header, the invocation * of generate-audit_type-list.sh becomes more complex. */ @@ -15,17 +17,17 @@ #ifndef AUDIT_SERVICE_START # define AUDIT_SERVICE_START 1130 /* Service (daemon) start */ #else -_Static_assert(AUDIT_SERVICE_START == 1130, ""); +static_assert(AUDIT_SERVICE_START == 1130, ""); #endif #ifndef AUDIT_SERVICE_STOP # define AUDIT_SERVICE_STOP 1131 /* Service (daemon) stop */ #else -_Static_assert(AUDIT_SERVICE_STOP == 1131, ""); +static_assert(AUDIT_SERVICE_STOP == 1131, ""); #endif #ifndef MAX_AUDIT_MESSAGE_LENGTH # define MAX_AUDIT_MESSAGE_LENGTH 8970 #else -_Static_assert(MAX_AUDIT_MESSAGE_LENGTH == 8970, ""); +static_assert(MAX_AUDIT_MESSAGE_LENGTH == 8970, ""); #endif diff --git a/src/basic/missing_bpf.h b/src/include/override/linux/bpf.h similarity index 90% rename from src/basic/missing_bpf.h rename to src/include/override/linux/bpf.h index 968bcdfb2d..f33c748fde 100644 --- a/src/basic/missing_bpf.h +++ b/src/include/override/linux/bpf.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include /* IWYU pragma: export */ +#include_next /* IWYU pragma: export */ /* defined in linux/filter.h */ /* Unconditional jumps, goto pc + off16 */ diff --git a/src/basic/missing_fs.h b/src/include/override/linux/fs.h similarity index 84% rename from src/basic/missing_fs.h rename to src/include/override/linux/fs.h index d07042a48a..594b1638cc 100644 --- a/src/basic/missing_fs.h +++ b/src/include/override/linux/fs.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include /* IWYU pragma: export */ +#include_next /* IWYU pragma: export */ /* Not exposed yet. Defined at fs/ext4/ext4.h */ #ifndef EXT4_IOC_RESIZE_FS diff --git a/src/basic/missing_keyctl.h b/src/include/override/linux/keyctl.h similarity index 90% rename from src/basic/missing_keyctl.h rename to src/include/override/linux/keyctl.h index 8a9c82b9b4..1f0988371a 100644 --- a/src/basic/missing_keyctl.h +++ b/src/include/override/linux/keyctl.h @@ -1,9 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include /* IWYU pragma: export */ +#include_next /* IWYU pragma: export */ -#include "forward.h" +#include /* From linux/key.h */ #ifndef KEY_POS_VIEW @@ -42,5 +42,5 @@ typedef int32_t key_serial_t; # define KEY_OTH_SETATTR 0x00000020 # define KEY_OTH_ALL 0x0000003f #else -assert_cc(KEY_OTH_ALL == 0x0000003f); +static_assert(KEY_OTH_ALL == 0x0000003f, ""); #endif diff --git a/src/basic/missing_magic.h b/src/include/override/linux/magic.h similarity index 73% rename from src/basic/missing_magic.h rename to src/include/override/linux/magic.h index b5357d4f68..d940fa54a2 100644 --- a/src/basic/missing_magic.h +++ b/src/include/override/linux/magic.h @@ -1,102 +1,104 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include /* IWYU pragma: export */ +#include_next /* IWYU pragma: export */ + +#include /* Not exposed yet (4.20). Defined at ipc/mqueue.c */ #ifndef MQUEUE_MAGIC # define MQUEUE_MAGIC 0x19800202 #else -assert_cc(MQUEUE_MAGIC == 0x19800202); +static_assert(MQUEUE_MAGIC == 0x19800202, ""); #endif /* b1123ea6d3b3da25af5c8a9d843bd07ab63213f4 (4.8), dropped by 68f2736a858324c3ec852f6c2cddd9d1c777357d (v6.0) */ #ifndef BALLOON_KVM_MAGIC # define BALLOON_KVM_MAGIC 0x13661366 #else -assert_cc(BALLOON_KVM_MAGIC == 0x13661366); +static_assert(BALLOON_KVM_MAGIC == 0x13661366, ""); #endif /* 48b4800a1c6af2cdda344ea4e2c843dcc1f6afc9 (4.8), dropped by 68f2736a858324c3ec852f6c2cddd9d1c777357d (v6.0) */ #ifndef ZSMALLOC_MAGIC # define ZSMALLOC_MAGIC 0x58295829 #else -assert_cc(ZSMALLOC_MAGIC == 0x58295829); +static_assert(ZSMALLOC_MAGIC == 0x58295829, ""); #endif /* ea8157ab2ae5e914dd427e5cfab533b6da3819cd (5.3), dropped by 68f2736a858324c3ec852f6c2cddd9d1c777357d (v6.0) */ #ifndef Z3FOLD_MAGIC # define Z3FOLD_MAGIC 0x33 #else -assert_cc(Z3FOLD_MAGIC == 0x33); +static_assert(Z3FOLD_MAGIC == 0x33, ""); #endif /* fe030c9b85e6783bc52fe86449c0a4b8aa16c753 (5.5), dropped by 68f2736a858324c3ec852f6c2cddd9d1c777357d (v6.0) */ #ifndef PPC_CMM_MAGIC # define PPC_CMM_MAGIC 0xc7571590 #else -assert_cc(PPC_CMM_MAGIC == 0xc7571590); +static_assert(PPC_CMM_MAGIC == 0xc7571590, ""); #endif /* Not in mainline but included in Ubuntu */ #ifndef SHIFTFS_MAGIC # define SHIFTFS_MAGIC 0x6a656a62 #else -assert_cc(SHIFTFS_MAGIC == 0x6a656a62); +static_assert(SHIFTFS_MAGIC == 0x6a656a62, ""); #endif /* Not exposed yet. Defined at fs/fuse/control.c */ #ifndef FUSE_CTL_SUPER_MAGIC # define FUSE_CTL_SUPER_MAGIC 0x65735543 #else -assert_cc(FUSE_CTL_SUPER_MAGIC == 0x65735543); +static_assert(FUSE_CTL_SUPER_MAGIC == 0x65735543, ""); #endif /* Not exposed yet. Defined at fs/orangefs/orangefs-kernel.h */ #ifndef ORANGEFS_DEVREQ_MAGIC # define ORANGEFS_DEVREQ_MAGIC 0x20030529 #else -assert_cc(ORANGEFS_DEVREQ_MAGIC == 0x20030529); +static_assert(ORANGEFS_DEVREQ_MAGIC == 0x20030529, ""); #endif /* linux/gfs2_ondisk.h */ #ifndef GFS2_MAGIC # define GFS2_MAGIC 0x01161970 #else -assert_cc(GFS2_MAGIC == 0x01161970); +static_assert(GFS2_MAGIC == 0x01161970, ""); #endif /* Not exposed yet. Defined at fs/configfs/mount.c */ #ifndef CONFIGFS_MAGIC # define CONFIGFS_MAGIC 0x62656570 #else -assert_cc(CONFIGFS_MAGIC == 0x62656570); +static_assert(CONFIGFS_MAGIC == 0x62656570, ""); #endif /* Not exposed yet. Defined at fs/vboxsf/super.c */ #ifndef VBOXSF_SUPER_MAGIC # define VBOXSF_SUPER_MAGIC 0x786f4256 #else -assert_cc(VBOXSF_SUPER_MAGIC == 0x786f4256); +static_assert(VBOXSF_SUPER_MAGIC == 0x786f4256, ""); #endif /* Not exposed yet, internally actually called RPCAUTH_GSSMAGIC. Defined in net/sunrpc/rpc_pipe.c */ #ifndef RPC_PIPEFS_SUPER_MAGIC # define RPC_PIPEFS_SUPER_MAGIC 0x67596969 #else -assert_cc(RPC_PIPEFS_SUPER_MAGIC == 0x67596969); +static_assert(RPC_PIPEFS_SUPER_MAGIC == 0x67596969, ""); #endif /* Not exposed yet, defined at fs/ntfs/ntfs.h */ #ifndef NTFS_SB_MAGIC # define NTFS_SB_MAGIC 0x5346544e #else -assert_cc(NTFS_SB_MAGIC == 0x5346544e); +static_assert(NTFS_SB_MAGIC == 0x5346544e, ""); #endif /* Not exposed yet, encoded literally in fs/ntfs3/super.c. */ #ifndef NTFS3_SUPER_MAGIC # define NTFS3_SUPER_MAGIC 0x7366746e #else -assert_cc(NTFS3_SUPER_MAGIC == 0x7366746e); +static_assert(NTFS3_SUPER_MAGIC == 0x7366746e, ""); #endif diff --git a/src/basic/missing_namespace.h b/src/include/override/linux/nsfs.h similarity index 89% rename from src/basic/missing_namespace.h rename to src/include/override/linux/nsfs.h index e40b751b81..a256df1c6f 100644 --- a/src/basic/missing_namespace.h +++ b/src/include/override/linux/nsfs.h @@ -1,8 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include /* IWYU pragma: export */ -#include +#include_next /* IWYU pragma: export */ /* Root namespace inode numbers, as per include/linux/proc_ns.h in the kernel source tree, since v3.8: * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=98f842e675f96ffac96e6c50315790912b2812be */ diff --git a/src/basic/missing_xfs.h b/src/include/override/linux/xfs.h similarity index 91% rename from src/basic/missing_xfs.h rename to src/include/override/linux/xfs.h index ead7dbc321..57112c74a5 100644 --- a/src/basic/missing_xfs.h +++ b/src/include/override/linux/xfs.h @@ -1,7 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include "forward.h" +#include +#include /* This is currently not exported in the public kernel headers, but the libxfs library code part of xfsprogs * defines it as public header */ @@ -22,10 +23,10 @@ typedef struct xfs_fsop_geom { uint64_t rtblocks; uint64_t rtextents; uint64_t logstart; - unsigned char uuid[16]; + uint8_t uuid[16]; uint32_t sunit; uint32_t swidth; - int32_t version; + int32_t version; uint32_t flags; uint32_t logsectsize; uint32_t rtsectsize; diff --git a/src/basic/include/malloc.h b/src/include/override/malloc.h similarity index 100% rename from src/basic/include/malloc.h rename to src/include/override/malloc.h diff --git a/src/basic/include/net/if.h b/src/include/override/net/if.h similarity index 100% rename from src/basic/include/net/if.h rename to src/include/override/net/if.h diff --git a/src/basic/include/net/if_arp.h b/src/include/override/net/if_arp.h similarity index 100% rename from src/basic/include/net/if_arp.h rename to src/include/override/net/if_arp.h diff --git a/src/basic/include/netinet/in.h b/src/include/override/netinet/in.h similarity index 100% rename from src/basic/include/netinet/in.h rename to src/include/override/netinet/in.h diff --git a/src/basic/include/sched.h b/src/include/override/sched.h similarity index 57% rename from src/basic/include/sched.h rename to src/include/override/sched.h index 41c830e26b..f2748b1608 100644 --- a/src/basic/include/sched.h +++ b/src/include/override/sched.h @@ -35,3 +35,22 @@ static_assert(PF_KTHREAD == 0x00200000, ""); #else static_assert(TASK_COMM_LEN == 16, ""); #endif + +/* glibc does not provide clone() on ia64, only clone2(). Not only that, but it also doesn't provide a + * prototype, only the symbol in the shared library (it provides a prototype for clone(), but not the + * symbol in the shared library). */ +#if defined(__ia64__) +int __clone2(int (*fn)(void *), void *stack_base, size_t stack_size, int flags, void *arg); +#define HAVE_CLONE 0 +#else +/* We know that everywhere else clone() is available, so we don't bother with a meson check (that takes time + * at build time) and just define it. Once the kernel drops ia64 support, we can drop this too. */ +#define HAVE_CLONE 1 +#endif + +/* Defined since glibc-2.41. + * Supported since kernel 3.14 (e6cfc0295c7d51b008999a8b13a44fb43f8685ea). */ +#if !HAVE_SCHED_SETATTR +int missing_sched_setattr(pid_t pid, struct sched_attr *attr, unsigned flags); +# define sched_setattr missing_sched_setattr +#endif diff --git a/src/include/override/signal.h b/src/include/override/signal.h new file mode 100644 index 0000000000..83aa18dc8f --- /dev/null +++ b/src/include/override/signal.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include_next + +#if !HAVE_RT_TGSIGQUEUEINFO +int missing_rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, siginfo_t *info); +# define rt_tgsigqueueinfo missing_rt_tgsigqueueinfo +#endif diff --git a/src/include/override/sys/bpf.h b/src/include/override/sys/bpf.h new file mode 100644 index 0000000000..56e1466b89 --- /dev/null +++ b/src/include/override/sys/bpf.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include /* IWYU pragma: export */ +#include + +/* Supported since kernel v3.18 (749730ce42a2121e1c88350d69478bff3994b10a). */ +#if !HAVE_BPF +int missing_bpf(int cmd, union bpf_attr *attr, size_t size); +# define bpf missing_bpf +#endif diff --git a/src/basic/missing_syscalls.py b/src/include/override/sys/generate-syscall.py similarity index 94% rename from src/basic/missing_syscalls.py rename to src/include/override/sys/generate-syscall.py index dd26b76b4c..b58f1d6bcf 100644 --- a/src/basic/missing_syscalls.py +++ b/src/include/override/sys/generate-syscall.py @@ -33,6 +33,20 @@ def parse_syscall_tables(filenames): return {filename.split('-')[-1][:-4]: parse_syscall_table(filename) for filename in filenames} +HEADER = '''\ +/* SPDX-License-Identifier: LGPL-2.1-or-later + * This file is generated by src/include/override/sys/generate-syscall.py. Do not edit! + * + * Use 'ninja -C build update-syscall-tables' to download new syscall tables, + * and 'ninja -C build update-syscall-header' to regenerate this file. + */ +#pragma once + +#include_next + +#include +''' + DEF_TEMPLATE_A = '''\ #ifndef __IGNORE_{syscall} @@ -97,7 +111,7 @@ DEF_TEMPLATE_C = '''\ /* may be an (invalid) negative number due to libseccomp, see PR 13319 */ # if defined __NR_{syscall} && __NR_{syscall} >= 0 # if defined systemd_NR_{syscall} -_Static_assert(__NR_{syscall} == systemd_NR_{syscall}, ""); +static_assert(__NR_{syscall} == systemd_NR_{syscall}, ""); # endif # else # if defined __NR_{syscall} @@ -128,16 +142,7 @@ def print_syscall_def(syscall, tables, out): file=out) def print_syscall_defs(syscalls, tables, out): - print('''\ -/* SPDX-License-Identifier: LGPL-2.1-or-later - * This file is generated by src/basic/missing_syscalls.py. Do not edit! - * - * Use 'ninja -C build update-syscall-tables' to download new syscall tables, - * and 'ninja -C build update-syscall-header' to regenerate this file. - */ -#pragma once -''', - file=out) + print(HEADER, file=out) print(ARCH_CHECK, file=out) for syscall in syscalls: print_syscall_def(syscall, tables, out) diff --git a/src/include/override/sys/ioprio.h b/src/include/override/sys/ioprio.h new file mode 100644 index 0000000000..c361eba6e6 --- /dev/null +++ b/src/include/override/sys/ioprio.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include /* IWYU pragma: export */ + +#if !HAVE_IOPRIO_GET +int missing_ioprio_get(int which, int who); +# define ioprio_get missing_ioprio_get +#endif + +#if !HAVE_IOPRIO_SET +int missing_ioprio_set(int which, int who, int ioprio); +# define ioprio_set missing_ioprio_set +#endif diff --git a/src/include/override/sys/kcmp.h b/src/include/override/sys/kcmp.h new file mode 100644 index 0000000000..4e47825ac5 --- /dev/null +++ b/src/include/override/sys/kcmp.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include /* IWYU pragma: export */ +#include + +/* Supported since kernel v3.5 (d97b46a64674a267bc41c9e16132ee2a98c3347d). */ +#if !HAVE_KCMP +int missing_kcmp(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2); +# define kcmp missing_kcmp +#endif diff --git a/src/include/override/sys/keyctl.h b/src/include/override/sys/keyctl.h new file mode 100644 index 0000000000..88c9c40ea7 --- /dev/null +++ b/src/include/override/sys/keyctl.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include /* IWYU pragma: export */ +#include + +#if !HAVE_KEYCTL +long missing_keyctl(int cmd, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5); +# define keyctl missing_keyctl +#endif + +#if !HAVE_ADD_KEY +key_serial_t missing_add_key(const char *type, const char *description, const void *payload, size_t plen, key_serial_t ringid); +# define add_key missing_add_key +#endif + +#if !HAVE_REQUEST_KEY +key_serial_t missing_request_key(const char *type, const char *description, const char *callout_info, key_serial_t destringid); +# define request_key missing_request_key +#endif diff --git a/src/include/override/sys/mempolicy.h b/src/include/override/sys/mempolicy.h new file mode 100644 index 0000000000..9858f2812b --- /dev/null +++ b/src/include/override/sys/mempolicy.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include /* IWYU pragma: export */ + +#if !HAVE_SET_MEMPOLICY +int missing_set_mempolicy(int mode, const unsigned long *nodemask, unsigned long maxnode); +# define set_mempolicy missing_set_mempolicy +#endif + +#if !HAVE_GET_MEMPOLICY +int missing_get_mempolicy(int *mode, unsigned long *nodemask, unsigned long maxnode, void *addr, unsigned long flags); +# define get_mempolicy missing_get_mempolicy +#endif diff --git a/src/include/override/sys/meson.build b/src/include/override/sys/meson.build new file mode 100644 index 0000000000..b66f9d055f --- /dev/null +++ b/src/include/override/sys/meson.build @@ -0,0 +1,41 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +arch_list = [ + 'alpha', + 'arc', + 'arm', + 'arm64', + 'i386', + 'ia64', + 'loongarch64', + 'm68k', + 'mips64', + 'mips64n32', + 'mipso32', + 'parisc', + 'powerpc', + 'powerpc64', + 'riscv32', + 'riscv64', + 's390', + 's390x', + 'sparc', + 'x86_64' +] + +run_target( + 'update-syscall-tables', + command : [update_syscall_tables_sh, meson.current_source_dir()] + arch_list) + +syscall_list_txt = files('syscall-list.txt') + +syscall_lists = [] +foreach arch: arch_list + syscall_lists += files('syscalls-@0@.txt'.format(arch)) +endforeach + +generate_syscall_py = find_program('generate-syscall.py') + +run_target( + 'update-syscall-header', + command : [generate_syscall_py, files('syscall.h')] + syscall_lists) diff --git a/src/basic/include/sys/mman.h b/src/include/override/sys/mman.h similarity index 100% rename from src/basic/include/sys/mman.h rename to src/include/override/sys/mman.h diff --git a/src/basic/include/sys/mount.h b/src/include/override/sys/mount.h similarity index 71% rename from src/basic/include/sys/mount.h rename to src/include/override/sys/mount.h index 3c9cd8ef5b..33a843b8f4 100644 --- a/src/basic/include/sys/mount.h +++ b/src/include/override/sys/mount.h @@ -8,10 +8,6 @@ #include #include #include -#include -#include - -#include "missing_syscall_def.h" /* Since glibc-2.37 (774058d72942249f71d74e7f2b639f77184160a6), sys/mount.h includes linux/mount.h, and * we can safely include both headers in the same source file. However, we cannot do that with older glibc. @@ -43,67 +39,56 @@ extern int umount2(const char *__special_file, int __flags) __THROW; /* Open the filesystem referenced by FS_NAME so it can be configured for mouting. */ +/* Defined since glibc-2.36. + * Supported since kernel v5.2 (24dcb3d90a1f67fe08c68a004af37df059d74005). */ #if HAVE_FSOPEN extern int fsopen(const char *__fs_name, unsigned int __flags) __THROW; #else -static inline int missing_fsopen(const char *fsname, unsigned flags) { - return syscall(__NR_fsopen, fsname, flags); -} +int missing_fsopen(const char *fsname, unsigned flags); # define fsopen missing_fsopen #endif /* Create a mount representation for the FD created by fsopen using FLAGS with ATTR_FLAGS describing how the mount is to be performed. */ +/* Defined since glibc-2.36. + * Supported since kernel v5.2 (93766fbd2696c2c4453dd8e1070977e9cd4e6b6d). */ #if HAVE_FSMOUNT extern int fsmount(int __fd, unsigned int __flags, unsigned int __ms_flags) __THROW; #else -static inline int missing_fsmount(int fd, unsigned flags, unsigned ms_flags) { - return syscall(__NR_fsmount, fd, flags, ms_flags); -} +int missing_fsmount(int fd, unsigned flags, unsigned ms_flags); # define fsmount missing_fsmount #endif /* Add the mounted FROM_DFD referenced by FROM_PATHNAME filesystem returned by fsmount in the hierarchy in the place TO_DFD reference by TO_PATHNAME using FLAGS. */ +/* Defined since glibc-2.36. + * Supported since kernel v5.2 (2db154b3ea8e14b04fee23e3fdfd5e9d17fbc6ae). */ #if HAVE_MOVE_MOUNT extern int move_mount(int __from_dfd, const char *__from_pathname, int __to_dfd, const char *__to_pathname, unsigned int flags) __THROW; #else -static inline int missing_move_mount( - int from_dfd, - const char *from_pathname, - int to_dfd, - const char *to_pathname, - unsigned flags) { - - return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags); -} +int missing_move_mount(int from_dfd, const char *from_pathname, int to_dfd, const char *to_pathname, unsigned flags); # define move_mount missing_move_mount #endif /* Set parameters and trigger CMD action on the FD context. KEY, VALUE, and AUX are used depending ng of the CMD. */ +/* Defined since glibc-2.36. + * Supported since kernel v5.2 (ecdab150fddb42fe6a739335257949220033b782). */ #if HAVE_FSCONFIG extern int fsconfig(int __fd, unsigned int __cmd, const char *__key, const void *__value, int __aux) __THROW; #else -static inline int missing_fsconfig(int fd, unsigned cmd, const char *key, const void *value, int aux) { - return syscall(__NR_fsconfig, fd, cmd, key, value, aux); -} +int missing_fsconfig(int fd, unsigned cmd, const char *key, const void *value, int aux); # define fsconfig missing_fsconfig #endif -/* Equivalent of fopen for an existing mount point. */ -#if HAVE_FSPICK -extern int fspick(int __dfd, const char *__path, unsigned int __flags) __THROW; -#endif - /* Open the mount point FILENAME in directory DFD using FLAGS. */ +/* Defined since glibc-2.36. + * Supported since kernel v5.2 (a07b20004793d8926f78d63eb5980559f7813404). */ #if HAVE_OPEN_TREE extern int open_tree(int __dfd, const char *__filename, unsigned int __flags) __THROW; #else -static inline int missing_open_tree(int dfd, const char *filename, unsigned flags) { - return syscall(__NR_open_tree, dfd, filename, flags); -} +int missing_open_tree(int dfd, const char *filename, unsigned flags); # define open_tree missing_open_tree #endif @@ -112,21 +97,20 @@ static inline int missing_open_tree(int dfd, const char *filename, unsigned flag directory referred to by the file descriptor dirfd. Otherwise if DFD is the special value AT_FDCWD then PATH is interpreted relative to the current working directory of the calling process. */ +/* Defined since glibc-2.36. + * Supported since kernel v5.12 (2a1867219c7b27f928e2545782b86daaf9ad50bd). */ #if HAVE_MOUNT_SETATTR extern int mount_setattr(int __dfd, const char *__path, unsigned int __flags, struct mount_attr *__uattr, size_t __usize) __THROW; #else -static inline int missing_mount_setattr(int dfd, const char *path, unsigned flags, struct mount_attr *attr, size_t size) { - return syscall(__NR_mount_setattr, dfd, path, flags, attr, size); -} +int missing_mount_setattr(int dfd, const char *path, unsigned flags, struct mount_attr *attr, size_t size); # define mount_setattr missing_mount_setattr #endif +/* Not defined in glibc yet as of glibc-2.41. + * Supported since kernel v6.15 (c4a16820d90199409c9bf01c4f794e1e9e8d8fd8). */ #if HAVE_OPEN_TREE_ATTR extern int open_tree_attr(int __dfd, const char *__filename, unsigned int __flags, struct mount_attr *__uattr, size_t __usize) __THROW; #else -static inline int missing_open_tree_attr(int dfd, const char *filename, unsigned int flags, struct mount_attr *attr, size_t size) { - return syscall(__NR_open_tree_attr, dfd, filename, flags, attr, size); -} - +int missing_open_tree_attr(int dfd, const char *filename, unsigned int flags, struct mount_attr *attr, size_t size); # define open_tree_attr missing_open_tree_attr #endif diff --git a/src/basic/include/sys/param.h b/src/include/override/sys/param.h similarity index 100% rename from src/basic/include/sys/param.h rename to src/include/override/sys/param.h diff --git a/src/basic/include/sys/pidfd.h b/src/include/override/sys/pidfd.h similarity index 75% rename from src/basic/include/sys/pidfd.h rename to src/include/override/sys/pidfd.h index de13144524..69eb2eaff9 100644 --- a/src/basic/include/sys/pidfd.h +++ b/src/include/override/sys/pidfd.h @@ -1,14 +1,29 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include -#include - /* since glibc-2.36 */ #if HAVE_PIDFD_OPEN #include_next #endif +#include +#include +#include + +/* Defined since glibc-2.36. + * Supported since kernel v5.3 (7615d9e1780e26e0178c93c55b73309a5dc093d7). */ +#if !HAVE_PIDFD_OPEN +int missing_pidfd_open(pid_t pid, unsigned flags); +# define pidfd_open missing_pidfd_open +#endif + +/* Defined since glibc-2.36. + * Supported since kernel v5.1 (3eb39f47934f9d5a3027fe00d906a45fe3a15fad). */ +#if !HAVE_PIDFD_SEND_SIGNAL +int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, unsigned flags); +# define pidfd_send_signal missing_pidfd_send_signal +#endif + /* since glibc-2.41 */ #ifndef PIDFS_IOCTL_MAGIC # define PIDFS_IOCTL_MAGIC 0xFF diff --git a/src/include/override/sys/quota.h b/src/include/override/sys/quota.h new file mode 100644 index 0000000000..481dbaba21 --- /dev/null +++ b/src/include/override/sys/quota.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include_next + +/* Supported since kernel v5.14 (64c2c2c62f92339b176ea24403d8db16db36f9e6). */ +#if !HAVE_QUOTACTL_FD +int missing_quotactl_fd(int fd, int cmd, int id, void *addr); +# define quotactl_fd missing_quotactl_fd +#endif diff --git a/src/basic/include/sys/random.h b/src/include/override/sys/random.h similarity index 100% rename from src/basic/include/sys/random.h rename to src/include/override/sys/random.h diff --git a/src/basic/include/sys/socket.h b/src/include/override/sys/socket.h similarity index 100% rename from src/basic/include/sys/socket.h rename to src/include/override/sys/socket.h diff --git a/src/include/override/sys/stat.h b/src/include/override/sys/stat.h new file mode 100644 index 0000000000..37793cff19 --- /dev/null +++ b/src/include/override/sys/stat.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include_next + +/* Supported since kernel v6.6 (78252deb023cf0879256fcfbafe37022c390762b). */ +#if !HAVE_FCHMODAT2 +int missing_fchmodat2(int dirfd, const char *path, mode_t mode, int flags); +# define fchmodat2 missing_fchmodat2 +#endif diff --git a/src/basic/syscall-list.txt b/src/include/override/sys/syscall-list.txt similarity index 100% rename from src/basic/syscall-list.txt rename to src/include/override/sys/syscall-list.txt diff --git a/src/basic/missing_syscall_def.h b/src/include/override/sys/syscall.h similarity index 96% rename from src/basic/missing_syscall_def.h rename to src/include/override/sys/syscall.h index a34cb36f14..894394a76b 100644 --- a/src/basic/missing_syscall_def.h +++ b/src/include/override/sys/syscall.h @@ -1,11 +1,15 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later - * This file is generated by src/basic/missing_syscalls.py. Do not edit! + * This file is generated by src/include/override/sys/generate-syscall.py. Do not edit! * * Use 'ninja -C build update-syscall-tables' to download new syscall tables, * and 'ninja -C build update-syscall-header' to regenerate this file. */ #pragma once +#include_next + +#include + /* 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__) @@ -98,7 +102,7 @@ /* may be an (invalid) negative number due to libseccomp, see PR 13319 */ # if defined __NR_close_range && __NR_close_range >= 0 # if defined systemd_NR_close_range -_Static_assert(__NR_close_range == systemd_NR_close_range, ""); +static_assert(__NR_close_range == systemd_NR_close_range, ""); # endif # else # if defined __NR_close_range @@ -166,7 +170,7 @@ _Static_assert(__NR_close_range == systemd_NR_close_range, ""); /* may be an (invalid) negative number due to libseccomp, see PR 13319 */ # if defined __NR_fchmodat2 && __NR_fchmodat2 >= 0 # if defined systemd_NR_fchmodat2 -_Static_assert(__NR_fchmodat2 == systemd_NR_fchmodat2, ""); +static_assert(__NR_fchmodat2 == systemd_NR_fchmodat2, ""); # endif # else # if defined __NR_fchmodat2 @@ -234,7 +238,7 @@ _Static_assert(__NR_fchmodat2 == systemd_NR_fchmodat2, ""); /* may be an (invalid) negative number due to libseccomp, see PR 13319 */ # if defined __NR_mount_setattr && __NR_mount_setattr >= 0 # if defined systemd_NR_mount_setattr -_Static_assert(__NR_mount_setattr == systemd_NR_mount_setattr, ""); +static_assert(__NR_mount_setattr == systemd_NR_mount_setattr, ""); # endif # else # if defined __NR_mount_setattr @@ -246,6 +250,74 @@ _Static_assert(__NR_mount_setattr == systemd_NR_mount_setattr, ""); # endif #endif +#ifndef __IGNORE_open_tree_attr +# if defined(__aarch64__) +# define systemd_NR_open_tree_attr 467 +# elif defined(__alpha__) +# define systemd_NR_open_tree_attr 577 +# elif defined(__arc__) || defined(__tilegx__) +# define systemd_NR_open_tree_attr 467 +# elif defined(__arm__) +# define systemd_NR_open_tree_attr 467 +# elif defined(__i386__) +# define systemd_NR_open_tree_attr 467 +# elif defined(__ia64__) +# define systemd_NR_open_tree_attr -1 +# elif defined(__loongarch_lp64) +# define systemd_NR_open_tree_attr 467 +# elif defined(__m68k__) +# define systemd_NR_open_tree_attr 467 +# elif defined(_MIPS_SIM) +# if _MIPS_SIM == _MIPS_SIM_ABI32 +# define systemd_NR_open_tree_attr 4467 +# elif _MIPS_SIM == _MIPS_SIM_NABI32 +# define systemd_NR_open_tree_attr 6467 +# elif _MIPS_SIM == _MIPS_SIM_ABI64 +# define systemd_NR_open_tree_attr 5467 +# else +# error "Unknown MIPS ABI" +# endif +# elif defined(__hppa__) +# define systemd_NR_open_tree_attr 467 +# elif defined(__powerpc__) +# define systemd_NR_open_tree_attr 467 +# elif defined(__riscv) +# if __riscv_xlen == 32 +# define systemd_NR_open_tree_attr 467 +# elif __riscv_xlen == 64 +# define systemd_NR_open_tree_attr 467 +# else +# error "Unknown RISC-V ABI" +# endif +# elif defined(__s390__) +# define systemd_NR_open_tree_attr 467 +# elif defined(__sparc__) +# define systemd_NR_open_tree_attr 467 +# elif defined(__x86_64__) +# if defined(__ILP32__) +# define systemd_NR_open_tree_attr (467 | /* __X32_SYSCALL_BIT */ 0x40000000) +# else +# define systemd_NR_open_tree_attr 467 +# endif +# elif !defined(missing_arch_template) +# warning "open_tree_attr() syscall number is unknown for your architecture" +# endif + +/* may be an (invalid) negative number due to libseccomp, see PR 13319 */ +# if defined __NR_open_tree_attr && __NR_open_tree_attr >= 0 +# if defined systemd_NR_open_tree_attr +static_assert(__NR_open_tree_attr == systemd_NR_open_tree_attr, ""); +# endif +# else +# if defined __NR_open_tree_attr +# undef __NR_open_tree_attr +# endif +# if defined systemd_NR_open_tree_attr && systemd_NR_open_tree_attr >= 0 +# define __NR_open_tree_attr systemd_NR_open_tree_attr +# endif +# endif +#endif + #ifndef __IGNORE_openat2 # if defined(__aarch64__) # define systemd_NR_openat2 437 @@ -302,7 +374,7 @@ _Static_assert(__NR_mount_setattr == systemd_NR_mount_setattr, ""); /* may be an (invalid) negative number due to libseccomp, see PR 13319 */ # if defined __NR_openat2 && __NR_openat2 >= 0 # if defined systemd_NR_openat2 -_Static_assert(__NR_openat2 == systemd_NR_openat2, ""); +static_assert(__NR_openat2 == systemd_NR_openat2, ""); # endif # else # if defined __NR_openat2 @@ -370,7 +442,7 @@ _Static_assert(__NR_openat2 == systemd_NR_openat2, ""); /* may be an (invalid) negative number due to libseccomp, see PR 13319 */ # if defined __NR_quotactl_fd && __NR_quotactl_fd >= 0 # if defined systemd_NR_quotactl_fd -_Static_assert(__NR_quotactl_fd == systemd_NR_quotactl_fd, ""); +static_assert(__NR_quotactl_fd == systemd_NR_quotactl_fd, ""); # endif # else # if defined __NR_quotactl_fd @@ -438,7 +510,7 @@ _Static_assert(__NR_quotactl_fd == systemd_NR_quotactl_fd, ""); /* may be an (invalid) negative number due to libseccomp, see PR 13319 */ # if defined __NR_removexattrat && __NR_removexattrat >= 0 # if defined systemd_NR_removexattrat -_Static_assert(__NR_removexattrat == systemd_NR_removexattrat, ""); +static_assert(__NR_removexattrat == systemd_NR_removexattrat, ""); # endif # else # if defined __NR_removexattrat @@ -506,7 +578,7 @@ _Static_assert(__NR_removexattrat == systemd_NR_removexattrat, ""); /* may be an (invalid) negative number due to libseccomp, see PR 13319 */ # if defined __NR_setxattrat && __NR_setxattrat >= 0 # if defined systemd_NR_setxattrat -_Static_assert(__NR_setxattrat == systemd_NR_setxattrat, ""); +static_assert(__NR_setxattrat == systemd_NR_setxattrat, ""); # endif # else # if defined __NR_setxattrat @@ -517,71 +589,3 @@ _Static_assert(__NR_setxattrat == systemd_NR_setxattrat, ""); # endif # endif #endif - -#ifndef __IGNORE_open_tree_attr -# if defined(__aarch64__) -# define systemd_NR_open_tree_attr 467 -# elif defined(__alpha__) -# define systemd_NR_open_tree_attr 577 -# elif defined(__arc__) || defined(__tilegx__) -# define systemd_NR_open_tree_attr 467 -# elif defined(__arm__) -# define systemd_NR_open_tree_attr 467 -# elif defined(__i386__) -# define systemd_NR_open_tree_attr 467 -# elif defined(__ia64__) -# define systemd_NR_open_tree_attr -1 -# elif defined(__loongarch_lp64) -# define systemd_NR_open_tree_attr 467 -# elif defined(__m68k__) -# define systemd_NR_open_tree_attr 467 -# elif defined(_MIPS_SIM) -# if _MIPS_SIM == _MIPS_SIM_ABI32 -# define systemd_NR_open_tree_attr 4467 -# elif _MIPS_SIM == _MIPS_SIM_NABI32 -# define systemd_NR_open_tree_attr 6467 -# elif _MIPS_SIM == _MIPS_SIM_ABI64 -# define systemd_NR_open_tree_attr 5467 -# else -# error "Unknown MIPS ABI" -# endif -# elif defined(__hppa__) -# define systemd_NR_open_tree_attr 467 -# elif defined(__powerpc__) -# define systemd_NR_open_tree_attr 467 -# elif defined(__riscv) -# if __riscv_xlen == 32 -# define systemd_NR_open_tree_attr 467 -# elif __riscv_xlen == 64 -# define systemd_NR_open_tree_attr 467 -# else -# error "Unknown RISC-V ABI" -# endif -# elif defined(__s390__) -# define systemd_NR_open_tree_attr 467 -# elif defined(__sparc__) -# define systemd_NR_open_tree_attr 467 -# elif defined(__x86_64__) -# if defined(__ILP32__) -# define systemd_NR_open_tree_attr (467 | /* __X32_SYSCALL_BIT */ 0x40000000) -# else -# define systemd_NR_open_tree_attr 467 -# endif -# elif !defined(missing_arch_template) -# warning "open_tree_attr() syscall number is unknown for your architecture" -# endif - -/* may be an (invalid) negative number due to libseccomp, see PR 13319 */ -# if defined __NR_open_tree_attr && __NR_open_tree_attr >= 0 -# if defined systemd_NR_open_tree_attr -_Static_assert(__NR_open_tree_attr == systemd_NR_open_tree_attr, ""); -# endif -# else -# if defined __NR_open_tree_attr -# undef __NR_open_tree_attr -# endif -# if defined systemd_NR_open_tree_attr && systemd_NR_open_tree_attr >= 0 -# define __NR_open_tree_attr systemd_NR_open_tree_attr -# endif -# endif -#endif diff --git a/src/basic/syscalls-alpha.txt b/src/include/override/sys/syscalls-alpha.txt similarity index 100% rename from src/basic/syscalls-alpha.txt rename to src/include/override/sys/syscalls-alpha.txt diff --git a/src/basic/syscalls-arc.txt b/src/include/override/sys/syscalls-arc.txt similarity index 100% rename from src/basic/syscalls-arc.txt rename to src/include/override/sys/syscalls-arc.txt diff --git a/src/basic/syscalls-arm.txt b/src/include/override/sys/syscalls-arm.txt similarity index 100% rename from src/basic/syscalls-arm.txt rename to src/include/override/sys/syscalls-arm.txt diff --git a/src/basic/syscalls-arm64.txt b/src/include/override/sys/syscalls-arm64.txt similarity index 100% rename from src/basic/syscalls-arm64.txt rename to src/include/override/sys/syscalls-arm64.txt diff --git a/src/basic/syscalls-i386.txt b/src/include/override/sys/syscalls-i386.txt similarity index 100% rename from src/basic/syscalls-i386.txt rename to src/include/override/sys/syscalls-i386.txt diff --git a/src/basic/syscalls-ia64.txt b/src/include/override/sys/syscalls-ia64.txt similarity index 100% rename from src/basic/syscalls-ia64.txt rename to src/include/override/sys/syscalls-ia64.txt diff --git a/src/basic/syscalls-loongarch64.txt b/src/include/override/sys/syscalls-loongarch64.txt similarity index 100% rename from src/basic/syscalls-loongarch64.txt rename to src/include/override/sys/syscalls-loongarch64.txt diff --git a/src/basic/syscalls-m68k.txt b/src/include/override/sys/syscalls-m68k.txt similarity index 100% rename from src/basic/syscalls-m68k.txt rename to src/include/override/sys/syscalls-m68k.txt diff --git a/src/basic/syscalls-mips64.txt b/src/include/override/sys/syscalls-mips64.txt similarity index 100% rename from src/basic/syscalls-mips64.txt rename to src/include/override/sys/syscalls-mips64.txt diff --git a/src/basic/syscalls-mips64n32.txt b/src/include/override/sys/syscalls-mips64n32.txt similarity index 100% rename from src/basic/syscalls-mips64n32.txt rename to src/include/override/sys/syscalls-mips64n32.txt diff --git a/src/basic/syscalls-mipso32.txt b/src/include/override/sys/syscalls-mipso32.txt similarity index 100% rename from src/basic/syscalls-mipso32.txt rename to src/include/override/sys/syscalls-mipso32.txt diff --git a/src/basic/syscalls-parisc.txt b/src/include/override/sys/syscalls-parisc.txt similarity index 100% rename from src/basic/syscalls-parisc.txt rename to src/include/override/sys/syscalls-parisc.txt diff --git a/src/basic/syscalls-powerpc.txt b/src/include/override/sys/syscalls-powerpc.txt similarity index 100% rename from src/basic/syscalls-powerpc.txt rename to src/include/override/sys/syscalls-powerpc.txt diff --git a/src/basic/syscalls-powerpc64.txt b/src/include/override/sys/syscalls-powerpc64.txt similarity index 100% rename from src/basic/syscalls-powerpc64.txt rename to src/include/override/sys/syscalls-powerpc64.txt diff --git a/src/basic/syscalls-riscv32.txt b/src/include/override/sys/syscalls-riscv32.txt similarity index 100% rename from src/basic/syscalls-riscv32.txt rename to src/include/override/sys/syscalls-riscv32.txt diff --git a/src/basic/syscalls-riscv64.txt b/src/include/override/sys/syscalls-riscv64.txt similarity index 100% rename from src/basic/syscalls-riscv64.txt rename to src/include/override/sys/syscalls-riscv64.txt diff --git a/src/basic/syscalls-s390.txt b/src/include/override/sys/syscalls-s390.txt similarity index 100% rename from src/basic/syscalls-s390.txt rename to src/include/override/sys/syscalls-s390.txt diff --git a/src/basic/syscalls-s390x.txt b/src/include/override/sys/syscalls-s390x.txt similarity index 100% rename from src/basic/syscalls-s390x.txt rename to src/include/override/sys/syscalls-s390x.txt diff --git a/src/basic/syscalls-sparc.txt b/src/include/override/sys/syscalls-sparc.txt similarity index 100% rename from src/basic/syscalls-sparc.txt rename to src/include/override/sys/syscalls-sparc.txt diff --git a/src/basic/syscalls-x86_64.txt b/src/include/override/sys/syscalls-x86_64.txt similarity index 100% rename from src/basic/syscalls-x86_64.txt rename to src/include/override/sys/syscalls-x86_64.txt diff --git a/src/basic/include/sys/wait.h b/src/include/override/sys/wait.h similarity index 100% rename from src/basic/include/sys/wait.h rename to src/include/override/sys/wait.h diff --git a/src/include/override/sys/xattr.h b/src/include/override/sys/xattr.h new file mode 100644 index 0000000000..711c5387c1 --- /dev/null +++ b/src/include/override/sys/xattr.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +/* To make struct xattr_args defined, which is used by setxattrat(). Note, the kernel header must be + * included before the glibc header, otherwise the struct will not be defined. */ +#include + +#include_next + +/* Supported since kernel v6.13 (6140be90ec70c39fa844741ca3cc807dd0866394). */ +#if !HAVE_SETXATTRAT +int missing_setxattrat(int fd, const char *path, int at_flags, const char *name, const struct xattr_args *args, size_t size); +# define setxattrat missing_setxattrat +#endif + +/* Supported since kernel v6.13 (6140be90ec70c39fa844741ca3cc807dd0866394). */ +#if !HAVE_REMOVEXATTRAT +int missing_removexattrat(int fd, const char *path, int at_flags, const char *name); +# define removexattrat missing_removexattrat +#endif diff --git a/src/include/override/unistd.h b/src/include/override/unistd.h new file mode 100644 index 0000000000..d381f06a53 --- /dev/null +++ b/src/include/override/unistd.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include_next + +/* Defined since glibc-2.34. + * Supported since kernel v5.9 (9b4feb630e8e9801603f3cab3a36369e3c1cf88d). */ +#if !HAVE_CLOSE_RANGE +int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags); +# define close_range missing_close_range +#endif + +/* Defined since glibc-2.34. + * Supported since kernel v3.19 (51f39a1f0cea1cacf8c787f652f26dfee9611874). */ +#if !HAVE_EXECVEAT +int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags); +# define execveat missing_execveat +#endif + +#if !HAVE_PIVOT_ROOT +int missing_pivot_root(const char *new_root, const char *put_old); +# define pivot_root missing_pivot_root +#endif diff --git a/src/basic/include/linux/.clang-format b/src/include/uapi/linux/.clang-format similarity index 100% rename from src/basic/include/linux/.clang-format rename to src/include/uapi/linux/.clang-format diff --git a/src/basic/include/linux/auto_dev-ioctl.h b/src/include/uapi/linux/auto_dev-ioctl.h similarity index 100% rename from src/basic/include/linux/auto_dev-ioctl.h rename to src/include/uapi/linux/auto_dev-ioctl.h diff --git a/src/basic/include/linux/auto_fs.h b/src/include/uapi/linux/auto_fs.h similarity index 100% rename from src/basic/include/linux/auto_fs.h rename to src/include/uapi/linux/auto_fs.h diff --git a/src/basic/include/linux/batman_adv.h b/src/include/uapi/linux/batman_adv.h similarity index 100% rename from src/basic/include/linux/batman_adv.h rename to src/include/uapi/linux/batman_adv.h diff --git a/src/basic/include/linux/bpf.h b/src/include/uapi/linux/bpf.h similarity index 100% rename from src/basic/include/linux/bpf.h rename to src/include/uapi/linux/bpf.h diff --git a/src/basic/include/linux/bpf_common.h b/src/include/uapi/linux/bpf_common.h similarity index 100% rename from src/basic/include/linux/bpf_common.h rename to src/include/uapi/linux/bpf_common.h diff --git a/src/basic/include/linux/bpf_insn.h b/src/include/uapi/linux/bpf_insn.h similarity index 100% rename from src/basic/include/linux/bpf_insn.h rename to src/include/uapi/linux/bpf_insn.h diff --git a/src/basic/include/linux/btrfs.h b/src/include/uapi/linux/btrfs.h similarity index 100% rename from src/basic/include/linux/btrfs.h rename to src/include/uapi/linux/btrfs.h diff --git a/src/basic/include/linux/btrfs_tree.h b/src/include/uapi/linux/btrfs_tree.h similarity index 100% rename from src/basic/include/linux/btrfs_tree.h rename to src/include/uapi/linux/btrfs_tree.h diff --git a/src/basic/include/linux/can/netlink.h b/src/include/uapi/linux/can/netlink.h similarity index 100% rename from src/basic/include/linux/can/netlink.h rename to src/include/uapi/linux/can/netlink.h diff --git a/src/basic/include/linux/can/vxcan.h b/src/include/uapi/linux/can/vxcan.h similarity index 100% rename from src/basic/include/linux/can/vxcan.h rename to src/include/uapi/linux/can/vxcan.h diff --git a/src/basic/include/linux/capability.h b/src/include/uapi/linux/capability.h similarity index 100% rename from src/basic/include/linux/capability.h rename to src/include/uapi/linux/capability.h diff --git a/src/basic/include/linux/cfm_bridge.h b/src/include/uapi/linux/cfm_bridge.h similarity index 100% rename from src/basic/include/linux/cfm_bridge.h rename to src/include/uapi/linux/cfm_bridge.h diff --git a/src/basic/include/linux/const.h b/src/include/uapi/linux/const.h similarity index 100% rename from src/basic/include/linux/const.h rename to src/include/uapi/linux/const.h diff --git a/src/basic/include/linux/dm-ioctl.h b/src/include/uapi/linux/dm-ioctl.h similarity index 100% rename from src/basic/include/linux/dm-ioctl.h rename to src/include/uapi/linux/dm-ioctl.h diff --git a/src/basic/include/linux/ethtool.h b/src/include/uapi/linux/ethtool.h similarity index 100% rename from src/basic/include/linux/ethtool.h rename to src/include/uapi/linux/ethtool.h diff --git a/src/basic/include/linux/fib_rules.h b/src/include/uapi/linux/fib_rules.h similarity index 100% rename from src/basic/include/linux/fib_rules.h rename to src/include/uapi/linux/fib_rules.h diff --git a/src/basic/include/linux/filter.h b/src/include/uapi/linux/filter.h similarity index 100% rename from src/basic/include/linux/filter.h rename to src/include/uapi/linux/filter.h diff --git a/src/basic/include/linux/fou.h b/src/include/uapi/linux/fou.h similarity index 100% rename from src/basic/include/linux/fou.h rename to src/include/uapi/linux/fou.h diff --git a/src/basic/include/linux/fs.h b/src/include/uapi/linux/fs.h similarity index 100% rename from src/basic/include/linux/fs.h rename to src/include/uapi/linux/fs.h diff --git a/src/basic/include/linux/fscrypt.h b/src/include/uapi/linux/fscrypt.h similarity index 100% rename from src/basic/include/linux/fscrypt.h rename to src/include/uapi/linux/fscrypt.h diff --git a/src/basic/include/linux/fsverity.h b/src/include/uapi/linux/fsverity.h similarity index 100% rename from src/basic/include/linux/fsverity.h rename to src/include/uapi/linux/fsverity.h diff --git a/src/basic/include/linux/genetlink.h b/src/include/uapi/linux/genetlink.h similarity index 100% rename from src/basic/include/linux/genetlink.h rename to src/include/uapi/linux/genetlink.h diff --git a/src/basic/include/linux/hdlc/ioctl.h b/src/include/uapi/linux/hdlc/ioctl.h similarity index 100% rename from src/basic/include/linux/hdlc/ioctl.h rename to src/include/uapi/linux/hdlc/ioctl.h diff --git a/src/basic/include/linux/hid.h b/src/include/uapi/linux/hid.h similarity index 100% rename from src/basic/include/linux/hid.h rename to src/include/uapi/linux/hid.h diff --git a/src/basic/include/linux/hidraw.h b/src/include/uapi/linux/hidraw.h similarity index 100% rename from src/basic/include/linux/hidraw.h rename to src/include/uapi/linux/hidraw.h diff --git a/src/basic/include/linux/if.h b/src/include/uapi/linux/if.h similarity index 100% rename from src/basic/include/linux/if.h rename to src/include/uapi/linux/if.h diff --git a/src/basic/include/linux/if_addr.h b/src/include/uapi/linux/if_addr.h similarity index 100% rename from src/basic/include/linux/if_addr.h rename to src/include/uapi/linux/if_addr.h diff --git a/src/basic/include/linux/if_addrlabel.h b/src/include/uapi/linux/if_addrlabel.h similarity index 100% rename from src/basic/include/linux/if_addrlabel.h rename to src/include/uapi/linux/if_addrlabel.h diff --git a/src/basic/include/linux/if_arp.h b/src/include/uapi/linux/if_arp.h similarity index 100% rename from src/basic/include/linux/if_arp.h rename to src/include/uapi/linux/if_arp.h diff --git a/src/basic/include/linux/if_bonding.h b/src/include/uapi/linux/if_bonding.h similarity index 100% rename from src/basic/include/linux/if_bonding.h rename to src/include/uapi/linux/if_bonding.h diff --git a/src/basic/include/linux/if_bridge.h b/src/include/uapi/linux/if_bridge.h similarity index 100% rename from src/basic/include/linux/if_bridge.h rename to src/include/uapi/linux/if_bridge.h diff --git a/src/basic/include/linux/if_ether.h b/src/include/uapi/linux/if_ether.h similarity index 100% rename from src/basic/include/linux/if_ether.h rename to src/include/uapi/linux/if_ether.h diff --git a/src/basic/include/linux/if_infiniband.h b/src/include/uapi/linux/if_infiniband.h similarity index 100% rename from src/basic/include/linux/if_infiniband.h rename to src/include/uapi/linux/if_infiniband.h diff --git a/src/basic/include/linux/if_link.h b/src/include/uapi/linux/if_link.h similarity index 100% rename from src/basic/include/linux/if_link.h rename to src/include/uapi/linux/if_link.h diff --git a/src/basic/include/linux/if_macsec.h b/src/include/uapi/linux/if_macsec.h similarity index 100% rename from src/basic/include/linux/if_macsec.h rename to src/include/uapi/linux/if_macsec.h diff --git a/src/basic/include/linux/if_packet.h b/src/include/uapi/linux/if_packet.h similarity index 100% rename from src/basic/include/linux/if_packet.h rename to src/include/uapi/linux/if_packet.h diff --git a/src/basic/include/linux/if_tun.h b/src/include/uapi/linux/if_tun.h similarity index 100% rename from src/basic/include/linux/if_tun.h rename to src/include/uapi/linux/if_tun.h diff --git a/src/basic/include/linux/if_tunnel.h b/src/include/uapi/linux/if_tunnel.h similarity index 100% rename from src/basic/include/linux/if_tunnel.h rename to src/include/uapi/linux/if_tunnel.h diff --git a/src/basic/include/linux/if_vlan.h b/src/include/uapi/linux/if_vlan.h similarity index 100% rename from src/basic/include/linux/if_vlan.h rename to src/include/uapi/linux/if_vlan.h diff --git a/src/basic/include/linux/in.h b/src/include/uapi/linux/in.h similarity index 100% rename from src/basic/include/linux/in.h rename to src/include/uapi/linux/in.h diff --git a/src/basic/include/linux/in6.h b/src/include/uapi/linux/in6.h similarity index 100% rename from src/basic/include/linux/in6.h rename to src/include/uapi/linux/in6.h diff --git a/src/basic/include/linux/input-event-codes.h b/src/include/uapi/linux/input-event-codes.h similarity index 100% rename from src/basic/include/linux/input-event-codes.h rename to src/include/uapi/linux/input-event-codes.h diff --git a/src/basic/include/linux/input.h b/src/include/uapi/linux/input.h similarity index 100% rename from src/basic/include/linux/input.h rename to src/include/uapi/linux/input.h diff --git a/src/basic/include/linux/ioprio.h b/src/include/uapi/linux/ioprio.h similarity index 100% rename from src/basic/include/linux/ioprio.h rename to src/include/uapi/linux/ioprio.h diff --git a/src/basic/include/linux/ip.h b/src/include/uapi/linux/ip.h similarity index 100% rename from src/basic/include/linux/ip.h rename to src/include/uapi/linux/ip.h diff --git a/src/basic/include/linux/ip6_tunnel.h b/src/include/uapi/linux/ip6_tunnel.h similarity index 100% rename from src/basic/include/linux/ip6_tunnel.h rename to src/include/uapi/linux/ip6_tunnel.h diff --git a/src/basic/include/linux/ipv6.h b/src/include/uapi/linux/ipv6.h similarity index 100% rename from src/basic/include/linux/ipv6.h rename to src/include/uapi/linux/ipv6.h diff --git a/src/basic/include/linux/ipv6_route.h b/src/include/uapi/linux/ipv6_route.h similarity index 100% rename from src/basic/include/linux/ipv6_route.h rename to src/include/uapi/linux/ipv6_route.h diff --git a/src/basic/include/linux/keyctl.h b/src/include/uapi/linux/keyctl.h similarity index 100% rename from src/basic/include/linux/keyctl.h rename to src/include/uapi/linux/keyctl.h diff --git a/src/basic/include/linux/l2tp.h b/src/include/uapi/linux/l2tp.h similarity index 100% rename from src/basic/include/linux/l2tp.h rename to src/include/uapi/linux/l2tp.h diff --git a/src/basic/include/linux/libc-compat.h b/src/include/uapi/linux/libc-compat.h similarity index 100% rename from src/basic/include/linux/libc-compat.h rename to src/include/uapi/linux/libc-compat.h diff --git a/src/basic/include/linux/limits.h b/src/include/uapi/linux/limits.h similarity index 100% rename from src/basic/include/linux/limits.h rename to src/include/uapi/linux/limits.h diff --git a/src/basic/include/linux/loop.h b/src/include/uapi/linux/loop.h similarity index 100% rename from src/basic/include/linux/loop.h rename to src/include/uapi/linux/loop.h diff --git a/src/basic/include/linux/magic.h b/src/include/uapi/linux/magic.h similarity index 100% rename from src/basic/include/linux/magic.h rename to src/include/uapi/linux/magic.h diff --git a/src/basic/include/linux/mempolicy.h b/src/include/uapi/linux/mempolicy.h similarity index 100% rename from src/basic/include/linux/mempolicy.h rename to src/include/uapi/linux/mempolicy.h diff --git a/src/basic/include/linux/mount.h b/src/include/uapi/linux/mount.h similarity index 100% rename from src/basic/include/linux/mount.h rename to src/include/uapi/linux/mount.h diff --git a/src/basic/include/linux/mrp_bridge.h b/src/include/uapi/linux/mrp_bridge.h similarity index 100% rename from src/basic/include/linux/mrp_bridge.h rename to src/include/uapi/linux/mrp_bridge.h diff --git a/src/basic/include/linux/neighbour.h b/src/include/uapi/linux/neighbour.h similarity index 100% rename from src/basic/include/linux/neighbour.h rename to src/include/uapi/linux/neighbour.h diff --git a/src/basic/include/linux/net_namespace.h b/src/include/uapi/linux/net_namespace.h similarity index 100% rename from src/basic/include/linux/net_namespace.h rename to src/include/uapi/linux/net_namespace.h diff --git a/src/basic/include/linux/netdevice.h b/src/include/uapi/linux/netdevice.h similarity index 100% rename from src/basic/include/linux/netdevice.h rename to src/include/uapi/linux/netdevice.h diff --git a/src/basic/include/linux/netfilter.h b/src/include/uapi/linux/netfilter.h similarity index 100% rename from src/basic/include/linux/netfilter.h rename to src/include/uapi/linux/netfilter.h diff --git a/src/basic/include/linux/netfilter/nf_conntrack_common.h b/src/include/uapi/linux/netfilter/nf_conntrack_common.h similarity index 100% rename from src/basic/include/linux/netfilter/nf_conntrack_common.h rename to src/include/uapi/linux/netfilter/nf_conntrack_common.h diff --git a/src/basic/include/linux/netfilter/nf_conntrack_tuple_common.h b/src/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h similarity index 100% rename from src/basic/include/linux/netfilter/nf_conntrack_tuple_common.h rename to src/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h diff --git a/src/basic/include/linux/netfilter/nf_nat.h b/src/include/uapi/linux/netfilter/nf_nat.h similarity index 100% rename from src/basic/include/linux/netfilter/nf_nat.h rename to src/include/uapi/linux/netfilter/nf_nat.h diff --git a/src/basic/include/linux/netfilter/nf_tables.h b/src/include/uapi/linux/netfilter/nf_tables.h similarity index 100% rename from src/basic/include/linux/netfilter/nf_tables.h rename to src/include/uapi/linux/netfilter/nf_tables.h diff --git a/src/basic/include/linux/netfilter/nfnetlink.h b/src/include/uapi/linux/netfilter/nfnetlink.h similarity index 100% rename from src/basic/include/linux/netfilter/nfnetlink.h rename to src/include/uapi/linux/netfilter/nfnetlink.h diff --git a/src/basic/include/linux/netfilter/nfnetlink_compat.h b/src/include/uapi/linux/netfilter/nfnetlink_compat.h similarity index 100% rename from src/basic/include/linux/netfilter/nfnetlink_compat.h rename to src/include/uapi/linux/netfilter/nfnetlink_compat.h diff --git a/src/basic/include/linux/netfilter/x_tables.h b/src/include/uapi/linux/netfilter/x_tables.h similarity index 100% rename from src/basic/include/linux/netfilter/x_tables.h rename to src/include/uapi/linux/netfilter/x_tables.h diff --git a/src/basic/include/linux/netfilter/xt_addrtype.h b/src/include/uapi/linux/netfilter/xt_addrtype.h similarity index 100% rename from src/basic/include/linux/netfilter/xt_addrtype.h rename to src/include/uapi/linux/netfilter/xt_addrtype.h diff --git a/src/basic/include/linux/netfilter/xt_tcpudp.h b/src/include/uapi/linux/netfilter/xt_tcpudp.h similarity index 100% rename from src/basic/include/linux/netfilter/xt_tcpudp.h rename to src/include/uapi/linux/netfilter/xt_tcpudp.h diff --git a/src/basic/include/linux/netfilter_ipv4.h b/src/include/uapi/linux/netfilter_ipv4.h similarity index 100% rename from src/basic/include/linux/netfilter_ipv4.h rename to src/include/uapi/linux/netfilter_ipv4.h diff --git a/src/basic/include/linux/netfilter_ipv4/ip_tables.h b/src/include/uapi/linux/netfilter_ipv4/ip_tables.h similarity index 100% rename from src/basic/include/linux/netfilter_ipv4/ip_tables.h rename to src/include/uapi/linux/netfilter_ipv4/ip_tables.h diff --git a/src/basic/include/linux/netlink.h b/src/include/uapi/linux/netlink.h similarity index 100% rename from src/basic/include/linux/netlink.h rename to src/include/uapi/linux/netlink.h diff --git a/src/basic/include/linux/nexthop.h b/src/include/uapi/linux/nexthop.h similarity index 100% rename from src/basic/include/linux/nexthop.h rename to src/include/uapi/linux/nexthop.h diff --git a/src/basic/include/linux/nl80211.h b/src/include/uapi/linux/nl80211.h similarity index 100% rename from src/basic/include/linux/nl80211.h rename to src/include/uapi/linux/nl80211.h diff --git a/src/basic/include/linux/pkt_sched.h b/src/include/uapi/linux/pkt_sched.h similarity index 100% rename from src/basic/include/linux/pkt_sched.h rename to src/include/uapi/linux/pkt_sched.h diff --git a/src/basic/include/linux/prctl.h b/src/include/uapi/linux/prctl.h similarity index 100% rename from src/basic/include/linux/prctl.h rename to src/include/uapi/linux/prctl.h diff --git a/src/basic/include/linux/rtnetlink.h b/src/include/uapi/linux/rtnetlink.h similarity index 100% rename from src/basic/include/linux/rtnetlink.h rename to src/include/uapi/linux/rtnetlink.h diff --git a/src/basic/include/linux/sched/types.h b/src/include/uapi/linux/sched/types.h similarity index 100% rename from src/basic/include/linux/sched/types.h rename to src/include/uapi/linux/sched/types.h diff --git a/src/basic/include/linux/socket.h b/src/include/uapi/linux/socket.h similarity index 100% rename from src/basic/include/linux/socket.h rename to src/include/uapi/linux/socket.h diff --git a/src/basic/include/linux/sockios.h b/src/include/uapi/linux/sockios.h similarity index 100% rename from src/basic/include/linux/sockios.h rename to src/include/uapi/linux/sockios.h diff --git a/src/basic/include/linux/stat.h b/src/include/uapi/linux/stat.h similarity index 100% rename from src/basic/include/linux/stat.h rename to src/include/uapi/linux/stat.h diff --git a/src/basic/include/linux/stddef.h b/src/include/uapi/linux/stddef.h similarity index 100% rename from src/basic/include/linux/stddef.h rename to src/include/uapi/linux/stddef.h diff --git a/src/basic/include/linux/update.sh b/src/include/uapi/linux/update.sh similarity index 100% rename from src/basic/include/linux/update.sh rename to src/include/uapi/linux/update.sh diff --git a/src/basic/include/linux/veth.h b/src/include/uapi/linux/veth.h similarity index 100% rename from src/basic/include/linux/veth.h rename to src/include/uapi/linux/veth.h diff --git a/src/basic/include/linux/vm_sockets.h b/src/include/uapi/linux/vm_sockets.h similarity index 100% rename from src/basic/include/linux/vm_sockets.h rename to src/include/uapi/linux/vm_sockets.h diff --git a/src/basic/include/linux/wireguard.h b/src/include/uapi/linux/wireguard.h similarity index 100% rename from src/basic/include/linux/wireguard.h rename to src/include/uapi/linux/wireguard.h diff --git a/src/basic/include/linux/xattr.h b/src/include/uapi/linux/xattr.h similarity index 100% rename from src/basic/include/linux/xattr.h rename to src/include/uapi/linux/xattr.h diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c index 3147483019..ebf401c4c2 100644 --- a/src/journal/journald-audit.c +++ b/src/journal/journald-audit.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "sd-event.h" #include "alloc-util.h" @@ -13,7 +15,6 @@ #include "journald-manager.h" #include "log.h" #include "log-ratelimit.h" -#include "missing_audit.h" #include "stdio-util.h" #include "string-util.h" #include "time-util.h" diff --git a/src/journal/journald-manager.c b/src/journal/journald-manager.c index c3d681f6b1..8b10ce9710 100644 --- a/src/journal/journald-manager.c +++ b/src/journal/journald-manager.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include #include @@ -50,7 +51,6 @@ #include "log.h" #include "log-ratelimit.h" #include "memory-util.h" -#include "missing_audit.h" #include "mkdir.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/libc/bpf.c b/src/libc/bpf.c new file mode 100644 index 0000000000..4a7498e502 --- /dev/null +++ b/src/libc/bpf.c @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_BPF +int missing_bpf(int cmd, union bpf_attr *attr, size_t size) { + return syscall(__NR_bpf, cmd, attr, size); +} +#endif diff --git a/src/libc/ioprio.c b/src/libc/ioprio.c new file mode 100644 index 0000000000..5bb640457d --- /dev/null +++ b/src/libc/ioprio.c @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_IOPRIO_GET +int missing_ioprio_get(int which, int who) { + return syscall(__NR_ioprio_get, which, who); +} +#endif + +#if !HAVE_IOPRIO_SET +int missing_ioprio_set(int which, int who, int ioprio) { + return syscall(__NR_ioprio_set, which, who, ioprio); +} +#endif diff --git a/src/libc/kcmp.c b/src/libc/kcmp.c new file mode 100644 index 0000000000..aafff999ef --- /dev/null +++ b/src/libc/kcmp.c @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_KCMP +int missing_kcmp(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2) { + return syscall(__NR_kcmp, pid1, pid2, type, idx1, idx2); +} +#endif diff --git a/src/libc/keyctl.c b/src/libc/keyctl.c new file mode 100644 index 0000000000..af4bca87f5 --- /dev/null +++ b/src/libc/keyctl.c @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_KEYCTL +long missing_keyctl(int cmd, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5) { + return syscall(__NR_keyctl, cmd, arg2, arg3, arg4, arg5); +} +#endif + +#if !HAVE_ADD_KEY +key_serial_t missing_add_key(const char *type, const char *description, const void *payload, size_t plen, key_serial_t ringid) { + return syscall(__NR_add_key, type, description, payload, plen, ringid); +} +#endif + +#if !HAVE_REQUEST_KEY +key_serial_t missing_request_key(const char *type, const char *description, const char *callout_info, key_serial_t destringid) { + return syscall(__NR_request_key, type, description, callout_info, destringid); +} +#endif diff --git a/src/libc/mempolicy.c b/src/libc/mempolicy.c new file mode 100644 index 0000000000..77b0e1ac01 --- /dev/null +++ b/src/libc/mempolicy.c @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_SET_MEMPOLICY +int missing_set_mempolicy(int mode, const unsigned long *nodemask, unsigned long maxnode) { + return syscall(__NR_set_mempolicy, mode, nodemask, maxnode); +} +#endif + +#if !HAVE_GET_MEMPOLICY +int missing_get_mempolicy(int *mode, unsigned long *nodemask, unsigned long maxnode, void *addr, unsigned long flags) { + return syscall(__NR_get_mempolicy, mode, nodemask, maxnode, addr, flags); +} +#endif diff --git a/src/libc/meson.build b/src/libc/meson.build new file mode 100644 index 0000000000..eeee98c9d6 --- /dev/null +++ b/src/libc/meson.build @@ -0,0 +1,28 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +libc_wrapper_sources = files( + 'bpf.c', + 'ioprio.c', + 'kcmp.c', + 'keyctl.c', + 'mempolicy.c', + 'mount.c', + 'pidfd.c', + 'quota.c', + 'sched.c', + 'signal.c', + 'stat.c', + 'unistd.c', + 'xattr.c', +) + +sources += libc_wrapper_sources + +libc_wrapper_static = static_library( + 'c-wrapper', + libc_wrapper_sources, + include_directories : system_includes, + implicit_include_directories : false, + dependencies : [userspace], + c_args : ['-fvisibility=default'], + build_by_default : false) diff --git a/src/libc/mount.c b/src/libc/mount.c new file mode 100644 index 0000000000..1d324ef386 --- /dev/null +++ b/src/libc/mount.c @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_FSOPEN +int missing_fsopen(const char *fsname, unsigned flags) { + return syscall(__NR_fsopen, fsname, flags); +} +#endif + +#if !HAVE_FSMOUNT +int missing_fsmount(int fd, unsigned flags, unsigned ms_flags) { + return syscall(__NR_fsmount, fd, flags, ms_flags); +} +#endif + +#if !HAVE_MOVE_MOUNT +int missing_move_mount(int from_dfd, const char *from_pathname, int to_dfd, const char *to_pathname, unsigned flags) { + return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags); +} +#endif + +#if !HAVE_FSCONFIG +int missing_fsconfig(int fd, unsigned cmd, const char *key, const void *value, int aux) { + return syscall(__NR_fsconfig, fd, cmd, key, value, aux); +} +#endif + +#if !HAVE_OPEN_TREE +int missing_open_tree(int dfd, const char *filename, unsigned flags) { + return syscall(__NR_open_tree, dfd, filename, flags); +} +#endif + +#if !HAVE_MOUNT_SETATTR +int missing_mount_setattr(int dfd, const char *path, unsigned flags, struct mount_attr *attr, size_t size) { + return syscall(__NR_mount_setattr, dfd, path, flags, attr, size); +} +#endif + +#if !HAVE_OPEN_TREE_ATTR +int missing_open_tree_attr(int dfd, const char *filename, unsigned int flags, struct mount_attr *attr, size_t size) { + return syscall(__NR_open_tree_attr, dfd, filename, flags, attr, size); +} +#endif diff --git a/src/libc/pidfd.c b/src/libc/pidfd.c new file mode 100644 index 0000000000..a779e3459c --- /dev/null +++ b/src/libc/pidfd.c @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_PIDFD_OPEN +int missing_pidfd_open(pid_t pid, unsigned flags) { + return syscall(__NR_pidfd_open, pid, flags); +} +#endif + +#if !HAVE_PIDFD_SEND_SIGNAL +int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, unsigned flags) { + return syscall(__NR_pidfd_send_signal, fd, sig, info, flags); +} +#endif diff --git a/src/libc/quota.c b/src/libc/quota.c new file mode 100644 index 0000000000..19695df9b3 --- /dev/null +++ b/src/libc/quota.c @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_QUOTACTL_FD +int missing_quotactl_fd(int fd, int cmd, int id, void *addr) { + return syscall(__NR_quotactl_fd, fd, cmd, id, addr); +} +#endif diff --git a/src/libc/sched.c b/src/libc/sched.c new file mode 100644 index 0000000000..cf1752651b --- /dev/null +++ b/src/libc/sched.c @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_SCHED_SETATTR +int missing_sched_setattr(pid_t pid, struct sched_attr *attr, unsigned flags) { + return syscall(__NR_sched_setattr, pid, attr, flags); +} +#endif diff --git a/src/libc/signal.c b/src/libc/signal.c new file mode 100644 index 0000000000..1908331b1a --- /dev/null +++ b/src/libc/signal.c @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_RT_TGSIGQUEUEINFO +int missing_rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, siginfo_t *info) { + return syscall(__NR_rt_tgsigqueueinfo, tgid, tid, sig, info); +} +#endif diff --git a/src/libc/stat.c b/src/libc/stat.c new file mode 100644 index 0000000000..b283005f40 --- /dev/null +++ b/src/libc/stat.c @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_FCHMODAT2 +int missing_fchmodat2(int dirfd, const char *path, mode_t mode, int flags) { + return syscall(__NR_fchmodat2, dirfd, path, mode, flags); +} +#endif diff --git a/src/libc/unistd.c b/src/libc/unistd.c new file mode 100644 index 0000000000..99777b3316 --- /dev/null +++ b/src/libc/unistd.c @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include + +#if !HAVE_CLOSE_RANGE +int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags) { + /* Kernel-side the syscall expects fds as unsigned integers (just like close() actually), while + * userspace exclusively uses signed integers for fds. glibc chose to expose it 1:1 however, hence we + * do so here too, even if we end up passing signed fds to it most of the time. */ + return syscall(__NR_close_range, first_fd, end_fd, flags); +} +#endif + +#if !HAVE_EXECVEAT +int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags) { + return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags); +} +#endif + +#if !HAVE_PIVOT_ROOT +int missing_pivot_root(const char *new_root, const char *put_old) { + return syscall(__NR_pivot_root, new_root, put_old); +} +#endif diff --git a/src/libc/xattr.c b/src/libc/xattr.c new file mode 100644 index 0000000000..68fa97ab28 --- /dev/null +++ b/src/libc/xattr.c @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#if !HAVE_SETXATTRAT +int missing_setxattrat(int fd, const char *path, int at_flags, const char *name, const struct xattr_args *args, size_t size) { + return syscall(__NR_setxattrat, fd, path, at_flags, name, args, size); +} +#endif + +#if !HAVE_REMOVEXATTRAT +int missing_removexattrat(int fd, const char *path, int at_flags, const char *name) { + return syscall(__NR_removexattrat, fd, path, at_flags, name); +} +#endif diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build index 52c6cea3c5..fa483836fa 100644 --- a/src/libsystemd/meson.build +++ b/src/libsystemd/meson.build @@ -147,7 +147,8 @@ libsystemd_static = static_library( include_directories : libsystemd_includes, implicit_include_directories : false, c_args : libsystemd_c_args, - link_with : [libbasic_static], + link_with : [libc_wrapper_static, + libbasic_static], dependencies : [threads, libm, librt, diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c index d7ed4e88e8..0cf3cbdd4c 100644 --- a/src/libsystemd/sd-daemon/sd-daemon.c +++ b/src/libsystemd/sd-daemon/sd-daemon.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include #include @@ -18,7 +19,6 @@ #include "io-util.h" #include "iovec-util.h" #include "log.h" -#include "missing_magic.h" #include "parse-util.h" #include "path-util.h" #include "pidfd-util.h" diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index 850eff9d02..9987c4be7e 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include "sd-device.h" @@ -19,7 +20,6 @@ #include "fileio.h" #include "fs-util.h" #include "hashmap.h" -#include "missing_magic.h" #include "netlink-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c index e108ba6546..8ed10c9f8e 100644 --- a/src/libsystemd/sd-event/sd-event.c +++ b/src/libsystemd/sd-event/sd-event.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include #include @@ -24,7 +25,6 @@ #include "log.h" #include "logarithm.h" #include "memory-util.h" -#include "missing_magic.h" #include "origin-id.h" #include "path-util.h" #include "pidfd-util.h" diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c index 54fab9284a..d3838ba245 100644 --- a/src/libsystemd/sd-id128/sd-id128.c +++ b/src/libsystemd/sd-id128/sd-id128.c @@ -13,7 +13,6 @@ #include "hmac.h" #include "id128-util.h" #include "keyring-util.h" -#include "missing_syscall.h" #include "path-util.h" #include "random-util.h" #include "stat-util.h" diff --git a/src/libsystemd/sd-journal/audit-type.c b/src/libsystemd/sd-journal/audit-type.c index 1995e3fa18..097f725e87 100644 --- a/src/libsystemd/sd-journal/audit-type.c +++ b/src/libsystemd/sd-journal/audit-type.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "audit-type.h" -#include "missing_audit.h" #include "audit_type-to-name.inc" diff --git a/src/libsystemd/sd-journal/generate-audit_type-list.sh b/src/libsystemd/sd-journal/generate-audit_type-list.sh index 3851ea176f..44c743b1a3 100755 --- a/src/libsystemd/sd-journal/generate-audit_type-list.sh +++ b/src/libsystemd/sd-journal/generate-audit_type-list.sh @@ -3,15 +3,10 @@ set -eu set -o pipefail -cpp="${1:?}" +CC="${1:?}" shift -includes=() -for i in "$@"; do - includes+=(-include "$i") -done - -$cpp -dM "${includes[@]}" - #include "keyring-util.h" -#include "missing_syscall.h" #include "nulstr-util.h" #include "pam-util.h" #include "string-util.h" diff --git a/src/login/user-runtime-dir.c b/src/login/user-runtime-dir.c index 77498081ea..efcf36f2cc 100644 --- a/src/login/user-runtime-dir.c +++ b/src/login/user-runtime-dir.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include "sd-bus.h" @@ -15,8 +16,6 @@ #include "limits-util.h" #include "log.h" #include "main-func.h" -#include "missing_magic.h" -#include "missing_syscall.h" #include "mkdir-label.h" #include "mount-util.h" #include "mountpoint-util.h" diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index dfca74b05e..4ccfab8a88 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -66,8 +67,6 @@ #include "loopback-setup.h" #include "machine-credential.h" #include "main-func.h" -#include "missing_keyctl.h" -#include "missing_syscall.h" #include "mkdir.h" #include "mount-util.h" #include "mountpoint-util.h" diff --git a/src/nsresourced/nsresourcework.c b/src/nsresourced/nsresourcework.c index 236d4d4acd..9427b1885c 100644 --- a/src/nsresourced/nsresourcework.c +++ b/src/nsresourced/nsresourcework.c @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -30,8 +31,6 @@ #include "io-util.h" #include "json-util.h" #include "main-func.h" -#include "missing_magic.h" -#include "missing_syscall.h" #include "mountpoint-util.h" #include "namespace-util.h" #include "netlink-util.h" diff --git a/src/nsresourced/userns-registry.c b/src/nsresourced/userns-registry.c index 6b40d713ff..e576f02c38 100644 --- a/src/nsresourced/userns-registry.c +++ b/src/nsresourced/userns-registry.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include "sd-json.h" @@ -13,7 +14,6 @@ #include "format-util.h" #include "fs-util.h" #include "json-util.h" -#include "missing_magic.h" #include "path-util.h" #include "recurse-dir.h" #include "rm-rf.h" diff --git a/src/repart/meson.build b/src/repart/meson.build index 369410bab8..eda4a0a212 100644 --- a/src/repart/meson.build +++ b/src/repart/meson.build @@ -26,6 +26,7 @@ executables += [ 'sources' : files('repart.c'), 'c_args' : '-DSTANDALONE', 'link_with' : [ + libc_wrapper_static, libbasic_static, libshared_fdisk, libshared_static, diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c index 256605ac8a..dd6b8abc65 100644 --- a/src/shared/ask-password-api.c +++ b/src/shared/ask-password-api.c @@ -23,7 +23,6 @@ #include "iovec-util.h" #include "keyring-util.h" #include "log.h" -#include "missing_syscall.h" #include "nulstr-util.h" #include "parse-util.h" #include "path-lookup.h" diff --git a/src/shared/binfmt-util.c b/src/shared/binfmt-util.c index d5bf96bbdc..d21fd10136 100644 --- a/src/shared/binfmt-util.c +++ b/src/shared/binfmt-util.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include "binfmt-util.h" @@ -8,7 +9,6 @@ #include "fileio.h" #include "fs-util.h" #include "log.h" -#include "missing_magic.h" #include "stat-util.h" int binfmt_mounted_and_writable(void) { diff --git a/src/shared/bpf-program.c b/src/shared/bpf-program.c index 5c4bea60c6..f920051832 100644 --- a/src/shared/bpf-program.c +++ b/src/shared/bpf-program.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "alloc-util.h" @@ -14,7 +15,6 @@ #include "fdset.h" #include "log.h" #include "memory-util.h" -#include "missing_syscall.h" #include "parse-util.h" #include "path-util.h" #include "serialize.h" diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c index f6f0fe2c19..323204725f 100644 --- a/src/shared/cgroup-setup.c +++ b/src/shared/cgroup-setup.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include "cgroup-setup.h" @@ -10,7 +11,6 @@ #include "format-util.h" #include "fs-util.h" #include "log.h" -#include "missing_magic.h" #include "mkdir.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/shared/ethtool-link-mode.py b/src/shared/ethtool-link-mode.py index aac1576145..6d23f3c43a 100644 --- a/src/shared/ethtool-link-mode.py +++ b/src/shared/ethtool-link-mode.py @@ -10,10 +10,12 @@ OVERRIDES = { 'autoneg' : 'autonegotiation', } -mode, cpp, header = sys.argv[1:] +mode = sys.argv[1] +cpp = sys.argv[2] +include_dirs = sys.argv[3:] xml = mode == '--xml' -command = [*shlex.split(cpp), '-include', header, '-'] +command = [*shlex.split(cpp), '-include', 'linux/ethtool.h'] + include_dirs + ['-'] out = subprocess.check_output(command, stdin=subprocess.DEVNULL, universal_newlines=True) lines = iter(out.splitlines()) diff --git a/src/shared/generate-ip-protocol-list.sh b/src/shared/generate-ip-protocol-list.sh index ff898a9d46..768a4df8ed 100755 --- a/src/shared/generate-ip-protocol-list.sh +++ b/src/shared/generate-ip-protocol-list.sh @@ -4,6 +4,9 @@ set -eu set -o pipefail -${1:?} -dM -include netinet/in.h - /* IWYU pragma: export */ +#include /* IWYU pragma: export */ #include "forward.h" diff --git a/src/shared/machine-pool.c b/src/shared/machine-pool.c index 8744ec3d5d..2fcb480c51 100644 --- a/src/shared/machine-pool.c +++ b/src/shared/machine-pool.c @@ -1,12 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "sd-bus.h" #include "btrfs-util.h" #include "label-util.h" #include "log.h" #include "machine-pool.h" -#include "missing_magic.h" #include "stat-util.h" static int check_btrfs(void) { diff --git a/src/shared/meson.build b/src/shared/meson.build index 78e435de35..2a49a5e9b8 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -258,10 +258,11 @@ if conf.get('HAVE_PAM') == 1 shared_sources += files('pam-util.c') endif -generate_ip_protocol_list = find_program('generate-ip-protocol-list.sh') +generate_ip_protocol_list = files('generate-ip-protocol-list.sh') ip_protocol_list_txt = custom_target( + input : [generate_ip_protocol_list, ipproto_sources], output : 'ip-protocol-list.txt', - command : [generate_ip_protocol_list, cpp], + command : [env, 'bash', generate_ip_protocol_list, cpp, system_include_args], capture : true) fname = 'ip-protocol-from-name.gperf' @@ -294,11 +295,12 @@ target2 = custom_target( generated_sources += [target1, target2] shared_sources += [target1, target2] +ethtool_link_mode_py = files('ethtool-link-mode.py') fname = 'ethtool-link-mode.inc' ethtool_link_mode_inc = custom_target( - input : ['ethtool-link-mode.py', '../basic/include/linux/ethtool.h'], + input : [ethtool_link_mode_py, ethtool_link_mode_sources], output : fname, - command : [python, '@INPUT0@', '--header', cpp, '@INPUT1@'], + command : [python, ethtool_link_mode_py, '--header', cpp, system_include_args], capture : true) generated_sources += ethtool_link_mode_inc @@ -307,9 +309,9 @@ sources += shared_sources fname = 'ethtool-link-mode.xml' ethtool_link_mode_xml = custom_target( - input : ['ethtool-link-mode.py', '../basic/include/linux/ethtool.h'], + input : [ethtool_link_mode_py, ethtool_link_mode_sources], output : fname, - command : [python, '@INPUT0@', '--xml', cpp, '@INPUT1@'], + command : [python, ethtool_link_mode_py, '--xml', cpp, system_include_args], capture : true) man_page_depends += ethtool_link_mode_xml @@ -358,7 +360,8 @@ libshared = shared_library( link_args : ['-shared', '-Wl,--version-script=' + libshared_sym_path], link_depends : libshared_sym_path, - link_whole : [libshared_static, + link_whole : [libc_wrapper_static, + libshared_static, libbasic_static, libsystemd_static], dependencies : [libshared_deps, diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c index 3d10a05091..830ebe1c87 100644 --- a/src/shared/mount-util.c +++ b/src/shared/mount-util.c @@ -19,7 +19,6 @@ #include "hashmap.h" #include "libmount-util.h" #include "log.h" -#include "missing_syscall.h" #include "mkdir-label.h" #include "mount-util.h" #include "mountpoint-util.h" diff --git a/src/shared/numa-util.c b/src/shared/numa-util.c index 8c18c58227..c011c4381d 100644 --- a/src/shared/numa-util.c +++ b/src/shared/numa-util.c @@ -8,7 +8,6 @@ #include "fd-util.h" #include "fileio.h" #include "log.h" -#include "missing_syscall.h" #include "numa-util.h" #include "parse-util.h" #include "stdio-util.h" diff --git a/src/shared/numa-util.h b/src/shared/numa-util.h index 571d0d1354..1c3482a590 100644 --- a/src/shared/numa-util.h +++ b/src/shared/numa-util.h @@ -1,9 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include + #include "cpu-set-util.h" #include "forward.h" -#include "missing_syscall.h" static inline bool mpol_is_valid(int t) { return t >= MPOL_DEFAULT && t <= MPOL_LOCAL; diff --git a/src/shared/quota-util.c b/src/shared/quota-util.c index 06f27e85f2..265d502971 100644 --- a/src/shared/quota-util.c +++ b/src/shared/quota-util.c @@ -8,7 +8,6 @@ #include "chattr-util.h" #include "device-util.h" #include "errno-util.h" -#include "missing_syscall.h" #include "quota-util.h" int quotactl_fd_with_fallback(int fd, int cmd, int id, void *addr) { diff --git a/src/shared/reboot-util.c b/src/shared/reboot-util.c index f82c0654dc..948e15631d 100644 --- a/src/shared/reboot-util.c +++ b/src/shared/reboot-util.c @@ -1,10 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include #include #include #include -#include +#include #include #if HAVE_XENCTRL @@ -20,13 +19,16 @@ #include "fileio.h" #include "log.h" #include "proc-cmdline.h" -#include "raw-reboot.h" #include "reboot-util.h" #include "string-util.h" #include "umask-util.h" #include "utf8.h" #include "virt.h" +int raw_reboot(int cmd, const void *arg) { + return syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, arg); +} + bool reboot_parameter_is_valid(const char *parameter) { assert(parameter); diff --git a/src/shared/reboot-util.h b/src/shared/reboot-util.h index 55419dfb14..276361aea8 100644 --- a/src/shared/reboot-util.h +++ b/src/shared/reboot-util.h @@ -1,8 +1,16 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include /* IWYU pragma: export */ +#include /* IWYU pragma: export */ + #include "forward.h" +/* glibc defines the reboot() API call, which is a wrapper around the system call of the same name, but + * without the extra "arg" parameter. Since we need that parameter for some calls, let's add a "raw" wrapper + * that is defined the same way, except it takes the additional argument. */ +int raw_reboot(int cmd, const void *arg); + bool reboot_parameter_is_valid(const char *parameter); int update_reboot_parameter_and_warn(const char *parameter, bool keep); diff --git a/src/shared/resize-fs.c b/src/shared/resize-fs.c index 481c2de1e5..147af7ec33 100644 --- a/src/shared/resize-fs.c +++ b/src/shared/resize-fs.c @@ -1,13 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include +#include #include #include -#include "missing_fs.h" -#include "missing_magic.h" -#include "missing_xfs.h" #include "resize-fs.h" #include "stat-util.h" #include "stdio-util.h" diff --git a/src/shared/rm-rf.c b/src/shared/rm-rf.c index 71466c8574..1b3ecf0790 100644 --- a/src/shared/rm-rf.c +++ b/src/shared/rm-rf.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include "alloc-util.h" @@ -10,7 +11,6 @@ #include "fd-util.h" #include "fs-util.h" #include "log.h" -#include "missing_magic.h" #include "mountpoint-util.h" #include "path-util.h" #include "rm-rf.h" diff --git a/src/shared/shift-uid.c b/src/shared/shift-uid.c index 1b1af55484..9c7e875dff 100644 --- a/src/shared/shift-uid.c +++ b/src/shared/shift-uid.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include @@ -10,7 +11,6 @@ #include "fileio.h" #include "fs-util.h" #include "log.h" -#include "missing_magic.h" #include "shift-uid.h" #include "stat-util.h" #include "string-util.h" diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c index 288280c3d1..d5f34c5d37 100644 --- a/src/shared/switch-root.c +++ b/src/shared/switch-root.c @@ -11,7 +11,6 @@ #include "errno-util.h" #include "fd-util.h" #include "log.h" -#include "missing_syscall.h" #include "mkdir-label.h" #include "mount-util.h" #include "mountpoint-util.h" diff --git a/src/shutdown/meson.build b/src/shutdown/meson.build index c67d19abcc..4893ea62e3 100644 --- a/src/shutdown/meson.build +++ b/src/shutdown/meson.build @@ -23,6 +23,7 @@ executables += [ 'sources' : systemd_shutdown_sources + systemd_shutdown_extract_sources, 'c_args' : '-DSTANDALONE', 'link_with' : [ + libc_wrapper_static, libbasic_static, libshared_static, libsystemd_static, diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c index bb767161bd..3317068e47 100644 --- a/src/shutdown/shutdown.c +++ b/src/shutdown/shutdown.c @@ -4,11 +4,9 @@ ***/ #include -#include #include #include #include -#include #include #include diff --git a/src/systemctl/systemctl-util.c b/src/systemctl/systemctl-util.c index 019b763a86..faefc55619 100644 --- a/src/systemctl/systemctl-util.c +++ b/src/systemctl/systemctl-util.c @@ -1,7 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include -#include #include #include "sd-bus.h" diff --git a/src/sysupdate/sysupdate-resource.c b/src/sysupdate/sysupdate-resource.c index 6817df1644..cb2b05b901 100644 --- a/src/sysupdate/sysupdate-resource.c +++ b/src/sysupdate/sysupdate-resource.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include @@ -20,7 +21,6 @@ #include "gpt.h" #include "hexdecoct.h" #include "import-util.h" -#include "missing_magic.h" #include "process-util.h" #include "sort-util.h" #include "stat-util.h" diff --git a/src/sysusers/meson.build b/src/sysusers/meson.build index 88494d8cfc..e2e82889e7 100644 --- a/src/sysusers/meson.build +++ b/src/sysusers/meson.build @@ -17,6 +17,7 @@ executables += [ 'sources' : files('sysusers.c'), 'c_args' : '-DSTANDALONE', 'link_with' : [ + libc_wrapper_static, libbasic_static, libshared_static, libsystemd_static, diff --git a/src/test/meson.build b/src/test/meson.build index c0c2a4e905..5284dc1315 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -289,7 +289,10 @@ executables += [ # only static linking apart from libdl, to make sure that the # module is linked to all libraries that it uses. 'sources' : files('test-dlopen.c'), - 'link_with' : libbasic_static, + 'link_with' : [ + libc_wrapper_static, + libbasic_static, + ], 'dependencies' : libdl, 'install' : false, 'type' : 'manual', @@ -426,7 +429,10 @@ executables += [ }, test_template + { 'sources' : files('test-sizeof.c'), - 'link_with' : libbasic_static, + 'link_with' : [ + libc_wrapper_static, + libbasic_static, + ], }, test_template + { 'sources' : files('test-time-util.c'), @@ -594,6 +600,7 @@ executables += [ test_template + { 'sources' : files('../libsystemd/sd-device/test-sd-device-thread.c'), 'link_with' : [ + libc_wrapper_static, libbasic_static, libsystemd, ], @@ -602,6 +609,7 @@ executables += [ test_template + { 'sources' : files('../libudev/test-udev-device-thread.c'), 'link_with' : [ + libc_wrapper_static, libbasic_static, libudev, ], diff --git a/src/test/test-recurse-dir.c b/src/test/test-recurse-dir.c index 1502e7f7a8..b29a7eab9d 100644 --- a/src/test/test-recurse-dir.c +++ b/src/test/test-recurse-dir.c @@ -1,10 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include "fd-util.h" #include "log.h" -#include "missing_magic.h" #include "recurse-dir.h" #include "stat-util.h" #include "strv.h" diff --git a/src/test/test-seccomp.c b/src/test/test-seccomp.c index 7199b2fb33..a1230ec27c 100644 --- a/src/test/test-seccomp.c +++ b/src/test/test-seccomp.c @@ -21,7 +21,6 @@ #include "fileio.h" #include "fs-util.h" #include "memory-util.h" -#include "missing_syscall.h" #include "nsflags.h" #include "nulstr-util.h" #include "process-util.h" diff --git a/src/tmpfiles/meson.build b/src/tmpfiles/meson.build index 404f265f91..a973d16f5c 100644 --- a/src/tmpfiles/meson.build +++ b/src/tmpfiles/meson.build @@ -25,6 +25,7 @@ executables += [ 'sources' : systemd_tmpfiles_sources + systemd_tmpfiles_extract_sources, 'c_args' : '-DSTANDALONE', 'link_with' : [ + libc_wrapper_static, libbasic_static, libshared_static, libsystemd_static, diff --git a/src/udev/generate-keyboard-keys-gperf.sh b/src/udev/generate-keyboard-keys-gperf.sh index fc34e4bd80..e263cb0979 100755 --- a/src/udev/generate-keyboard-keys-gperf.sh +++ b/src/udev/generate-keyboard-keys-gperf.sh @@ -10,6 +10,7 @@ _Pragma(\"GCC diagnostic ignored \\\"-Wimplicit-fallthrough\\\"\")\n\ #if __GNUC__ >= 15\n\ _Pragma(\"GCC diagnostic ignored \\\"-Wzero-as-null-pointer-constant\\\"\")\n\ #endif\n\ +#include \n\ %}" print "struct key_name { const char* name; unsigned short id; };" print "%null-strings" diff --git a/src/udev/generate-keyboard-keys-list.sh b/src/udev/generate-keyboard-keys-list.sh index 4cac507322..5809119224 100755 --- a/src/udev/generate-keyboard-keys-list.sh +++ b/src/udev/generate-keyboard-keys-list.sh @@ -3,7 +3,10 @@ set -eu set -o pipefail -${1:?} -dM -include "${2:?}" - / { next } /^#define[ \t]+(KEY|BTN)_[^ ]+[ \t]+[0-9BK]/ { print $2 } ' diff --git a/src/udev/meson.build b/src/udev/meson.build index 34fc427478..7e49959bc5 100644 --- a/src/udev/meson.build +++ b/src/udev/meson.build @@ -61,19 +61,19 @@ endif ############################################################ -generate_keyboard_keys_list = find_program('generate-keyboard-keys-list.sh') +generate_keyboard_keys_list = files('generate-keyboard-keys-list.sh') keyboard_keys_list_txt = custom_target( - input : files('../basic/include/linux/input.h'), + input : [generate_keyboard_keys_list, keyboard_sources], output : 'keyboard-keys-list.txt', - command : [generate_keyboard_keys_list, cpp, '@INPUT@'], + command : [env, 'bash', generate_keyboard_keys_list, cpp, system_include_args], capture : true) -generate_keyboard_keys_gperf = find_program('generate-keyboard-keys-gperf.sh') +generate_keyboard_keys_gperf = files('generate-keyboard-keys-gperf.sh') fname = 'keyboard-keys-from-name.gperf' gperf_file = custom_target( - input : keyboard_keys_list_txt, + input : [generate_keyboard_keys_gperf, keyboard_keys_list_txt], output : fname, - command : [generate_keyboard_keys_gperf, '@INPUT@'], + command : [env, 'bash', '@INPUT@'], capture : true) fname = 'keyboard-keys-from-name.inc' diff --git a/tools/xml_helper.py b/tools/xml_helper.py index 294630ded1..0383ef7187 100755 --- a/tools/xml_helper.py +++ b/tools/xml_helper.py @@ -11,7 +11,7 @@ class CustomResolver(tree.Resolver): if 'ethtool-link-mode' in url: return self.resolve_filename('src/shared/ethtool-link-mode.xml', context) if 'bpf-delegate' in url: - return self.resolve_filename('man/bpf-delegate.xml', context) + return self.resolve_filename('src/core/bpf-delegate.xml', context) return None