# HG changeset patch # User Doug Simon # Date 1404848301 -7200 # Node ID 78ddecd6255f11bfde63f7ce1bd550320d1eb9dd # Parent 84a14e69fa8b4dd6fd7a7f88cde2d462df71e00f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception diff -r 84a14e69fa8b -r 78ddecd6255f graal/com.oracle.graal.hotspot.sourcegen/src/com/oracle/graal/hotspot/sourcegen/GenGraalRuntimeInlineHpp.java --- a/graal/com.oracle.graal.hotspot.sourcegen/src/com/oracle/graal/hotspot/sourcegen/GenGraalRuntimeInlineHpp.java Tue Jul 08 21:35:46 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sourcegen/src/com/oracle/graal/hotspot/sourcegen/GenGraalRuntimeInlineHpp.java Tue Jul 08 21:38:21 2014 +0200 @@ -166,7 +166,7 @@ out.printf(" if (strncmp(name, \"PrintFlags\", %d) == 0) {%n", len); out.println(" if (value[0] == '+') {"); out.println(" if (check_only) {"); - out.println(" TempNewSymbol name = SymbolTable::new_symbol(\"Lcom/oracle/graal/hotspot/HotSpotOptions;\", THREAD);"); + out.println(" TempNewSymbol name = SymbolTable::new_symbol(\"Lcom/oracle/graal/hotspot/HotSpotOptions;\", CHECK_(true));"); out.println(" hotSpotOptionsClass = SystemDictionary::resolve_or_fail(name, true, CHECK_(true));"); out.println(" }"); out.println(" set_option_helper(hotSpotOptionsClass, name, name_len, Handle(), '?', Handle(), 0L);"); diff -r 84a14e69fa8b -r 78ddecd6255f src/share/vm/graal/graalCompiler.cpp --- a/src/share/vm/graal/graalCompiler.cpp Tue Jul 08 21:35:46 2014 +0200 +++ b/src/share/vm/graal/graalCompiler.cpp Tue Jul 08 21:38:21 2014 +0200 @@ -133,8 +133,7 @@ args.push_int(entry_bci); args.push_long((jlong) (address) task); args.push_int(task->compile_id()); - JavaCalls::call_static(&result, SystemDictionary::CompilationTask_klass(), vmSymbols::compileMetaspaceMethod_name(), vmSymbols::compileMetaspaceMethod_signature(), &args, THREAD); - GUARANTEE_NO_PENDING_EXCEPTION("Error while calling compile_method"); + JavaCalls::call_static(&result, SystemDictionary::CompilationTask_klass(), vmSymbols::compileMetaspaceMethod_name(), vmSymbols::compileMetaspaceMethod_signature(), &args, CHECK_ABORT); _methodsCompiled++; } @@ -159,13 +158,12 @@ CompileTheWorld = false; JavaThread* THREAD = JavaThread::current(); - TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotGraalRuntime", THREAD); + TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotGraalRuntime", CHECK_ABORT); KlassHandle klass = GraalRuntime::load_required_class(name); - TempNewSymbol compileTheWorld = SymbolTable::new_symbol("compileTheWorld", THREAD); + TempNewSymbol compileTheWorld = SymbolTable::new_symbol("compileTheWorld", CHECK_ABORT); JavaValue result(T_VOID); JavaCallArguments args; args.push_oop(GraalRuntime::get_HotSpotGraalRuntime()); - JavaCalls::call_special(&result, klass, compileTheWorld, vmSymbols::void_method_signature(), &args, THREAD); - GUARANTEE_NO_PENDING_EXCEPTION("Error while calling compile_the_world"); + JavaCalls::call_special(&result, klass, compileTheWorld, vmSymbols::void_method_signature(), &args, CHECK_ABORT); } #endif diff -r 84a14e69fa8b -r 78ddecd6255f src/share/vm/graal/graalRuntime.cpp --- a/src/share/vm/graal/graalRuntime.cpp Tue Jul 08 21:35:46 2014 +0200 +++ b/src/share/vm/graal/graalRuntime.cpp Tue Jul 08 21:38:21 2014 +0200 @@ -62,7 +62,9 @@ env->RegisterNatives(c2vmClass, CompilerToVM_methods, CompilerToVM_methods_count()); } - GUARANTEE_NO_PENDING_EXCEPTION("Could not register natives"); + if (HAS_PENDING_EXCEPTION) { + abort_on_pending_exception(PENDING_EXCEPTION, "Could not register natives"); + } } BufferBlob* GraalRuntime::initialize_buffer_blob() { @@ -652,27 +654,25 @@ // private static TruffleRuntime Truffle.createRuntime() JVM_ENTRY(jobject, JVM_CreateTruffleRuntime(JNIEnv *env, jclass c)) - TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime", THREAD); + TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime", CHECK_NULL); KlassHandle klass = GraalRuntime::resolve_or_fail(name, CHECK_NULL); - TempNewSymbol makeInstance = SymbolTable::new_symbol("makeInstance", THREAD); - TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime;", THREAD); + TempNewSymbol makeInstance = SymbolTable::new_symbol("makeInstance", CHECK_NULL); + TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime;", CHECK_NULL); JavaValue result(T_OBJECT); - JavaCalls::call_static(&result, klass, makeInstance, sig, THREAD); - GUARANTEE_NO_PENDING_EXCEPTION("Couldn't initialize HotSpotTruffleRuntime"); + JavaCalls::call_static(&result, klass, makeInstance, sig, CHECK_NULL); return JNIHandles::make_local((oop) result.get_jobject()); JVM_END Handle GraalRuntime::get_HotSpotGraalRuntime() { if (JNIHandles::resolve(_HotSpotGraalRuntime_instance) == NULL) { Thread* THREAD = Thread::current(); - TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotGraalRuntime", THREAD); + TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotGraalRuntime", CHECK_ABORT_(Handle())); KlassHandle klass = load_required_class(name); - TempNewSymbol runtime = SymbolTable::new_symbol("runtime", THREAD); - TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/graal/hotspot/HotSpotGraalRuntime;", THREAD); + TempNewSymbol runtime = SymbolTable::new_symbol("runtime", CHECK_ABORT_(Handle())); + TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/graal/hotspot/HotSpotGraalRuntime;", CHECK_ABORT_(Handle())); JavaValue result(T_OBJECT); - JavaCalls::call_static(&result, klass, runtime, sig, THREAD); - GUARANTEE_NO_PENDING_EXCEPTION("Couldn't initialize HotSpotGraalRuntime"); + JavaCalls::call_static(&result, klass, runtime, sig, CHECK_ABORT_(Handle())); _HotSpotGraalRuntime_instance = JNIHandles::make_global((oop) result.get_jobject()); } return Handle(JNIHandles::resolve_non_null(_HotSpotGraalRuntime_instance)); @@ -698,9 +698,8 @@ // We now load and initialize HotSpotOptions which in turn // causes argument parsing to be redone with better error messages. CLEAR_PENDING_EXCEPTION; - TempNewSymbol name = SymbolTable::new_symbol("Lcom/oracle/graal/hotspot/HotSpotOptions;", THREAD); - instanceKlassHandle hotSpotOptionsClass = resolve_or_fail(name, THREAD); - GUARANTEE_NO_PENDING_EXCEPTION("Error in check_arguments"); + TempNewSymbol name = SymbolTable::new_symbol("Lcom/oracle/graal/hotspot/HotSpotOptions;", CHECK_ABORT_(JNI_ERR)); + instanceKlassHandle hotSpotOptionsClass = resolve_or_fail(name, CHECK_ABORT_(JNI_ERR)); parse_arguments(hotSpotOptionsClass, THREAD); assert(HAS_PENDING_EXCEPTION, "must be"); @@ -884,8 +883,8 @@ } } - TempNewSymbol setOption = SymbolTable::new_symbol("setOption", THREAD); - TempNewSymbol sig = SymbolTable::new_symbol("(Ljava/lang/String;Lcom/oracle/graal/options/OptionValue;CLjava/lang/String;J)V", THREAD); + TempNewSymbol setOption = SymbolTable::new_symbol("setOption", CHECK); + TempNewSymbol sig = SymbolTable::new_symbol("(Ljava/lang/String;Lcom/oracle/graal/options/OptionValue;CLjava/lang/String;J)V", CHECK); JavaValue result(T_VOID); JavaCallArguments args; args.push_oop(name_handle()); @@ -897,7 +896,7 @@ } Handle GraalRuntime::get_OptionValue(const char* declaringClass, const char* fieldName, const char* fieldSig, TRAPS) { - TempNewSymbol name = SymbolTable::new_symbol(declaringClass, THREAD); + TempNewSymbol name = SymbolTable::new_symbol(declaringClass, CHECK_NH); Klass* klass = resolve_or_fail(name, CHECK_NH); // The class has been loaded so the field and signature should already be in the symbol @@ -920,7 +919,7 @@ } Handle GraalRuntime::create_Service(const char* name, TRAPS) { - TempNewSymbol kname = SymbolTable::new_symbol(name, THREAD); + TempNewSymbol kname = SymbolTable::new_symbol(name, CHECK_NH); Klass* k = resolve_or_fail(kname, CHECK_NH); instanceKlassHandle klass(THREAD, k); klass->initialize(CHECK_NH); @@ -935,13 +934,12 @@ if (_HotSpotGraalRuntime_instance != NULL) { JavaThread* THREAD = JavaThread::current(); HandleMark hm(THREAD); - TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotGraalRuntime", THREAD); + TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotGraalRuntime", CHECK_ABORT); KlassHandle klass = load_required_class(name); JavaValue result(T_VOID); JavaCallArguments args; args.push_oop(get_HotSpotGraalRuntime()); - JavaCalls::call_special(&result, klass, vmSymbols::shutdown_method_name(), vmSymbols::void_method_signature(), &args, THREAD); - GUARANTEE_NO_PENDING_EXCEPTION("Error while calling shutdown"); + JavaCalls::call_special(&result, klass, vmSymbols::shutdown_method_name(), vmSymbols::void_method_signature(), &args, CHECK_ABORT); JNIHandles::destroy_global(_HotSpotGraalRuntime_instance); _HotSpotGraalRuntime_instance = NULL; @@ -962,17 +960,12 @@ oop GraalRuntime::compute_graal_class_loader(TRAPS) { assert(UseGraalClassLoader, "must be"); - TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/loader/Factory", THREAD); - KlassHandle klass = SystemDictionary::resolve_or_null(name, THREAD); - if (klass.is_null()) { - tty->print_cr("Could not load class %s", name->as_C_string()); - vm_abort(false); - } + TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/loader/Factory", CHECK_NULL); + KlassHandle klass = SystemDictionary::resolve_or_null(name, CHECK_NULL); - TempNewSymbol getClassLoader = SymbolTable::new_symbol("newClassLoader", THREAD); + TempNewSymbol getClassLoader = SymbolTable::new_symbol("newClassLoader", CHECK_NULL); JavaValue result(T_OBJECT); - JavaCalls::call_static(&result, klass, getClassLoader, vmSymbols::void_classloader_signature(), THREAD); - GUARANTEE_NO_PENDING_EXCEPTION("Couldn't initialize HotSpotGraalRuntime"); + JavaCalls::call_static(&result, klass, getClassLoader, vmSymbols::void_classloader_signature(), CHECK_NULL); return (oop) result.get_jobject(); } diff -r 84a14e69fa8b -r 78ddecd6255f src/share/vm/graal/graalRuntime.hpp --- a/src/share/vm/graal/graalRuntime.hpp Tue Jul 08 21:35:46 2014 +0200 +++ b/src/share/vm/graal/graalRuntime.hpp Tue Jul 08 21:38:21 2014 +0200 @@ -139,11 +139,23 @@ */ static void call_printStackTrace(Handle exception, Thread* thread); -#define GUARANTEE_NO_PENDING_EXCEPTION(error_message) do { \ - if (HAS_PENDING_EXCEPTION) { \ - GraalRuntime::abort_on_pending_exception(PENDING_EXCEPTION, error_message); \ - } \ - } while (0); +#define CHECK_ABORT THREAD); \ + if (HAS_PENDING_EXCEPTION) { \ + char buf[256]; \ + jio_snprintf(buf, 256, "Uncaught exception at %s:%d", __FILE__, __LINE__); \ + GraalRuntime::abort_on_pending_exception(PENDING_EXCEPTION, buf); \ + return; \ + } \ + (void)(0 + +#define CHECK_ABORT_(result) THREAD); \ + if (HAS_PENDING_EXCEPTION) { \ + char buf[256]; \ + jio_snprintf(buf, 256, "Uncaught exception at %s:%d", __FILE__, __LINE__); \ + GraalRuntime::abort_on_pending_exception(PENDING_EXCEPTION, buf); \ + return result; \ + } \ + (void)(0 /** * Same as SystemDictionary::resolve_or_null but uses the Graal loader.