diff src/share/vm/graal/graalRuntime.cpp @ 15916:6aa352b260f4

removed use of ServiceLoader in runtime initialization
author Doug Simon <doug.simon@oracle.com>
date Mon, 26 May 2014 18:55:06 +0200
parents a9810ed7cad2
children 66a9286203a2
line wrap: on
line diff
--- a/src/share/vm/graal/graalRuntime.cpp	Mon May 26 17:44:19 2014 +0200
+++ b/src/share/vm/graal/graalRuntime.cpp	Mon May 26 18:55:06 2014 +0200
@@ -641,6 +641,13 @@
   return VMToCompiler::get_HotSpotGraalRuntime_jobject();
 JVM_END
 
+// private static String[] Graal.getServiceImpls(Class service)
+JVM_ENTRY(jobject, JVM_GetGraalServiceImpls(JNIEnv *env, jclass c, jclass serviceClass))
+  HandleMark hm;
+  KlassHandle serviceKlass(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(serviceClass)));
+  return JNIHandles::make_local(THREAD, GraalRuntime::get_service_impls(serviceKlass, THREAD)());
+JVM_END
+
 // private static TruffleRuntime Truffle.createRuntime()
 JVM_ENTRY(jobject, JVM_CreateTruffleRuntime(JNIEnv *env, jclass c))
   return JNIHandles::make_local(VMToCompiler::create_HotSpotTruffleRuntime()());
@@ -813,4 +820,16 @@
   return ret;
 }
 
-#include "HotSpotOptions.inline.hpp"
+Handle GraalRuntime::create_Service(const char* name, TRAPS) {
+  TempNewSymbol kname = SymbolTable::new_symbol(name, THREAD);
+  Klass* k = SystemDictionary::resolve_or_fail(kname, true, CHECK_NH);
+  instanceKlassHandle klass(THREAD, k);
+  klass->initialize(CHECK_NH);
+  klass->check_valid_for_instantiation(true, CHECK_NH);
+  JavaValue result(T_VOID);
+  instanceHandle service = klass->allocate_instance_handle(CHECK_NH);
+  JavaCalls::call_special(&result, service, klass, vmSymbols::object_initializer_name(), vmSymbols::void_method_signature(), THREAD);
+  return service;
+}
+
+#include "graalRuntime.inline.hpp"