svn commit: r280327 - in head/sys: kern vm

Don Lewis truckman at FreeBSD.org
Sat Mar 28 18:22:38 UTC 2015


On 28 Mar, Bryan Drewery wrote:
> On 3/27/2015 9:41 PM, Don Lewis wrote:
>> On 21 Mar, Alan Cox wrote:
>>> Author: alc
>>> Date: Sat Mar 21 17:56:55 2015
>>> New Revision: 280327
>>> URL: https://svnweb.freebsd.org/changeset/base/280327
>>>
>>> Log:
>>>   Introduce vm_object_color() and use it in mmap(2) to set the color of
>>>   named objects to zero before the virtual address is selected.  Previously,
>>>   the color setting was delayed until after the virtual address was
>>>   selected.  In rtld, this delay effectively prevented the mapping of a
>>>   shared library's code section using superpages.  Now, for example, we see
>>>   the first 1 MB of libc's code on armv6 mapped by a superpage after we've
>>>   gotten through the initial cold misses that bring the first 1 MB of code
>>>   into memory.  (With the page clustering that we perform on read faults,
>>>   this happens quickly.)
>>>   
>>>   Differential Revision:	https://reviews.freebsd.org/D2013
>>>   Reviewed by:	jhb, kib
>>>   Tested by:	Svatopluk Kraus (armv6)
>>>   MFC after:	6 weeks
>>>
>>> Modified:
>>>   head/sys/kern/kern_exec.c
>>>   head/sys/vm/vm_fault.c
>>>   head/sys/vm/vm_mmap.c
>>>   head/sys/vm/vm_object.h
>>>   head/sys/vm/vnode_pager.c
>> 
>> This change appears to have partially broken package building.
>> 
>> I recently set up a package building machine running 11.0-CURRENT
>> r280642 and found that it was unable to build openjdk7 packages inside
>> FreeBSD 8.4 and 9.3 poudriere jails, for both i386 and amd64.
>> 
>> [snip]
>> Compiling ../generated/adfiles/ad_x86_64_gen.cpp
>> rm -f ad_x86_64_gen.o
>> c++ -D_ALLBSD_SOURCE -D_GNU_SOURCE -DAMD64 -DPRODUCT -I. -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm/prims -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm/precompiled -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/cpu/x86/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os_cpu/bsd_x86/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os/bsd/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os/posix/vm -I../generated -DHOTSPOT_RELEASE_VERSION="\"24.76-b04\"" -DHOTSPOT_BUILD_TARGET="\"product\"" -DHOTSPOT_BUILD_USER="\"root\"" -DHOTSPOT_LIB_ARCH=\"amd64\" -DHOTSPOT_VM_DISTRO="\"OpenJDK\"" -O2 -pipe -fstack-protector -fno-strict-aliasing -DTARGET_OS_FAMILY_bsd -DTARGET_ARCH_x86 -DTARGET_ARCH_MODEL_x86_64 -DTARGET_OS_ARCH_bsd_x86 -DTARGET_OS_ARCH_MODEL_bsd_x86_64 -DTARGET_COMPILER_gcc -DCOMPILER2 -DCOMPILER1  -!
 fno!
>>  -rtti -fno-exceptions -pthread -fcheck-new -m64 -pipe -DTARGET_OS_FAMILY_bsd -DTARGET_ARCH_x86 -DTARGET_ARCH_MODEL_x86_64 -DTARGET_OS_ARCH_bsd_x86 -DTARGET_OS_ARCH_MODEL_bsd_x86_64 -DTARGET_COMPILER_gcc -DCOMPILER2 -DCOMPILER1 -fPIC -fno-rtti -fno-exceptions -pthread -fcheck-new -m64 -pipe -O3 -fno-strict-aliasing -DVM_LITTLE_ENDIAN -D_LP64=1 -fno-omit-frame-pointer -DINCLUDE_TRACE=1  -Wpointer-arith -Wconversion -Wsign-compare    -c  -fpch-deps -MMD -MP -MF ../generated/dependencies/ad_x86_64_format.o.d -o ad_x86_64_format.o ../generated/adfiles/ad_x86_64_format.cpp 
>> c++ -D_ALLBSD_SOURCE -D_GNU_SOURCE -DAMD64 -DPRODUCT -I. -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm/prims -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm/precompiled -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/cpu/x86/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os_cpu/bsd_x86/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os/bsd/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os/posix/vm -I../generated -DHOTSPOT_RELEASE_VERSION="\"24.76-b04\"" -DHOTSPOT_BUILD_TARGET="\"product\"" -DHOTSPOT_BUILD_USER="\"root\"" -DHOTSPOT_LIB_ARCH=\"amd64\" -DHOTSPOT_VM_DISTRO="\"OpenJDK\"" -O2 -pipe -fstack-protector -fno-strict-aliasing -DTARGET_OS_FAMILY_bsd -DTARGET_ARCH_x86 -DTARGET_ARCH_MODEL_x86_64 -DTARGET_OS_ARCH_bsd_x86 -DTARGET_OS_ARCH_MODEL_bsd_x86_64 -DTARGET_COMPILER_gcc -DCOMPILER2 -DCOMPILER1  -!
 fno!
>>  -rtti -fno-exceptions -pthread -fcheck-new -m64 -pipe -DTARGET_OS_FAMILY_bsd -DTARGET_ARCH_x86 -DTARGET_ARCH_MODEL_x86_64 -DTARGET_OS_ARCH_bsd_x86 -DTARGET_OS_ARCH_MODEL_bsd_x86_64 -DTARGET_COMPILER_gcc -DCOMPILER2 -DCOMPILER1 -fPIC -fno-rtti -fno-exceptions -pthread -fcheck-new -m64 -pipe -O3 -fno-strict-aliasing -DVM_LITTLE_ENDIAN -D_LP64=1 -fno-omit-frame-pointer -DINCLUDE_TRACE=1  -Wpointer-arith -Wconversion -Wsign-compare    -c  -fpch-deps -MMD -MP -MF ../generated/dependencies/ad_x86_64_gen.o.d -o ad_x86_64_gen.o ../generated/adfiles/ad_x86_64_gen.cpp 
>> Compiling ../generated/adfiles/ad_x86_64_misc.cpp
>> rm -f ad_x86_64_misc.o
>> c++ -D_ALLBSD_SOURCE -D_GNU_SOURCE -DAMD64 -DPRODUCT -I. -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm/prims -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm/precompiled -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/cpu/x86/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os_cpu/bsd_x86/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os/bsd/vm -I/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/os/posix/vm -I../generated -DHOTSPOT_RELEASE_VERSION="\"24.76-b04\"" -DHOTSPOT_BUILD_TARGET="\"product\"" -DHOTSPOT_BUILD_USER="\"root\"" -DHOTSPOT_LIB_ARCH=\"amd64\" -DHOTSPOT_VM_DISTRO="\"OpenJDK\"" -O2 -pipe -fstack-protector -fno-strict-aliasing -DTARGET_OS_FAMILY_bsd -DTARGET_ARCH_x86 -DTARGET_ARCH_MODEL_x86_64 -DTARGET_OS_ARCH_bsd_x86 -DTARGET_OS_ARCH_MODEL_bsd_x86_64 -DTARGET_COMPILER_gcc -DCOMPILER2 -DCOMPILER1  -!
 fno!
>>  -rtti -fno-exceptions -pthread -fcheck-new -m64 -pipe -DTARGET_OS_FAMILY_bsd -DTARGET_ARCH_x86 -DTARGET_ARCH_MODEL_x86_64 -DTARGET_OS_ARCH_bsd_x86 -DTARGET_OS_ARCH_MODEL_bsd_x86_64 -DTARGET_COMPILER_gcc -DCOMPILER2 -DCOMPILER1 -fPIC -fno-rtti -fno-exceptions -pthread -fcheck-new -m64 -pipe -O3 -fno-strict-aliasing -DVM_LITTLE_ENDIAN -D_LP64=1 -fno-omit-frame-pointer -DINCLUDE_TRACE=1  -Wpointer-arith -Wconversion -Wsign-compare    -c  -fpch-deps -MMD -MP -MF ../generated/dependencies/ad_x86_64_misc.o.d -o ad_x86_64_misc.o ../generated/adfiles/ad_x86_64_misc.cpp 
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm/compiler/abstractCompiler.cpp:1: fatal error: had to relocate PCH
>> compilation terminated.
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/src/share/vm/utilities/accessFlags.cpp:1: fatal error: had to relocate PCH
>> compilation terminated.
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/rules.make:149: recipe for target 'abstractCompiler.o' failed
>> gmake[6]: *** [abstractCompiler.o] Error 1
>> gmake[6]: *** Waiting for unfinished jobs....
>> ../generated/adfiles/ad_x86_64.cpp:1: fatal error: had to relocate PCH
>> compilation terminated.
> 
> Are you using ccache?

Nope.

>> ../generated/adfiles/ad_x86_64_clone.cpp:1: fatal error: had to relocate PCH
>> compilation terminated.
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/rules.make:149: recipe for target 'accessFlags.o' failed
>> gmake[6]: *** [accessFlags.o] Error 1
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/rules.make:149: recipe for target 'ad_x86_64_clone.o' failed
>> gmake[6]: *** [ad_x86_64_clone.o] Error 1
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/rules.make:149: recipe for target 'ad_x86_64.o' failed
>> gmake[6]: *** [ad_x86_64.o] Error 1
>> ../generated/adfiles/ad_x86_64_expand.cpp:1: fatal error: had to relocate PCH
>> compilation terminated.
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/rules.make:149: recipe for target 'ad_x86_64_expand.o' failed
>> gmake[6]: *** [ad_x86_64_expand.o] Error 1
>> ../generated/adfiles/ad_x86_64_gen.cpp:1: fatal error: had to relocate PCH
>> compilation terminated.
>> ../generated/adfiles/ad_x86_64_misc.cpp:1: fatal error: had to relocate PCH
>> compilation terminated.
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/rules.make:149: recipe for target 'ad_x86_64_gen.o' failed
>> gmake[6]: *** [ad_x86_64_gen.o] Error 1
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/rules.make:149: recipe for target 'ad_x86_64_misc.o' failed
>> gmake[6]: *** [ad_x86_64_misc.o] Error 1
>> ../generated/adfiles/ad_x86_64_format.cpp:1: fatal error: had to relocate PCH
>> compilation terminated.
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/rules.make:149: recipe for target 'ad_x86_64_format.o' failed
>> gmake[6]: *** [ad_x86_64_format.o] Error 1
>> gmake[6]: Leaving directory '/wrkdirs/usr/ports/java/openjdk7/work/openjdk/build/bsd-amd64/hotspot/outputdir/bsd_amd64_compiler2/product'
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/makefiles/top.make:128: recipe for target 'the_vm' failed
>> gmake[5]: *** [the_vm] Error 2
>> gmake[5]: Leaving directory '/wrkdirs/usr/ports/java/openjdk7/work/openjdk/build/bsd-amd64/hotspot/outputdir/bsd_amd64_compiler2/product'
>> /wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make/bsd/Makefile:292: recipe for target 'product' failed
>> gmake[4]: *** [product] Error 2
>> gmake[4]: Leaving directory '/wrkdirs/usr/ports/java/openjdk7/work/openjdk/build/bsd-amd64/hotspot/outputdir'
>> Makefile:191: recipe for target 'generic_build2' failed
>> gmake[3]: *** [generic_build2] Error 2
>> gmake[3]: Leaving directory '/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make'
>> Makefile:151: recipe for target 'product' failed
>> gmake[2]: *** [product] Error 2
>> gmake[2]: Leaving directory '/wrkdirs/usr/ports/java/openjdk7/work/openjdk/hotspot/make'
>> make/hotspot-rules.gmk:111: recipe for target 'hotspot-build' failed
>> gmake[1]: *** [hotspot-build] Error 2
>> gmake[1]: Leaving directory '/wrkdirs/usr/ports/java/openjdk7/work/openjdk'
>> Makefile:251: recipe for target 'build_product_image' failed
>> gmake: *** [build_product_image] Error 2
>> ===> Compilation failed unexpectedly.
>> 
>> I was not seeing this problem on my older package builder running
>> 10.1-STABLE.  Since this problem has not shown up on the FreeBSD package
>> building cluster, I got suspicious that the change was quite recent.
>> 
>> This old gcc bug report:
>> <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14940> led me to suspect
>> mmap().
>> 
>> The old gcc source file /usr/src/contrib/gcc/ggc-common.c does a couple
>> of mmap() calls.   Tne first is in mmap_gt_pch_get_address() where a
>> NULL first argument is used.  The address that gets returned is stashed
>> away and the region is unmapped.  Then a later call in
>> mmap_gt_pch_use_address() passes this saved  address to mmap() as a
>> hint.  It expects the mapped region to get mapped to the same base
>> address.  If this does not happen, the above error is the result.
> 
> I don't know what I'm talking about but that doesn't sound like a very
> safe assumption for the gcc code to make.

Yeah, I was pretty freaked out what I saw that.

I'm not sure if it does this in one process or if it expects this to be
repeatable between processes.  I'm suspicious that it might be the
latter.  The first process would compile the headers and stash some of
data structure in an mmap()ed file.  The second process would then
mmap() the file to use for compiling some code.  If it landed at a
different address the second time around, then all of the embedded
pointers would be garbage.

>> 
>> If I go back to kernel source r280326, which immediately preceeds the
>> above commit, I am able to successfully build openjdk7.
>> 
>> I recommend that any machines in the ports cluster being used to build
>> packages for FreeBSD 8 and 9 avoid upgrading past r280326 until this
>> issue is resolved.  I have not observed any problems building packages
>> for FreeBSD 10 and 11.
>> 
> 
> Is it 100% for you before and after? I've seen this error come up
> randomly where a rebuild will succeed. or fail.

It's been 100% fatal for me when building openjdk7 in FreeBSD 8 and 9
jails.  I've seen some other randomish-looking failures, but I didn't
investigate whether they were the same, or just the usual random port
breakage.  If I can find some time, I'll go digging back through the
logs.




More information about the svn-src-all mailing list