Re: git: 320e7e0003db - main - Revert "Fix cross-build support for Ubuntu 16.04"
- In reply to: Jessica Clarke : "Re: git: 320e7e0003db - main - Revert "Fix cross-build support for Ubuntu 16.04""
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 07 Mar 2023 23:49:18 UTC
On Tue, Mar 7, 2023 at 4:13 PM Jessica Clarke <jrtc27@freebsd.org> wrote: > On 7 Mar 2023, at 23:11, Warner Losh <imp@FreeBSD.org> wrote: > > > > 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. > > This is the bit I still don’t understand and hoped the author would > explain… > I'll look into it a bit more. Warner > Jess > > > 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> > >