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

David Holmes dholmes at openjdk.org
Wed Oct 12 00:41:05 UTC 2022


On Tue, 11 Oct 2022 16:02:41 GMT, Andrew Haley <aph at openjdk.org> wrote:

> A bug in GCC causes shared libraries linked with -ffast-math to disable denormal arithmetic. This breaks Java's floating-point semantics.
> 
> The bug is https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55522
> 
> One solution is to save and restore the floating-point control word around System.loadLibrary(). This isn't perfect, because some shared library might load another shared library at runtime, but it's a lot better than what we do now. 
> 
> However, this fix is not complete. `dlopen()` is called from many places in the JDK. I guess the best thing to do is find and wrap them all. I'd like to hear people's opinions.

This appears to be a 10 year old bug in gcc. Have we ever had any issues reported because of this? Inserting a workaround now seems rather late. Any FP-using native code can potentially break Java's FP semantics if it messes with the FPU control world (ref the old Borland compilers).

Shouldn't any workaround only be needed for the internals of `System.loadLibrary` as other JDK usages of `dlopen` should know what they are opening and that they are libraries that don't have this problem?

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

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



More information about the build-dev mailing list