[vmkit-commits] [vmkit] r200658 - getJavaCaller takes into account inlining.

Gael Thomas gael.thomas at lip6.fr
Sun Feb 2 14:26:13 PST 2014


Author: gthomas
Date: Sun Feb  2 16:26:13 2014
New Revision: 200658

URL: http://llvm.org/viewvc/llvm-project?rev=200658&view=rev
Log:
getJavaCaller takes into account inlining.

Modified:
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3thread.cc

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=200658&r1=200657&r2=200658&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sun Feb  2 16:26:13 2014
@@ -636,20 +636,7 @@ jclass JNICALL JVM_GetCallerClass(JNIEnv
 	if(depth != -1)
 		J3::internalError("depth should be -1 while it is %d", depth);
 
-	depth = 3;
-	J3Method* caller = 0;
-	J3* vm = J3Thread::get()->vm();
-	vmkit::Safepoint* sf = 0;
-	vmkit::StackWalker walker;
-
-	while(!caller && walker.next()) {
-		vmkit::Safepoint* sf = vm->getSafepoint(walker.ip());
-
-		if(sf) {
-			if(!--depth)
-				caller = (J3Method*)sf->unit()->getSymbol(sf->functionName());
-		}
-	}
+	J3Method* caller = J3Thread::get()->getJavaCaller(2);
 
 	if(!caller)
 		J3::internalError("unable to find caller class, what should I do?");

Modified: vmkit/branches/mcjit/lib/j3/vm/j3thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3thread.cc?rev=200658&r1=200657&r2=200658&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3thread.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3thread.cc Sun Feb  2 16:26:13 2014
@@ -39,8 +39,12 @@ J3Method* J3Thread::getJavaCaller(uint32
 	while(walker.next()) {
 		vmkit::Safepoint* sf = vm()->getSafepoint(walker.ip());
 
-		if(sf && !level--)
-			return (J3Method*)sf->unit()->getSymbol(sf->functionName());
+		if(sf) {
+			if(level < sf->inlineDepth())
+				return (J3Method*)sf->unit()->getSymbol(sf->functionName(level));
+			else
+				level -= sf->inlineDepth();
+		}
 	}
 
 	return 0;





More information about the vmkit-commits mailing list