Skip to content

Commit

Permalink
tools/nolibc: fix missing includes causing build issues at -O0
Browse files Browse the repository at this point in the history
After the nolibc includes were split to facilitate portability from
standard libcs, programs that include only what they need may miss
some symbols which are needed by libgcc. This is the case for raise()
which is needed by the divide by zero code in some architectures for
example.

Regardless, being able to include only the apparently needed files is
convenient.

Instead of trying to move all exported definitions to a single file,
since this can change over time, this patch takes another approach
consisting in including the nolibc header at the end of all standard
include files. This way their types and functions are already known
at the moment of inclusion, and including any single one of them is
sufficient to bring all the required ones.

Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
  • Loading branch information
wtarreau authored and paulmckrcu committed Jan 9, 2023
1 parent 184177c commit 55abdd1
Show file tree
Hide file tree
Showing 10 changed files with 29 additions and 0 deletions.
3 changes: 3 additions & 0 deletions tools/include/nolibc/ctype.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,7 @@ int ispunct(int c)
return isgraph(c) && !isalnum(c);
}

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_CTYPE_H */
3 changes: 3 additions & 0 deletions tools/include/nolibc/errno.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,7 @@ static int errno;
*/
#define MAX_ERRNO 4095

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_ERRNO_H */
3 changes: 3 additions & 0 deletions tools/include/nolibc/signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,7 @@ int raise(int signal)
return sys_kill(sys_getpid(), signal);
}

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_SIGNAL_H */
3 changes: 3 additions & 0 deletions tools/include/nolibc/stdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -303,4 +303,7 @@ void perror(const char *msg)
fprintf(stderr, "%s%serrno=%d\n", (msg && *msg) ? msg : "", (msg && *msg) ? ": " : "", errno);
}

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_STDIO_H */
3 changes: 3 additions & 0 deletions tools/include/nolibc/stdlib.h
Original file line number Diff line number Diff line change
Expand Up @@ -419,4 +419,7 @@ char *u64toa(uint64_t in)
return itoa_buffer;
}

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_STDLIB_H */
3 changes: 3 additions & 0 deletions tools/include/nolibc/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,4 +285,7 @@ char *strrchr(const char *s, int c)
return (char *)ret;
}

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_STRING_H */
2 changes: 2 additions & 0 deletions tools/include/nolibc/sys.h
Original file line number Diff line number Diff line change
Expand Up @@ -1243,5 +1243,7 @@ ssize_t write(int fd, const void *buf, size_t count)
return ret;
}

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_SYS_H */
3 changes: 3 additions & 0 deletions tools/include/nolibc/time.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,7 @@ time_t time(time_t *tptr)
return tv.tv_sec;
}

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_TIME_H */
3 changes: 3 additions & 0 deletions tools/include/nolibc/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -209,4 +209,7 @@ struct stat {
})
#endif

/* make sure to include all global symbols */
#include "nolibc.h"

#endif /* _NOLIBC_TYPES_H */
3 changes: 3 additions & 0 deletions tools/include/nolibc/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,7 @@ 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 */

0 comments on commit 55abdd1

Please sign in to comment.