This patch contains a Makefile change:

http://cr.openjdk.java.net/~rkennke/zerojdk8/webrev.03/make/Makefile.udiff.html

-- Chris

Begin forwarded message:

> From: Roman Kennke <rken...@redhat.com>
> Subject: Re: RFR: Make Zero build and run with JDK8
> Date: October 17, 2012 4:09:13 PM PDT
> To: Christian Thalinger <christian.thalin...@oracle.com>
> Cc: hotspot-...@openjdk.java.net
> 
> Am Mittwoch, den 17.10.2012, 15:34 -0700 schrieb Christian Thalinger:
>> On Oct 17, 2012, at 3:05 PM, Roman Kennke <rken...@redhat.com> wrote:
>> 
>>> Am Mittwoch, den 17.10.2012, 14:40 -0700 schrieb Christian Thalinger:
>>>> On Oct 16, 2012, at 8:01 AM, Roman Kennke <rken...@redhat.com> wrote:
>>>> 
>>>>> Hi Christian,
>>>>> 
>>>>>>>>>> In the recent weeks I worked on the Zero interpreter, to get it to 
>>>>>>>>>> build
>>>>>>>>>> and run with JDK8, and in particular with the latest changes that 
>>>>>>>>>> came
>>>>>>>>>> from mlvm (meth-lazy). The following webrev applies to 
>>>>>>>>>> hsx/hotspot-main:
>>>>>>>>>> 
>>>>>>>>>> http://cr.openjdk.java.net/~rkennke/zerojdk8/webrev.00/
>>>>>>>> 
>>>>>>>> src/share/vm/asm/codeBuffer.cpp:
>>>>>>>> 
>>>>>>>> -  if (dest->blob() == NULL) {
>>>>>>>> +  if (dest->blob() == NULL && dest_filled != 0x0) {
>>>>>>>> 
>>>>>>>> Do we really need this when you have this:
>>>>>>> 
>>>>>>> The above is needed, because the loop above it that initializes
>>>>>>> dest_filled is never executed. However, I will change the test to
>>>>>>> dest_filled != NULL :-)
>>>>>>> 
>>>>>>>> static void pd_fill_to_bytes(void* to, size_t count, jubyte value) {
>>>>>>>> 
>>>>>>>> -  memset(to, value, count);
>>>>>>>> +  if ( count > 0 ) memset(to, value, count);
>>>>>>>> 
>>>>>>>> }
>>>>>>> 
>>>>>>> Turns out that this is 1. not related to the other change above and 2.
>>>>>>> not needed. I'll remove it.
>>>>>>> 
>>>>>>>> src/share/vm/interpreter/interpreter.cpp:
>>>>>>>> 
>>>>>>>> -  assert(_entry_table[kind] == _entry_table[abstract], "previous 
>>>>>>>> value must be AME entry");
>>>>>>>> +  assert(_entry_table[kind] == NULL || _entry_table[kind] == 
>>>>>>>> _entry_table[abstract], "previous value must be AME entry or NULL");
>>>>>>>> 
>>>>>>>> Why did you need that change?
>>>>>>> 
>>>>>>> Apparently, before the whole table was initialized, and the methodhandle
>>>>>>> related entries left as abstract. Now the methodhandle entries are
>>>>>>> simply left to NULL. I suppose we could change the assert to 
>>>>>>> 
>>>>>>> assert(_entry_table[kind] == NULL, "previous value must be NULL");
>>>>>>> 
>>>>>>> Alternatively, we could fix the code that puts the other entries to also
>>>>>>> set the methodhandle entries to AME and go back to the original assert.
>>>>>>> What do you think?
>>>>>> 
>>>>>> TemplateInterpreterGenerator::generate_all sets all MH entries to AME:
>>>>>> 
>>>>>> // method handle entry kinds are generated later in 
>>>>>> MethodHandlesAdapterGenerator::generate:                                 
>>>>>>                                  
>>>>>> for (int i = Interpreter::method_handle_invoke_FIRST; i <= 
>>>>>> Interpreter::method_handle_invoke_LAST; i++) {                           
>>>>>>                            
>>>>>> Interpreter::MethodKind kind = (Interpreter::MethodKind) i;              
>>>>>>                                                                          
>>>>>>            
>>>>>> Interpreter::_entry_table[kind] = 
>>>>>> Interpreter::_entry_table[Interpreter::abstract];                        
>>>>>>                                                   
>>>>>> }                                                                        
>>>>>>                                                                          
>>>>>>              
>>>>>> 
>>>>>> You need similar code in Zero.
>>>>> 
>>>>> Alright, I extracted this piece of code into a separate protected method
>>>>> void AbstractInterpreterGenerator::initializeMethodHandleEntries() and
>>>>> call it both from templateInterpreter and cppInterpreter to initialize
>>>>> the method handle entries to AME.
>>>>> 
>>>>> This new webrev also reverts this:
>>>>> 
>>>>>>> static void pd_fill_to_bytes(void* to, size_t count, jubyte value) {
>>>>>>>> 
>>>>>>>> -  memset(to, value, count);
>>>>>>>> +  if ( count > 0 ) memset(to, value, count);
>>>>>>>> 
>>>>>>>> }
>>>>>> 
>>>>> 
>>>>> .. and changes the 0x0 to NULL here:
>>>>> 
>>>>> 
>>>>>>> src/share/vm/asm/codeBuffer.cpp:
>>>>>>>> 
>>>>>>>> -  if (dest->blob() == NULL) {
>>>>>>>> +  if (dest->blob() == NULL && dest_filled != 0x0) {
>>>>>>>> 
>>>>>> 
>>>>> 
>>>>> I tried JRuby a little more and verified that it's actually using +indy,
>>>>> and it works all well.
>>>>> 
>>>>> http://cr.openjdk.java.net/~rkennke/zerojdk8/webrev.01/
>>>> 
>>>> It seems this webrev contains the old changes.
>>> 
>>> Arg! I did the changes in my hotspot-comp tree then made the webrev in
>>> my hotspot-main :-) Here's the correct one:
>>> 
>>> http://cr.openjdk.java.net/~rkennke/zerojdk8/webrev.02/
>> 
>> That looks better.  The only thing is we don't use camel-case for methods:
>> 
>> +  void initializeMethodHandleEntries();
>> 
>> Could you change it to:
>> 
>> +  void initialize_method_handle_entries();
>> 
>> I would do it myself but I cannot verify that I didn't break Zero.  I really 
>> should set up a build environment for Zero...
> 
> Here it comes:
> 
> http://cr.openjdk.java.net/~rkennke/zerojdk8/webrev.03/
> 
> I built both Zero and normal debug_build successfully.
> 
> Cheers,
> Roman
> 
> 

Reply via email to