On 1/06/2019 4:15 pm, [email protected] wrote:
On 5/31/19 22:43, David Holmes wrote:
On 1/06/2019 3:09 pm, [email protected] wrote:
Hi David,

Thank you for looking at it!


On 5/31/19 9:47 PM, David Holmes wrote:
Hi Serguei,

Sorry but I'm rather confused - what does it mean to do a "popframe" on the current thread?

I was confused too.
We have several JVMTI tests that calls PopFrame in event callbacks.
  For instance (see also: popframe006, popframe007, popframe008):
    test/hotspot/jtreg/vmTestbase/nsk/jvmti/PopFrame/popframe010

This test gets a breakpoint event and in the callback:
  - clears the breakpoint
  - enables single stepping
  - calls the PopFrame

This seems to be working.

Okay that makes sense. I hadn't thought about callbacks executing in the current thread and causing it to back itself up.

Not sure, I understand you what you mean by "causing it to back itself" up.
The PopFrame will pop the top-most java frame, not the callback frame.
The two top-most java frames are marked for deoptimization and the pending_popframe bit is set.

That's basically what I meant. The current frame (call it m()) hits the breakpoint and the thread executes the callback which pops the current frame winding the thread back to the point where m() is called.

David



The whole point of popframe is to suspend a target thread when it is executing a specific method, and then call popframe to "back up" the thread to the point where it will call that method again when resumed. How does that work with the current thread?

Probably, the most interesting question is:
  How will the target thread continue its execution?

As I understand, it will be single stepping.

I would hope so in the scenario you describe. But presumably the callback could just clear the breakpoint and do a popframe and so execution would continue as before?

After the event callback returns the execution is continued in the interp-only mode.
The actual work is done by the remove_activation_preserving_args.

Thanks,
Serguei


Cheers,
David
------

In such a case, the thread is executed in the interp-only mode.

Thanks,
Serguei


Thanks,
David

On 1/06/2019 1:59 pm, [email protected] wrote:
Hi All,

Please comment or.and review the following CSR.

The CSR:
https://bugs.openjdk.java.net/browse/JDK-8225142

The bug:
https://bugs.openjdk.java.net/browse/JDK-8205126

Updated JVMTI spec:
http://cr.openjdk.java.net/~sspitsyn/webrevs/2019/8205126-jvmti-spec-popframe.1/jvmti.html


Specdiff:
http://cr.openjdk.java.net/~sspitsyn/webrevs/2019/8205126-jvmti-spec-popframe.1/jvmti-specdiff/


Summary:
   The JVMTI PopFrame() spec does not match the implementation.
   It says the  specified thread can not be the current thread.
   The fix aligns:
    - spec with implementaion
    - PopFrame spec with ForceEarlyReturn spec

Thanks,
Serguei


Reply via email to