RFR (XXL): JEP 243: Java-Level JVM Compiler Interface

Christian Thalinger christian.thalinger at oracle.com
Thu Oct 8 02:42:20 UTC 2015


> On Oct 5, 2015, at 2:47 AM, Magnus Ihse Bursie <magnus.ihse.bursie at oracle.com> wrote:
> 
> On 2015-09-29 03:12, Christian Thalinger wrote:
>>> On Sep 27, 2015, at 11:25 PM, Magnus Ihse Bursie <magnus.ihse.bursie at oracle.com> wrote:
>>> 
>>> On 2015-09-25 22:00, Christian Thalinger wrote:
>>>> Btw. we found a bug in creating the OptionDescriptors files; we get duplicate entries:
>>>> 
>>>> $ cat build/macosx-x86_64-normal-server-release/jdk/modules/java.base/META-INF/services/jdk.internal.jvmci.options.OptionDescriptors
>>>> jdk.internal.jvmci.compiler.Compiler_OptionDescriptors
>>>> jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider_OptionDescriptors
>>>> jdk.internal.jvmci.hotspot.HotSpotResolvedJavaFieldImpl_OptionDescriptors
>>>> jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethodImpl_OptionDescriptors
>>>> jdk.internal.jvmci.compiler.Compiler_OptionDescriptors
>>>> jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider_OptionDescriptors
>>>> jdk.internal.jvmci.hotspot.HotSpotResolvedJavaFieldImpl_OptionDescriptors
>>>> jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethodImpl_OptionDescriptors
>>>>>>>> 
>>>> Would this be the right fix?
>>>> 
>>>> diff -r db1a815d2f6c make/gensrc/Gensrc-java.base.gmk
>>>> --- a/make/gensrc/Gensrc-java.base.gmkThu Sep 24 15:35:49 2015 -1000
>>>> +++ b/make/gensrc/Gensrc-java.base.gmkFri Sep 25 18:18:35 2015 +0200
>>>> @@ -94,6 +94,7 @@
>>>>    $(GENSRC_DIR)/_gensrc_proc_done
>>>> $(MKDIR) -p $(@D)
>>>> ($(CD) $(GENSRC_DIR)/META-INF/jvmci.options && \
>>>> +    $(RM) -f $@; \
>>>>    for i in $$(ls); do \
>>>>      echo $${i}_OptionDescriptors >> $@; \
>>>>    done)
>>>> 
>>> That seems like a reasonable fix, yes.
>> Thanks, but… (see below)
>> 
>>> 
>>>> And I see the same behavior for HotSpotJVMCIBackendFactory:
>>>> 
>>>> $ cat build/macosx-x86_64-normal-server-release/jdk/modules/java.base/META-INF/services/jdk.internal.jvmci.hotspot.HotSpotJVMCIBackendFactory
>>>> jdk.internal.jvmci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory
>>>> jdk.internal.jvmci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory
>>>> jdk.internal.jvmci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory
>>>> jdk.internal.jvmci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory
>>>>>>>> 
>>>> So I think a similar fix needs to be applied there.
>> …I’ve look at the code that creates this file and it isn’t obvious to me how to fix it.  Any good ideas?
> 
> Try this:
>         ($(CD) $(GENSRC_DIR)/META-INF/jvmci.providers && \
>             for i in $$($(LS)); do \
>               c=$$($(CAT) $$i | $(TR) -d '\n\r'); \
> +              $(RM) $(GENSRC_DIR)/META-INF/services/$$c; \
>               $(ECHO) $$i >> $(GENSRC_DIR)/META-INF/services/$$c; \
>             done)
>         $(TOUCH) $@
> 
> I have not tested it but it should work.

No, this won’t work.  Both implementations of HotSpotJVMCIBackendFactory (AMD64HotSpotJVMCIBackendFactory and SPARCHotSpotJVMCIBackendFactory) contain the same service file name:

jdk.internal.jvmci.hotspot.HotSpotJVMCIBackendFactory

since we need to collect all available factories in one service.

> 
> /Magnus



More information about the hotspot-dev mailing list