RFR(S): 8153892: Handle unsafe access error directly in signal handler instead of going through a stub

Mikael Vidstedt mikael.vidstedt at oracle.com
Mon Apr 11 17:44:32 UTC 2016


Yes, I asked myself the same thing when I started moving things around. 
It may be more appropriate to put it in sharedRuntime instead. Does 
anybody else have an opinion on where it should go?

Cheers,
Mikael

On 4/11/2016 2:03 AM, Thomas Stüfe wrote:
> Hi Mikael,
>
> just a question, should the new stubless functions not live someplace 
> else instead of in stubRoutines_<cpu> ? After all, they are not stub 
> routines anymore.
>
> Kind Regards, Thomas
>
> On Sat, Apr 9, 2016 at 12:33 AM, Mikael Vidstedt 
> <mikael.vidstedt at oracle.com <mailto:mikael.vidstedt at oracle.com>> wrote:
>
>
>     Please review:
>
>     Bug: https://bugs.openjdk.java.net/browse/JDK-8153892
>     Webrev:
>     http://cr.openjdk.java.net/~mikael/webrevs/8153892/webrev.01/hotspot/webrev/
>     <http://cr.openjdk.java.net/%7Emikael/webrevs/8153892/webrev.01/hotspot/webrev/>
>
>     * Note: this is patch 2 in a set of 3 all aiming to clean up and
>     unify the unsafe memory getters/setters, along with the handling
>     of unsafe access errors. The other two issues are:
>
>     https://bugs.openjdk.java.net/browse/JDK-8153890 - Handle unsafe
>     access error as an asynchronous exception
>     https://bugs.openjdk.java.net/browse/JDK-8150921 - Update Unsafe
>     getters/setters to use double-register variants
>
>
>     * Summary (copied from the bug description)
>
>
>     In certain cases, such as accessing a region of a memory mapped
>     file which has been truncated on unix-style operating systems, a
>     SIGBUS signal will be raised and the VM will process it in the
>     signal handler.
>
>     How the signal is processed differs depending on the operating
>     system and/or CPU architecture, with two major alternatives:
>
>     * "stubless"
>
>     Do the necessary thread state updates directly in the signal
>     handler, and modify the context so that the signal handler returns
>     to the place where the execution should continue
>
>     * Using a stub
>
>     Update the context so that when the signal handler returns the
>     thread will continue execution in a generated stub, which in turn
>     will call some native code in the VM to update the thread state
>     and figure out where execution should continue. The stub will then
>     jump to that new place.
>
>
>     It should be noted that the work of updating the thread state is
>     very small - it's setting a flag or two in the thread structure,
>     and figures out where the next instruction starts. It should also
>     be noted that the generated stubs today are broken, because they
>     do not preserve all the live registers over the call into the VM.
>     There are two ways to address this:
>
>     * Preserve all the necessary registers
>
>     This would mean implementing, in macro assembly, the necessary
>     logic for preserving all the live registers, including, but not
>     limited to, floating point registers, flag registers, etc. It
>     quickly becomes obvious that this platform specific and error prone.
>
>     * Leverage the fact that the operating system already does this as
>     part of the signal handling
>
>     Do the necessary work in the signal handler instead, removing the
>     need for the stub alltogether
>
>     As mentioned, on some platforms the latter model is already in
>     use. It is dramatically easier and all platforms should be updated
>     to do it the same way.
>
>
>     * Testing
>
>     Just as mentioned in the RFR for JDK-8153890, a new test was
>     developed to test this code path:
>
>     http://cr.openjdk.java.net/~mikael/webrevs/8150921/MappedTruncated.java
>     <http://cr.openjdk.java.net/%7Emikael/webrevs/8150921/MappedTruncated.java>
>
>     In fact, it was when running this test I found the register
>     preservation issue. JPRT also passes. Much like JDK-8153890 I
>     wanted to get some feedback on this before running additional tests.
>
>
>     Cheers,
>     Mikael
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/attachments/20160411/ebcb0605/attachment.html>


More information about the ppc-aix-port-dev mailing list