ccache pausing in buildworld

Alexey Shuvaev shuvaev at physik.uni-wuerzburg.de
Mon Nov 8 15:59:45 UTC 2010


On Mon, Nov 08, 2010 at 02:48:11PM +0100, Emanuel Haupt wrote:
> Warren Block <wblock at 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.


More information about the freebsd-hackers mailing list