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