Mercurial > hg > truffle
diff src/share/vm/jvmci/jvmciRuntime.cpp @ 21563:4f63449b4422
revived post option parsing handler notification
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 29 May 2015 00:06:22 +0200 |
parents | 47bebae7454f |
children | 2270a708ef23 |
line wrap: on
line diff
--- a/src/share/vm/jvmci/jvmciRuntime.cpp Thu May 28 21:58:33 2015 +0200 +++ b/src/share/vm/jvmci/jvmciRuntime.cpp Fri May 29 00:06:22 2015 +0200 @@ -626,18 +626,13 @@ SystemDictionary::initialize_wk_klasses_through(SystemDictionary::LAST_JVMCI_WKID, scan, CHECK); JVM_END -// boolean com.oracle.jvmci.hotspot.HotSpotOptions.isCITimingEnabled() -JVM_ENTRY(jboolean, JVM_IsCITimingEnabled(JNIEnv *env, jclass c)) - return CITime || CITimeEach; -JVM_END - // private static JVMCIRuntime JVMCI.initializeRuntime() JVM_ENTRY(jobject, JVM_GetJVMCIRuntime(JNIEnv *env, jclass c)) JVMCIRuntime::initialize_HotSpotJVMCIRuntime(); return JVMCIRuntime::get_HotSpotJVMCIRuntime_jobject(); JVM_END -// private static String[] Services.getServiceImpls(Class service) +// private static Service[] Services.getServiceImpls(String serviceClass) JVM_ENTRY(jobject, JVM_GetJVMCIServiceImpls(JNIEnv *env, jclass c, jclass serviceClass)) HandleMark hm; ResourceMark rm; @@ -1046,6 +1041,8 @@ if (closure.is_aborted()) { vm_abort(false); } + + notify_options_set(THREAD); } OptionValue* printFlags = options->get(PRINT_FLAGS_ARG); if (printFlags != NULL && printFlags->boolean_value) { @@ -1053,6 +1050,22 @@ } } +void JVMCIRuntime::notify_options_set(TRAPS) { + HandleMark hm(THREAD); + TempNewSymbol optionsParsedName = SymbolTable::new_symbol("com/oracle/jvmci/runtime/OptionsParsed", CHECK_ABORT); + KlassHandle optionsParsedClass = load_required_class(optionsParsedName); + objArrayHandle impls = get_service_impls(optionsParsedClass, THREAD); + int implsLen = impls->length(); + if (implsLen != 0) { + for (int i = 0; i < implsLen; i++) { + JavaValue result(T_VOID); + JavaCallArguments args; + args.push_oop(impls->obj_at(i)); + JavaCalls::call_interface(&result, optionsParsedClass, vmSymbols::run_method_name(), vmSymbols::void_method_signature(), &args, CHECK_ABORT); + } + } +} + void JVMCIRuntime::print_flags_helper(TRAPS) { // TODO(gd) write this in C++? HandleMark hm(THREAD); @@ -1223,7 +1236,7 @@ }; -Handle JVMCIRuntime::get_service_impls(KlassHandle serviceKlass, TRAPS) { +objArrayHandle JVMCIRuntime::get_service_impls(KlassHandle serviceKlass, TRAPS) { const char* home = Arguments::get_java_home(); const char* serviceName = serviceKlass->external_name(); size_t path_len = strlen(home) + strlen("/lib/jvmci/services/") + strlen(serviceName) + 1; @@ -1234,11 +1247,11 @@ parse_lines(path, &closure, true); // TODO(gd) cache parsing results? GrowableArray<char*>* implNames = closure.implNames(); - objArrayOop servicesOop = oopFactory::new_objArray(serviceKlass(), implNames->length(), CHECK_NH); + objArrayOop servicesOop = oopFactory::new_objArray(serviceKlass(), implNames->length(), CHECK_(objArrayHandle())); objArrayHandle services(THREAD, servicesOop); for (int i = 0; i < implNames->length(); ++i) { char* implName = implNames->at(i); - Handle service = create_Service(implName, CHECK_NH); + Handle service = create_Service(implName, CHECK_(objArrayHandle())); services->obj_at_put(i, service()); } return services;