Mercurial > hg > truffle
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 |