[9] RFR(S): 8156760: VM crashes if -XX:-ReduceInitialCardMarks is set

Tobias Hartmann tobias.hartmann at oracle.com
Tue May 24 06:16:36 UTC 2016


Thanks, Vladimir!

I attached the RBT link to the bug report.

Best regards,
Tobias

On 23.05.2016 19:27, Vladimir Kozlov wrote:
> Looks good to me.
> I don't see RBT link in bug report.
> 
> Thanks,
> Vladimir
> 
> On 5/23/16 3:29 AM, Tobias Hartmann wrote:
>> Hi Roland,
>>
>> thanks for the review! Please see comments below.
>>
>> On 23.05.2016 11:34, Roland Westrelin wrote:
>>>
>>> Hi Tobias,
>>>
>>>> Problem 3: C2 crashes with SIGSEGV in
>>>> ArrayCopyNode::prepare_array_copy() because we expect an array
>>>> clone/copy and dereference 'src_type->isa_aryptr()' but actually have
>>>> a non-array Object.clone() [3]. This is because with
>>>> !ReduceInitialCardMarks, ArrayCopyNode::try_clone_instance() does not
>>>> capture the Object.clone() intrinsic because we emit card marking
>>>> code (we bail out in 'ArrayCopyNode::finish_transform()'). We
>>>> continue assuming that the array copy is a non-instance copy. I added
>>>> an additional check to bail out in this case.
>>>
>>> One problem I noticed in this code is that
>>> ArrayCopyNode::try_clone_instance() returns NULL to mean both this is
>>> not a basic clone:
>>>
>>>   if (!is_clonebasic()) {
>>>     return NULL;
>>>   }
>>>
>>> and the clone failed:
>>>
>>>   if (!finish_transform(phase, can_reshape, ctl, mem)) {
>>>     return NULL;
>>>   }
>>>
>>> ArrayCopyNode::finish_transform() would fail with
>>> !ReduceInitialCardMarks. The way I fixed this locally is to return
>>> NodeSentinel when the clone fails so the caller can distinguish not a
>>> clone from a failure. And then ArrayCopyNode::finish_transform():
>>>
>>>   Node* mem = try_clone_instance(phase, can_reshape, count);
>>>   if (mem != NULL) {
>>>     return mem == NodeSentinel ? NULL: mem;
>>>   }
>>>
>>> Does that solve the same problem you're seeing?
>>
>> Yes, that's a better solution and solves the problem as well.
>>
>> Here is the updated webrev:
>> http://cr.openjdk.java.net/~thartmann/8156760/webrev.01/
>>
>> Thanks,
>> Tobias
>>
>>>
>>> Roland.
>>>


More information about the hotspot-dev mailing list