comparison src/share/vm/graal/graalVMToCompiler.cpp @ 6503:ac3a4ea144a6

simplified error checking when loading Graal classes from the C++ code
author Doug Simon <doug.simon@oracle.com>
date Wed, 03 Oct 2012 20:38:40 +0200
parents 75f130f2b30f
children 1ecf984d490c
comparison
equal deleted inserted replaced
6502:5bb92f6ab5a9 6503:ac3a4ea144a6
27 // this is a *global* handle 27 // this is a *global* handle
28 jobject VMToCompiler::_compilerPermObject = NULL; 28 jobject VMToCompiler::_compilerPermObject = NULL;
29 jobject VMToCompiler::_vmToCompilerPermObject = NULL; 29 jobject VMToCompiler::_vmToCompilerPermObject = NULL;
30 jobject VMToCompiler::_vmToCompilerPermKlass = NULL; 30 jobject VMToCompiler::_vmToCompilerPermKlass = NULL;
31 31
32 static klassOop loadClass(Symbol* name) {
33 klassOop klass = SystemDictionary::resolve_or_null(name, SystemDictionary::java_system_loader(), NULL, Thread::current());
34 if (klass == NULL) {
35 tty->print_cr("Could not load class %s", name->as_C_string());
36 vm_abort(false);
37 }
38 return klass;
39 }
40
32 KlassHandle VMToCompiler::vmToCompilerKlass() { 41 KlassHandle VMToCompiler::vmToCompilerKlass() {
33 if (JNIHandles::resolve(_vmToCompilerPermKlass) == NULL) { 42 if (JNIHandles::resolve(_vmToCompilerPermKlass) == NULL) {
34 klassOop result = SystemDictionary::resolve_or_null(vmSymbols::com_oracle_graal_hotspot_bridge_VMToCompiler(), SystemDictionary::java_system_loader(), NULL, Thread::current()); 43 klassOop result = loadClass(vmSymbols::com_oracle_graal_hotspot_bridge_VMToCompiler());
35 check_not_null(result, "Couldn't find class com.oracle.graal.hotspot.bridge.VMToCompiler");
36 _vmToCompilerPermKlass = JNIHandles::make_global(result); 44 _vmToCompilerPermKlass = JNIHandles::make_global(result);
37 } 45 }
38 return KlassHandle((klassOop)JNIHandles::resolve_non_null(_vmToCompilerPermKlass)); 46 return KlassHandle((klassOop)JNIHandles::resolve_non_null(_vmToCompilerPermKlass));
39 } 47 }
40 48
41 Handle VMToCompiler::compilerInstance() { 49 Handle VMToCompiler::compilerInstance() {
42 if (JNIHandles::resolve(_compilerPermObject) == NULL) { 50 if (JNIHandles::resolve(_compilerPermObject) == NULL) {
43 #ifdef AMD64 51 #ifdef AMD64
44 Symbol* compilerImplKlassName = vmSymbols::com_oracle_graal_hotspot_amd64_AMD64HotSpotGraalRuntime(); 52 Symbol* name = vmSymbols::com_oracle_graal_hotspot_amd64_AMD64HotSpotGraalRuntime();
45 #endif 53 #endif
46 KlassHandle compilerImplKlass = SystemDictionary::resolve_or_null(compilerImplKlassName, SystemDictionary::java_system_loader(), NULL, Thread::current()); 54 KlassHandle klass = loadClass(name);
47 check_not_null(compilerImplKlass(), "Couldn't find class com.sun.hotspot.graal.HotSpotGraalRuntime");
48 55
49 JavaValue result(T_OBJECT); 56 JavaValue result(T_OBJECT);
50 JavaCalls::call_static(&result, compilerImplKlass, vmSymbols::initialize_name(), vmSymbols::getInstance_signature(), Thread::current()); 57 JavaCalls::call_static(&result, klass, vmSymbols::initialize_name(), vmSymbols::getInstance_signature(), Thread::current());
51 check_pending_exception("Couldn't initialize HotSpotGraalRuntime"); 58 check_pending_exception("Couldn't initialize HotSpotGraalRuntime");
52 _compilerPermObject = JNIHandles::make_global((oop) result.get_jobject()); 59 _compilerPermObject = JNIHandles::make_global((oop) result.get_jobject());
53 } 60 }
54 return Handle(JNIHandles::resolve_non_null(_compilerPermObject)); 61 return Handle(JNIHandles::resolve_non_null(_compilerPermObject));
55 } 62 }
56 63
57 Handle VMToCompiler::instance() { 64 Handle VMToCompiler::instance() {
58 if (JNIHandles::resolve(_vmToCompilerPermObject) == NULL) { 65 if (JNIHandles::resolve(_vmToCompilerPermObject) == NULL) {
59 KlassHandle compilerKlass = SystemDictionary::resolve_or_null(vmSymbols::com_oracle_graal_hotspot_HotSpotGraalRuntime(), SystemDictionary::java_system_loader(), NULL, Thread::current()); 66 KlassHandle compilerKlass = loadClass(vmSymbols::com_oracle_graal_hotspot_HotSpotGraalRuntime());
60 check_not_null(compilerKlass(), "Couldn't find class com.sun.hotspot.graal.Compiler");
61 67
62 JavaValue result(T_OBJECT); 68 JavaValue result(T_OBJECT);
63 JavaCallArguments args; 69 JavaCallArguments args;
64 args.set_receiver(compilerInstance()); 70 args.set_receiver(compilerInstance());
65 JavaCalls::call_virtual(&result, compilerKlass, vmSymbols::getVMToCompiler_name(), vmSymbols::getVMToCompiler_signature(), &args, Thread::current()); 71 JavaCalls::call_virtual(&result, compilerKlass, vmSymbols::getVMToCompiler_name(), vmSymbols::getVMToCompiler_signature(), &args, Thread::current());
69 return Handle(JNIHandles::resolve_non_null(_vmToCompilerPermObject)); 75 return Handle(JNIHandles::resolve_non_null(_vmToCompilerPermObject));
70 } 76 }
71 77
72 jboolean VMToCompiler::setOption(Handle option) { 78 jboolean VMToCompiler::setOption(Handle option) {
73 assert(!option.is_null(), ""); 79 assert(!option.is_null(), "");
74 KlassHandle compilerKlass = SystemDictionary::resolve_or_null(vmSymbols::com_oracle_graal_hotspot_HotSpotOptions(), SystemDictionary::java_system_loader(), NULL, Thread::current()); 80 KlassHandle compilerKlass = loadClass(vmSymbols::com_oracle_graal_hotspot_HotSpotOptions());
75 check_not_null(compilerKlass(), "Couldn't find class com.sun.hotspot.graal.HotSpotOptions");
76 81
77 Thread* THREAD = Thread::current(); 82 Thread* THREAD = Thread::current();
78 JavaValue result(T_BOOLEAN); 83 JavaValue result(T_BOOLEAN);
79 JavaCalls::call_static(&result, compilerKlass, vmSymbols::setOption_name(), vmSymbols::setOption_signature(), option, THREAD); 84 JavaCalls::call_static(&result, compilerKlass, vmSymbols::setOption_name(), vmSymbols::setOption_signature(), option, THREAD);
80 check_pending_exception("Error while calling setOption"); 85 check_pending_exception("Error while calling setOption");
81 return result.get_jboolean(); 86 return result.get_jboolean();
82 } 87 }
83 88
84 void VMToCompiler::setDefaultOptions() { 89 void VMToCompiler::setDefaultOptions() {
85 KlassHandle compilerKlass = SystemDictionary::resolve_or_null(vmSymbols::com_oracle_graal_hotspot_HotSpotOptions(), SystemDictionary::java_system_loader(), NULL, Thread::current()); 90 KlassHandle compilerKlass = loadClass(vmSymbols::com_oracle_graal_hotspot_HotSpotOptions());
86 check_not_null(compilerKlass(), "Couldn't find class com.sun.hotspot.graal.HotSpotOptions");
87 91
88 Thread* THREAD = Thread::current(); 92 Thread* THREAD = Thread::current();
89 JavaValue result(T_VOID); 93 JavaValue result(T_VOID);
90 JavaCalls::call_static(&result, compilerKlass, vmSymbols::setDefaultOptions_name(), vmSymbols::void_method_signature(), THREAD); 94 JavaCalls::call_static(&result, compilerKlass, vmSymbols::setDefaultOptions_name(), vmSymbols::void_method_signature(), THREAD);
91 check_pending_exception("Error while calling setDefaultOptions"); 95 check_pending_exception("Error while calling setDefaultOptions");
253 } 257 }
254 258
255 oop VMToCompiler::createConstantObject(Handle object, TRAPS) { 259 oop VMToCompiler::createConstantObject(Handle object, TRAPS) {
256 JavaValue result(T_OBJECT); 260 JavaValue result(T_OBJECT);
257 JavaCallArguments args; 261 JavaCallArguments args;
258 KlassHandle klass = SystemDictionary::resolve_or_null(vmSymbols::com_oracle_graal_api_meta_Constant(), SystemDictionary::java_system_loader(), NULL, Thread::current()); 262 KlassHandle klass = loadClass(vmSymbols::com_oracle_graal_api_meta_Constant());
259 JavaCalls::call_static(&result, klass(), vmSymbols::forObject_name(), vmSymbols::createConstantObject_signature(), object, THREAD); 263 JavaCalls::call_static(&result, klass(), vmSymbols::forObject_name(), vmSymbols::createConstantObject_signature(), object, THREAD);
260 check_pending_exception("Error while calling Constant.forObject"); 264 check_pending_exception("Error while calling Constant.forObject");
261 return (oop) result.get_jobject(); 265 return (oop) result.get_jobject();
262 } 266 }
263 267