Mercurial > hg > truffle
comparison src/share/vm/graal/graalCompilerToVM.cpp @ 13305:a63d65b682a8
moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
author | twisti |
---|---|
date | Wed, 11 Dec 2013 20:42:50 -0800 |
parents | 903fd774dd61 |
children | dfb780080923 |
comparison
equal
deleted
inserted
replaced
13304:a1dae6b6d6d2 | 13305:a63d65b682a8 |
---|---|
131 env->SetByteArrayRegion(result, 0, code_size, reconstituted_code); | 131 env->SetByteArrayRegion(result, 0, code_size, reconstituted_code); |
132 | 132 |
133 return result; | 133 return result; |
134 C2V_END | 134 C2V_END |
135 | 135 |
136 C2V_VMENTRY(jobjectArray, initializeExceptionHandlers, (JNIEnv *, jobject, jlong metaspace_method, jobjectArray java_handlers)) | 136 C2V_VMENTRY(jlong, exceptionTableStart, (JNIEnv *, jobject, jlong metaspace_method)) |
137 ResourceMark rm; | 137 ResourceMark rm; |
138 methodHandle method = asMethod(metaspace_method); | 138 methodHandle method = asMethod(metaspace_method); |
139 int handler_count = method->exception_table_length(); | 139 assert(method->exception_table_length() != 0, "should be handled in Java code"); |
140 objArrayHandle array = (objArrayOop) JNIHandles::resolve(java_handlers); | 140 return (jlong) (address) method->exception_table_start(); |
141 assert(array->length() == handler_count, "wrong length"); | |
142 ExceptionTableElement* handlers = handler_count == 0 ? NULL : method->exception_table_start(); | |
143 | |
144 for (int i = 0; i < handler_count; i++) { | |
145 ExceptionTableElement* handler = handlers + i; | |
146 Handle entry = array->obj_at(i); | |
147 assert(!entry.is_null(), "entry should not be null"); | |
148 ExceptionHandler::set_startBCI(entry, handler->start_pc); | |
149 ExceptionHandler::set_endBCI(entry, handler->end_pc); | |
150 ExceptionHandler::set_handlerBCI(entry, handler->handler_pc); | |
151 int catch_class_index = handler->catch_type_index; | |
152 ExceptionHandler::set_catchTypeCPI(entry, catch_class_index); | |
153 | |
154 if (catch_class_index == 0) { | |
155 ExceptionHandler::set_catchType(entry, NULL); | |
156 } else { | |
157 ConstantPool* cp = InstanceKlass::cast(method->method_holder())->constants(); | |
158 KlassHandle loading_klass = method->method_holder(); | |
159 Handle catch_class = GraalCompiler::get_JavaType(cp, catch_class_index, loading_klass, CHECK_NULL); | |
160 if (catch_class->klass() == HotSpotResolvedObjectType::klass() && java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaClass(catch_class)) == SystemDictionary::Throwable_klass()) { | |
161 ExceptionHandler::set_catchType(entry, NULL); | |
162 ExceptionHandler::set_catchTypeCPI(entry, 0); | |
163 } else { | |
164 ExceptionHandler::set_catchType(entry, catch_class()); | |
165 } | |
166 } | |
167 array->obj_at_put(i, entry()); | |
168 } | |
169 | |
170 return (jobjectArray) JNIHandles::make_local(array()); | |
171 C2V_END | 141 C2V_END |
172 | 142 |
173 C2V_VMENTRY(jint, hasBalancedMonitors, (JNIEnv *, jobject, jlong metaspace_method)) | 143 C2V_VMENTRY(jint, hasBalancedMonitors, (JNIEnv *, jobject, jlong metaspace_method)) |
174 | 144 |
175 // Analyze the method to see if monitors are used properly. | 145 // Analyze the method to see if monitors are used properly. |
912 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" | 882 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" |
913 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;" | 883 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;" |
914 #define KIND "Lcom/oracle/graal/api/meta/Kind;" | 884 #define KIND "Lcom/oracle/graal/api/meta/Kind;" |
915 #define LOCAL "Lcom/oracle/graal/api/meta/Local;" | 885 #define LOCAL "Lcom/oracle/graal/api/meta/Local;" |
916 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;" | 886 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;" |
917 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" | |
918 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" | 887 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" |
919 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" | 888 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" |
920 #define STRING "Ljava/lang/String;" | 889 #define STRING "Ljava/lang/String;" |
921 #define OBJECT "Ljava/lang/Object;" | 890 #define OBJECT "Ljava/lang/Object;" |
922 #define CLASS "Ljava/lang/Class;" | 891 #define CLASS "Ljava/lang/Class;" |
931 #define METASPACE_METHOD "J" | 900 #define METASPACE_METHOD "J" |
932 #define METASPACE_CONSTANT_POOL "J" | 901 #define METASPACE_CONSTANT_POOL "J" |
933 | 902 |
934 JNINativeMethod CompilerToVM_methods[] = { | 903 JNINativeMethod CompilerToVM_methods[] = { |
935 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)}, | 904 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)}, |
936 {CC"initializeExceptionHandlers", CC"("METASPACE_METHOD EXCEPTION_HANDLERS")"EXCEPTION_HANDLERS, FN_PTR(initializeExceptionHandlers)}, | 905 {CC"exceptionTableStart", CC"("METASPACE_METHOD")J", FN_PTR(exceptionTableStart)}, |
937 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, | 906 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, |
938 {CC"getUniqueConcreteMethod", CC"("METASPACE_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getUniqueConcreteMethod)}, | 907 {CC"getUniqueConcreteMethod", CC"("METASPACE_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getUniqueConcreteMethod)}, |
939 {CC"getUniqueImplementor", CC"("HS_RESOLVED_TYPE")"RESOLVED_TYPE, FN_PTR(getUniqueImplementor)}, | 908 {CC"getUniqueImplementor", CC"("HS_RESOLVED_TYPE")"RESOLVED_TYPE, FN_PTR(getUniqueImplementor)}, |
940 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, | 909 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, |
941 {CC"initializeMethod", CC"("METASPACE_METHOD HS_RESOLVED_METHOD")V", FN_PTR(initializeMethod)}, | 910 {CC"initializeMethod", CC"("METASPACE_METHOD HS_RESOLVED_METHOD")V", FN_PTR(initializeMethod)}, |