RFR: 8332894: ubsan: vmError.cpp:2090:26: runtime error: division by zero
Matthias Baesken
mbaesken at openjdk.org
Mon May 27 06:45:04 UTC 2024
On Sat, 25 May 2024 15:12:10 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:
>> When running with ubsan enabled on Linux x86_64, I get in the HS :tier1 tests this error :
>>
>> runtime/ErrorHandling/TestDwarf_dontCheckDecoder.jtr
>>
>> /jdk/src/hotspot/share/utilities/vmError.cpp:2090:26: runtime error: division by zero
>> #0 0x7f16bc531f32 in crash_with_sigfpe /jdk/src/hotspot/share/utilities/vmError.cpp:2090
>> #1 0x7f16bc531f32 in VMError::controlled_crash(int) /jdk/src/hotspot/share/utilities/vmError.cpp:2137
>> #2 0x7f16bea2d8fd in JNI_CreateJavaVM_inner /jdk/src/hotspot/share/prims/jni.cpp:3621
>> #3 0x7f16bea2d8fd in JNI_CreateJavaVM /jdk/src/hotspot/share/prims/jni.cpp:3672
>> #4 0x7f16c5dbd0e5 in InitializeJVM /jdk/src/java.base/share/native/libjli/java.c:1550
>> #5 0x7f16c5dbd0e5 in JavaMain /jdk/src/java.base/share/native/libjli/java.c:491
>> #6 0x7f16c5dc6748 in ThreadJavaMain /jdk/src/java.base/unix/native/libjli/java_md.c:642
>> #7 0x7f16c5d756e9 in start_thread (/lib64/libpthread.so.0+0xa6e9) (BuildId: 2f8d3c2d0f4d7888c2598d2ff6356537f5708a73)
>> #8 0x7f16c531550e in clone (/lib64/libc.so.6+0x11850e) (BuildId: f732026552f6adff988b338e92d466bc81a01c37)
>>
>> Reason is that we do a float division by zero to get a signal . This is desired by us so not really an error but ubsan cannot know this.
>> So add an attribute to this function that it has undefined behavior.
>> See https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html (division by zero) . "Floating point division by zero. This is undefined per the C and C++ standards"
>
> src/hotspot/share/utilities/vmError.cpp line 2093:
>
>> 2091: static void ALWAYSINLINE crash_with_sigfpe() {
>> 2092:
>> 2093: // generate a native synchronous SIGFPE where possible;
>
> Maybe simpler would be to change the definition to only use the divide-by-zero
> approach for _WIN32 and always use the currently conditional fallback to
> pthread_kill on non-_WIN32. Especially in light of the fact that the
> divide-by-zero approach doesn't work on some platforms.
>
> I also wonder if the comment about OSX incorrectly implementing raise is
> correct? Maybe that's been fixed? Or maybe it's not a bug, but a BSD-ism?
I do not know about the OSX specific issues, maybe someone else can comment?
Regarding the handling on UNIX, Thomas commented and I think the coding should better stay.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19394#discussion_r1615546824
More information about the hotspot-dev
mailing list