lang/gcc6-aux for head beyond __nonnull related issues: vm_ooffset_t and vm_pindex_t related changes (and more)

Pedro Giffuni pfg at FreeBSD.org
Fri Apr 14 02:30:51 UTC 2017


> On Apr 13, 2017, at 20:38, Mark Millard <markmi at dsl-only.net> wrote:
> 
> [I accidentally sent the original of the "on . . . wrote"
> below to the wrong toolchain list. This just corrects that.]
> 
> [I'll also note that lang/gcc6-aux was indirectly attempted
> when I tried to build ports-mgmt/synth on a Pine64+ 2GB
> (an aarch64 context). I had noticed the recent update claiming
> native aarch64 support for synth and tried to build it. I've
> no direct interest in lang/gcc6-aux . I just ended up with
> FYI information about lang/gcc6-aux .]
> 

I didn’t want to get into this but the problem is that as part of it's
build/bootstrapping process, GCC historically takes system headers
and attempts to “fix” them. I am unsure the fixes do anything at all
nowadays but the effect is that the compiler tends to take snapshots
of the system headers when it is built. cdefs.h is used by all the
system headers so changes in cdefs.h have good chances affecting
such builds but any change are likely to cause similar trouble.

In the case of gcc-aux, it appears the compilation is based on a
bootstrap compiler which already carries outdated headers.
A workaround, suggested by gerald@ the last time a similar issue
happened was to run for install-tools/fixinc.sh. I think that may
regenerate the headers and let the build use updated headers.
Ultimately gcc-aux needs maintainer intervention and using
outdated headers will break sooner or later: especially on -current.

Hope that helps,

Pedro.



> ===
> Mark Millard
> markmi at dsl-only.net
> 
> (I've added a missing "n" in the first "__nonnull_all" below.)
> On 2017-Apr-13, at 6:04 PM, Mark Millard <markmi at dsl-only.net> wrote:
> 
>> As means of investigating if lang/gcc6-aux has other problems
>> building on aarch64 than just __nonnull and __nonnull_all I did:
>> 
>> # svnlite diff /usr/src/sys/sys/
>> Index: /usr/src/sys/sys/cdefs.h
>> ===================================================================
>> --- /usr/src/sys/sys/cdefs.h	(revision 315914)
>> +++ /usr/src/sys/sys/cdefs.h	(working copy)
>> @@ -376,6 +376,10 @@
>> #define	__noinline
>> #endif
>> 
>> +// HACK to enable older source that did not track.
>> +#define __nonnull(x)
>> +#define __nonnull_all
>> +
>> #if __GNUC_PREREQ__(3, 4)
>> #define	__fastcall	__attribute__((__fastcall__))
>> #define	__result_use_check	__attribute__((__warn_unused_result__))
>> 
>> and so such similarly shows up in /usr/include/sys/cdefs.h .
>> 
>> The attempt to build lang/gcc6-aux (as part of attempting
>> to build ports-mgmt/synth) resulted in:
>> 
>> 
>> In file included from /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/gcc-6-20170202/libiberty/fdmatch.c:45:0:
>> ./config.h:556:15: error: two or more data types in declaration specifiers
>> #define pid_t int
>>              ^
>> In file included from /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/gcc-6-20170202/libiberty/fdmatch.c:49:0:
>> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/sys/types.h:266:9: error: unknown type name '__vm_ooffset_t'
>> typedef __vm_ooffset_t vm_ooffset_t;
>>        ^~~~~~~~~~~~~~
>> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/sys/types.h:268:9: error: unknown type name '__vm_pindex_t'
>> typedef __vm_pindex_t vm_pindex_t;
>>        ^~~~~~~~~~~~~
>> gmake[4]: *** [Makefile:732: fdmatch.o] Error 1
>> gmake[4]: Leaving directory '/usr/obj/portswork/usr/ports/lang/gcc6-aux/work/build/libiberty'
>> gmake[3]: *** [Makefile:7458: all-libiberty] Error 2
>> gmake[3]: *** Waiting for unfinished jobs....
>> 
>> 
>> vm_ooffset_t and vm_pindex_t has 2017-Feb-4 changes:
>> 
>> Revision 313194 - (view) (download) (annotate) - [select for diffs] 
>> Modified Sat Feb 4 12:26:38 2017 UTC (2 months, 1 week ago) by kib 
>> File length: 10733 byte(s) 
>> Diff to previous 299571
>> Define the vm_ooffset_t and vm_pindex_t types as machine-independend.
>> 
>> The types are for the byte offset and page index in vm object.  They
>> are similar to off_t, which is defined as 64bit MI integer.  Using MI
>> definitions will allow to provide consistent MD values of vm
>> object-related maximum sizes.
>> 
>> Reviewed by:	alc
>> Sponsored by:	The FreeBSD Foundation
>> MFC after:	1 week
>> 
>> 
>> The "#define pid_t int" in the local:
>> 
>> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/build/libiberty/config.h
>> 
>> likely messes up some later "typedef . . . pid_t;", such as:
>> 
>> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/sys/types.h:typedef       __pid_t         pid_t;          /* process id */
>> 
>> resulting in:
>> 
>> typedef __pid_t int;
>> 
>> 
>> 
>> So lang/gcc6-aux bootstrapping has more problems than just __nonnull
>> and __nonnull_all issues, at least for aarch64 head.
>> 
>> lang/gcc6-aux might not be the only thing with such issues.
>> 
>> 
>> I stopped with this. There could be more issues for lang/gcc6-aux .
> 



More information about the freebsd-ports mailing list