Review Request (M) 7187554: JSR 292: JVMTI PopFrame needs to handle appendix arguments

Coleen Phillimore coleen.phillimore at oracle.com
Tue Aug 6 14:52:54 PDT 2013


Serguei,

This looks good.  It's a lot cleaner than I thought it'd be.  Do more of 
these nsk.mlvm tests pass with this change?

Thanks!
Coleen

On 07/30/2013 01:00 PM, serguei.spitsyn at oracle.com wrote:
> The updated webrev:
> http://cr.openjdk.java.net/~sspitsyn/webrevs/2013/hotspot/7187554-JVMTI-JSR292.3/ 
>
>
> Thanks,
> Serguei
>
> On 7/29/13 10:11 PM, David Holmes wrote:
>> Hi Serguei,
>>
>> I'm fine with restoring to what was in the first webrev.
>>
>> Further trimming of the JVMTI code is something the embedded folk 
>> could look at. It may not be worthwhile.
>>
>> Thanks,
>> David
>>
>> On 30/07/2013 3:05 PM, serguei.spitsyn at oracle.com wrote:
>>> On 7/29/13 8:22 PM, David Holmes wrote:
>>>> On 30/07/2013 10:34 AM, serguei.spitsyn at oracle.com wrote:
>>>>> Christian and David,
>>>>>
>>>>> Thank you for the quick review and comments!
>>>>>
>>>>> This is a new version of webrev:
>>>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2013/hotspot/7187554-JVMTI-JSR292.2 
>>>>>
>>>>>
>>>>
>>>> Sorry. You need that guard after all - at least you do if you continue
>>>> to use it in interpreterRuntime - otherwise member_name_arg_or_null
>>>> will not exist:
>>>>
>>>>   __ call_VM(rax, CAST_FROM_FN_PTR(address,
>>>> InterpreterRuntime::member_name_arg_or_null), rax, rdx, rsi);
>>>>
>>> You are right, nice catch again.
>>> Probably, it was the reason, I did not remove the #if/#endif in the
>>> first place. :)
>>>
>>>> I'm a little surprised that the assembly code does not have that whole
>>>> section guarded with INCLUDE_JVMTI - perhaps it should?
>>> It should.
>>> But it can be non-trivial because of other dependencies like the above.
>>> To make it right, both _remove_activation_preserving_args_entry and
>>> generate_earlyret_entry_for
>>> must be isolated with #if INCLUDE_JVMTI.
>>> Then more files have to be involved in this chain of changes:
>>>    interpreter/templateInterpreter.hpp
>>>    interpreter/templateInterpreter.hpp
>>>    memory/universe.hpp
>>>    memory/universe.cpp
>>>    code/codeCache.hpp
>>>    code/codeCache.cpp
>>>    . . . etc ..
>>>
>>> Please, note, that the HOTSWAP macro is used in many places as well.
>>> I'm not sure we still need it, so that another decision is needed 
>>> for it.
>>>
>>> So, it seems that this kind of clean up is going far beyond my fix.
>>> My suggestion is to restore the "#if INCLUDE_JVMTI" in 3
>>> platform-dependent files as it was in the webrev v1.
>>> I'm a little bit reluctant to open another clean-up bug for this issue
>>> but maybe it is needed.
>>> Please, let me know if you are comfortable with this solution.
>>>
>>> Thanks,
>>> Serguei
>>>
>>>>
>>>> Run this through a JPRT test build for productEmb to check that the
>>>> minimal VM builds ok.
>>>>
>>>> David
>>>> -----
>>>>
>>>>>
>>>>> Thanks,
>>>>> Serguei
>>>>>
>>>>>
>>>>> On 7/28/13 9:11 PM, David Holmes wrote:
>>>>>> Hi Serguei,
>>>>>>
>>>>>> On 26/07/2013 10:14 AM, serguei.spitsyn at oracle.com wrote:
>>>>>>>
>>>>>>> Please, review the fix for:
>>>>>>>    bug: http://bugs.sun.com/view_bug.do?bug_id=7187554
>>>>>>>    jbs: https://jbs.oracle.com/bugs/browse/JDK-7187554
>>>>>>>
>>>>>>> Open webrev:
>>>>>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2013/hotspot/7187554-JVMTI-JSR292.1 
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> In the templateInterpreter code why did you put this guard on 
>>>>>> your new
>>>>>> code (from x86_32 version):
>>>>>>
>>>>>> 1923 #if INCLUDE_JVMTI
>>>>>>
>>>>>> when the whole chunk of code this is situated in is specifically for
>>>>>> JVMTI support
>>>>>>
>>>>>> 1824   //
>>>>>> 1825   // JVMTI PopFrame support
>>>>>> 1826   //
>>>>>>
>>>>>> ???
>>>>>>
>>>>>> David
>>>>>> -----
>>>>>>
>>>>>>>
>>>>>>> Summary:
>>>>>>>    Restore the appendix argument of a polymorphic intrinsic call
>>>>>>>    needed for a invokestatic re-execution after JVMTI PopFrame().
>>>>>>>
>>>>>>> Description
>>>>>>>    When JVMTI's PopFrame removes a frame that was called via a call
>>>>>>> site
>>>>>>> that
>>>>>>>    takes an appendix and that call site is reexecuted the 
>>>>>>> appendix is
>>>>>>> not on
>>>>>>>    the stack anymore because it got removed by the adapter.
>>>>>>>    This fix is to detect such a case and push the appendix on the
>>>>>>> stack
>>>>>>> again before reexecution.
>>>>>>>
>>>>>>>
>>>>>>> Testing:
>>>>>>>    UTE tests - in progress: vm.mlvm.testlist, nsk.jvmti.testlist,
>>>>>>> nsk.jdi.testlist
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Serguei
>>>>>
>>>
>



More information about the hotspot-dev mailing list