From: Thomas Weißschuh Date: Thu, 24 Apr 2025 11:48:12 +0000 (+0200) Subject: tools/nolibc: include nolibc.h early from all header files X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=3785289f97e2118b157332ffaae9fd2ec71237c8;p=users%2Fdwmw2%2Flinux.git tools/nolibc: include nolibc.h early from all header files Inclusion of any nolibc header file should also bring all other headers. On the other hand it should also be possible to include any nolibc header files in any order. Currently this is implemented by including the catch-all nolibc.h after the headers own definitions. This is problematic if one nolibc header depends on another one. The first header has to include the other one before defining any symbols. That in turn will include the rest of nolibc while the current header has not defined anything yet. If any other part of nolibc depends on definitions from the current header, errors are encountered. This is already the case today. Effectively nolibc can only be included in the order of nolibc.h. Restructure the way "nolibc.h" is included. Move it to the beginning of the header files and before the include guards. Now any header will behave exactly like "nolibc.h" while the include guards prevent any duplicate definitions. Signed-off-by: Thomas Weißschuh Acked-by: Willy Tarreau Link: https://lore.kernel.org/r/20250424-nolibc-header-check-v1-2-011576b6ed6f@linutronix.de --- diff --git a/tools/include/nolibc/ctype.h b/tools/include/nolibc/ctype.h index 6f90706d06442..470fdf34394a5 100644 --- a/tools/include/nolibc/ctype.h +++ b/tools/include/nolibc/ctype.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_CTYPE_H #define _NOLIBC_CTYPE_H @@ -96,7 +99,4 @@ int ispunct(int c) return isgraph(c) && !isalnum(c); } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_CTYPE_H */ diff --git a/tools/include/nolibc/dirent.h b/tools/include/nolibc/dirent.h index 6c60ec4ba27ba..758b95c48e7a4 100644 --- a/tools/include/nolibc/dirent.h +++ b/tools/include/nolibc/dirent.h @@ -4,6 +4,9 @@ * Copyright (C) 2025 Thomas Weißschuh */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_DIRENT_H #define _NOLIBC_DIRENT_H @@ -94,7 +97,4 @@ int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) return 0; } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_DIRENT_H */ diff --git a/tools/include/nolibc/elf.h b/tools/include/nolibc/elf.h index beb0b3a87569a..3e2c5228bf3d9 100644 --- a/tools/include/nolibc/elf.h +++ b/tools/include/nolibc/elf.h @@ -4,12 +4,12 @@ * Copyright (C) 2025 Thomas Weißschuh */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_SYS_ELF_H #define _NOLIBC_SYS_ELF_H #include -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_SYS_ELF_H */ diff --git a/tools/include/nolibc/errno.h b/tools/include/nolibc/errno.h index 1d8d8033e8ff7..08a33c40ec0c1 100644 --- a/tools/include/nolibc/errno.h +++ b/tools/include/nolibc/errno.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2022 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_ERRNO_H #define _NOLIBC_ERRNO_H @@ -22,7 +25,4 @@ int errno __attribute__((weak)); */ #define MAX_ERRNO 4095 -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_ERRNO_H */ diff --git a/tools/include/nolibc/fcntl.h b/tools/include/nolibc/fcntl.h index 5feb08ad54a7d..bff2e542f20f9 100644 --- a/tools/include/nolibc/fcntl.h +++ b/tools/include/nolibc/fcntl.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_FCNTL_H #define _NOLIBC_FCNTL_H @@ -63,7 +66,4 @@ int open(const char *path, int flags, ...) return __sysret(sys_open(path, flags, mode)); } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_FCNTL_H */ diff --git a/tools/include/nolibc/getopt.h b/tools/include/nolibc/getopt.h index 5fd06c9702e96..217abb95264b2 100644 --- a/tools/include/nolibc/getopt.h +++ b/tools/include/nolibc/getopt.h @@ -5,6 +5,9 @@ * Copyright (C) 2025 Thomas Weißschuh */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_GETOPT_H #define _NOLIBC_GETOPT_H @@ -95,7 +98,4 @@ int getopt(int argc, char * const argv[], const char *optstring) return c; } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_GETOPT_H */ diff --git a/tools/include/nolibc/signal.h b/tools/include/nolibc/signal.h index cdcc5904c51e9..ac13e53ac31d7 100644 --- a/tools/include/nolibc/signal.h +++ b/tools/include/nolibc/signal.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2022 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_SIGNAL_H #define _NOLIBC_SIGNAL_H @@ -20,7 +23,4 @@ int raise(int signal) return sys_kill(sys_getpid(), signal); } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_SIGNAL_H */ diff --git a/tools/include/nolibc/stdio.h b/tools/include/nolibc/stdio.h index fb0417477759e..8fa98abab2127 100644 --- a/tools/include/nolibc/stdio.h +++ b/tools/include/nolibc/stdio.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_STDIO_H #define _NOLIBC_STDIO_H @@ -598,7 +601,4 @@ const char *strerror(int errno) return buf; } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_STDIO_H */ diff --git a/tools/include/nolibc/stdlib.h b/tools/include/nolibc/stdlib.h index 69cf1d4418f1c..4790298f985c2 100644 --- a/tools/include/nolibc/stdlib.h +++ b/tools/include/nolibc/stdlib.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_STDLIB_H #define _NOLIBC_STDLIB_H @@ -522,7 +525,4 @@ uintmax_t strtoumax(const char *nptr, char **endptr, int base) return __strtox(nptr, endptr, base, 0, UINTMAX_MAX); } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_STDLIB_H */ diff --git a/tools/include/nolibc/string.h b/tools/include/nolibc/string.h index f0d335f0e467e..febfd69789666 100644 --- a/tools/include/nolibc/string.h +++ b/tools/include/nolibc/string.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_STRING_H #define _NOLIBC_STRING_H @@ -305,8 +308,4 @@ int toupper(int c) return c; } - -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_STRING_H */ diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h index bc47007f04429..68e60e6742114 100644 --- a/tools/include/nolibc/sys.h +++ b/tools/include/nolibc/sys.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_SYS_H #define _NOLIBC_SYS_H @@ -1119,7 +1122,4 @@ int memfd_create(const char *name, unsigned int flags) return __sysret(sys_memfd_create(name, flags)); } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_SYS_H */ diff --git a/tools/include/nolibc/sys/auxv.h b/tools/include/nolibc/sys/auxv.h index 04c2b9cbe51a2..c52463d6c18d7 100644 --- a/tools/include/nolibc/sys/auxv.h +++ b/tools/include/nolibc/sys/auxv.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "../nolibc.h" + #ifndef _NOLIBC_SYS_AUXV_H #define _NOLIBC_SYS_AUXV_H @@ -35,7 +38,4 @@ unsigned long getauxval(unsigned long type) return ret; } -/* make sure to include all global symbols */ -#include "../nolibc.h" - #endif /* _NOLIBC_SYS_AUXV_H */ diff --git a/tools/include/nolibc/sys/mman.h b/tools/include/nolibc/sys/mman.h index ad9d06b6b7919..41c7bf45e427b 100644 --- a/tools/include/nolibc/sys/mman.h +++ b/tools/include/nolibc/sys/mman.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "../nolibc.h" + #ifndef _NOLIBC_SYS_MMAN_H #define _NOLIBC_SYS_MMAN_H @@ -57,7 +60,4 @@ int munmap(void *addr, size_t length) return __sysret(sys_munmap(addr, length)); } -/* make sure to include all global symbols */ -#include "../nolibc.h" - #endif /* _NOLIBC_SYS_MMAN_H */ diff --git a/tools/include/nolibc/sys/stat.h b/tools/include/nolibc/sys/stat.h index 0eaf5496ce233..987c8bb52502f 100644 --- a/tools/include/nolibc/sys/stat.h +++ b/tools/include/nolibc/sys/stat.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "../nolibc.h" + #ifndef _NOLIBC_SYS_STAT_H #define _NOLIBC_SYS_STAT_H @@ -67,8 +70,4 @@ int stat(const char *path, struct stat *buf) return 0; } - -/* make sure to include all global symbols */ -#include "../nolibc.h" - #endif /* _NOLIBC_SYS_STAT_H */ diff --git a/tools/include/nolibc/sys/syscall.h b/tools/include/nolibc/sys/syscall.h index 59efdec8fd1c8..4bf97f1386a03 100644 --- a/tools/include/nolibc/sys/syscall.h +++ b/tools/include/nolibc/sys/syscall.h @@ -4,6 +4,9 @@ * Copyright (C) 2024 Thomas Weißschuh */ +/* make sure to include all global symbols */ +#include "../nolibc.h" + #ifndef _NOLIBC_SYS_SYSCALL_H #define _NOLIBC_SYS_SYSCALL_H @@ -13,7 +16,4 @@ #define _syscall_n(N, ...) _syscall(N, __VA_ARGS__) #define syscall(...) _syscall_n(_syscall_narg(__VA_ARGS__), ##__VA_ARGS__) -/* make sure to include all global symbols */ -#include "../nolibc.h" - #endif /* _NOLIBC_SYS_SYSCALL_H */ diff --git a/tools/include/nolibc/sys/time.h b/tools/include/nolibc/sys/time.h index 1d326c05ee627..785961c52fa3b 100644 --- a/tools/include/nolibc/sys/time.h +++ b/tools/include/nolibc/sys/time.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "../nolibc.h" + #ifndef _NOLIBC_SYS_TIME_H #define _NOLIBC_SYS_TIME_H @@ -30,7 +33,4 @@ int gettimeofday(struct timeval *tv, struct timezone *tz) return __sysret(sys_gettimeofday(tv, tz)); } -/* make sure to include all global symbols */ -#include "../nolibc.h" - #endif /* _NOLIBC_SYS_TIME_H */ diff --git a/tools/include/nolibc/sys/wait.h b/tools/include/nolibc/sys/wait.h index 9a68e6a6b1df8..f27be86ad5e48 100644 --- a/tools/include/nolibc/sys/wait.h +++ b/tools/include/nolibc/sys/wait.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "../nolibc.h" + #ifndef _NOLIBC_SYS_WAIT_H #define _NOLIBC_SYS_WAIT_H @@ -110,8 +113,4 @@ pid_t waitpid(pid_t pid, int *status, int options) return info.si_pid; } - -/* make sure to include all global symbols */ -#include "../nolibc.h" - #endif /* _NOLIBC_SYS_WAIT_H */ diff --git a/tools/include/nolibc/time.h b/tools/include/nolibc/time.h index 84655361b9ad2..9502f9aaf6211 100644 --- a/tools/include/nolibc/time.h +++ b/tools/include/nolibc/time.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2022 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_TIME_H #define _NOLIBC_TIME_H @@ -25,7 +28,4 @@ time_t time(time_t *tptr) return tv.tv_sec; } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_TIME_H */ diff --git a/tools/include/nolibc/types.h b/tools/include/nolibc/types.h index 32d0929c633bb..fe97953d16572 100644 --- a/tools/include/nolibc/types.h +++ b/tools/include/nolibc/types.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2021 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_TYPES_H #define _NOLIBC_TYPES_H @@ -214,7 +217,4 @@ struct stat { }) #endif -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_TYPES_H */ diff --git a/tools/include/nolibc/unistd.h b/tools/include/nolibc/unistd.h index ac7d53d986cd1..ed253305fdbaf 100644 --- a/tools/include/nolibc/unistd.h +++ b/tools/include/nolibc/unistd.h @@ -4,6 +4,9 @@ * Copyright (C) 2017-2022 Willy Tarreau */ +/* make sure to include all global symbols */ +#include "nolibc.h" + #ifndef _NOLIBC_UNISTD_H #define _NOLIBC_UNISTD_H @@ -56,7 +59,4 @@ int tcsetpgrp(int fd, pid_t pid) return ioctl(fd, TIOCSPGRP, &pid); } -/* make sure to include all global symbols */ -#include "nolibc.h" - #endif /* _NOLIBC_UNISTD_H */