RFR: 8295159: DSO created with -ffast-math breaks Java floating-point arithmetic [v7]

Maurizio Cimadamore mcimadamore at openjdk.org
Wed Oct 12 20:39:06 UTC 2022


On Wed, 12 Oct 2022 17:43:47 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:

> Isn't it an illustration of a more general problem we have with native code where it can mess with FP environment at any time?
> 
> We already have similar problems with MXCSR register and provide verification logic (part of `-Xcheck:jni`) to catch modifications and support conditional restoration of MXCSR register on x86_64. x86_32 validates x87 control word when `-Xcheck:jni` is enabled.
> 
> Should we do something similar here instead?

I tend to agree. As others have observed, a `dlopen` call (or something with same nefarious behavior) could also happen inside JNI code. But I think the interesting (and perhaps surprising) part here is that, from the perspective of the developer, no native code has executed - only a library has been loaded (via `System::loadLibrary`).

Note also that this specific problem is triggered by `dlopen` itself, because certain libraries might have some "bad" (from the perspective of JVM) initialization code. But since we're talking about JNI, JNI_OnLoad is another potential source of problem, as its native code is executed as soon as the library is loaded (and that, too, can leave the JVM in a bad state).

-------------

PR: https://git.openjdk.org/jdk/pull/10661


More information about the hotspot-dev mailing list