RFR: Make Zero build and run with JDK8
Christian Thalinger
christian.thalinger at oracle.com
Wed Oct 17 14:40:58 PDT 2012
On Oct 16, 2012, at 8:01 AM, Roman Kennke <rkennke at 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.
-- Chris
>
> Is this ok to commit now?
>
> Roman
>
>
More information about the hotspot-dev
mailing list