Mercurial > hg > graal-jvmci-8
comparison src/share/vm/graal/graalCompilerToVM.cpp @ 4297:874fcc2ddd9d
Use HotSpot disassmblers for native code and bytecode
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Wed, 18 Jan 2012 20:08:08 -0800 |
parents | e0a4668c57a2 |
children | b4b16e4e043f dc6f6e2f1a00 |
comparison
equal
deleted
inserted
replaced
4295:1e3ecb08767d | 4297:874fcc2ddd9d |
---|---|
972 ciEnv env(&arena); | 972 ciEnv env(&arena); |
973 CodeInstaller installer(targetMethodHandle, id); | 973 CodeInstaller installer(targetMethodHandle, id); |
974 return id; | 974 return id; |
975 } | 975 } |
976 | 976 |
977 // public String disassembleNative(byte[] code, long address); | |
978 JNIEXPORT jobject JNICALL Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_disassembleNative(JNIEnv *jniEnv, jobject, jbyteArray code, jlong start_address) { | |
979 TRACE_graal_3("CompilerToVM::disassembleNative"); | |
980 VM_ENTRY_MARK; | |
981 ResourceMark rm; | |
982 HandleMark hm; | |
983 | |
984 stringStream(st); | |
985 arrayOop code_oop = (arrayOop) JNIHandles::resolve(code); | |
986 int len = code_oop->length(); | |
987 address begin = (address) code_oop->base(T_BYTE); | |
988 address end = begin + len; | |
989 Disassembler::decode(begin, end, &st); | |
990 | |
991 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL); | |
992 return JNIHandles::make_local(result()); | |
993 } | |
994 | |
995 // public String disassembleJava(HotSpotMethodResolved method); | |
996 JNIEXPORT jobject JNICALL Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_disassembleJava(JNIEnv *env, jobject, jobject hotspot_method) { | |
997 TRACE_graal_3("CompilerToVM::disassembleJava"); | |
998 | |
999 // Important: The bytecode printing functions are all NOT PRODUCT code, so this method returns an empty string for a product VM build. | |
1000 | |
1001 VM_ENTRY_MARK; | |
1002 ResourceMark rm; | |
1003 HandleMark hm; | |
1004 | |
1005 methodHandle method = getMethodFromHotSpotMethod(hotspot_method); | |
1006 // Note: cannot use resource-allocated stringStream because print_code_on has its own ResourceMark. | |
1007 bufferedStream(st); | |
1008 method->print_codes_on(&st); | |
1009 | |
1010 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL); | |
1011 return JNIHandles::make_local(result()); | |
1012 } | |
977 | 1013 |
978 | 1014 |
979 #define CC (char*) /*cast a literal from (const char*)*/ | 1015 #define CC (char*) /*cast a literal from (const char*)*/ |
980 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_##f)) | 1016 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_##f)) |
981 | 1017 |
1032 {CC"getPrimitiveArrayType", CC"("CI_KIND")"TYPE, FN_PTR(getPrimitiveArrayType)}, | 1068 {CC"getPrimitiveArrayType", CC"("CI_KIND")"TYPE, FN_PTR(getPrimitiveArrayType)}, |
1033 {CC"getMaxCallTargetOffset", CC"("CI_RUNTIME_CALL")J", FN_PTR(getMaxCallTargetOffset)}, | 1069 {CC"getMaxCallTargetOffset", CC"("CI_RUNTIME_CALL")J", FN_PTR(getMaxCallTargetOffset)}, |
1034 {CC"getType", CC"("CLASS")"TYPE, FN_PTR(getType)}, | 1070 {CC"getType", CC"("CLASS")"TYPE, FN_PTR(getType)}, |
1035 {CC"getConfiguration", CC"()"CONFIG, FN_PTR(getConfiguration)}, | 1071 {CC"getConfiguration", CC"()"CONFIG, FN_PTR(getConfiguration)}, |
1036 {CC"installMethod", CC"("TARGET_METHOD"Z)"HS_COMP_METHOD, FN_PTR(installMethod)}, | 1072 {CC"installMethod", CC"("TARGET_METHOD"Z)"HS_COMP_METHOD, FN_PTR(installMethod)}, |
1037 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(installStub)} | 1073 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(installStub)}, |
1074 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)}, | |
1075 {CC"disassembleJava", CC"("RESOLVED_METHOD")"STRING, FN_PTR(disassembleJava)}, | |
1038 }; | 1076 }; |
1039 | 1077 |
1040 int CompilerToVM_methods_count() { | 1078 int CompilerToVM_methods_count() { |
1041 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); | 1079 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); |
1042 } | 1080 } |