RFR(s): 8076185: Provide SafeFetchX implementation for zero

Severin Gehwolf sgehwolf at redhat.com
Tue Mar 31 08:52:48 UTC 2015


Hi Thomas,

On Tue, 2015-03-31 at 10:38 +0200, Thomas Stüfe wrote:
> Hi David.
> 
> 
> I am fine with that, thanks! 
> 
> 
> But Severin should give his ok, too.

You have my OK.

> We also should accept that my SafeFetch implementation will be slower
> than the standard one using inline assembly, because setjmp() does a
> lot of stores. As far as I can see now, we do not use SafeFetch
> extensivly anywhere, so this should be ok, but something to keep in
> mind. 

This is expected. The only use of SafeFetch I'm aware is in
src/share/vm/runtime/objectMonitor.cpp and the error handler. Speaking
of which: 

$ java -XX:+UnlockDiagnosticVMOptions -Xmx100M -XX:ErrorHandlerTest=14 -XX:+TestSafeFetchInErrorHandler -version

Does not yet work as expected. But that's a separate issue.

> So far, I only tested this on Linux x64. Because of the build error
> after 8074345, I was not able to test a product build of zero, only a
> slowdebug. I ran a number of JTReg tests with it and got a number of
> errors, but I got the same errors without my patch, so I assume the
> errors stem from the slowdebug VM just being too slow. 

JDK-8076181 should have fixed this. FWIW, I've built this with your
patch and JDK-8076181 using a product build and I've seen no issues.

Cheers,
Severin

> On Tue, Mar 31, 2015 at 3:45 AM, David Holmes
> <david.holmes at oracle.com> wrote:
>         Hi Thomas,
>         
>         If you are happy with Severin's review I can add my Review to
>         the shared part (Zero part looks okay too) and sponsor it.
>         
>         David
>         
>         
>         On 28/03/2015 4:00 AM, Thomas Stüfe wrote:
>                 Hi all,
>                 
>                 Please review this change which provides a real
>                 SafeFetch implementation
>                 on zero.
>                 
>                 webrev:
>                 http://cr.openjdk.java.net/~stuefe/webrevs/8076185/webrev.01/webrev/
>                 bug:
>                  https://bugs.openjdk.java.net/browse/JDK-8076185
>                 
>                 It works like this:
>                 
>                 Before a load is attempted from a potentially unsafe
>                 address, we set up a
>                 jump buffer with sigsetjmp(). In the signal handler,
>                 for SIGSEGV and SIGBUS,
>                 we test whether there is a jump buffer set and if yes,
>                 take this as an
>                 indication
>                 that the crash was an attempted SafeFetch. In this
>                 case we jump back via
>                 longjmp().
>                 
>                 Coding is a bit more difficult because we need to be
>                 threadsafe. We keep
>                 the jump
>                 buffer on the thread stack - this is ok, because that
>                 stack never gets
>                 unwinded
>                   - either we crash, in which case signal handler
>                 stack frames are built up
>                 below
>                 us, or we don't crash, in which case we never leave
>                 the SafeFetch function.
>                 In
>                 both cases, we never loose the jump buffer.
>                 
>                 To communicate the jump buffer location to the signal
>                 handler, TLS is used.
>                 I
>                 use POSIX tls, because that always works and is not
>                 dependend on VM
>                 infrastructure.
>                 
>                 ---
>                 
>                 I built and tested this on Linux x64 zero (Ubuntu
>                 14.4). It works and the
>                 initialization tests for SafeFetch in the stub routine
>                 initialization now
>                 work for
>                 zero too.
>                 
>                 Note that I do not have a BSD system right now, so I
>                 cannot check whether
>                 this
>                 change builds and works for BSD. But the change only
>                 requires POSIX Apis, so
>                 BSD should probably be ok.
>                 
>                 Someone from the zero team should definitly check and
>                 test this for other
>                 zero
>                 platforms, but the chances are good that this just
>                 works.
>                 
>                 Thanks and Kind Regards,
>                 
>                 Thomas Stuefe
>                 
> 
> 





More information about the hotspot-dev mailing list