RFR: 8042235: redefining method used by multiple MethodHandles crashes VM
Kevin Walls
kevin.walls at oracle.com
Wed Jan 14 18:27:29 UTC 2015
Hi all,
So an updated webrev in the review for 8042235:
http://cr.openjdk.java.net/~kevinw/8042235/webrev.01
On the assert I was hitting: I don't think that was really part of this
change: the constant pool cache in 7 can have these "secondary" entries,
and they can get created with the vfinal flag set, but the _f2 field for
a reference left null, which the existing assert in cpCacheOop.cpp:619
would detect. I let it assert now only if !is_secondary_entry().
Thanks
Kevin
On 12/01/2015 22:22, KEVIN WALLS wrote:
> Hi Serguei -
>
> Thanks oops yes I seem to have mishandled that part, I'll change it.
>
> Unfortunately I think I still have the wierd constantpoolcache crash I
> mentioned in the email just now, gotta keep looking at that and then
> I'll update the webrev including this finalizer setup call.
>
> Thanks!
> Kevin
>
>
> On 12/01/2015 19:50, serguei.spitsyn at oracle.com wrote:
>> Hi Kevin,
>>
>> src/share/vm/prims/jvm.cpp
>>
>> 645 new_obj =
>> instanceKlass::register_finalizer(instanceOop(new_obj_oop), CHECK_NULL);
>>
>> The above looks incorrect.
>> The new_obj() must be used in stead of the new_obj_oop.
>>
>> Thanks,
>> Serguei
>>
>>
>> On 12/17/14 7:48 AM, KEVIN WALLS wrote:
>>> Hi,
>>>
>>> This is a request for review of a backport to 7u of 8042235. There
>>> are a few changes from the original, hence the request here.
>>>
>>> On JDK7 this is not a crash, but we run the wrong method, i.e.
>>> invocation through a MethodHandle invokes the old version of the
>>> method, if it has been redefined.
>>>
>>> The test is different also: in jdk8 we have the ASM library, and can
>>> visit methods and bytecodes. Here in 7, I wrote a non-bytecode
>>> aware byte replacer method, and replaced some literal bytecode
>>> sequence with another. As we're crafting a method that we will
>>> rewrite, we can do something that avoids use of the constant pool
>>> (which we haven't actually understood in this trivial rewriter), so
>>> we rewrite some simple arithmetic, and from the result of the method
>>> it's obvious whether we are running the correct code.
>>>
>>> Coleen: thanks for your earlier hints on oop / obj_field vs.
>>> address_field.
>>>
>>> bug
>>> https://bugs.openjdk.java.net/browse/JDK-8042235
>>>
>>> webrev
>>> http://cr.openjdk.java.net/~kevinw/8042235/webrev.00/
>>>
>>> Thanks
>>> Kevin
>>
>
More information about the hotspot-runtime-dev
mailing list