[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