comparison src/share/vm/graal/graalCompilerToVM.cpp @ 7786:8bbbde9d0a52

extended ResolvedJavaMethod API by getLocalVariableTable
author Matthias Grimmer <grimmer@ssw.jku.at>
date Wed, 13 Feb 2013 13:34:05 +0100
parents 016e23829147
children 5aa05e6f9dee 225c984588ee
comparison
equal deleted inserted replaced
7785:f180d2a1c3a4 7786:8bbbde9d0a52
990 } 990 }
991 991
992 return result; 992 return result;
993 C2V_END 993 C2V_END
994 994
995 C2V_VMENTRY(jobject, getLocalVariableTable, (JNIEnv *, jobject, jobject hotspot_method))
996 ResourceMark rm;
997
998 Method* method = getMethodFromHotSpotMethod(JNIHandles::resolve(hotspot_method));
999 if(!method->has_localvariable_table()) {
1000 return NULL;
1001 }
1002 int localvariable_table_length = method->localvariable_table_length();
1003
1004 objArrayHandle local_array = oopFactory::new_objArray(SystemDictionary::LocalImpl_klass(), localvariable_table_length, CHECK_NULL);
1005 LocalVariableTableElement* table = method->localvariable_table_start();
1006 for (int i = 0; i < localvariable_table_length; i++) {
1007 u2 start_bci = table[i].start_bci;
1008 u4 end_bci = (u4)(start_bci + table[i].length);
1009 u2 nameCPIdx = table[i].name_cp_index;
1010 u2 typeCPIdx = table[i].descriptor_cp_index;
1011 u2 slot = table[i].slot;
1012
1013 char* name = method->constants()->string_at_noresolve(nameCPIdx);
1014 Handle nameHandle = java_lang_String::create_from_str(name, CHECK_NULL);
1015
1016 char* typeInfo = method->constants()->string_at_noresolve(typeCPIdx);
1017 Handle typeHandle = java_lang_String::create_from_str(typeInfo, CHECK_NULL);
1018
1019 Handle holderHandle = GraalCompiler::createHotSpotResolvedObjectType(method, CHECK_0);
1020 Handle local = VMToCompiler::createLocal(nameHandle, typeHandle, (int) start_bci, (int) end_bci, (int) slot, holderHandle, Thread::current());
1021 local_array->obj_at_put(i, local());
1022 }
1023
1024 return JNIHandles::make_local(local_array());
1025 C2V_END
1026
995 1027
996 C2V_VMENTRY(jobject, getFileName, (JNIEnv *, jobject, jobject klass)) 1028 C2V_VMENTRY(jobject, getFileName, (JNIEnv *, jobject, jobject klass))
997 ResourceMark rm; 1029 ResourceMark rm;
998 InstanceKlass* k = (InstanceKlass*) asKlass(HotSpotResolvedObjectType::metaspaceKlass(klass)); 1030 InstanceKlass* k = (InstanceKlass*) asKlass(HotSpotResolvedObjectType::metaspaceKlass(klass));
999 Symbol *s = k->source_file_name(); 1031 Symbol *s = k->source_file_name();
1014 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" 1046 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;"
1015 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;" 1047 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;"
1016 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" 1048 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;"
1017 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;" 1049 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;"
1018 #define KIND "Lcom/oracle/graal/api/meta/Kind;" 1050 #define KIND "Lcom/oracle/graal/api/meta/Kind;"
1051 #define LOCAL "Lcom/oracle/graal/api/meta/Local;"
1019 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;" 1052 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;"
1020 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" 1053 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;"
1021 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" 1054 #define REFLECT_METHOD "Ljava/lang/reflect/Method;"
1022 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" 1055 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;"
1023 #define REFLECT_FIELD "Ljava/lang/reflect/Field;" 1056 #define REFLECT_FIELD "Ljava/lang/reflect/Field;"
1075 {CC"executeCompiledMethod", CC"("METASPACE_METHOD NMETHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, 1108 {CC"executeCompiledMethod", CC"("METASPACE_METHOD NMETHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)},
1076 {CC"executeCompiledMethodVarargs", CC"("METASPACE_METHOD NMETHOD "["OBJECT")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, 1109 {CC"executeCompiledMethodVarargs", CC"("METASPACE_METHOD NMETHOD "["OBJECT")"OBJECT, FN_PTR(executeCompiledMethodVarargs)},
1077 {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)}, 1110 {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)},
1078 {CC"decodePC", CC"(J)"STRING, FN_PTR(decodePC)}, 1111 {CC"decodePC", CC"(J)"STRING, FN_PTR(decodePC)},
1079 {CC"getLineNumberTable", CC"("HS_RESOLVED_METHOD")[J", FN_PTR(getLineNumberTable)}, 1112 {CC"getLineNumberTable", CC"("HS_RESOLVED_METHOD")[J", FN_PTR(getLineNumberTable)},
1113 {CC"getLocalVariableTable", CC"("HS_RESOLVED_METHOD")["LOCAL, FN_PTR(getLocalVariableTable)},
1080 {CC"getFileName", CC"("HS_RESOLVED_JAVA_TYPE")"STRING, FN_PTR(getFileName)}, 1114 {CC"getFileName", CC"("HS_RESOLVED_JAVA_TYPE")"STRING, FN_PTR(getFileName)},
1081 }; 1115 };
1082 1116
1083 int CompilerToVM_methods_count() { 1117 int CompilerToVM_methods_count() {
1084 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); 1118 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod);