suggesting fix: cross-compilation is requiring write permissions to bootstrap jdk

Erik Joelsson erik.joelsson at oracle.com
Mon Jun 1 13:29:38 UTC 2020


Fix looks good to me then.

Do you need sponsoring help? Is there a bug number for this yet?

/Erik

On 2020-06-01 01:53, Claes Redestad wrote:
> Hi Fedor,
>
> thanks for verifying!
>
> /Claes
>
> On 2020-06-01 10:39, Fedor wrote:
>> Hi Claes,
>>
>> The content of classlist files is the same in both cases (before and 
>> after change).
>>
>> And the change with updated file name $@.classlist => $@.interim as 
>> suggested before.
>>
>> diff --git a/make/GenerateLinkOptData.gmk b/make/GenerateLinkOptData.gmk
>> --- a/make/GenerateLinkOptData.gmk
>> +++ b/make/GenerateLinkOptData.gmk
>> @@ -69,10 +69,10 @@
>>              -Duser.language=en -Duser.country=US \
>>              -cp $(SUPPORT_OUTPUTDIR)/classlist.jar \
>>              build.tools.classlist.HelloClasslist $(LOG_DEBUG)
>> -       $(GREP) -v HelloClasslist $@.raw > 
>> $(INTERIM_IMAGE_DIR)/lib/classlist
>> -       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -Xshare:dump \
>> +       $(GREP) -v HelloClasslist $@.raw > $@.interim
>> +       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -Xshare:dump 
>> -XX:SharedClassListFile=$@.interim -XX:SharedArchiveFile=$@.jsa \
>>              -Xmx128M -Xms128M $(LOG_INFO)
>> -       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java 
>> -XX:DumpLoadedClassList=$@.raw \
>> +       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java 
>> -XX:DumpLoadedClassList=$@.raw -XX:SharedClassListFile=$@.interim 
>> -XX:SharedArchiveFile=$@.jsa \
>>              -Djava.lang.invoke.MethodHandle.TRACE_RESOLVE=true \
>>              -Duser.language=en -Duser.country=US \
>>              --module-path $(SUPPORT_OUTPUTDIR)/classlist.jar \
>>
>>
>>
>> Thanks,
>> Fedor
>>
>> On 26.05.2020 18:39, Claes Redestad wrote:
>>> Hi,
>>>
>>> I think the proposed flags should do the right thing here. It should be
>>> straightforward to verify since the contents of the generated files
>>> should ideally not change at all on a standard build.
>>>
>>> /Claes
>>>
>>> On 2020-05-26 17:25, Erik Joelsson wrote:
>>>> Hello,
>>>>
>>>> On 2020-05-26 08:00, Magnus Ihse Bursie wrote:
>>>>>> On 26/05/2020 11:14 pm, Fedor wrote:
>>>>>>> Hello all!
>>>>>>>
>>>>>>> I've tried to crossbuild jdk using current 
>>>>>>> http://hg.openjdk.java.net/jdk/jdk/ sources and noticed that 
>>>>>>> build requires write permissions to bootstrap jdk.
>>>>
>>>> Your patch seems to be doing the right thing. I would just like to 
>>>> have Claes verify that the JVM options you are setting are actually 
>>>> having the desired effect. We really shouldn't be putting any files 
>>>> in the INTERIM_IMAGE_DIR as that can possibly be located outside 
>>>> the build directory. Only thing I would want to change is the 
>>>> suffix for the file you call $@.classlist, since $@ is already 
>>>> named "classlist", I would prefer something like $@.tmp or 
>>>> $@.interim, to signal that this is the interim result between the 
>>>> two generation steps.
>>>>
>>>> Then just to clarify, it's not the BOOT_JDK, but the BUILD_JDK, 
>>>> which is a different concept. This can get tricky so it's important 
>>>> to keep the definitions correct. The BOOT_JDK, which is required to 
>>>> be of version N-1, or possibly N, is used to build a bootstrap 
>>>> version of the javac compiler, which we can then run on the 
>>>> BOOT_JDK to compiler the JDK N java code. We also use it to run 
>>>> most build tools in the build.
>>>>
>>>> The BUILD_JDK is a concept introduced for cross compiling. In a 
>>>> native build, certain build steps are required to be performed with 
>>>> the newly built JDK. This includes running jmod and jlink as well 
>>>> as generating data used to optimize the JDK image in the jlink step 
>>>> (which is where you are seeing this issue). For a native build, the 
>>>> BUILD_JDK is simply the exploded image jdk we just built. When 
>>>> cross compiling, the default behavior is to just also build enough 
>>>> of the native parts of the JDK for the build platform and use that. 
>>>> You may also supply a BUILD_JDK when configuring a cross 
>>>> compilation build. When doing so you must ensure that it's built 
>>>> from the exact same sources as the JDK you are cross compiling, 
>>>> otherwise results are unpredictable.
>>>>
>>>> In our internal build setups, we don't use the external BUILD_JDK 
>>>> feature, which is why we have not run into the problem you are 
>>>> reporting here.
>>>>
>>>> /Erik
>>>>
>>>>>>> The problem is it tries to write/rewrite class list into 
>>>>>>> bootstrap jdk directory.
>>>>>
>>>>> No, it should write to the INTERIM_IMAGE_DIR.
>>>>>
>>>>> However, I now see that we replace INTERIM_IMAGE_DIR with 
>>>>> BUILD_JDK in GenerateLinkOptData.gmk if we have an external 
>>>>> build-jdk. I assume that is how you have configured. I also assume 
>>>>> you are not cross-compiling.
>>>>>
>>>>> I'm not entirely sure about the thinking here. I can't say for 
>>>>> certain that we really should run HelloClasslist if we have an 
>>>>> external build-jdk. I think I need Erik or Claes to chime in.
>>>>>
>>>>> /Magnus
>>>>>
>>>>>
>>>>>>> I would like to suggest the fix below to solve this problem:
>>>>>>>
>>>>>>>
>>>>>>> diff --git a/make/GenerateLinkOptData.gmk 
>>>>>>> b/make/GenerateLinkOptData.gmk
>>>>>>> --- a/make/GenerateLinkOptData.gmk
>>>>>>> +++ b/make/GenerateLinkOptData.gmk
>>>>>>> @@ -69,10 +69,10 @@
>>>>>>>              -Duser.language=en -Duser.country=US \
>>>>>>>              -cp $(SUPPORT_OUTPUTDIR)/classlist.jar \
>>>>>>>              build.tools.classlist.HelloClasslist $(LOG_DEBUG)
>>>>>>> -       $(GREP) -v HelloClasslist $@.raw > 
>>>>>>> $(INTERIM_IMAGE_DIR)/lib/classlist
>>>>>>> -       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -Xshare:dump \
>>>>>>> +       $(GREP) -v HelloClasslist $@.raw > $@.classlist
>>>>>>> +       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -Xshare:dump 
>>>>>>> -XX:SharedClassListFile=$@.classlist -XX:SharedArchiveFile=$@.jsa \
>>>>>>>              -Xmx128M -Xms128M $(LOG_INFO)
>>>>>>> -       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java 
>>>>>>> -XX:DumpLoadedClassList=$@.raw \
>>>>>>> +       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java 
>>>>>>> -XX:DumpLoadedClassList=$@.raw 
>>>>>>> -XX:SharedClassListFile=$@.classlist -XX:SharedArchiveFile=$@.jsa \
>>>>>>> -Djava.lang.invoke.MethodHandle.TRACE_RESOLVE=true \
>>>>>>>              -Duser.language=en -Duser.country=US \
>>>>>>>              --module-path $(SUPPORT_OUTPUTDIR)/classlist.jar \
>>>>>>>
>>>>>>> Please correct me in case if it is wrong alias, or I need to 
>>>>>>> file bug first, or something else.
>>>>>>>
>>>>>>> Best Regards,
>>>>>>> Fedor
>>>>>>>
>>>>>
>>



More information about the build-dev mailing list