8190415: [JVMCI] JVMCIRuntime::adjust_comp_level must not swallow ThreadDeath
Reviewed-by: never, thartmann
--- a/src/hotspot/.mx.jvmci/mx_jvmci.py Mon Nov 06 11:11:44 2017 +0100
+++ b/src/hotspot/.mx.jvmci/mx_jvmci.py Mon Nov 06 09:44:42 2017 +0100
@@ -42,11 +42,6 @@
JVMCI_VERSION = 9
-"""
-Top level directory of the JDK source workspace.
-"""
-_jdkSourceRoot = dirname(_suite.dir)
-
_JVMCI_JDK_TAG = 'jvmci'
_minVersion = mx.VersionSpec('1.9')
@@ -145,7 +140,7 @@
return True
def _makehelp():
- return subprocess.check_output([mx.gmake_cmd(), 'help'], cwd=_jdkSourceRoot)
+ return subprocess.check_output([mx.gmake_cmd(), 'help'], cwd=_get_jdk_dir())
def _runmake(args):
"""run the JDK make process
@@ -155,12 +150,12 @@
jdkBuildDir = _get_jdk_build_dir()
if not exists(jdkBuildDir):
- # JDK9 must be bootstrapped with a JDK8
- compliance = mx.JavaCompliance('8')
- jdk8 = mx.get_jdk(compliance.exactMatch, versionDescription=compliance.value)
+ # JDK10 must be bootstrapped with a JDK9
+ compliance = mx.JavaCompliance('9')
+ jdk9 = mx.get_jdk(compliance.exactMatch, versionDescription=compliance.value)
cmd = ['sh', 'configure', '--with-debug-level=' + _vm.debugLevel, '--with-native-debug-symbols=external', '--disable-precompiled-headers', '--with-jvm-features=graal',
- '--with-jvm-variants=' + _vm.jvmVariant, '--disable-warnings-as-errors', '--with-boot-jdk=' + jdk8.home, '--with-jvm-features=graal']
- mx.run(cmd, cwd=_jdkSourceRoot)
+ '--with-jvm-variants=' + _vm.jvmVariant, '--disable-warnings-as-errors', '--with-boot-jdk=' + jdk9.home, '--with-jvm-features=graal']
+ mx.run(cmd, cwd=_get_jdk_dir())
cmd = [mx.gmake_cmd(), 'CONF=' + _vm.debugLevel]
if mx.get_opts().verbose:
cmd.append('LOG=debug')
@@ -170,11 +165,11 @@
if not mx.get_opts().verbose:
mx.log('--------------- make execution ----------------------')
- mx.log('Working directory: ' + _jdkSourceRoot)
+ mx.log('Working directory: ' + _get_jdk_dir())
mx.log('Command line: ' + ' '.join(cmd))
mx.log('-----------------------------------------------------')
- mx.run(cmd, cwd=_jdkSourceRoot)
+ mx.run(cmd, cwd=_get_jdk_dir())
def _runmultimake(args):
"""run the JDK make process for one or more configurations"""
--- a/src/hotspot/share/jvmci/jvmciRuntime.cpp Mon Nov 06 11:11:44 2017 +0100
+++ b/src/hotspot/share/jvmci/jvmciRuntime.cpp Mon Nov 06 09:44:42 2017 +0100
@@ -825,24 +825,33 @@
if (compiler != NULL && compiler->is_bootstrapping()) {
return level;
}
- if (!is_HotSpotJVMCIRuntime_initialized() || !_comp_level_adjustment) {
+ if (!is_HotSpotJVMCIRuntime_initialized() || _comp_level_adjustment == JVMCIRuntime::none) {
// JVMCI cannot participate in compilation scheduling until
// JVMCI is initialized and indicates it wants to participate.
return level;
}
#define CHECK_RETURN THREAD); \
-if (HAS_PENDING_EXCEPTION) { \
- Handle exception(THREAD, PENDING_EXCEPTION); \
- CLEAR_PENDING_EXCEPTION; \
-\
- java_lang_Throwable::java_printStackTrace(exception, THREAD); \
if (HAS_PENDING_EXCEPTION) { \
+ Handle exception(THREAD, PENDING_EXCEPTION); \
CLEAR_PENDING_EXCEPTION; \
+ \
+ if (exception->is_a(SystemDictionary::ThreadDeath_klass())) { \
+ /* In the special case of ThreadDeath, we need to reset the */ \
+ /* pending async exception so that it is propagated. */ \
+ thread->set_pending_async_exception(exception()); \
+ return level; \
+ } \
+ tty->print("Uncaught exception while adjusting compilation level: "); \
+ java_lang_Throwable::print(exception(), tty); \
+ tty->cr(); \
+ java_lang_Throwable::print_stack_trace(exception, tty); \
+ if (HAS_PENDING_EXCEPTION) { \
+ CLEAR_PENDING_EXCEPTION; \
+ } \
+ return level; \
} \
- return level; \
-} \
-(void)(0
+ (void)(0
Thread* THREAD = thread;