RFR: JDK-8163808 fix vtable assertion and logging for older classfiles
Coleen Phillimore
coleen.phillimore at oracle.com
Fri Aug 12 17:46:51 UTC 2016
On 8/12/16 1:33 PM, Karen Kinnear wrote:
> Coleen,
>
> Good catch - I will make that change.
> Today this code is not called for arrays, but I totally appreciate you
> looking at the bigger picture
> and preparing for potential other uses.
>
>
> Here is the updated lines:
> KlassHandle vtklass_h = vt->klass();
> Klass* vtklass = vtklass_h();
> if (vtklass->is_instance_klass() &&
> (InstanceKlass::cast(vtklass)->major_version() >=
> klassVtable::VTABLE_TRANSITIVE_OVERRIDE_VERSION)) {
> assert(method() != NULL, "must have set method");
> }
>
This looks good.
Thanks,
Coleen
> Thanks!
> Karen
>
>> On Aug 12, 2016, at 10:47 AM, Coleen Phillimore
>> <coleen.phillimore at oracle.com <mailto:coleen.phillimore at oracle.com>>
>> wrote:
>>
>>
>> http://cr.openjdk.java.net/~acorn/8163808.hs/webrev/src/share/vm/oops/klassVtable.cpp.udiff.html
>> <http://cr.openjdk.java.net/%7Eacorn/8163808.hs/webrev/src/share/vm/oops/klassVtable.cpp.udiff.html>
>>
>> void vtableEntry::verify(klassVtable* vt, outputStream* st) {
>> NOT_PRODUCT(FlagSetting fs(IgnoreLockingAssertions, true));
>> + KlassHandle vtklass_h = vt->klass();
>> + Klass* vtklass = vtklass_h();
>> + if (InstanceKlass::cast(vtklass)->major_version() >=
>> klassVtable::VTABLE_TRANSITIVE_OVERRIDE_VERSION) {
>> assert(method() != NULL, "must have set method");
>> + }
>>
>> I might be wrong but the vtable->klass() can be an ArrayKlass, so I
>> think you have to do:
>>
>> if (vtklass->oop_is_instance() && InstanceKlass::cast(vtklass) ...)
>>
>> InstanceKlass::cast makes this assertion. Otherwise, the code looks
>> good.
>>
>> Coleen
>>
>> On 8/11/16 5:07 PM, Karen Kinnear wrote:
>>> Please review:
>>> https://bugs.openjdk.java.net/browse/JDK-8163808
>>>
>>> http://cr.openjdk.java.net/~acorn/8163808.hs/webrev
>>>
>>> Bug: For classfiles before class file version 51, JVMS did not
>>> support transitive over-ride behavior.
>>> Implementation needed to check this in three places, not just one.
>>> Vtable size calculation is only exact
>>> for later classfile versions.
>>>
>>> Also fixed vtable logging output - since the method name-and-sig
>>> printing was changed to also print
>>> the holder’s class name, we do not need to print the holder’s class
>>> name separately - it was printing twice.
>>>
>>> Testing: linux-x64-slowdebug
>>> rbt hs-nightly-runtime.js
>>> jck vm,lang, api.java.lang
>>> small invocation tests
>>>
>>> thanks,
>>> Karen
>>
>
More information about the hotspot-runtime-dev
mailing list