Build fails on non-x86_64 configurations due to ADLC misconfig

Per Liden per.liden at oracle.com
Mon May 28 13:09:46 UTC 2018


On 05/28/2018 02:40 PM, Per Liden wrote:
> Hi Aleksey,
> 
> On 05/28/2018 02:23 PM, Aleksey Shipilev wrote:
>> Hey,
>>
>> Seems like latest integration of C2 barriers broke the non-x86 builds 
>> with:
>>
>> In file included from ad_aarch64.cpp:37:0:
>> /pool/buildbot/slaves/sobornost/zgc/build/src/hotspot/share/gc/z/zBarrierSetAssembler.hpp:39:47: 
>>
>> fatal error: gc/z/zBarrierSetAssembler_aarch64.hpp: No such file or 
>> directory
>>   #include CPU_HEADER(gc/z/zBarrierSetAssembler)
> 
> Ah, I was just about to look into why our Sparc build broke :) Your 

(Just to clarify, it broke when I tried to compile without the "ZGC: 
Solaris/Sparc support" patch).

/Per

> proposal seems like a a good workaround/fix. I'll take it for a spin on 
> Sparc.
> 
> Thanks!
> 
> /Per
> 
>>
>> This apparently comes from src/hotspot/share/adlc/main.cpp:
>>
>> #if INCLUDE_ZGC
>>    AD.addInclude(AD._CPP_file, "gc/z/zBarrierSetAssembler.hpp");
>> #endif
>>
>> This does not seem to work, because adlc itself is built separately 
>> from the rest of JVM, and
>> INCLUDE_ZGC=0 is not passed there, as it would be the case for 
>> libjvm.so build via JVM_CFLAGS. (I
>> have idly wondered why do we even need BSAsm in C2-ish .ad, but it 
>> seems that .ad does use symbols
>> from that BSAsm).
>>
>> So, I think we can just move the INCLUDE_ZGC block straight to .ad 
>> template, and let the build
>> figure out the include during the libjvm.so compilation, when 
>> INCLUDE_ZGC is available, like this:
>>
>> diff -r d0ebe2e0cff4 -r e0a872b06721 src/hotspot/cpu/x86/x86_64.ad
>> --- a/src/hotspot/cpu/x86/x86_64.ad     Mon May 28 10:50:04 2018 +0200
>> +++ b/src/hotspot/cpu/x86/x86_64.ad     Mon May 28 14:06:01 2018 +0200
>> @@ -538,6 +538,12 @@
>>
>>   %}
>>
>> +source_hpp %{
>> +#if INCLUDE_ZGC
>> +#include "gc/z/zBarrierSetAssembler.hpp"
>> +#endif
>> +%}
>> +
>>   //----------SOURCE 
>> BLOCK-------------------------------------------------------
>>   // This is a block of C++ code which provides values, functions, and
>>   // definitions necessary in the rest of the architecture description
>> diff -r d0ebe2e0cff4 -r e0a872b06721 src/hotspot/share/adlc/main.cpp
>> --- a/src/hotspot/share/adlc/main.cpp   Mon May 28 10:50:04 2018 +0200
>> +++ b/src/hotspot/share/adlc/main.cpp   Mon May 28 14:06:01 2018 +0200
>> @@ -216,9 +216,6 @@
>>     AD.addInclude(AD._CPP_file, "code/nativeInst.hpp");
>>     AD.addInclude(AD._CPP_file, "code/vmreg.inline.hpp");
>>     AD.addInclude(AD._CPP_file, "gc/shared/collectedHeap.inline.hpp");
>> -#if INCLUDE_ZGC
>> -  AD.addInclude(AD._CPP_file, "gc/z/zBarrierSetAssembler.hpp");
>> -#endif
>>     AD.addInclude(AD._CPP_file, "oops/compiledICHolder.hpp");
>>     AD.addInclude(AD._CPP_file, "oops/markOop.hpp");
>>     AD.addInclude(AD._CPP_file, "oops/method.hpp");
>>
>> This builds on x86_64 and fixes the build for at least AArch64. Other 
>> .ad files (SPARC?) require the
>> same change, but I cannot test it.
> 
> 
> 
>>
>> Thanks,
>> -Aleksey
>>


More information about the zgc-dev mailing list