RFR(S) 8205965: SIGSEGV on write to NativeCallStack::EMPTY_STACK

Zhengyu Gu zgu at redhat.com
Fri Jun 29 13:04:20 UTC 2018


Hi,

clang-6.0 and above, can deduce that NativeCallStack::EMPTY_STACK is all 
zeros, and since it is a static constant, it places the object in the 
read-only BSS data section.

To workaround static initialization ordering issue, NMT has to ensure 
EMPTY_STACK is initialized before turns itself on, which can happen in 
the middle of initialization of other static objects. In this case, it 
causes SIGSEGV while try to write to the read-only memory.

The solution is to make EMPTY_STACk private and non-constant, but hands 
out constant version.

Bug: https://bugs.openjdk.java.net/browse/JDK-8205965
Webrev: http://cr.openjdk.java.net/~zgu/8205965/webrev.00/

Test:

   hotspot_nmt on Linux 64 (fastdebug and release)

Thanks,

-Zhengyu


More information about the hotspot-runtime-dev mailing list