Date: Tue, 7 Mar 2023 16:49:18 -0700 From: Warner Losh <imp@bsdimp.com> To: Jessica Clarke <jrtc27@freebsd.org> Cc: Warner Losh <imp@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@freebsd.org>, "dev-commits-src-main@freebsd.org" <dev-commits-src-main@freebsd.org> Subject: Re: git: 320e7e0003db - main - Revert "Fix cross-build support for Ubuntu 16.04" Message-ID: <CANCZdfosibmuyGoXXEy7e4r4=v5QLXbtC5RZGQmdi3HqEhy-1Q@mail.gmail.com> In-Reply-To: <B9243E0B-D840-41F9-A800-714E2E1AC2B7@freebsd.org> References: <202303072311.327NBUfu043070@gitrepo.freebsd.org> <B9243E0B-D840-41F9-A800-714E2E1AC2B7@freebsd.org>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --] 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> > > [-- Attachment #2 --] <div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 7, 2023 at 4:13 PM Jessica Clarke <<a href="mailto:jrtc27@freebsd.org">jrtc27@freebsd.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 7 Mar 2023, at 23:11, Warner Losh <imp@FreeBSD.org> wrote:<br> > <br> > The branch main has been updated by imp:<br> > <br> > URL: <a href="https://cgit.FreeBSD.org/src/commit/?id=320e7e0003dbc14ed3fc01b95532924cd3fbda7b" rel="noreferrer" target="_blank">https://cgit.FreeBSD.org/src/commit/?id=320e7e0003dbc14ed3fc01b95532924cd3fbda7b</a><br> > <br> > commit 320e7e0003dbc14ed3fc01b95532924cd3fbda7b<br> > Author: Jose Luis Duran <<a href="mailto:jlduran@gmail.com" target="_blank">jlduran@gmail.com</a>><br> > AuthorDate: 2023-03-02 15:31:31 +0000<br> > Commit: Warner Losh <imp@FreeBSD.org><br> > CommitDate: 2023-03-07 23:11:11 +0000<br> > <br> > Revert "Fix cross-build support for Ubuntu 16.04"<br> > <br> > This reverts commit d6327ae8c11b73765f100981baca49166b558b70.<br> > <br> > Before version 2.25, glibc's unistd.h would define the POSIX subset of<br> > getopt.h by defining __need_getopt, including getopt.h (which would<br> > disable the header guard) and then undefining it so later including<br> > getopt.h explicitly would define the extensions. However, we wrap<br> > getopt, and so the wrapper's #pragma once breaks that. Thus getopt.h was<br> > included before the real unistd.h to ensure we get all the extensions.<br> > <br> > However, with clang 12 that causes problems where we get a function<br> > mismatch (since getopt can throw exceptions). If we include it after<br> > unistd.h, it will get the full definitions since glibc no longer does<br> > the subsetting thing. This will result in matching definitions and fix<br> > clang 12.<br> <br> This is the bit I still don’t understand and hoped the author would explain…<br></blockquote><div><br></div><div>I'll look into it a bit more.</div><div><br></div><div>Warner</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> Jess<br> <br> > Reviewed by: imp, jrtc27 (OK'd on irc)<br> > Pull Request: <a href="https://github.com/freebsd/freebsd-src/pull/668" rel="noreferrer" target="_blank">https://github.com/freebsd/freebsd-src/pull/668</a><br> > ---<br> > tools/build/cross-build/include/linux/unistd.h | 10 +---------<br> > 1 file changed, 1 insertion(+), 9 deletions(-)<br> > <br> > diff --git a/tools/build/cross-build/include/linux/unistd.h b/tools/build/cross-build/include/linux/unistd.h<br> > index f518df2ac9ae..cd0b28ba39ed 100644<br> > --- a/tools/build/cross-build/include/linux/unistd.h<br> > +++ b/tools/build/cross-build/include/linux/unistd.h<br> > @@ -41,17 +41,9 @@<br> > /* Ensure that unistd.h pulls in getopt */<br> > #define __USE_POSIX2<br> > #endif<br> > -/*<br> > - * Before version 2.25, glibc's unistd.h would define the POSIX subset of<br> > - * getopt.h by defining __need_getopt, including getopt.h (which would<br> > - * disable the header guard) and then undefining it so later including<br> > - * getopt.h explicitly would define the extensions. However, we wrap getopt,<br> > - * and so the wrapper's #pragma once breaks that. Thus getopt.h must be<br> > - * included before the real unistd.h to ensure we get all the extensions.<br> > - */<br> > -#include <getopt.h><br> > #include_next <unistd.h><br> > #include <fcntl.h><br> > +#include <getopt.h><br> > #include <stdlib.h><br> > #include <string.h><br> > #include <sys/syscall.h><br> <br> </blockquote></div></div>help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfosibmuyGoXXEy7e4r4=v5QLXbtC5RZGQmdi3HqEhy-1Q>
