git: 320e7e0003db - main - Revert "Fix cross-build support for Ubuntu 16.04"
Date: Tue, 07 Mar 2023 23:11:30 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=320e7e0003dbc14ed3fc01b95532924cd3fbda7b commit 320e7e0003dbc14ed3fc01b95532924cd3fbda7b Author: Jose Luis Duran <jlduran@gmail.com> AuthorDate: 2023-03-02 15:31:31 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2023-03-07 23:11:11 +0000 Revert "Fix cross-build support for Ubuntu 16.04" This reverts commit d6327ae8c11b73765f100981baca49166b558b70. Before version 2.25, glibc's unistd.h would define the POSIX subset of getopt.h by defining __need_getopt, including getopt.h (which would disable the header guard) and then undefining it so later including getopt.h explicitly would define the extensions. However, we wrap getopt, and so the wrapper's #pragma once breaks that. Thus getopt.h was included before the real unistd.h to ensure we get all the extensions. However, with clang 12 that causes problems where we get a function mismatch (since getopt can throw exceptions). If we include it after unistd.h, it will get the full definitions since glibc no longer does the subsetting thing. This will result in matching definitions and fix clang 12. Reviewed by: imp, jrtc27 (OK'd on irc) Pull Request: https://github.com/freebsd/freebsd-src/pull/668 --- tools/build/cross-build/include/linux/unistd.h | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/tools/build/cross-build/include/linux/unistd.h b/tools/build/cross-build/include/linux/unistd.h index f518df2ac9ae..cd0b28ba39ed 100644 --- a/tools/build/cross-build/include/linux/unistd.h +++ b/tools/build/cross-build/include/linux/unistd.h @@ -41,17 +41,9 @@ /* Ensure that unistd.h pulls in getopt */ #define __USE_POSIX2 #endif -/* - * Before version 2.25, glibc's unistd.h would define the POSIX subset of - * getopt.h by defining __need_getopt, including getopt.h (which would - * disable the header guard) and then undefining it so later including - * getopt.h explicitly would define the extensions. However, we wrap getopt, - * and so the wrapper's #pragma once breaks that. Thus getopt.h must be - * included before the real unistd.h to ensure we get all the extensions. - */ -#include <getopt.h> #include_next <unistd.h> #include <fcntl.h> +#include <getopt.h> #include <stdlib.h> #include <string.h> #include <sys/syscall.h>