# HG changeset patch # User Doug Simon # Date 1334308536 -7200 # Node ID cce31bc56c005a40f1fc43b8b579eb6dfc2c62dd # Parent 8c7e786886d0ff47fb8deb39069047b424349eae made HotSpotResolvedMethodImpl.toStackTraceElement() call into native code to get an object containing source file info diff -r 8c7e786886d0 -r cce31bc56c00 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Thu Apr 12 20:40:25 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Fri Apr 13 11:15:36 2012 +0200 @@ -109,6 +109,8 @@ String disassembleJava(HotSpotMethodResolved method); + StackTraceElement RiMethod_toStackTraceElement(HotSpotMethodResolved method, int bci); + Object executeCompiledMethod(HotSpotCompiledMethod method, Object arg1, Object arg2, Object arg3); int RiMethod_vtableEntryOffset(HotSpotMethodResolved method); diff -r 8c7e786886d0 -r cce31bc56c00 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Thu Apr 12 20:40:25 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Fri Apr 13 11:15:36 2012 +0200 @@ -157,6 +157,9 @@ public native String disassembleJava(HotSpotMethodResolved method); @Override + public native StackTraceElement RiMethod_toStackTraceElement(HotSpotMethodResolved method, int bci); + + @Override public native Object executeCompiledMethod(HotSpotCompiledMethod method, Object arg1, Object arg2, Object arg3); @Override diff -r 8c7e786886d0 -r cce31bc56c00 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java Thu Apr 12 20:40:25 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java Fri Apr 13 11:15:36 2012 +0200 @@ -155,7 +155,7 @@ @Override public StackTraceElement toStackTraceElement(int bci) { - return CiUtil.toStackTraceElement(this, bci); + return compiler.getVMEntries().RiMethod_toStackTraceElement(this, bci); } @Override diff -r 8c7e786886d0 -r cce31bc56c00 graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java --- a/graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java Thu Apr 12 20:40:25 2012 +0200 +++ b/graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java Fri Apr 13 11:15:36 2012 +0200 @@ -410,14 +410,6 @@ } /** - * Gets a stack trace element for a given method and bytecode index. - */ - public static StackTraceElement toStackTraceElement(RiMethod method, @SuppressWarnings("unused") int bci) { - // TODO (thomaswue): Look if we can use bci to get the line number. - return new StackTraceElement(CiUtil.toJavaName(method.holder()), method.name(), null, -1); - } - - /** * Converts a Java source-language class name into the internal form. * * @param className the class name diff -r 8c7e786886d0 -r cce31bc56c00 src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Thu Apr 12 20:40:25 2012 +0200 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Fri Apr 13 11:15:36 2012 +0200 @@ -953,6 +953,19 @@ return JNIHandles::make_local(result()); } +// public StackTraceElement RiMethod_toStackTraceElement(HotSpotMethodResolved method, int bci); +JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_bridge_CompilerToVMImpl_RiMethod_1toStackTraceElement(JNIEnv *env, jobject, jobject hotspot_method, int bci) { + TRACE_graal_3("CompilerToVM::RiMethod_toStackTraceElement"); + + VM_ENTRY_MARK; + ResourceMark rm; + HandleMark hm; + + methodHandle method = getMethodFromHotSpotMethod(hotspot_method); + oop element = java_lang_StackTraceElement::create(method, bci, CHECK_NULL); + return JNIHandles::make_local(element); +} + // public Object executeCompiledMethod(HotSpotCompiledMethod method, Object arg1, Object arg2, Object arg3); JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_bridge_CompilerToVMImpl_executeCompiledMethod(JNIEnv *env, jobject, jobject method, jobject arg1, jobject arg2, jobject arg3) { TRACE_graal_3("CompilerToVM::executeCompiledMethod"); @@ -1035,6 +1048,7 @@ #define STRING "Ljava/lang/String;" #define OBJECT "Ljava/lang/Object;" #define CLASS "Ljava/lang/Class;" +#define STACK_TRACE_ELEMENT "Ljava/lang/StackTraceElement;" JNINativeMethod CompilerToVM_methods[] = { {CC"RiMethod_code", CC"("RESOLVED_METHOD")[B", FN_PTR(RiMethod_1code)}, @@ -1070,6 +1084,7 @@ {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(installStub)}, {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)}, {CC"disassembleJava", CC"("RESOLVED_METHOD")"STRING, FN_PTR(disassembleJava)}, + {CC"RiMethod_toStackTraceElement", CC"("RESOLVED_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(RiMethod_1toStackTraceElement)}, {CC"executeCompiledMethod", CC"("HS_COMP_METHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, {CC"RiMethod_vtableEntryOffset", CC"("RESOLVED_METHOD")I", FN_PTR(RiMethod_vtableEntryOffset)}, {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)},