Review request: 8000459: assert(java_lang_String::is_instance(entry)) failure with various mlvm tests

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Thu Oct 11 10:46:50 PDT 2012


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