RFR: 8230797: ARM32-softfp: assertion in InterpreterRuntime::resolve_ldc

christoph.goettschkes at microdoc.com christoph.goettschkes at microdoc.com
Fri Dec 6 11:10:05 UTC 2019


Hi,

please review the following change, which fixes an assertion in the 
template interpreter for ARM32-softfp. Without this fix, a debug VM on 
that platform does not even start up and crashes while loading the 
runtime.

http://cr.openjdk.java.net/~cgo/8230797/webrev.00/
https://bugs.openjdk.java.net/browse/JDK-8230797

The problem is, that for ARM32-softfp, the template interpreter calls into 
the runtime to load double constant using the ldc bytecode [1]. After the 
interpreter loaded the constants, the assert blocks does some sanity 
checks on the cached constants. But if the double constant is the first to 
constant to be loaded, the cache is not yet initialized and the check 
results in a SIGSEGV.

I guarded the usage of "ConstantPool::cp_to_object_index" by another 
check, which tests if there are any resolved references and if therefore 
the cache has already been initialized.

ARM32-softp VM starts successfully again. No regression found using the 
hotspot tier1 JTreg test with a fastdebug VM on ARM32-softfp.

Thanks,
Christoph

[1]
https://hg.openjdk.java.net/jdk/jdk/file/c6d7bb2146aa/src/hotspot/cpu/arm/templateTable_arm.cpp#l475



More information about the hotspot-runtime-dev mailing list