Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Nov 2010 16:34:34 +0100
From:      Alexey Shuvaev <shuvaev@physik.uni-wuerzburg.de>
To:        Emanuel Haupt <ehaupt@FreeBSD.org>
Cc:        hackers@FreeBSD.org
Subject:   Re: ccache pausing in buildworld
Message-ID:  <20101108153434.GC17517@wep4035.physik.uni-wuerzburg.de>
In-Reply-To: <20101108144811.4a737a7a.ehaupt@FreeBSD.org>
References:  <alpine.BSF.2.00.1010311019150.9437@wonkity.com> <20101108144811.4a737a7a.ehaupt@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Nov 08, 2010 at 02:48:11PM +0100, Emanuel Haupt wrote:
> Warren Block <wblock@wonkity.com> wrote:
> > About a month ago, ccache began to pause in buildworld.  The build 
> > doesn't halt or quit, it stays running but not doing anything:
> > 
[snip]
> > 
> > This is on 8-stable as of today, i386.  The -march=prescott option
> > comes from CPUTYPE?=core2 in make.conf, and removing that setting
> > doesn't fix the problem.
> > 
> > buildworld without ccache works fine, just takes more than twice as 
> > long.
> > 
> > The kernel target works fine with or without ccache.
> > 
> > Any ideas?
> 
> I've just updated the ccache port to 3.1.1.
> 
> Excerpt from the ChangeLog:
>   
>     * ccache now falls back to preprocessor mode when a non-regular include file
>       (device, socket, etc) has been detected so that potential hanging due to
>       blocking reads is avoided.
>     * CRC errors are now detected when decompressing compressed files in the
>       cache.
>     * Fixed potential object file corruption race on NFS.
>     * Minor documentation corrections.
>     * Fixed configure detection of ar.
> 
> After updating and zeroing the cache files the a build of RELENG_8_1 fails with:
> 
> CC='/usr/local/libexec/ccache/world-cc' mkdep -f .depend -a    -I/usr/src/lib/csu/i386-elf/../common -I/usr/src/lib/csu/i386-elf/../../libc/include /usr/src/lib/csu/i386-elf/crti.S /usr/src/lib/csu/i386-elf/crtn.S
> /usr/local/libexec/ccache/world-cc -O2 -pipe -I/usr/src/lib/csu/i386-elf/../common  -I/usr/src/lib/csu/i386-elf/../../libc/include -std=gnu99  -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wno-pointer-sign -c /usr/src/lib/csu/i386-elf/crti.S
> /usr/local/libexec/ccache/world-cc -O2 -pipe -I/usr/src/lib/csu/i386-elf/../common  -I/usr/src/lib/csu/i386-elf/../../libc/include -std=gnu99  -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wno-pointer-sign -c /usr/src/lib/csu/i386-elf/crtn.S
> /usr/local/libexec/ccache/world-cc -O2 -pipe -I/usr/src/lib/csu/i386-elf/../common  -I/usr/src/lib/csu/i386-elf/../../libc/include -std=gnu99  -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wno-pointer-sign -DGCRT -c -o gcrt1_c.o /usr/src/lib/csu/i386-elf/crt1_c.c
> /usr/local/libexec/ccache/world-cc -O2 -pipe -I/usr/src/lib/csu/i386-elf/../common  -I/usr/src/lib/csu/i386-elf/../../libc/include -std=gnu99  -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wno-pointer-sign -c /usr/src/lib/csu/i386-elf/crt1_s.S
> /usr/src/lib/csu/i386-elf/crt1_s.S: Assembler messages:
> /usr/src/lib/csu/i386-elf/crt1_s.S:34: Error: suffix or operands invalid for `push'
> /usr/src/lib/csu/i386-elf/crt1_s.S:37: Error: `8(%ebp)' is not a valid 64 bit base/index expression
> /usr/src/lib/csu/i386-elf/crt1_s.S:38: Error: suffix or operands invalid for `push'
> /usr/src/lib/csu/i386-elf/crt1_s.S:39: Error: `4(%ebp)' is not a valid 64 bit base/index expression
> /usr/src/lib/csu/i386-elf/crt1_s.S:40: Error: suffix or operands invalid for `push'
> *** Error code 1
> 
> Stop in /usr/src/lib/csu/i386-elf.
> *** Error code 1
> 
> Stop in /usr/src.
> *** Error code 1
> 
> Stop in /usr/src.
> *** Error code 1
> 
> Stop in /usr/src.
> *** Error code 1
> 
> Stop in /usr/src.
>
Just FYI, you would see exact the same problem if you try to compile
i386 world on amd64-CURRENT with clang:
...
/src/lib/csu/i386-elf/crt1_s.S: Assembler messages:
/src/lib/csu/i386-elf/crt1_s.S:34: Error: suffix or operands invalid for `push'
/src/lib/csu/i386-elf/crt1_s.S:37: Error: `8(%ebp)' is not a valid 64 bit base/index expression
/src/lib/csu/i386-elf/crt1_s.S:38: Error: suffix or operands invalid for `push'
/src/lib/csu/i386-elf/crt1_s.S:39: Error: `4(%ebp)' is not a valid 64 bit base/index expression
/src/lib/csu/i386-elf/crt1_s.S:40: Error: suffix or operands invalid for `push'
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
*** Error code 1
...

As far as I understand this, there is no clang cross-compiler support
at the moment. So compiler generates (somehow) i386 assembler code
which amd64 assembler does not like. Looks like something similar happens
here too...

HTH,
Alexey.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101108153434.GC17517>