Review request: 8000459: assert(java_lang_String::is_instance(entry)) failure with various mlvm tests
Jiangli Zhou
jiangli.zhou at oracle.com
Thu Oct 11 10:47:20 PDT 2012
Thanks, Serguei!
Jiangli
On 10/11/2012 10:46 AM, serguei.spitsyn at oracle.com wrote:
> Looks good.
>
> Thanks,
> Serguei
>
> On 10/11/12 8:59 AM, Jiangli Zhou wrote:
>> Hi Coleen,
>>
>> Here is the webrev that removes the assert from the latest hsx25
>> repository with PermGen removal. The assert doesn't add any real
>> value. I also fixed a small typo.
>>
>> http://cr.openjdk.java.net/~jiangli/8000459/webrev.01/
>>
>> The previous webrev was based on hsx24, which is pre-PerGen removal.
>> I should have included that detail in the first review request.
>>
>> Thanks,
>>
>> Jiangli
>>
>> On 10/10/2012 10:50 AM, Coleen Phillimore wrote:
>>>
>>> This change looks good. Thank you for fixing it.
>>> Coleen
>>>
>>> On 10/10/2012 12:44 PM, serguei.spitsyn at oracle.com wrote:
>>>> Hi Jiangli,
>>>>
>>>>
>>>> On 10/10/12 9:37 AM, Jiangli Zhou wrote:
>>>>> Hi Serguei,
>>>>>
>>>>> Thanks for the review! Please see comments below.
>>>>>
>>>>> On 10/09/2012 06:05 PM, serguei.spitsyn at oracle.com wrote:
>>>>>> Hi Jiangli,
>>>>>>
>>>>>> I'm not very familiar with the pseudo strings, and so, just have
>>>>>> a question:
>>>>>>
>>>>>> *src/share/vm/prims/jvmtiTagMap.cpp*
>>>>>> 2927 entry = pool->resolved_string_at(i);
>>>>>> 2928 assert(java_lang_String::is_instance(entry) ||
>>>>>> 2929 pool->is_pseudo_string_at(i), "must be
>>>>>> string");
>>>>>> I have a little of doubt the above is correct.
>>>>>>
>>>>>> What value the "entry" will have in a case of pseudo string cp
>>>>>> entry?
>>>>>> Just want to understand what constant pool reference will be
>>>>>> reported.
>>>>>> Do you see all related failing tests passed?
>>>>>>
>>>>>> Would something like the following be more accurate ?
>>>>>> entry = pool->is_pseudo_string_at(i) ?
>>>>>> pool->pseudo_string_at(i, cp_to_object_index(i)) :
>>>>>> pool->resolved_string_at(i);
>>>>>> assert(java_lang_String::is_instance(entry));
>>>>>>
>>>>>> In this case, a reference from CP to string is reported
>>>>>> regardless it is pseudo string or not.
>>>>>
>>>>> Those are very good questions. Here is an example of the specific
>>>>> case with a generated JSR292 java.lang.invoke.LambdaForm$MH class.
>>>>> The follow are two constant pool entries of the class. Entry 16 is
>>>>> a "sun/misc/Unsafe" String, which could be patched using a
>>>>> sun.misc.Unsafe klass oop.
>>>>>
>>>>> ...
>>>>> (0016) tag=Utf8 "sun/misc/Unsafe"
>>>>> (0017) tag=Class "sun/misc/Unsafe"
>>>>> ...
>>>>>
>>>>> I discussed with John Rose about different ways to fix the
>>>>> assertion issue. The code you have above uses pseudo_string_at()
>>>>> to access the 'entry', which is similar to one of the version we
>>>>> discussed. The current change was chosen as it's the simplest
>>>>> solution.
>>>>
>>>> I'm Ok with the simplest solution.
>>>>
>>>> Thank you for the details!
>>>> -Serguei
>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Jiangli
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Serguei
>>>>>>
>>>>>> On 10/9/12 4:26 PM, Jiangli Zhou wrote:
>>>>>>> Please review following fix for 8000459:
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~jiangli/8000459/webrev/
>>>>>>>
>>>>>>> With JSR292, a constant pool String entry could be patched to a
>>>>>>> non-string oop. The assert in
>>>>>>> VM_HeapWalkOperation::iterate_over_class() needs to be adjusted
>>>>>>> to reflect that.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Jiangli
>>>>>>
>>>>>
>>>>
>>
>
More information about the hotspot-dev
mailing list