Re: git: 67d1a1cd9e77 - main - cdefs.h: Remove support for pre gcc 4.0
- Reply: Warner Losh : "Re: git: 67d1a1cd9e77 - main - cdefs.h: Remove support for pre gcc 4.0"
- Reply: John Baldwin : "Re: git: 67d1a1cd9e77 - main - cdefs.h: Remove support for pre gcc 4.0"
- In reply to: John Baldwin : "Re: git: 67d1a1cd9e77 - main - cdefs.h: Remove support for pre gcc 4.0"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 02 Jul 2024 16:30:03 UTC
Hey John, On Tue, Jul 2, 2024 at 9:44 AM John Baldwin <jhb@freebsd.org> wrote: > On 7/1/24 4:09 PM, Warner Losh wrote: > > On Mon, Jul 1, 2024, 3:53 PM John Baldwin <jhb@freebsd.org> wrote: > > > >> On 6/20/24 7:41 PM, Warner Losh wrote: > >>> The branch main has been updated by imp: > >>> > >>> URL: > >> > https://cgit.FreeBSD.org/src/commit/?id=67d1a1cd9e772e2ef94003579f4fbc271d38be7d > >>> > >>> commit 67d1a1cd9e772e2ef94003579f4fbc271d38be7d > >>> Author: Warner Losh <imp@FreeBSD.org> > >>> AuthorDate: 2024-06-20 23:02:56 +0000 > >>> Commit: Warner Losh <imp@FreeBSD.org> > >>> CommitDate: 2024-06-21 02:41:08 +0000 > >>> > >>> cdefs.h: Remove support for pre gcc 4.0 > >>> > >>> All supported compilers support the gcc 3 attribute extensions. > >> Remove > >>> the #else clauses for this. Also, latter-day pcc compilers also > >> define > >>> __GNUC__, so there's not need to also test for __PCC__. > >>> > >>> Reviewed by: brooks > >>> Differential Revision: https://reviews.freebsd.org/D45654 > >>> Sponsored by: Netflix > >>> --- > >>> sys/sys/cdefs.h | 42 ++++-------------------------------------- > >>> 1 file changed, 4 insertions(+), 38 deletions(-) > >>> > >>> diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h > >>> index 88019819eb35..a6ecdca5d8b9 100644 > >>> --- a/sys/sys/cdefs.h > >>> +++ b/sys/sys/cdefs.h > >>> @@ -408,15 +389,10 @@ > >>> * assign pointer x to a local variable, to check that its type is > >>> * compatible with member m. > >>> */ > >>> -#if __GNUC_PREREQ__(3, 1) > >>> #define __containerof(x, s, m) ({ > >> \ > >>> const volatile __typeof(((s *)0)->m) *__x = (x); > \ > >>> __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, > m));\ > >>> }) > >>> -#else > >>> -#define __containerof(x, s, m) > >> \ > >>> - __DEQUALIFY(s *, (const volatile char *)(x) - __offsetof(s, m)) > >>> -#endif > >>> > >>> /* > >>> * Compiler-dependent macros to declare that functions take > printf-like > >>> @@ -434,14 +410,8 @@ > >>> #define __strftimelike(fmtarg, firstvararg) \ > >>> __attribute__((__format__ (__strftime__, fmtarg, > firstvararg))) > >>> > >>> -/* Compiler-dependent macros that rely on FreeBSD-specific extensions. > >> */ > >>> -#if defined(__FreeBSD_cc_version) && __FreeBSD_cc_version >= 300001 > && \ > >>> - defined(__GNUC__) > >>> #define __printf0like(fmtarg, firstvararg) \ > >>> __attribute__((__format__ (__printf0__, fmtarg, > firstvararg))) > >>> -#else > >>> -#define __printf0like(fmtarg, firstvararg) > >>> -#endif > >> > >> Does this still work with external GCC? I didn't think printf0 was > >> supported > >> by external GCC (or maybe I had to readd it in the port and that's what > I > >> remember). Ah, yes, printf0 is a local patch in the devel/freebsd-gccX > >> ports, but is not available in stock GCC (e.g. lang/gcc does not support > >> it). > >> > > > > Ah. That would explain why it just worked for me. That's what I tested > > with. Clang also seemed happy with it. But that was the in tree clang. Is > > there a similar issue? Gnuc is defined for both. > > So we don't support building the base system with lang/gcc, only > devel/freebsd-gccX (which has a local patch to add printf0 support). > The only question might be, do we support using __printf0like for things > that aren't in the base system that could be built with lang/gcc. If so, > we might need to guard this somehow. I'm not sure though that we care > about random software not in base using a FreeBSD-specific keyword from > <sys/cdefs.h>. > Yes. The question is "do we use __printf0like in our headers" since we definitely can't build FreeBSD itself w/o at least some of the extensions for other things... and the answer is "yes". err.h uses it, for example, as does setproctitle in stdlib.h The interesting thing for me is that gcc13 will produce no warnings if I include errr.h because -Wsystem-header is off. With it on, warnings crop up too. This is why my testing didn't see it... It looks like clang has it as a builtin for all versions we care about, so I'll create a phab to add some of this back. Maybe we should upstream what we have, for this and freebsd_printf since that's also in clang and one of the small number of patches we have for the lang/gcc* family? Warner