Consolidate curFrame fields in thread storage
We ended up with two locations in the Thread structure for saved
Dalvik frame pointer. This change consolidates them.
Change-Id: I78f288e4e57e232f29663be930101e775bfe370f
diff --git a/vm/AllocTracker.cpp b/vm/AllocTracker.cpp
index 156fb86..34e0b3f 100644
--- a/vm/AllocTracker.cpp
+++ b/vm/AllocTracker.cpp
@@ -149,7 +149,7 @@
int stackDepth = 0;
void* fp;
- fp = self->curFrame;
+ fp = self->interpSave.curFrame;
while ((fp != NULL) && (stackDepth < kMaxAllocRecordStackDepth)) {
const StackSaveArea* saveArea = SAVEAREA_FROM_FP(fp);
diff --git a/vm/Debugger.cpp b/vm/Debugger.cpp
index 478644b..781b96b 100644
--- a/vm/Debugger.cpp
+++ b/vm/Debugger.cpp
@@ -2073,7 +2073,7 @@
dvmLockThreadList(NULL);
thread = threadObjToThread(threadObj);
if (thread != NULL) {
- count = dvmComputeExactFrameDepth(thread->curFrame);
+ count = dvmComputeExactFrameDepth(thread->interpSave.curFrame);
}
dvmUnlockThreadList();
@@ -2099,7 +2099,7 @@
if (thread == NULL)
goto bail;
- framePtr = thread->curFrame;
+ framePtr = thread->interpSave.curFrame;
count = 0;
while (framePtr != NULL) {
const StackSaveArea* saveArea = SAVEAREA_FROM_FP(framePtr);
diff --git a/vm/Exception.cpp b/vm/Exception.cpp
index 7bf824f..30796c2 100644
--- a/vm/Exception.cpp
+++ b/vm/Exception.cpp
@@ -609,7 +609,7 @@
LOGVV("findCatchInMethod %s.%s excep=%s depth=%d\n",
method->clazz->descriptor, method->name, excepClass->descriptor,
- dvmComputeExactFrameDepth(self->curFrame));
+ dvmComputeExactFrameDepth(self->interpSave.curFrame));
DvmDex* pDvmDex = method->clazz->pDvmDex;
const DexCode* pCode = dvmGetMethodCode(method);
@@ -710,12 +710,12 @@
* before calling here and restore it after.
*
* Sets *newFrame to the frame pointer of the frame with the catch block.
- * If "scanOnly" is false, self->curFrame is also set to this value.
+ * If "scanOnly" is false, self->interpSave.curFrame is also set to this value.
*/
int dvmFindCatchBlock(Thread* self, int relPc, Object* exception,
bool scanOnly, void** newFrame)
{
- void* fp = self->curFrame;
+ u4* fp = self->interpSave.curFrame;
int catchAddr = -1;
assert(!dvmCheckException(self));
@@ -789,7 +789,7 @@
}
if (!scanOnly)
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
/*
* The class resolution in findCatchInMethod() could cause an exception.
@@ -831,7 +831,7 @@
if (pCount != NULL)
*pCount = 0;
- fp = thread->curFrame;
+ fp = thread->interpSave.curFrame;
assert(thread == dvmThreadSelf() || dvmIsSuspended(thread));
diff --git a/vm/Exception.h b/vm/Exception.h
index 40f3482..24c0eb4 100644
--- a/vm/Exception.h
+++ b/vm/Exception.h
@@ -172,7 +172,7 @@
* "*newFrame" gets a copy of the new frame pointer.
*
* If "doUnroll" is set, we unroll "thread"s stack as we go (and update
- * self->curFrame with the same value as in *newFrame).
+ * self->interpSave.curFrame with the same value as in *newFrame).
*
* Returns the offset to the catch code on success, or -1 if we couldn't
* find a catcher.
diff --git a/vm/Jni.cpp b/vm/Jni.cpp
index 8b95e7a..13274c4 100644
--- a/vm/Jni.cpp
+++ b/vm/Jni.cpp
@@ -144,7 +144,7 @@
* the Thread that can be altered by other threads (e.g. prev/next pointers).
*/
static void computeStackSum(Thread* self) {
- const u1* low = (const u1*)SAVEAREA_FROM_FP(self->curFrame);
+ const u1* low = (const u1*)SAVEAREA_FROM_FP(self->interpSave.curFrame);
u4 crc = dvmInitCrc32();
self->stackCrc = 0;
crc = dvmComputeCrc32(crc, low, self->interpStackStart - low);
@@ -162,14 +162,14 @@
* less accurate but reduces the amount of code we have to touch with #ifdefs.
*/
static void checkStackSum(Thread* self) {
- const u1* low = (const u1*)SAVEAREA_FROM_FP(self->curFrame);
+ const u1* low = (const u1*)SAVEAREA_FROM_FP(self->interpSave.curFrame);
u4 stackCrc = self->stackCrc;
self->stackCrc = 0;
u4 crc = dvmInitCrc32();
crc = dvmComputeCrc32(crc, low, self->interpStackStart - low);
if (crc != stackCrc) {
const Method* meth = dvmGetCurrentJNIMethod();
- if (dvmComputeExactFrameDepth(self->curFrame) == 1) {
+ if (dvmComputeExactFrameDepth(self->interpSave.curFrame) == 1) {
LOGD("JNI: bad stack CRC (0x%08x) -- okay during init", stackCrc);
} else if (strcmp(meth->name, "nativeLoad") == 0 &&
(strcmp(meth->clazz->descriptor, "Ljava/lang/Runtime;") == 0)) {
@@ -378,7 +378,7 @@
}
IndirectRefTable* pRefTable = getLocalRefTable(env);
- void* curFrame = ((JNIEnvExt*)env)->self->curFrame;
+ void* curFrame = ((JNIEnvExt*)env)->self->interpSave.curFrame;
u4 cookie = SAVEAREA_FROM_FP(curFrame)->xtra.localRefCookie;
jobject jobj = (jobject) dvmAddToIndirectRefTable(pRefTable, cookie, obj);
if (jobj == NULL) {
@@ -417,7 +417,8 @@
IndirectRefTable* pRefTable = getLocalRefTable(env);
Thread* self = ((JNIEnvExt*)env)->self;
- u4 cookie = SAVEAREA_FROM_FP(self->curFrame)->xtra.localRefCookie;
+ u4 cookie =
+ SAVEAREA_FROM_FP(self->interpSave.curFrame)->xtra.localRefCookie;
if (!dvmRemoveFromIndirectRefTable(pRefTable, cookie, jobj)) {
/*
@@ -844,7 +845,7 @@
const Method* dvmGetCurrentJNIMethod() {
assert(dvmThreadSelf() != NULL);
- void* fp = dvmThreadSelf()->curFrame;
+ void* fp = dvmThreadSelf()->interpSave.curFrame;
const Method* meth = SAVEAREA_FROM_FP(fp)->method;
assert(meth != NULL);
diff --git a/vm/Sync.cpp b/vm/Sync.cpp
index ef3524a..f3781b3 100644
--- a/vm/Sync.cpp
+++ b/vm/Sync.cpp
@@ -276,7 +276,7 @@
size_t len;
int fd;
- saveArea = SAVEAREA_FROM_FP(self->curFrame);
+ saveArea = SAVEAREA_FROM_FP(self->interpSave.curFrame);
meth = saveArea->method;
cp = eventBuffer;
@@ -386,9 +386,10 @@
const StackSaveArea *saveArea;
const Method *meth;
mon->ownerLineNumber = 0;
- if (self->curFrame == NULL) {
+ if (self->interpSave.curFrame == NULL) {
mon->ownerFileName = "no_frame";
- } else if ((saveArea = SAVEAREA_FROM_FP(self->curFrame)) == NULL) {
+ } else if ((saveArea =
+ SAVEAREA_FROM_FP(self->interpSave.curFrame)) == NULL) {
mon->ownerFileName = "no_save_area";
} else if ((meth = saveArea->method) == NULL) {
mon->ownerFileName = "no_method";
diff --git a/vm/Thread.cpp b/vm/Thread.cpp
index 9f8896b..4d18e14 100644
--- a/vm/Thread.cpp
+++ b/vm/Thread.cpp
@@ -1157,7 +1157,7 @@
* Null out the "String[] args" argument.
*/
assert(gDvm.methDalvikSystemNativeStart_main->registersSize == 1);
- u4* framePtr = (u4*) thread->curFrame;
+ u4* framePtr = (u4*) thread->interpSave.curFrame;
framePtr[0] = 0;
return true;
@@ -2007,14 +2007,14 @@
* zero, while a JNI-attached thread will have the synthetic "stack
* starter" native method at the top.
*/
- int curDepth = dvmComputeExactFrameDepth(self->curFrame);
+ int curDepth = dvmComputeExactFrameDepth(self->interpSave.curFrame);
if (curDepth != 0) {
bool topIsNative = false;
if (curDepth == 1) {
/* not expecting a lingering break frame; just look at curFrame */
- assert(!dvmIsBreakFrame((u4*)self->curFrame));
- StackSaveArea* ssa = SAVEAREA_FROM_FP(self->curFrame);
+ assert(!dvmIsBreakFrame((u4*)self->interpSave.curFrame));
+ StackSaveArea* ssa = SAVEAREA_FROM_FP(self->interpSave.curFrame);
if (dvmIsNativeMethod(ssa->method))
topIsNative = true;
}
diff --git a/vm/Thread.h b/vm/Thread.h
index c42a9e8..d655732 100644
--- a/vm/Thread.h
+++ b/vm/Thread.h
@@ -125,24 +125,6 @@
*/
JValue retval;
- u1* cardTable;
-
- /* current limit of stack; flexes for StackOverflowError */
- const u1* interpStackEnd;
-
- /* FP of bottom-most (currently executing) stack frame on interp stack */
- void* curFrame;
- /* current exception, or NULL if nothing pending */
- Object* exception;
-
- bool debugIsMethodEntry;
- /* interpreter stack size; our stacks are fixed-length */
- int interpStackSize;
- bool stackOverflowed;
-
- /* thread handle, as reported by pthread_self() */
- pthread_t handle;
-
/*
* interpBreak contains info about the interpreter mode, as well as
* a count of the number of times the thread has been suspended. When
@@ -162,6 +144,25 @@
*/
InterpBreak interpBreak;
+ u1* cardTable;
+
+ /* current limit of stack; flexes for StackOverflowError */
+ const u1* interpStackEnd;
+
+ /* FP of bottom-most (currently executing) stack frame on interp stack */
+ void* XcurFrame;
+ /* current exception, or NULL if nothing pending */
+ Object* exception;
+
+ bool debugIsMethodEntry;
+ /* interpreter stack size; our stacks are fixed-length */
+ int interpStackSize;
+ bool stackOverflowed;
+
+ /* thread handle, as reported by pthread_self() */
+ pthread_t handle;
+
+
/* Assembly interpreter handler tables */
#ifndef DVM_NO_ASM_INTERP
diff --git a/vm/alloc/Copying.cpp b/vm/alloc/Copying.cpp
index fca8ae7..f36fc89 100644
--- a/vm/alloc/Copying.cpp
+++ b/vm/alloc/Copying.cpp
@@ -1526,7 +1526,7 @@
bool first = true;
#endif
- framePtr = (const u4 *)thread->curFrame;
+ framePtr = (const u4 *)thread->interpSave.curFrame;
while (framePtr != NULL) {
const StackSaveArea *saveArea;
const Method *method;
@@ -1752,7 +1752,7 @@
Object *obj;
saveArea = NULL;
- framePtr = (const u4 *)thread->curFrame;
+ framePtr = (const u4 *)thread->interpSave.curFrame;
for (; framePtr != NULL; framePtr = saveArea->prevFrame) {
saveArea = SAVEAREA_FROM_FP(framePtr);
method = (Method *)saveArea->method;
diff --git a/vm/alloc/Visit.cpp b/vm/alloc/Visit.cpp
index b329595..7f949f6 100644
--- a/vm/alloc/Visit.cpp
+++ b/vm/alloc/Visit.cpp
@@ -87,7 +87,7 @@
assert(thread != NULL);
u4 threadId = thread->threadId;
const StackSaveArea *saveArea;
- for (u4 *fp = (u4 *)thread->curFrame;
+ for (u4 *fp = (u4 *)thread->interpSave.curFrame;
fp != NULL;
fp = (u4 *)saveArea->prevFrame) {
Method *method;
diff --git a/vm/compiler/Compiler.cpp b/vm/compiler/Compiler.cpp
index b0c2e60..d730066 100644
--- a/vm/compiler/Compiler.cpp
+++ b/vm/compiler/Compiler.cpp
@@ -222,7 +222,7 @@
static void crawlDalvikStack(Thread *thread, bool print)
{
- void *fp = thread->curFrame;
+ void *fp = thread->interpSave.curFrame;
StackSaveArea* saveArea = NULL;
int stackLevel = 0;
diff --git a/vm/compiler/Frontend.cpp b/vm/compiler/Frontend.cpp
index 473f3d0..75be703 100644
--- a/vm/compiler/Frontend.cpp
+++ b/vm/compiler/Frontend.cpp
@@ -392,7 +392,7 @@
static bool filterMethodByCallGraph(Thread *thread, const char *curMethodName)
{
/* Crawl the Dalvik stack frames and compare the method name*/
- StackSaveArea *ssaPtr = ((StackSaveArea *) thread->curFrame) - 1;
+ StackSaveArea *ssaPtr = ((StackSaveArea *) thread->interpSave.curFrame) - 1;
while (ssaPtr != ((StackSaveArea *) NULL) - 1) {
const Method *method = ssaPtr->method;
if (method) {
diff --git a/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp b/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp
index 98d97d8..32065ae 100644
--- a/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp
+++ b/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp
@@ -86,8 +86,8 @@
storeWordDisp(cUnit, newStackSave, offsetof(StackSaveArea, method), method);
/* thread->method = method */
storeWordDisp(cUnit, r6SELF, offsetof(InterpSaveState, method), method);
- /* thread->curFrame = current FP */
- storeWordDisp(cUnit, r6SELF, offsetof(Thread, curFrame), r5FP);
+ /* thread->interpSave.curFrame = current FP */
+ storeWordDisp(cUnit, r6SELF, offsetof(Thread, interpSave.curFrame), r5FP);
/* thread->methodClassDex = pDvmDex */
storeWordDisp(cUnit, r6SELF, offsetof(InterpSaveState, methodClassDex),
pDvmDex);
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
index e76b766..03b97a4 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_CHAIN.S
@@ -36,7 +36,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
index 38ade41..2a73c22 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
@@ -27,7 +27,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -62,7 +62,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
index c88e1f2..a7a0961 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
@@ -43,7 +43,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
diff --git a/vm/compiler/template/armv5te/TEMPLATE_RETURN.S b/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
index 52eea8d..d074c9e 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_RETURN.S
@@ -36,7 +36,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
diff --git a/vm/compiler/template/armv5te/footer.S b/vm/compiler/template/armv5te/footer.S
index 5195d0b..4015ec9 100644
--- a/vm/compiler/template/armv5te/footer.S
+++ b/vm/compiler/template/armv5te/footer.S
@@ -12,7 +12,7 @@
mov r2, #0
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
str r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
ldrb lr, [rSELF, #offThread_subMode]
@@ -50,7 +50,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
index c8c2393..c7be29a 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
@@ -197,7 +197,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
@@ -267,7 +267,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
@@ -325,7 +325,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
@@ -436,7 +436,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -471,7 +471,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
@@ -1535,7 +1535,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
@@ -1609,7 +1609,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
@@ -1671,7 +1671,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
@@ -1790,7 +1790,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -1825,7 +1825,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
@@ -1863,7 +1863,7 @@
mov r2, #0
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
str r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
ldrb lr, [rSELF, #offThread_subMode]
@@ -1901,7 +1901,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
index 06218d0..6b57c00 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
@@ -197,7 +197,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
@@ -267,7 +267,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
@@ -325,7 +325,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
@@ -436,7 +436,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -471,7 +471,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
@@ -1266,7 +1266,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
@@ -1340,7 +1340,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
@@ -1402,7 +1402,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
@@ -1521,7 +1521,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -1556,7 +1556,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
@@ -1594,7 +1594,7 @@
mov r2, #0
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
str r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
ldrb lr, [rSELF, #offThread_subMode]
@@ -1632,7 +1632,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
index 2b39d04..4c73919 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a-neon.S
@@ -197,7 +197,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
@@ -267,7 +267,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
@@ -325,7 +325,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
@@ -436,7 +436,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -471,7 +471,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
@@ -1535,7 +1535,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
@@ -1609,7 +1609,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
@@ -1671,7 +1671,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
@@ -1790,7 +1790,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -1825,7 +1825,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
@@ -1863,7 +1863,7 @@
mov r2, #0
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
str r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
ldrb lr, [rSELF, #offThread_subMode]
@@ -1901,7 +1901,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
index d8d3b4c..a5e7a31 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
@@ -197,7 +197,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
@@ -267,7 +267,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
@@ -325,7 +325,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
@@ -436,7 +436,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -471,7 +471,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
@@ -1535,7 +1535,7 @@
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r0, [r10, #offClassObject_pDvmDex] @ r0<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
add rPC, rPC, #6 @ publish new rPC (advance 6 bytes)
str r0, [rSELF, #offThread_methodClassDex]
cmp r8, #0 @ check the break flags
@@ -1609,7 +1609,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r3} @ preserve r0-r3
mov r1, r6
@@ -1671,7 +1671,7 @@
str r0, [rSELF, #offThread_method] @ self->method = methodToCall
str r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
mov rFP, r1 @ fp = newFp
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = newFp
#if defined(TEMPLATE_INLINE_PROFILING)
stmfd sp!, {r0-r2,lr} @ preserve clobbered live registers
mov r1, r6
@@ -1790,7 +1790,7 @@
@ go ahead and transfer control to the native code
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
mov r2, #0
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r2, [rSELF, #offThread_inJitCodeCache] @ not in the jit code cache
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
@@ -1825,7 +1825,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [rFP, #(offStackSaveArea_currentPc - sizeofStackSaveArea)]
@@ -1863,7 +1863,7 @@
mov r2, #0
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
str r2, [rSELF, #offThread_inJitCodeCache] @ not in jit code cache
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r1, #(offStackSaveArea_localRefCookie - sizeofStackSaveArea)]
@ newFp->localRefCookie=top
ldrb lr, [rSELF, #offThread_subMode]
@@ -1901,7 +1901,7 @@
ldr r2, [r10, #offStackSaveArea_returnAddr] @ r2 = chaining cell ret
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved->top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
ldr r0, [r10, #offStackSaveArea_savedPc] @ reload rPC
diff --git a/vm/interp/Interp.cpp b/vm/interp/Interp.cpp
index 6684c4a..bc2b4ec 100644
--- a/vm/interp/Interp.cpp
+++ b/vm/interp/Interp.cpp
@@ -537,10 +537,11 @@
* on by PushLocalFrame, we want to use the topmost native method.
*/
const StackSaveArea* saveArea;
- void* fp;
- void* prevFp = NULL;
+ u4* fp;
+ u4* prevFp = NULL;
- for (fp = thread->curFrame; fp != NULL; fp = saveArea->prevFrame) {
+ for (fp = thread->interpSave.curFrame; fp != NULL;
+ fp = saveArea->prevFrame) {
const Method* method;
saveArea = SAVEAREA_FROM_FP(fp);
@@ -587,7 +588,8 @@
pCtrl->pAddressSet
= dvmAddressSetForLine(saveArea->method, pCtrl->line);
}
- pCtrl->frameDepth = dvmComputeVagueFrameDepth(thread, thread->curFrame);
+ pCtrl->frameDepth =
+ dvmComputeVagueFrameDepth(thread, thread->interpSave.curFrame);
pCtrl->active = true;
LOGV("##### step init: thread=%p meth=%p '%s' line=%d frameDepth=%d depth=%s size=%s\n",
@@ -630,7 +632,7 @@
int offset = self->interpSave.pc - curMethod->insns;
int catchRelPc = dvmFindCatchBlock(self, offset, exception,
true, &catchFrame);
- dvmDbgPostException(self->interpSave.fp, offset, catchFrame,
+ dvmDbgPostException(self->interpSave.curFrame, offset, catchFrame,
catchRelPc, exception);
}
}
@@ -649,10 +651,10 @@
* The interpreter is preparing to do a native invoke. Handle any
* special subMode requirements. NOTE: for a native invoke,
* dvmReportInvoke() and dvmReportPreNativeInvoke() will both
- * be called prior to the invoke. All interpSave state must
- * be valid on entry.
+ * be called prior to the invoke. fp is the Dalvik FP of the calling
+ * method.
*/
-void dvmReportPreNativeInvoke(const Method* methodToCall, Thread* self)
+void dvmReportPreNativeInvoke(const Method* methodToCall, Thread* self, u4* fp)
{
#if defined(WITH_JIT)
/*
@@ -664,8 +666,7 @@
}
#endif
if (self->interpBreak.ctl.subMode & kSubModeDebuggerActive) {
- Object* thisPtr = dvmGetThisPtr(self->interpSave.method,
- self->interpSave.fp);
+ Object* thisPtr = dvmGetThisPtr(self->interpSave.method, fp);
assert(thisPtr == NULL || dvmIsValidObject(thisPtr));
dvmDbgPostLocationEvent(methodToCall, -1, thisPtr, DBG_METHOD_ENTRY);
}
@@ -673,14 +674,13 @@
/*
* The interpreter has returned from a native invoke. Handle any
- * special subMode requirements. All interpSave state must be
- * valid on entry.
+ * special subMode requirements. fp is the Dalvik FP of the calling
+ * method.
*/
-void dvmReportPostNativeInvoke(const Method* methodToCall, Thread* self)
+void dvmReportPostNativeInvoke(const Method* methodToCall, Thread* self, u4* fp)
{
if (self->interpBreak.ctl.subMode & kSubModeDebuggerActive) {
- Object* thisPtr = dvmGetThisPtr(self->interpSave.method,
- self->interpSave.fp);
+ Object* thisPtr = dvmGetThisPtr(self->interpSave.method, fp);
assert(thisPtr == NULL || dvmIsValidObject(thisPtr));
dvmDbgPostLocationEvent(methodToCall, -1, thisPtr, DBG_METHOD_EXIT);
}
@@ -697,7 +697,7 @@
{
TRACE_METHOD_EXIT(self, self->interpSave.method);
#if defined(WITH_JIT)
- if (dvmIsBreakFrame(self->interpSave.fp) &&
+ if (dvmIsBreakFrame(self->interpSave.curFrame) &&
(self->interpBreak.ctl.subMode & kSubModeJitTraceBuild)) {
dvmCheckJit(self->interpSave.pc, self);
}
@@ -1766,7 +1766,7 @@
dvmUnlockMutex(&self->callbackMutex);
// Update Thread structure
self->interpSave.pc = pc;
- self->interpSave.fp = fp;
+ self->interpSave.curFrame = fp;
if (callback != NULL) {
// Do the callback
if (!callback(self,arg)) {
@@ -1948,7 +1948,7 @@
* No need to initialize "retval".
*/
self->interpSave.method = method;
- self->interpSave.fp = (u4*) self->curFrame;
+ self->interpSave.curFrame = (u4*) self->interpSave.curFrame;
self->interpSave.pc = method->insns;
assert(!dvmIsNativeMethod(method));
diff --git a/vm/interp/Interp.h b/vm/interp/Interp.h
index 5626160..6951c5a 100644
--- a/vm/interp/Interp.h
+++ b/vm/interp/Interp.h
@@ -83,8 +83,8 @@
*/
void dvmCheckBefore(const u2 *dPC, u4 *fp, Thread* self);
void dvmReportExceptionThrow(Thread* self, Object* exception);
-void dvmReportPreNativeInvoke(const Method* methodToCall, Thread* self);
-void dvmReportPostNativeInvoke(const Method* methodToCall, Thread* self);
+void dvmReportPreNativeInvoke(const Method* methodToCall, Thread* self, u4* fp);
+void dvmReportPostNativeInvoke(const Method* methodToCall, Thread* self, u4* fp);
void dvmReportInvoke(Thread* self, const Method* methodToCall);
void dvmReportReturn(Thread* self);
diff --git a/vm/interp/InterpState.h b/vm/interp/InterpState.h
index 77c343b..144cd2a 100644
--- a/vm/interp/InterpState.h
+++ b/vm/interp/InterpState.h
@@ -110,7 +110,7 @@
typedef struct InterpSaveState {
const u2* pc; // Dalvik PC
- u4* fp; // Dalvik frame pointer
+ u4* curFrame; // Dalvik frame pointer
const Method *method; // Method being executed
DvmDex* methodClassDex;
void* bailPtr;
diff --git a/vm/interp/Jit.cpp b/vm/interp/Jit.cpp
index 5ac7921..c048ed6 100644
--- a/vm/interp/Jit.cpp
+++ b/vm/interp/Jit.cpp
@@ -109,9 +109,8 @@
shadowSpace->shadowFP = shadowSpace->registerSpace +
shadowSpace->registerSpaceSize - postBytes/4;
- self->interpSave.fp = (u4*)shadowSpace->shadowFP;
+ self->interpSave.curFrame = (u4*)shadowSpace->shadowFP;
self->interpStackEnd = (u1*)shadowSpace->registerSpace;
- self->curFrame = self->interpSave.fp;
// Create a copy of the stack
memcpy(((char*)shadowSpace->shadowFP)-preBytes, ((char*)fp)-preBytes,
@@ -163,8 +162,7 @@
/* Restore state before returning */
self->interpSave.pc = shadowSpace->startPC;
- self->interpSave.fp = shadowSpace->fp;
- self->curFrame = self->interpSave.fp;
+ self->interpSave.curFrame = shadowSpace->fp;
self->interpSave.method = shadowSpace->method;
self->interpSave.methodClassDex = shadowSpace->methodClassDex;
self->retval = shadowSpace->retval;
@@ -187,16 +185,17 @@
static void selfVerificationDumpState(const u2* pc, Thread* self)
{
ShadowSpace* shadowSpace = self->shadowSpace;
- StackSaveArea* stackSave = SAVEAREA_FROM_FP(self->curFrame);
+ StackSaveArea* stackSave = SAVEAREA_FROM_FP(self->interpSave.curFrame);
int frameBytes = (int) shadowSpace->registerSpace +
shadowSpace->registerSpaceSize*4 -
(int) shadowSpace->shadowFP;
int localRegs = 0;
int frameBytes2 = 0;
- if ((uintptr_t)self->curFrame < (uintptr_t)shadowSpace->fp) {
+ if ((uintptr_t)self->interpSave.curFrame < (uintptr_t)shadowSpace->fp) {
localRegs = (stackSave->method->registersSize -
stackSave->method->insSize)*4;
- frameBytes2 = (int) shadowSpace->fp - (int) self->curFrame - localRegs;
+ frameBytes2 = (int) shadowSpace->fp -
+ (int)self->interpSave.curFrame - localRegs;
}
LOGD("********** SHADOW STATE DUMP **********");
LOGD("CurrentPC: 0x%x, Offset: 0x%04x", (int)pc,
@@ -206,7 +205,7 @@
LOGD("Dalvik PC: 0x%x endPC: 0x%x", (int)shadowSpace->startPC,
(int)shadowSpace->endPC);
LOGD("Interp FP: 0x%x endFP: 0x%x", (int)shadowSpace->fp,
- (int)self->curFrame);
+ (int)self->interpSave.curFrame);
LOGD("Shadow FP: 0x%x endFP: 0x%x", (int)shadowSpace->shadowFP,
(int)shadowSpace->endShadowFP);
LOGD("Frame1 Bytes: %d Frame2 Local: %d Bytes: %d", frameBytes,
@@ -219,7 +218,7 @@
static void selfVerificationDumpTrace(const u2* pc, Thread* self)
{
ShadowSpace* shadowSpace = self->shadowSpace;
- StackSaveArea* stackSave = SAVEAREA_FROM_FP(self->curFrame);
+ StackSaveArea* stackSave = SAVEAREA_FROM_FP(self->interpSave.curFrame);
int i, addr, offset;
DecodedInstruction *decInsn;
@@ -326,13 +325,14 @@
selfVerificationSpinLoop(shadowSpace);
}
/* Check new frame if it exists (invokes only) */
- if ((uintptr_t)self->curFrame < (uintptr_t)shadowSpace->fp) {
- StackSaveArea* stackSave = SAVEAREA_FROM_FP(self->curFrame);
+ if ((uintptr_t)self->interpSave.curFrame < (uintptr_t)shadowSpace->fp) {
+ StackSaveArea* stackSave =
+ SAVEAREA_FROM_FP(self->interpSave.curFrame);
int localRegs = (stackSave->method->registersSize -
stackSave->method->insSize)*4;
int frameBytes2 = (int) shadowSpace->fp -
- (int) self->curFrame - localRegs;
- if (memcmp(((char*)self->curFrame)+localRegs,
+ (int) self->interpSave.curFrame - localRegs;
+ if (memcmp(((char*)self->interpSave.curFrame)+localRegs,
((char*)shadowSpace->endShadowFP)+localRegs, frameBytes2)) {
if (state == kSVSBackwardBranch) {
/*
@@ -347,14 +347,14 @@
selfVerificationDumpState(pc, self);
selfVerificationDumpTrace(pc, self);
LOGD("*** Interp Registers: addr: 0x%x l: %d bytes: %d",
- (int)self->curFrame, localRegs, frameBytes2);
- selfVerificationPrintRegisters((int*)self->curFrame,
+ (int)self->interpSave.curFrame, localRegs, frameBytes2);
+ selfVerificationPrintRegisters((int*)self->interpSave.curFrame,
(int*)shadowSpace->endShadowFP,
(frameBytes2+localRegs)/4);
LOGD("*** Shadow Registers: addr: 0x%x l: %d bytes: %d",
(int)shadowSpace->endShadowFP, localRegs, frameBytes2);
selfVerificationPrintRegisters((int*)shadowSpace->endShadowFP,
- (int*)self->curFrame,
+ (int*)self->interpSave.curFrame,
(frameBytes2+localRegs)/4);
selfVerificationSpinLoop(shadowSpace);
}
diff --git a/vm/interp/Stack.cpp b/vm/interp/Stack.cpp
index e938990..120726e 100644
--- a/vm/interp/Stack.cpp
+++ b/vm/interp/Stack.cpp
@@ -35,7 +35,7 @@
{
assert(thread->interpStackStart != NULL);
- assert(thread->curFrame == NULL);
+ assert(thread->interpSave.curFrame == NULL);
return true;
}
@@ -70,8 +70,8 @@
+ sizeof(StackSaveArea) * 2 // break frame + regular frame
+ method->outsSize * 4; // args to other methods
- if (self->curFrame != NULL)
- stackPtr = (u1*) SAVEAREA_FROM_FP(self->curFrame);
+ if (self->interpSave.curFrame != NULL)
+ stackPtr = (u1*) SAVEAREA_FROM_FP(self->interpSave.curFrame);
else
stackPtr = self->interpStackStart;
@@ -79,7 +79,7 @@
/* not enough space */
LOGW("Stack overflow on call to interp "
"(req=%d top=%p cur=%p size=%d %s.%s)\n",
- stackReq, self->interpStackStart, self->curFrame,
+ stackReq, self->interpStackStart, self->interpSave.curFrame,
self->interpStackSize, method->clazz->descriptor, method->name);
dvmHandleStackOverflow(self, method);
assert(dvmCheckException(self));
@@ -100,11 +100,12 @@
memset(stackPtr - (method->outsSize*4), 0xaf, stackReq);
#endif
#ifdef EASY_GDB
- breakSaveBlock->prevSave = (StackSaveArea*)FP_FROM_SAVEAREA(self->curFrame);
+ breakSaveBlock->prevSave =
+ (StackSaveArea*)FP_FROM_SAVEAREA(self->interpSave.curFrame);
saveBlock->prevSave = breakSaveBlock;
#endif
- breakSaveBlock->prevFrame = self->curFrame;
+ breakSaveBlock->prevFrame = self->interpSave.curFrame;
breakSaveBlock->savedPc = NULL; // not required
breakSaveBlock->xtra.localRefCookie = 0; // not required
breakSaveBlock->method = NULL;
@@ -114,10 +115,10 @@
saveBlock->method = method;
LOGVV("PUSH frame: old=%p new=%p (size=%d)\n",
- self->curFrame, FP_FROM_SAVEAREA(saveBlock),
- (u1*)self->curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
+ self->interpSave.curFrame, FP_FROM_SAVEAREA(saveBlock),
+ (u1*)self->interpSave.curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
- self->curFrame = FP_FROM_SAVEAREA(saveBlock);
+ self->interpSave.curFrame = FP_FROM_SAVEAREA(saveBlock);
return true;
}
@@ -143,8 +144,8 @@
stackReq = method->registersSize * 4 // params only
+ sizeof(StackSaveArea) * 2; // break frame + regular frame
- if (self->curFrame != NULL)
- stackPtr = (u1*) SAVEAREA_FROM_FP(self->curFrame);
+ if (self->interpSave.curFrame != NULL)
+ stackPtr = (u1*) SAVEAREA_FROM_FP(self->interpSave.curFrame);
else
stackPtr = self->interpStackStart;
@@ -152,7 +153,7 @@
/* not enough space */
LOGW("Stack overflow on call to native "
"(req=%d top=%p cur=%p size=%d '%s')\n",
- stackReq, self->interpStackStart, self->curFrame,
+ stackReq, self->interpStackStart, self->interpSave.curFrame,
self->interpStackSize, method->name);
dvmHandleStackOverflow(self, method);
assert(dvmCheckException(self));
@@ -174,16 +175,16 @@
memset(stackPtr, 0xaf, stackReq);
#endif
#ifdef EASY_GDB
- if (self->curFrame == NULL)
+ if (self->interpSave.curFrame == NULL)
breakSaveBlock->prevSave = NULL;
else {
- void* fp = FP_FROM_SAVEAREA(self->curFrame);
+ void* fp = FP_FROM_SAVEAREA(self->interpSave.curFrame);
breakSaveBlock->prevSave = (StackSaveArea*)fp;
}
saveBlock->prevSave = breakSaveBlock;
#endif
- breakSaveBlock->prevFrame = self->curFrame;
+ breakSaveBlock->prevFrame = self->interpSave.curFrame;
breakSaveBlock->savedPc = NULL; // not required
breakSaveBlock->xtra.localRefCookie = 0; // not required
breakSaveBlock->method = NULL;
@@ -193,10 +194,10 @@
saveBlock->method = method;
LOGVV("PUSH JNI frame: old=%p new=%p (size=%d)\n",
- self->curFrame, FP_FROM_SAVEAREA(saveBlock),
- (u1*)self->curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
+ self->interpSave.curFrame, FP_FROM_SAVEAREA(saveBlock),
+ (u1*)self->interpSave.curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
- self->curFrame = FP_FROM_SAVEAREA(saveBlock);
+ self->interpSave.curFrame = FP_FROM_SAVEAREA(saveBlock);
return true;
}
@@ -217,14 +218,14 @@
stackReq = sizeof(StackSaveArea); // regular frame
- assert(self->curFrame != NULL);
- stackPtr = (u1*) SAVEAREA_FROM_FP(self->curFrame);
+ assert(self->interpSave.curFrame != NULL);
+ stackPtr = (u1*) SAVEAREA_FROM_FP(self->interpSave.curFrame);
if (stackPtr - stackReq < self->interpStackEnd) {
/* not enough space; let JNI throw the exception */
LOGW("Stack overflow on PushLocal "
"(req=%d top=%p cur=%p size=%d '%s')\n",
- stackReq, self->interpStackStart, self->curFrame,
+ stackReq, self->interpStackStart, self->interpSave.curFrame,
self->interpStackSize, method->name);
dvmHandleStackOverflow(self, method);
assert(dvmCheckException(self));
@@ -243,19 +244,20 @@
memset(stackPtr, 0xaf, stackReq);
#endif
#ifdef EASY_GDB
- saveBlock->prevSave = (StackSaveArea*)FP_FROM_SAVEAREA(self->curFrame);
+ saveBlock->prevSave =
+ (StackSaveArea*)FP_FROM_SAVEAREA(self->interpSave.curFrame);
#endif
- saveBlock->prevFrame = self->curFrame;
+ saveBlock->prevFrame = self->interpSave.curFrame;
saveBlock->savedPc = NULL; // not required
saveBlock->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
saveBlock->method = method;
LOGVV("PUSH JNI local frame: old=%p new=%p (size=%d)\n",
- self->curFrame, FP_FROM_SAVEAREA(saveBlock),
- (u1*)self->curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
+ self->interpSave.curFrame, FP_FROM_SAVEAREA(saveBlock),
+ (u1*)self->interpSave.curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
- self->curFrame = FP_FROM_SAVEAREA(saveBlock);
+ self->interpSave.curFrame = FP_FROM_SAVEAREA(saveBlock);
return true;
}
@@ -268,9 +270,9 @@
*/
bool dvmPopLocalFrame(Thread* self)
{
- StackSaveArea* saveBlock = SAVEAREA_FROM_FP(self->curFrame);
+ StackSaveArea* saveBlock = SAVEAREA_FROM_FP(self->interpSave.curFrame);
- assert(!dvmIsBreakFrame((u4*)self->curFrame));
+ assert(!dvmIsBreakFrame((u4*)self->interpSave.curFrame));
if (saveBlock->method != SAVEAREA_FROM_FP(saveBlock->prevFrame)->method) {
/*
* The previous frame doesn't have the same method pointer -- we've
@@ -286,7 +288,7 @@
saveBlock->method->name,
SAVEAREA_FROM_FP(saveBlock->prevFrame)->method->name);
dvmPopJniLocals(self, saveBlock);
- self->curFrame = saveBlock->prevFrame;
+ self->interpSave.curFrame = saveBlock->prevFrame;
return true;
}
@@ -304,11 +306,11 @@
{
StackSaveArea* saveBlock;
- if (self->curFrame == NULL)
+ if (self->interpSave.curFrame == NULL)
return false;
- saveBlock = SAVEAREA_FROM_FP(self->curFrame);
- assert(!dvmIsBreakFrame((u4*)self->curFrame));
+ saveBlock = SAVEAREA_FROM_FP(self->interpSave.curFrame);
+ assert(!dvmIsBreakFrame((u4*)self->interpSave.curFrame));
/*
* Remove everything up to the break frame. If this was a call into
@@ -335,16 +337,16 @@
}
LOGVV("POP frame: cur=%p new=%p\n",
- self->curFrame, saveBlock->prevFrame);
+ self->interpSave.curFrame, saveBlock->prevFrame);
- self->curFrame = saveBlock->prevFrame;
+ self->interpSave.curFrame = saveBlock->prevFrame;
return true;
}
/*
* Common code for dvmCallMethodV/A and dvmInvokeMethod.
*
- * Pushes a call frame on, advancing self->curFrame.
+ * Pushes a call frame on, advancing self->interpSave.curFrame.
*/
static ClassObject* callPrep(Thread* self, const Method* method, Object* obj,
bool checkAccess)
@@ -376,7 +378,7 @@
if (checkAccess) {
/* needed for java.lang.reflect.Method.invoke */
- if (!dvmCheckMethodAccess(dvmGetCaller2Class(self->curFrame),
+ if (!dvmCheckMethodAccess(dvmGetCaller2Class(self->interpSave.curFrame),
method))
{
/* note this throws IAException, not IAError */
@@ -389,7 +391,7 @@
* Push a call frame on. If there isn't enough room for ins, locals,
* outs, and the saved state, it will throw an exception.
*
- * This updates self->curFrame.
+ * This updates self->interpSave.curFrame.
*/
if (dvmIsNativeMethod(method)) {
/* native code calling native code the hard way */
@@ -446,9 +448,10 @@
return;
/* "ins" for new frame start at frame pointer plus locals */
- ins = ((u4*)self->curFrame) + (method->registersSize - method->insSize);
+ ins = ((u4*)self->interpSave.curFrame) +
+ (method->registersSize - method->insSize);
- //LOGD(" FP is %p, INs live at >= %p\n", self->curFrame, ins);
+ //LOGD(" FP is %p, INs live at >= %p\n", self->interpSave.curFrame, ins);
/* put "this" pointer into in0 if appropriate */
if (!dvmIsStaticMethod(method)) {
@@ -513,7 +516,8 @@
* Because we leave no space for local variables, "curFrame" points
* directly at the method arguments.
*/
- (*method->nativeFunc)((u4*)self->curFrame, pResult, method, self);
+ (*method->nativeFunc)((u4*)self->interpSave.curFrame, pResult,
+ method, self);
TRACE_METHOD_EXIT(self, method);
} else {
dvmInterpret(self, method, pResult);
@@ -551,7 +555,8 @@
return;
/* "ins" for new frame start at frame pointer plus locals */
- ins = ((u4*)self->curFrame) + (method->registersSize - method->insSize);
+ ins = ((u4*)self->interpSave.curFrame) +
+ (method->registersSize - method->insSize);
/* put "this" pointer into in0 if appropriate */
if (!dvmIsStaticMethod(method)) {
@@ -617,7 +622,8 @@
* Because we leave no space for local variables, "curFrame" points
* directly at the method arguments.
*/
- (*method->nativeFunc)((u4*)self->curFrame, pResult, method, self);
+ (*method->nativeFunc)((u4*)self->interpSave.curFrame, pResult,
+ method, self);
TRACE_METHOD_EXIT(self, method);
} else {
dvmInterpret(self, method, pResult);
@@ -682,10 +688,11 @@
needPop = true;
/* "ins" for new frame start at frame pointer plus locals */
- ins = ((s4*)self->curFrame) + (method->registersSize - method->insSize);
+ ins = ((s4*)self->interpSave.curFrame) +
+ (method->registersSize - method->insSize);
verifyCount = 0;
- //LOGD(" FP is %p, INs live at >= %p\n", self->curFrame, ins);
+ //LOGD(" FP is %p, INs live at >= %p\n", self->interpSave.curFrame, ins);
/* put "this" pointer into in0 if appropriate */
if (!dvmIsStaticMethod(method)) {
@@ -728,7 +735,8 @@
* Because we leave no space for local variables, "curFrame" points
* directly at the method arguments.
*/
- (*method->nativeFunc)((u4*)self->curFrame, &retval, method, self);
+ (*method->nativeFunc)((u4*)self->interpSave.curFrame, &retval,
+ method, self);
TRACE_METHOD_EXIT(self, method);
} else {
dvmInterpret(self, method, &retval);
@@ -925,7 +933,8 @@
void* callerCaller;
/* at the top? */
- if (dvmIsBreakFrame((u4*)caller) && SAVEAREA_FROM_FP(caller)->prevFrame == NULL)
+ if (dvmIsBreakFrame((u4*)caller) &&
+ SAVEAREA_FROM_FP(caller)->prevFrame == NULL)
return NULL;
/* go one more */
@@ -948,7 +957,8 @@
int i;
/* at the top? */
- if (dvmIsBreakFrame((u4*)caller) && SAVEAREA_FROM_FP(caller)->prevFrame == NULL)
+ if (dvmIsBreakFrame((u4*)caller) &&
+ SAVEAREA_FROM_FP(caller)->prevFrame == NULL)
return NULL;
/* Walk up two frames if possible. */
@@ -1012,7 +1022,7 @@
LOGI("threadid=%d: stack overflow on call to %s.%s:%s\n",
self->threadId,
method->clazz->descriptor, method->name, method->shorty);
- StackSaveArea* saveArea = SAVEAREA_FROM_FP(self->curFrame);
+ StackSaveArea* saveArea = SAVEAREA_FROM_FP(self->interpSave.curFrame);
LOGI(" method requires %d+%d+%d=%d bytes, fp is %p (%d left)\n",
method->registersSize * 4, sizeof(StackSaveArea), method->outsSize * 4,
(method->registersSize + method->outsSize) * 4 + sizeof(StackSaveArea),
@@ -1054,9 +1064,9 @@
newStackEnd = (self->interpStackStart - self->interpStackSize)
+ STACK_OVERFLOW_RESERVE;
- if ((u1*)self->curFrame <= newStackEnd) {
+ if ((u1*)self->interpSave.curFrame <= newStackEnd) {
LOGE("Can't shrink stack: curFrame is in reserved area (%p %p)\n",
- self->interpStackEnd, self->curFrame);
+ self->interpStackEnd, self->interpSave.curFrame);
dvmDumpThread(self, false);
dvmAbort();
}
@@ -1065,7 +1075,7 @@
self->stackOverflowed = false;
LOGI("Shrank stack (to %p, curFrame is %p)\n", self->interpStackEnd,
- self->curFrame);
+ self->interpSave.curFrame);
}
@@ -1084,7 +1094,7 @@
static bool extractMonitorEnterObject(Thread* thread, Object** pLockObj,
Thread** pOwner)
{
- void* framePtr = thread->curFrame;
+ void* framePtr = thread->interpSave.curFrame;
if (framePtr == NULL || dvmIsBreakFrame((u4*)framePtr))
return false;
@@ -1201,7 +1211,8 @@
else
relPc = -1;
- char* className = dvmHumanReadableDescriptor(method->clazz->descriptor);
+ char* className =
+ dvmHumanReadableDescriptor(method->clazz->descriptor);
if (dvmIsNativeMethod(method))
dvmPrintDebugMessage(target,
" at %s.%s(Native Method)\n", className, method->name);
@@ -1228,7 +1239,8 @@
Object* obj = dvmGetMonitorObject(mon);
if (obj != NULL) {
Thread* joinThread = NULL;
- className = dvmHumanReadableDescriptor(obj->clazz->descriptor);
+ className =
+ dvmHumanReadableDescriptor(obj->clazz->descriptor);
if (strcmp(className, "java.lang.VMThread") == 0) {
joinThread = dvmGetThreadFromThreadObject(obj);
}
@@ -1246,7 +1258,8 @@
Object* obj;
Thread* owner;
if (extractMonitorEnterObject(thread, &obj, &owner)) {
- className = dvmHumanReadableDescriptor(obj->clazz->descriptor);
+ className =
+ dvmHumanReadableDescriptor(obj->clazz->descriptor);
if (owner != NULL) {
char* threadName = dvmGetThreadName(owner);
dvmPrintDebugMessage(target,
@@ -1302,7 +1315,7 @@
*/
void dvmDumpThreadStack(const DebugOutputTarget* target, Thread* thread)
{
- dumpFrames(target, thread->curFrame, thread);
+ dumpFrames(target, thread->interpSave.curFrame, thread);
}
/*
@@ -1325,7 +1338,7 @@
void* fp;
int depthLimit = 200;
- if (thread == NULL || thread->curFrame == NULL) {
+ if (thread == NULL || thread->interpSave.curFrame == NULL) {
dvmPrintDebugMessage(target,
"DumpRunning: Thread at %p has no curFrame (threadid=%d)\n",
thread, (thread != NULL) ? thread->threadId : 0);
@@ -1339,13 +1352,14 @@
origSize = thread->interpStackSize;
origStack = (const u1*) thread->interpStackStart - origSize;
stackCopy = (u1*) malloc(origSize);
- fpOffset = (u1*) thread->curFrame - origStack;
+ fpOffset = (u1*) thread->interpSave.curFrame - origStack;
memcpy(stackCopy, origStack, origSize);
/*
* Run through the stack and rewrite the "prev" pointers.
*/
- //LOGI("DR: fpOff=%d (from %p %p)\n",fpOffset, origStack, thread->curFrame);
+ //LOGI("DR: fpOff=%d (from %p %p)\n",fpOffset, origStack,
+ // thread->interpSave.curFrame);
fp = stackCopy + fpOffset;
while (true) {
int prevOffset;
@@ -1368,7 +1382,7 @@
break;
}
- saveArea->prevFrame = stackCopy + prevOffset;
+ saveArea->prevFrame = (u4*)(stackCopy + prevOffset);
fp = saveArea->prevFrame;
}
diff --git a/vm/interp/Stack.h b/vm/interp/Stack.h
index 99bef1a..69dd3da 100644
--- a/vm/interp/Stack.h
+++ b/vm/interp/Stack.h
@@ -133,7 +133,7 @@
#endif
/* saved frame pointer for previous frame, or NULL if this is at bottom */
- void* prevFrame;
+ u4* prevFrame;
/* saved program counter (from method in caller's frame) */
const u2* savedPc;
@@ -159,7 +159,7 @@
/* move between the stack save area and the frame pointer */
#define SAVEAREA_FROM_FP(_fp) ((StackSaveArea*)(_fp) -1)
-#define FP_FROM_SAVEAREA(_save) ((void*) ((StackSaveArea*)(_save) +1))
+#define FP_FROM_SAVEAREA(_save) ((u4*) ((StackSaveArea*)(_save) +1))
/* when calling a function, get a pointer to outs[0] */
#define OUTS_FROM_FP(_fp, _argCount) \
diff --git a/vm/mterp/Mterp.cpp b/vm/mterp/Mterp.cpp
index 7172434..d8ba97d 100644
--- a/vm/mterp/Mterp.cpp
+++ b/vm/mterp/Mterp.cpp
@@ -86,7 +86,7 @@
free(desc);
}
//LOGI("self is %p, pc=%p, fp=%p\n", self, self->interpSave.pc,
- // self->interpSave.fp);
+ // self->interpSave.curFrame);
//LOGI("first instruction is 0x%04x\n", self->interpSave.pc[0]);
/*
diff --git a/vm/mterp/armv5te/footer.S b/vm/mterp/armv5te/footer.S
index b262b1e..7a8ed04 100644
--- a/vm/mterp/armv5te/footer.S
+++ b/vm/mterp/armv5te/footer.S
@@ -641,7 +641,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
cmp r0,#0
bne common_updateProfile
GOTO_OPCODE(ip) @ jump to next instruction
@@ -649,7 +649,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
GOTO_OPCODE(ip) @ jump to next instruction
#endif
@@ -657,7 +657,6 @@
@ Profiling - record method entry. r0: methodToCall
stmfd sp!, {r0-r3} @ preserve r0-r3
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r1, r0
mov r0, rSELF
bl dvmReportInvoke @ (self, method)
@@ -669,7 +668,7 @@
@ r0=methodToCall, r1=newFp, r10=newSaveArea
ldrb lr, [rSELF, #offThread_subMode]
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r10, #offStackSaveArea_localRefCookie] @newFp->localRefCookie=top
mov r2, r0 @ r2<- methodToCall
mov r0, r1 @ r0<- newFp (points to args)
@@ -697,7 +696,7 @@
@ equivalent to dvmPopJniLocals
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
bne common_exceptionThrown @ no, handle exception
@@ -709,11 +708,10 @@
11:
@ r0=newFp, r1=&retval, r2=methodToCall, r3=self, lr=subModes
stmfd sp!, {r0-r3} @ save all but subModes
- str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPreNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPreNativeInvoke @ (methodToCall, self, fp)
ldmfd sp, {r0-r3} @ refresh. NOTE: no sp autoincrement
@ Call the native method
@@ -724,10 +722,10 @@
ldmfd sp!, {r0-r3} @ r2<- methodToCall (others unneeded)
@ Finish up any post-invoke subMode requirements
- @ interpSave already up-to-date
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPostNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPostNativeInvoke @ (methodToCall, self, fp)
b 7b @ resume
.LstackOverflow: @ r0=methodToCall
@@ -800,7 +798,7 @@
PREFETCH_ADVANCE_INST(rINST, r9, 3) @ advance r9, update new rINST
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r1, [r10, #offClassObject_pDvmDex] @ r1<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
#if defined(WITH_JIT)
ldr r10, [r0, #offStackSaveArea_returnAddr] @ r10 = saveArea->returnAddr
mov rPC, r9 @ publish new rPC
@@ -822,7 +820,7 @@
@ On entry, r0: StackSaveArea
ldr r1, [r0, #offStackSaveArea_prevFrame] @ r2<- prevFP
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str r1, [rSELF, #offThread_fp] @ update interpSave.fp
+ str r1, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF
bl dvmReportReturn @ (self)
SAVEAREA_FROM_FP(r0, rFP) @ restore StackSaveArea
@@ -905,7 +903,7 @@
add sp, sp, #8 @ restore stack
bmi .LnotCaughtLocally
- /* adjust locals to match self->curFrame and updated PC */
+ /* adjust locals to match self->interpSave.curFrame and updated PC */
SAVEAREA_FROM_FP(r1, rFP) @ r1<- new save area
ldr r1, [r1, #offStackSaveArea_method] @ r1<- new method
str r1, [rSELF, #offThread_method] @ self->method = new method
@@ -931,7 +929,7 @@
@ Manage debugger bookkeeping
7:
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
+ str rFP, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF @ arg0<- self
mov r1, r9 @ arg1<- exception
bl dvmReportExceptionThrow @ (self, exception)
diff --git a/vm/mterp/armv5te/header.S b/vm/mterp/armv5te/header.S
index ad45eb7..b3c8f0a 100644
--- a/vm/mterp/armv5te/header.S
+++ b/vm/mterp/armv5te/header.S
@@ -75,8 +75,8 @@
/* save/restore the PC and/or FP from the thread struct */
#define LOAD_PC_FROM_SELF() ldr rPC, [rSELF, #offThread_pc]
#define SAVE_PC_TO_SELF() str rPC, [rSELF, #offThread_pc]
-#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_fp]
-#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_fp]
+#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_curFrame]
+#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_curFrame]
#define LOAD_PC_FP_FROM_SELF() ldmia rSELF, {rPC, rFP}
#define SAVE_PC_FP_TO_SELF() stmia rSELF, {rPC, rFP}
diff --git a/vm/mterp/c/gotoTargets.cpp b/vm/mterp/c/gotoTargets.cpp
index cd12229..c615cba 100644
--- a/vm/mterp/c/gotoTargets.cpp
+++ b/vm/mterp/c/gotoTargets.cpp
@@ -629,7 +629,7 @@
}
/* update thread FP, and reset local variables */
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -766,10 +766,10 @@
#endif
/*
- * Adjust local variables to match self->curFrame and the
+ * Adjust local variables to match self->interpSave.curFrame and the
* updated PC.
*/
- //fp = (u4*) self->curFrame;
+ //fp = (u4*) self->interpSave.curFrame;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -948,7 +948,7 @@
* calls. For native calls, we'll mark EXIT on return.
* For non-native calls, EXIT is marked in the RETURN op.
*/
- PC_FP_TO_SELF();
+ PC_TO_SELF();
dvmReportInvoke(self, methodToCall);
}
@@ -961,7 +961,7 @@
self->interpSave.method = curMethod;
methodClassDex = curMethod->clazz->pDvmDex;
pc = methodToCall->insns;
- self->curFrame = fp = newFp;
+ self->interpSave.curFrame = fp = newFp;
#ifdef EASY_GDB
debugSaveArea = SAVEAREA_FROM_FP(newFp);
#endif
@@ -974,13 +974,12 @@
/* set this up for JNI locals, even if not a JNI native */
newSaveArea->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
- self->curFrame = newFp;
+ self->interpSave.curFrame = newFp;
DUMP_REGS(methodToCall, newFp, true); // show input args
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPreNativeInvoke(methodToCall, self);
+ dvmReportPreNativeInvoke(methodToCall, self, fp);
}
ILOGD("> native <-- %s.%s %s", methodToCall->clazz->descriptor,
@@ -994,13 +993,12 @@
(*methodToCall->nativeFunc)(newFp, &retval, methodToCall, self);
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPostNativeInvoke(methodToCall, self);
+ dvmReportPostNativeInvoke(methodToCall, self, fp);
}
/* pop frame off */
dvmPopJniLocals(self, newSaveArea);
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
/*
* If the native code threw an exception, or interpreted code
diff --git a/vm/mterp/common/asm-constants.h b/vm/mterp/common/asm-constants.h
index 048dcbe..5b9b006 100644
--- a/vm/mterp/common/asm-constants.h
+++ b/vm/mterp/common/asm-constants.h
@@ -155,7 +155,7 @@
/* Thread fields */
MTERP_OFFSET(offThread_pc, Thread, interpSave.pc, 0)
-MTERP_OFFSET(offThread_fp, Thread, interpSave.fp, 4)
+MTERP_OFFSET(offThread_curFrame, Thread, interpSave.curFrame, 4)
MTERP_OFFSET(offThread_method, Thread, interpSave.method, 8)
MTERP_OFFSET(offThread_methodClassDex, Thread, interpSave.methodClassDex, 12)
MTERP_OFFSET(offThread_bailPtr, Thread, interpSave.bailPtr, 16)
@@ -168,25 +168,23 @@
MTERP_OFFSET(offThread_retval_j, Thread, retval.j, 32)
MTERP_OFFSET(offThread_retval_l, Thread, retval.l, 32)
//40
-MTERP_OFFSET(offThread_cardTable, Thread, cardTable, 40)
-MTERP_OFFSET(offThread_interpStackEnd, Thread, interpStackEnd, 44)
-MTERP_OFFSET(offThread_curFrame, Thread, curFrame, 48)
-MTERP_OFFSET(offThread_exception, Thread, exception, 52)
-MTERP_OFFSET(offThread_debugIsMethodEntry, Thread, debugIsMethodEntry, 56)
-MTERP_OFFSET(offThread_interpStackSize, Thread, interpStackSize, 60)
-MTERP_OFFSET(offThread_stackOverflowed, Thread, stackOverflowed, 64)
MTERP_OFFSET(offThread_breakFlags, \
- Thread, interpBreak.ctl.breakFlags, 72)
+ Thread, interpBreak.ctl.breakFlags, 40)
MTERP_OFFSET(offThread_subMode, \
- Thread, interpBreak.ctl.subMode, 73)
+ Thread, interpBreak.ctl.subMode, 41)
MTERP_OFFSET(offThread_suspendCount, \
- Thread, interpBreak.ctl.suspendCount, 74)
+ Thread, interpBreak.ctl.suspendCount, 42)
MTERP_OFFSET(offThread_dbgSuspendCount, \
- Thread, interpBreak.ctl.dbgSuspendCount, 75)
+ Thread, interpBreak.ctl.dbgSuspendCount, 43)
MTERP_OFFSET(offThread_curHandlerTable, \
- Thread, interpBreak.ctl.curHandlerTable, 76)
+ Thread, interpBreak.ctl.curHandlerTable, 44)
+MTERP_OFFSET(offThread_cardTable, Thread, cardTable, 48)
+MTERP_OFFSET(offThread_interpStackEnd, Thread, interpStackEnd, 52)
+MTERP_OFFSET(offThread_exception, Thread, exception, 60)
+MTERP_OFFSET(offThread_debugIsMethodEntry, Thread, debugIsMethodEntry, 64)
+MTERP_OFFSET(offThread_interpStackSize, Thread, interpStackSize, 68)
+MTERP_OFFSET(offThread_stackOverflowed, Thread, stackOverflowed, 72)
MTERP_OFFSET(offThread_mainHandlerTable, Thread, mainHandlerTable, 80)
-
MTERP_OFFSET(offThread_singleStepCount, Thread, singleStepCount, 88)
#ifdef WITH_JIT
diff --git a/vm/mterp/cstubs/stubdefs.cpp b/vm/mterp/cstubs/stubdefs.cpp
index e81acdc..ba2fe81 100644
--- a/vm/mterp/cstubs/stubdefs.cpp
+++ b/vm/mterp/cstubs/stubdefs.cpp
@@ -24,7 +24,7 @@
*/
#define retval self->retval
#define pc self->interpSave.pc
-#define fp self->interpSave.fp
+#define fp self->interpSave.curFrame
#define curMethod self->interpSave.method
#define methodClassDex self->interpSave.methodClassDex
#define debugTrackedRefStart self->interpSave.debugTrackedRefStart
@@ -44,6 +44,7 @@
* the interpSave vars directly, so this is a nop for stubs.
*/
#define PC_FP_TO_SELF()
+#define PC_TO_SELF()
/*
* Opcode handler framing macros. Here, each opcode is a separate function
diff --git a/vm/mterp/out/InterpAsm-armv5te-vfp.S b/vm/mterp/out/InterpAsm-armv5te-vfp.S
index 77be638..115a7d2 100644
--- a/vm/mterp/out/InterpAsm-armv5te-vfp.S
+++ b/vm/mterp/out/InterpAsm-armv5te-vfp.S
@@ -82,8 +82,8 @@
/* save/restore the PC and/or FP from the thread struct */
#define LOAD_PC_FROM_SELF() ldr rPC, [rSELF, #offThread_pc]
#define SAVE_PC_TO_SELF() str rPC, [rSELF, #offThread_pc]
-#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_fp]
-#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_fp]
+#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_curFrame]
+#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_curFrame]
#define LOAD_PC_FP_FROM_SELF() ldmia rSELF, {rPC, rFP}
#define SAVE_PC_FP_TO_SELF() stmia rSELF, {rPC, rFP}
@@ -26845,7 +26845,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
cmp r0,#0
bne common_updateProfile
GOTO_OPCODE(ip) @ jump to next instruction
@@ -26853,7 +26853,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
GOTO_OPCODE(ip) @ jump to next instruction
#endif
@@ -26861,7 +26861,6 @@
@ Profiling - record method entry. r0: methodToCall
stmfd sp!, {r0-r3} @ preserve r0-r3
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r1, r0
mov r0, rSELF
bl dvmReportInvoke @ (self, method)
@@ -26873,7 +26872,7 @@
@ r0=methodToCall, r1=newFp, r10=newSaveArea
ldrb lr, [rSELF, #offThread_subMode]
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r10, #offStackSaveArea_localRefCookie] @newFp->localRefCookie=top
mov r2, r0 @ r2<- methodToCall
mov r0, r1 @ r0<- newFp (points to args)
@@ -26901,7 +26900,7 @@
@ equivalent to dvmPopJniLocals
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
bne common_exceptionThrown @ no, handle exception
@@ -26913,11 +26912,10 @@
11:
@ r0=newFp, r1=&retval, r2=methodToCall, r3=self, lr=subModes
stmfd sp!, {r0-r3} @ save all but subModes
- str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPreNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPreNativeInvoke @ (methodToCall, self, fp)
ldmfd sp, {r0-r3} @ refresh. NOTE: no sp autoincrement
@ Call the native method
@@ -26928,10 +26926,10 @@
ldmfd sp!, {r0-r3} @ r2<- methodToCall (others unneeded)
@ Finish up any post-invoke subMode requirements
- @ interpSave already up-to-date
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPostNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPostNativeInvoke @ (methodToCall, self, fp)
b 7b @ resume
.LstackOverflow: @ r0=methodToCall
@@ -27004,7 +27002,7 @@
PREFETCH_ADVANCE_INST(rINST, r9, 3) @ advance r9, update new rINST
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r1, [r10, #offClassObject_pDvmDex] @ r1<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
#if defined(WITH_JIT)
ldr r10, [r0, #offStackSaveArea_returnAddr] @ r10 = saveArea->returnAddr
mov rPC, r9 @ publish new rPC
@@ -27026,7 +27024,7 @@
@ On entry, r0: StackSaveArea
ldr r1, [r0, #offStackSaveArea_prevFrame] @ r2<- prevFP
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str r1, [rSELF, #offThread_fp] @ update interpSave.fp
+ str r1, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF
bl dvmReportReturn @ (self)
SAVEAREA_FROM_FP(r0, rFP) @ restore StackSaveArea
@@ -27109,7 +27107,7 @@
add sp, sp, #8 @ restore stack
bmi .LnotCaughtLocally
- /* adjust locals to match self->curFrame and updated PC */
+ /* adjust locals to match self->interpSave.curFrame and updated PC */
SAVEAREA_FROM_FP(r1, rFP) @ r1<- new save area
ldr r1, [r1, #offStackSaveArea_method] @ r1<- new method
str r1, [rSELF, #offThread_method] @ self->method = new method
@@ -27135,7 +27133,7 @@
@ Manage debugger bookkeeping
7:
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
+ str rFP, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF @ arg0<- self
mov r1, r9 @ arg1<- exception
bl dvmReportExceptionThrow @ (self, exception)
diff --git a/vm/mterp/out/InterpAsm-armv5te.S b/vm/mterp/out/InterpAsm-armv5te.S
index b46c3ee..665178b 100644
--- a/vm/mterp/out/InterpAsm-armv5te.S
+++ b/vm/mterp/out/InterpAsm-armv5te.S
@@ -82,8 +82,8 @@
/* save/restore the PC and/or FP from the thread struct */
#define LOAD_PC_FROM_SELF() ldr rPC, [rSELF, #offThread_pc]
#define SAVE_PC_TO_SELF() str rPC, [rSELF, #offThread_pc]
-#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_fp]
-#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_fp]
+#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_curFrame]
+#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_curFrame]
#define LOAD_PC_FP_FROM_SELF() ldmia rSELF, {rPC, rFP}
#define SAVE_PC_FP_TO_SELF() stmia rSELF, {rPC, rFP}
@@ -27303,7 +27303,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
cmp r0,#0
bne common_updateProfile
GOTO_OPCODE(ip) @ jump to next instruction
@@ -27311,7 +27311,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
GOTO_OPCODE(ip) @ jump to next instruction
#endif
@@ -27319,7 +27319,6 @@
@ Profiling - record method entry. r0: methodToCall
stmfd sp!, {r0-r3} @ preserve r0-r3
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r1, r0
mov r0, rSELF
bl dvmReportInvoke @ (self, method)
@@ -27331,7 +27330,7 @@
@ r0=methodToCall, r1=newFp, r10=newSaveArea
ldrb lr, [rSELF, #offThread_subMode]
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r10, #offStackSaveArea_localRefCookie] @newFp->localRefCookie=top
mov r2, r0 @ r2<- methodToCall
mov r0, r1 @ r0<- newFp (points to args)
@@ -27359,7 +27358,7 @@
@ equivalent to dvmPopJniLocals
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
bne common_exceptionThrown @ no, handle exception
@@ -27371,11 +27370,10 @@
11:
@ r0=newFp, r1=&retval, r2=methodToCall, r3=self, lr=subModes
stmfd sp!, {r0-r3} @ save all but subModes
- str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPreNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPreNativeInvoke @ (methodToCall, self, fp)
ldmfd sp, {r0-r3} @ refresh. NOTE: no sp autoincrement
@ Call the native method
@@ -27386,10 +27384,10 @@
ldmfd sp!, {r0-r3} @ r2<- methodToCall (others unneeded)
@ Finish up any post-invoke subMode requirements
- @ interpSave already up-to-date
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPostNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPostNativeInvoke @ (methodToCall, self, fp)
b 7b @ resume
.LstackOverflow: @ r0=methodToCall
@@ -27462,7 +27460,7 @@
PREFETCH_ADVANCE_INST(rINST, r9, 3) @ advance r9, update new rINST
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r1, [r10, #offClassObject_pDvmDex] @ r1<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
#if defined(WITH_JIT)
ldr r10, [r0, #offStackSaveArea_returnAddr] @ r10 = saveArea->returnAddr
mov rPC, r9 @ publish new rPC
@@ -27484,7 +27482,7 @@
@ On entry, r0: StackSaveArea
ldr r1, [r0, #offStackSaveArea_prevFrame] @ r2<- prevFP
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str r1, [rSELF, #offThread_fp] @ update interpSave.fp
+ str r1, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF
bl dvmReportReturn @ (self)
SAVEAREA_FROM_FP(r0, rFP) @ restore StackSaveArea
@@ -27567,7 +27565,7 @@
add sp, sp, #8 @ restore stack
bmi .LnotCaughtLocally
- /* adjust locals to match self->curFrame and updated PC */
+ /* adjust locals to match self->interpSave.curFrame and updated PC */
SAVEAREA_FROM_FP(r1, rFP) @ r1<- new save area
ldr r1, [r1, #offStackSaveArea_method] @ r1<- new method
str r1, [rSELF, #offThread_method] @ self->method = new method
@@ -27593,7 +27591,7 @@
@ Manage debugger bookkeeping
7:
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
+ str rFP, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF @ arg0<- self
mov r1, r9 @ arg1<- exception
bl dvmReportExceptionThrow @ (self, exception)
diff --git a/vm/mterp/out/InterpAsm-armv7-a-neon.S b/vm/mterp/out/InterpAsm-armv7-a-neon.S
index 4694cf7..e1f54fb 100644
--- a/vm/mterp/out/InterpAsm-armv7-a-neon.S
+++ b/vm/mterp/out/InterpAsm-armv7-a-neon.S
@@ -82,8 +82,8 @@
/* save/restore the PC and/or FP from the thread struct */
#define LOAD_PC_FROM_SELF() ldr rPC, [rSELF, #offThread_pc]
#define SAVE_PC_TO_SELF() str rPC, [rSELF, #offThread_pc]
-#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_fp]
-#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_fp]
+#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_curFrame]
+#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_curFrame]
#define LOAD_PC_FP_FROM_SELF() ldmia rSELF, {rPC, rFP}
#define SAVE_PC_FP_TO_SELF() stmia rSELF, {rPC, rFP}
@@ -26783,7 +26783,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
cmp r0,#0
bne common_updateProfile
GOTO_OPCODE(ip) @ jump to next instruction
@@ -26791,7 +26791,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
GOTO_OPCODE(ip) @ jump to next instruction
#endif
@@ -26799,7 +26799,6 @@
@ Profiling - record method entry. r0: methodToCall
stmfd sp!, {r0-r3} @ preserve r0-r3
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r1, r0
mov r0, rSELF
bl dvmReportInvoke @ (self, method)
@@ -26811,7 +26810,7 @@
@ r0=methodToCall, r1=newFp, r10=newSaveArea
ldrb lr, [rSELF, #offThread_subMode]
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r10, #offStackSaveArea_localRefCookie] @newFp->localRefCookie=top
mov r2, r0 @ r2<- methodToCall
mov r0, r1 @ r0<- newFp (points to args)
@@ -26839,7 +26838,7 @@
@ equivalent to dvmPopJniLocals
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
bne common_exceptionThrown @ no, handle exception
@@ -26851,11 +26850,10 @@
11:
@ r0=newFp, r1=&retval, r2=methodToCall, r3=self, lr=subModes
stmfd sp!, {r0-r3} @ save all but subModes
- str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPreNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPreNativeInvoke @ (methodToCall, self, fp)
ldmfd sp, {r0-r3} @ refresh. NOTE: no sp autoincrement
@ Call the native method
@@ -26866,10 +26864,10 @@
ldmfd sp!, {r0-r3} @ r2<- methodToCall (others unneeded)
@ Finish up any post-invoke subMode requirements
- @ interpSave already up-to-date
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPostNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPostNativeInvoke @ (methodToCall, self, fp)
b 7b @ resume
.LstackOverflow: @ r0=methodToCall
@@ -26942,7 +26940,7 @@
PREFETCH_ADVANCE_INST(rINST, r9, 3) @ advance r9, update new rINST
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r1, [r10, #offClassObject_pDvmDex] @ r1<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
#if defined(WITH_JIT)
ldr r10, [r0, #offStackSaveArea_returnAddr] @ r10 = saveArea->returnAddr
mov rPC, r9 @ publish new rPC
@@ -26964,7 +26962,7 @@
@ On entry, r0: StackSaveArea
ldr r1, [r0, #offStackSaveArea_prevFrame] @ r2<- prevFP
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str r1, [rSELF, #offThread_fp] @ update interpSave.fp
+ str r1, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF
bl dvmReportReturn @ (self)
SAVEAREA_FROM_FP(r0, rFP) @ restore StackSaveArea
@@ -27047,7 +27045,7 @@
add sp, sp, #8 @ restore stack
bmi .LnotCaughtLocally
- /* adjust locals to match self->curFrame and updated PC */
+ /* adjust locals to match self->interpSave.curFrame and updated PC */
SAVEAREA_FROM_FP(r1, rFP) @ r1<- new save area
ldr r1, [r1, #offStackSaveArea_method] @ r1<- new method
str r1, [rSELF, #offThread_method] @ self->method = new method
@@ -27073,7 +27071,7 @@
@ Manage debugger bookkeeping
7:
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
+ str rFP, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF @ arg0<- self
mov r1, r9 @ arg1<- exception
bl dvmReportExceptionThrow @ (self, exception)
diff --git a/vm/mterp/out/InterpAsm-armv7-a.S b/vm/mterp/out/InterpAsm-armv7-a.S
index 5a291f0..6a36b6d 100644
--- a/vm/mterp/out/InterpAsm-armv7-a.S
+++ b/vm/mterp/out/InterpAsm-armv7-a.S
@@ -82,8 +82,8 @@
/* save/restore the PC and/or FP from the thread struct */
#define LOAD_PC_FROM_SELF() ldr rPC, [rSELF, #offThread_pc]
#define SAVE_PC_TO_SELF() str rPC, [rSELF, #offThread_pc]
-#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_fp]
-#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_fp]
+#define LOAD_FP_FROM_SELF() ldr rFP, [rSELF, #offThread_curFrame]
+#define SAVE_FP_TO_SELF() str rFP, [rSELF, #offThread_curFrame]
#define LOAD_PC_FP_FROM_SELF() ldmia rSELF, {rPC, rFP}
#define SAVE_PC_FP_TO_SELF() stmia rSELF, {rPC, rFP}
@@ -26783,7 +26783,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
cmp r0,#0
bne common_updateProfile
GOTO_OPCODE(ip) @ jump to next instruction
@@ -26791,7 +26791,7 @@
mov rFP, r1 @ fp = newFp
GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9
mov rINST, r9 @ publish new rINST
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
GOTO_OPCODE(ip) @ jump to next instruction
#endif
@@ -26799,7 +26799,6 @@
@ Profiling - record method entry. r0: methodToCall
stmfd sp!, {r0-r3} @ preserve r0-r3
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r1, r0
mov r0, rSELF
bl dvmReportInvoke @ (self, method)
@@ -26811,7 +26810,7 @@
@ r0=methodToCall, r1=newFp, r10=newSaveArea
ldrb lr, [rSELF, #offThread_subMode]
ldr r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
- str r1, [rSELF, #offThread_curFrame] @ self->curFrame = newFp
+ str r1, [rSELF, #offThread_curFrame] @ curFrame = newFp
str r9, [r10, #offStackSaveArea_localRefCookie] @newFp->localRefCookie=top
mov r2, r0 @ r2<- methodToCall
mov r0, r1 @ r0<- newFp (points to args)
@@ -26839,7 +26838,7 @@
@ equivalent to dvmPopJniLocals
ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved top
ldr r1, [rSELF, #offThread_exception] @ check for exception
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
cmp r1, #0 @ null?
str r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
bne common_exceptionThrown @ no, handle exception
@@ -26851,11 +26850,10 @@
11:
@ r0=newFp, r1=&retval, r2=methodToCall, r3=self, lr=subModes
stmfd sp!, {r0-r3} @ save all but subModes
- str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPreNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPreNativeInvoke @ (methodToCall, self, fp)
ldmfd sp, {r0-r3} @ refresh. NOTE: no sp autoincrement
@ Call the native method
@@ -26866,10 +26864,10 @@
ldmfd sp!, {r0-r3} @ r2<- methodToCall (others unneeded)
@ Finish up any post-invoke subMode requirements
- @ interpSave already up-to-date
mov r0, r2 @ r0<- methodToCall
mov r1, rSELF
- bl dvmReportPostNativeInvoke @ (methodToCall, self)
+ mov r2, rFP
+ bl dvmReportPostNativeInvoke @ (methodToCall, self, fp)
b 7b @ resume
.LstackOverflow: @ r0=methodToCall
@@ -26942,7 +26940,7 @@
PREFETCH_ADVANCE_INST(rINST, r9, 3) @ advance r9, update new rINST
str r2, [rSELF, #offThread_method]@ self->method = newSave->method
ldr r1, [r10, #offClassObject_pDvmDex] @ r1<- method->clazz->pDvmDex
- str rFP, [rSELF, #offThread_curFrame] @ self->curFrame = fp
+ str rFP, [rSELF, #offThread_curFrame] @ curFrame = fp
#if defined(WITH_JIT)
ldr r10, [r0, #offStackSaveArea_returnAddr] @ r10 = saveArea->returnAddr
mov rPC, r9 @ publish new rPC
@@ -26964,7 +26962,7 @@
@ On entry, r0: StackSaveArea
ldr r1, [r0, #offStackSaveArea_prevFrame] @ r2<- prevFP
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str r1, [rSELF, #offThread_fp] @ update interpSave.fp
+ str r1, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF
bl dvmReportReturn @ (self)
SAVEAREA_FROM_FP(r0, rFP) @ restore StackSaveArea
@@ -27047,7 +27045,7 @@
add sp, sp, #8 @ restore stack
bmi .LnotCaughtLocally
- /* adjust locals to match self->curFrame and updated PC */
+ /* adjust locals to match self->interpSave.curFrame and updated PC */
SAVEAREA_FROM_FP(r1, rFP) @ r1<- new save area
ldr r1, [r1, #offStackSaveArea_method] @ r1<- new method
str r1, [rSELF, #offThread_method] @ self->method = new method
@@ -27073,7 +27071,7 @@
@ Manage debugger bookkeeping
7:
str rPC, [rSELF, #offThread_pc] @ update interpSave.pc
- str rFP, [rSELF, #offThread_fp] @ update interpSave.fp
+ str rFP, [rSELF, #offThread_curFrame] @ update interpSave.curFrame
mov r0, rSELF @ arg0<- self
mov r1, r9 @ arg1<- exception
bl dvmReportExceptionThrow @ (self, exception)
diff --git a/vm/mterp/out/InterpAsm-x86.S b/vm/mterp/out/InterpAsm-x86.S
index 68fccd1..5ae3fc3 100644
--- a/vm/mterp/out/InterpAsm-x86.S
+++ b/vm/mterp/out/InterpAsm-x86.S
@@ -130,13 +130,13 @@
.macro SAVE_PC_FP_TO_SELF _reg
movl rSELF,\_reg
movl rPC,offThread_pc(\_reg)
- movl rFP,offThread_fp(\_reg)
+ movl rFP,offThread_curFrame(\_reg)
.endm
.macro LOAD_PC_FP_FROM_SELF
movl rSELF,rFP
movl offThread_pc(rFP),rPC
- movl offThread_fp(rFP),rFP
+ movl offThread_curFrame(rFP),rFP
.endm
/* The interpreter assumes a properly aligned stack on entry, and
@@ -25880,7 +25880,7 @@
/* Set up "named" registers */
movl offThread_pc(%ecx),rPC
- movl offThread_fp(%ecx),rFP
+ movl offThread_curFrame(%ecx),rFP
movl offThread_curHandlerTable(%ecx),rIBASE
/* Remember %esp for future "longjmp" */
@@ -26324,7 +26324,7 @@
movl offMethod_insns(%eax), rPC # rPC<- methodToCall->insns
movl $1, offThread_debugIsMethodEntry(%ecx)
movl LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP
- movl rFP, offThread_curFrame(%ecx) # self->curFrame<- newFP
+ movl rFP, offThread_curFrame(%ecx) # curFrame<-newFP
movl offThread_curHandlerTable(%ecx),rIBASE
FETCH_INST
GOTO_NEXT # jump to methodToCall->insns
@@ -26339,7 +26339,6 @@
SPILL_TMP1(%eax) # preserve methodToCall
SPILL_TMP2(%edx) # preserve newSaveArea
movl rPC, offThread_pc(%ecx) # update interpSave.pc
- movl rFP, offThread_fp(%ecx) # update interpSave.fp
movl %ecx, OUT_ARG0(%esp)
movl %eax, OUT_ARG1(%esp)
call dvmReportInvoke # (self, method)
@@ -26358,7 +26357,7 @@
movl rINST, offStackSaveArea_localRefCookie(%edx) # newSaveArea->localRefCookie<- top
movl %edx, LOCAL2_OFFSET(%ebp) # save newSaveArea
movl LOCAL1_OFFSET(%ebp), rINST # rINST<- newFP
- movl rINST, offThread_curFrame(%ecx) # self->curFrame<- newFP
+ movl rINST, offThread_curFrame(%ecx) # curFrame<- newFP
cmpb $0, offThread_subMode(%ecx) # Anything special going on?
jne 11f # yes - handle it
movl %ecx, OUT_ARG3(%esp) # push parameter self
@@ -26372,7 +26371,7 @@
movl rSELF, %eax # %eax<- self
movl offStackSaveArea_localRefCookie(%ecx), %edx # %edx<- old top
cmp $0, offThread_exception(%eax) # check for exception
- movl rFP, offThread_curFrame(%eax) # self->curFrame<- rFP
+ movl rFP, offThread_curFrame(%eax) # curFrame<- rFP
movl %edx, offThread_jniLocal_topCookie(%eax) # new top <- old top
jne common_exceptionThrown # handle exception
movl offThread_curHandlerTable(%eax),rIBASE
@@ -26387,10 +26386,10 @@
*/
SPILL_TMP1(%eax) # save methodTocall
movl rPC, offThread_pc(%ecx)
- movl rFP, offThread_fp(%ecx)
movl %ecx, OUT_ARG0(%esp)
movl %eax, OUT_ARG1(%esp)
- call dvmReportPreNativeInvoke # (self, methodToCall)
+ movl rFP, OUT_ARG2(%esp)
+ call dvmReportPreNativeInvoke # (self, methodToCall, fp)
UNSPILL_TMP1(%eax) # restore methodToCall
movl rSELF,%ecx # restore self
@@ -26406,7 +26405,8 @@
movl rSELF, %ecx
movl %ecx, OUT_ARG0(%esp)
movl %eax, OUT_ARG1(%esp)
- call dvmReportPostNativeInvoke # (self, methodToCall)
+ movl rFP, OUT_ARG2(%esp)
+ call dvmReportPostNativeInvoke # (self, methodToCall, fp)
jmp 7b # rejoin
.LstackOverflow: # eax=methodToCall
@@ -26433,7 +26433,7 @@
movl offStackSaveArea_savedPc(%eax),rPC # pc<- saveArea->savedPC
movl rINST,offThread_method(%ecx) # self->method = newSave->meethod
- movl rFP,offThread_curFrame(%ecx) # self->curFrame = fp
+ movl rFP,offThread_curFrame(%ecx) # curFrame = fp
movl offMethod_clazz(rINST),%eax # eax<- method->clazz
movl offThread_curHandlerTable(%ecx),rIBASE
movl offClassObject_pDvmDex(%eax),rINST # rINST<- method->clazz->pDvmDex
@@ -26447,7 +26447,7 @@
* Handle special subMode actions
* On entry, rFP: prevFP, %ecx: self, %eax: saveArea
*/
- movl rFP, offThread_fp(%ecx) # update interpSave.fp
+ movl rFP, offThread_curFrame(%ecx) # update interpSave.curFrame
movl rPC, offThread_pc(%ecx) # update interpSave.pc
movl %ecx, OUT_ARG0(%esp) # parameter self
call dvmReportReturn # (self)
@@ -26468,7 +26468,7 @@
*/
common_gotoBail:
movl rPC,offThread_pc(%ecx) # export state to self
- movl rFP,offThread_fp(%ecx)
+ movl rFP,offThread_curFrame(%ecx)
movl %ecx,OUT_ARG0(%esp) # self in arg0
movl rINST,OUT_ARG1(%esp) # changeInterp in arg1
call dvmMterpStdBail # bail out....
@@ -26481,7 +26481,7 @@
common_resumeAfterGlueCall:
movl rSELF, %eax
movl offThread_pc(%eax),rPC
- movl offThread_fp(%eax),rFP
+ movl offThread_curFrame(%eax),rFP
movl offThread_curHandlerTable(%eax),rIBASE
FETCH_INST
GOTO_NEXT
@@ -26556,7 +26556,7 @@
common_exceptionThrown:
movl rSELF,%ecx
movl rPC,offThread_pc(%ecx)
- movl rFP,offThread_fp(%ecx)
+ movl rFP,offThread_curFrame(%ecx)
movl %ecx,OUT_ARG0(%esp)
call dvmMterp_exceptionThrown
jmp common_resumeAfterGlueCall
diff --git a/vm/mterp/out/InterpC-allstubs.cpp b/vm/mterp/out/InterpC-allstubs.cpp
index 7859c2d..1356597 100644
--- a/vm/mterp/out/InterpC-allstubs.cpp
+++ b/vm/mterp/out/InterpC-allstubs.cpp
@@ -406,7 +406,7 @@
*/
#define retval self->retval
#define pc self->interpSave.pc
-#define fp self->interpSave.fp
+#define fp self->interpSave.curFrame
#define curMethod self->interpSave.method
#define methodClassDex self->interpSave.methodClassDex
#define debugTrackedRefStart self->interpSave.debugTrackedRefStart
@@ -426,6 +426,7 @@
* the interpSave vars directly, so this is a nop for stubs.
*/
#define PC_FP_TO_SELF()
+#define PC_TO_SELF()
/*
* Opcode handler framing macros. Here, each opcode is a separate function
@@ -5053,7 +5054,7 @@
}
/* update thread FP, and reset local variables */
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -5190,10 +5191,10 @@
#endif
/*
- * Adjust local variables to match self->curFrame and the
+ * Adjust local variables to match self->interpSave.curFrame and the
* updated PC.
*/
- //fp = (u4*) self->curFrame;
+ //fp = (u4*) self->interpSave.curFrame;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -5372,7 +5373,7 @@
* calls. For native calls, we'll mark EXIT on return.
* For non-native calls, EXIT is marked in the RETURN op.
*/
- PC_FP_TO_SELF();
+ PC_TO_SELF();
dvmReportInvoke(self, methodToCall);
}
@@ -5385,7 +5386,7 @@
self->interpSave.method = curMethod;
methodClassDex = curMethod->clazz->pDvmDex;
pc = methodToCall->insns;
- self->curFrame = fp = newFp;
+ self->interpSave.curFrame = fp = newFp;
#ifdef EASY_GDB
debugSaveArea = SAVEAREA_FROM_FP(newFp);
#endif
@@ -5398,13 +5399,12 @@
/* set this up for JNI locals, even if not a JNI native */
newSaveArea->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
- self->curFrame = newFp;
+ self->interpSave.curFrame = newFp;
DUMP_REGS(methodToCall, newFp, true); // show input args
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPreNativeInvoke(methodToCall, self);
+ dvmReportPreNativeInvoke(methodToCall, self, fp);
}
ILOGD("> native <-- %s.%s %s", methodToCall->clazz->descriptor,
@@ -5418,13 +5418,12 @@
(*methodToCall->nativeFunc)(newFp, &retval, methodToCall, self);
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPostNativeInvoke(methodToCall, self);
+ dvmReportPostNativeInvoke(methodToCall, self, fp);
}
/* pop frame off */
dvmPopJniLocals(self, newSaveArea);
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
/*
* If the native code threw an exception, or interpreted code
diff --git a/vm/mterp/out/InterpC-armv5te-vfp.cpp b/vm/mterp/out/InterpC-armv5te-vfp.cpp
index 8c3a4c0..4f69687 100644
--- a/vm/mterp/out/InterpC-armv5te-vfp.cpp
+++ b/vm/mterp/out/InterpC-armv5te-vfp.cpp
@@ -406,7 +406,7 @@
*/
#define retval self->retval
#define pc self->interpSave.pc
-#define fp self->interpSave.fp
+#define fp self->interpSave.curFrame
#define curMethod self->interpSave.method
#define methodClassDex self->interpSave.methodClassDex
#define debugTrackedRefStart self->interpSave.debugTrackedRefStart
@@ -426,6 +426,7 @@
* the interpSave vars directly, so this is a nop for stubs.
*/
#define PC_FP_TO_SELF()
+#define PC_TO_SELF()
/*
* Opcode handler framing macros. Here, each opcode is a separate function
diff --git a/vm/mterp/out/InterpC-armv5te.cpp b/vm/mterp/out/InterpC-armv5te.cpp
index 7503ddc..c55f481 100644
--- a/vm/mterp/out/InterpC-armv5te.cpp
+++ b/vm/mterp/out/InterpC-armv5te.cpp
@@ -406,7 +406,7 @@
*/
#define retval self->retval
#define pc self->interpSave.pc
-#define fp self->interpSave.fp
+#define fp self->interpSave.curFrame
#define curMethod self->interpSave.method
#define methodClassDex self->interpSave.methodClassDex
#define debugTrackedRefStart self->interpSave.debugTrackedRefStart
@@ -426,6 +426,7 @@
* the interpSave vars directly, so this is a nop for stubs.
*/
#define PC_FP_TO_SELF()
+#define PC_TO_SELF()
/*
* Opcode handler framing macros. Here, each opcode is a separate function
diff --git a/vm/mterp/out/InterpC-armv7-a-neon.cpp b/vm/mterp/out/InterpC-armv7-a-neon.cpp
index ba9f8a2..18ebfd3 100644
--- a/vm/mterp/out/InterpC-armv7-a-neon.cpp
+++ b/vm/mterp/out/InterpC-armv7-a-neon.cpp
@@ -406,7 +406,7 @@
*/
#define retval self->retval
#define pc self->interpSave.pc
-#define fp self->interpSave.fp
+#define fp self->interpSave.curFrame
#define curMethod self->interpSave.method
#define methodClassDex self->interpSave.methodClassDex
#define debugTrackedRefStart self->interpSave.debugTrackedRefStart
@@ -426,6 +426,7 @@
* the interpSave vars directly, so this is a nop for stubs.
*/
#define PC_FP_TO_SELF()
+#define PC_TO_SELF()
/*
* Opcode handler framing macros. Here, each opcode is a separate function
diff --git a/vm/mterp/out/InterpC-armv7-a.cpp b/vm/mterp/out/InterpC-armv7-a.cpp
index 3c24b7b..e423623 100644
--- a/vm/mterp/out/InterpC-armv7-a.cpp
+++ b/vm/mterp/out/InterpC-armv7-a.cpp
@@ -406,7 +406,7 @@
*/
#define retval self->retval
#define pc self->interpSave.pc
-#define fp self->interpSave.fp
+#define fp self->interpSave.curFrame
#define curMethod self->interpSave.method
#define methodClassDex self->interpSave.methodClassDex
#define debugTrackedRefStart self->interpSave.debugTrackedRefStart
@@ -426,6 +426,7 @@
* the interpSave vars directly, so this is a nop for stubs.
*/
#define PC_FP_TO_SELF()
+#define PC_TO_SELF()
/*
* Opcode handler framing macros. Here, each opcode is a separate function
diff --git a/vm/mterp/out/InterpC-portable.cpp b/vm/mterp/out/InterpC-portable.cpp
index 593a7f7..5bc368f 100644
--- a/vm/mterp/out/InterpC-portable.cpp
+++ b/vm/mterp/out/InterpC-portable.cpp
@@ -403,7 +403,8 @@
*/
#define PC_FP_TO_SELF() \
self->interpSave.pc = pc; \
- self->interpSave.fp = fp;
+ self->interpSave.curFrame = fp;
+#define PC_TO_SELF() self->interpSave.pc = pc;
/*
* Instruction framing. For a switch-oriented implementation this is
@@ -1232,7 +1233,7 @@
void dvmInterpretPortable(Thread* self)
{
#if defined(EASY_GDB)
- StackSaveArea* debugSaveArea = SAVEAREA_FROM_FP(self->curFrame);
+ StackSaveArea* debugSaveArea = SAVEAREA_FROM_FP(self->interpSave.curFrame);
#endif
#if defined(WITH_TRACKREF_CHECKS)
int debugTrackedRefStart = self->interpSave.debugTrackedRefStart;
@@ -1260,7 +1261,7 @@
/* copy state in */
curMethod = self->interpSave.method;
pc = self->interpSave.pc;
- fp = self->interpSave.fp;
+ fp = self->interpSave.curFrame;
retval = self->retval; /* only need for kInterpEntryReturn? */
methodClassDex = curMethod->clazz->pDvmDex;
@@ -1285,7 +1286,7 @@
if (self->debugIsMethodEntry) {
ILOGD("|-- Now interpreting %s.%s", curMethod->clazz->descriptor,
curMethod->name);
- DUMP_REGS(curMethod, self->interpSave.fp, false);
+ DUMP_REGS(curMethod, self->interpSave.curFrame, false);
}
#endif
@@ -5012,7 +5013,7 @@
}
/* update thread FP, and reset local variables */
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -5149,10 +5150,10 @@
#endif
/*
- * Adjust local variables to match self->curFrame and the
+ * Adjust local variables to match self->interpSave.curFrame and the
* updated PC.
*/
- //fp = (u4*) self->curFrame;
+ //fp = (u4*) self->interpSave.curFrame;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -5331,7 +5332,7 @@
* calls. For native calls, we'll mark EXIT on return.
* For non-native calls, EXIT is marked in the RETURN op.
*/
- PC_FP_TO_SELF();
+ PC_TO_SELF();
dvmReportInvoke(self, methodToCall);
}
@@ -5344,7 +5345,7 @@
self->interpSave.method = curMethod;
methodClassDex = curMethod->clazz->pDvmDex;
pc = methodToCall->insns;
- self->curFrame = fp = newFp;
+ self->interpSave.curFrame = fp = newFp;
#ifdef EASY_GDB
debugSaveArea = SAVEAREA_FROM_FP(newFp);
#endif
@@ -5357,13 +5358,12 @@
/* set this up for JNI locals, even if not a JNI native */
newSaveArea->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
- self->curFrame = newFp;
+ self->interpSave.curFrame = newFp;
DUMP_REGS(methodToCall, newFp, true); // show input args
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPreNativeInvoke(methodToCall, self);
+ dvmReportPreNativeInvoke(methodToCall, self, fp);
}
ILOGD("> native <-- %s.%s %s", methodToCall->clazz->descriptor,
@@ -5377,13 +5377,12 @@
(*methodToCall->nativeFunc)(newFp, &retval, methodToCall, self);
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPostNativeInvoke(methodToCall, self);
+ dvmReportPostNativeInvoke(methodToCall, self, fp);
}
/* pop frame off */
dvmPopJniLocals(self, newSaveArea);
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
/*
* If the native code threw an exception, or interpreted code
diff --git a/vm/mterp/out/InterpC-x86-atom.cpp b/vm/mterp/out/InterpC-x86-atom.cpp
index 5483b84..f91c1f8 100644
--- a/vm/mterp/out/InterpC-x86-atom.cpp
+++ b/vm/mterp/out/InterpC-x86-atom.cpp
@@ -406,7 +406,7 @@
*/
#define retval self->retval
#define pc self->interpSave.pc
-#define fp self->interpSave.fp
+#define fp self->interpSave.curFrame
#define curMethod self->interpSave.method
#define methodClassDex self->interpSave.methodClassDex
#define debugTrackedRefStart self->interpSave.debugTrackedRefStart
@@ -426,6 +426,7 @@
* the interpSave vars directly, so this is a nop for stubs.
*/
#define PC_FP_TO_SELF()
+#define PC_TO_SELF()
/*
* Opcode handler framing macros. Here, each opcode is a separate function
@@ -2142,7 +2143,7 @@
}
/* update thread FP, and reset local variables */
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -2279,10 +2280,10 @@
#endif
/*
- * Adjust local variables to match self->curFrame and the
+ * Adjust local variables to match self->interpSave.curFrame and the
* updated PC.
*/
- //fp = (u4*) self->curFrame;
+ //fp = (u4*) self->interpSave.curFrame;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -2461,7 +2462,7 @@
* calls. For native calls, we'll mark EXIT on return.
* For non-native calls, EXIT is marked in the RETURN op.
*/
- PC_FP_TO_SELF();
+ PC_TO_SELF();
dvmReportInvoke(self, methodToCall);
}
@@ -2474,7 +2475,7 @@
self->interpSave.method = curMethod;
methodClassDex = curMethod->clazz->pDvmDex;
pc = methodToCall->insns;
- self->curFrame = fp = newFp;
+ self->interpSave.curFrame = fp = newFp;
#ifdef EASY_GDB
debugSaveArea = SAVEAREA_FROM_FP(newFp);
#endif
@@ -2487,13 +2488,12 @@
/* set this up for JNI locals, even if not a JNI native */
newSaveArea->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
- self->curFrame = newFp;
+ self->interpSave.curFrame = newFp;
DUMP_REGS(methodToCall, newFp, true); // show input args
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPreNativeInvoke(methodToCall, self);
+ dvmReportPreNativeInvoke(methodToCall, self, fp);
}
ILOGD("> native <-- %s.%s %s", methodToCall->clazz->descriptor,
@@ -2507,13 +2507,12 @@
(*methodToCall->nativeFunc)(newFp, &retval, methodToCall, self);
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPostNativeInvoke(methodToCall, self);
+ dvmReportPostNativeInvoke(methodToCall, self, fp);
}
/* pop frame off */
dvmPopJniLocals(self, newSaveArea);
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
/*
* If the native code threw an exception, or interpreted code
diff --git a/vm/mterp/out/InterpC-x86.cpp b/vm/mterp/out/InterpC-x86.cpp
index ce4435b..1f8d9f2 100644
--- a/vm/mterp/out/InterpC-x86.cpp
+++ b/vm/mterp/out/InterpC-x86.cpp
@@ -406,7 +406,7 @@
*/
#define retval self->retval
#define pc self->interpSave.pc
-#define fp self->interpSave.fp
+#define fp self->interpSave.curFrame
#define curMethod self->interpSave.method
#define methodClassDex self->interpSave.methodClassDex
#define debugTrackedRefStart self->interpSave.debugTrackedRefStart
@@ -426,6 +426,7 @@
* the interpSave vars directly, so this is a nop for stubs.
*/
#define PC_FP_TO_SELF()
+#define PC_TO_SELF()
/*
* Opcode handler framing macros. Here, each opcode is a separate function
@@ -2084,7 +2085,7 @@
}
/* update thread FP, and reset local variables */
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -2221,10 +2222,10 @@
#endif
/*
- * Adjust local variables to match self->curFrame and the
+ * Adjust local variables to match self->interpSave.curFrame and the
* updated PC.
*/
- //fp = (u4*) self->curFrame;
+ //fp = (u4*) self->interpSave.curFrame;
curMethod = SAVEAREA_FROM_FP(fp)->method;
self->interpSave.method = curMethod;
//methodClass = curMethod->clazz;
@@ -2403,7 +2404,7 @@
* calls. For native calls, we'll mark EXIT on return.
* For non-native calls, EXIT is marked in the RETURN op.
*/
- PC_FP_TO_SELF();
+ PC_TO_SELF();
dvmReportInvoke(self, methodToCall);
}
@@ -2416,7 +2417,7 @@
self->interpSave.method = curMethod;
methodClassDex = curMethod->clazz->pDvmDex;
pc = methodToCall->insns;
- self->curFrame = fp = newFp;
+ self->interpSave.curFrame = fp = newFp;
#ifdef EASY_GDB
debugSaveArea = SAVEAREA_FROM_FP(newFp);
#endif
@@ -2429,13 +2430,12 @@
/* set this up for JNI locals, even if not a JNI native */
newSaveArea->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
- self->curFrame = newFp;
+ self->interpSave.curFrame = newFp;
DUMP_REGS(methodToCall, newFp, true); // show input args
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPreNativeInvoke(methodToCall, self);
+ dvmReportPreNativeInvoke(methodToCall, self, fp);
}
ILOGD("> native <-- %s.%s %s", methodToCall->clazz->descriptor,
@@ -2449,13 +2449,12 @@
(*methodToCall->nativeFunc)(newFp, &retval, methodToCall, self);
if (self->interpBreak.ctl.subMode != 0) {
- PC_FP_TO_SELF();
- dvmReportPostNativeInvoke(methodToCall, self);
+ dvmReportPostNativeInvoke(methodToCall, self, fp);
}
/* pop frame off */
dvmPopJniLocals(self, newSaveArea);
- self->curFrame = fp;
+ self->interpSave.curFrame = fp;
/*
* If the native code threw an exception, or interpreted code
diff --git a/vm/mterp/portable/entry.cpp b/vm/mterp/portable/entry.cpp
index 485fa82..dddf136 100644
--- a/vm/mterp/portable/entry.cpp
+++ b/vm/mterp/portable/entry.cpp
@@ -6,7 +6,7 @@
void dvmInterpretPortable(Thread* self)
{
#if defined(EASY_GDB)
- StackSaveArea* debugSaveArea = SAVEAREA_FROM_FP(self->curFrame);
+ StackSaveArea* debugSaveArea = SAVEAREA_FROM_FP(self->interpSave.curFrame);
#endif
#if defined(WITH_TRACKREF_CHECKS)
int debugTrackedRefStart = self->interpSave.debugTrackedRefStart;
@@ -34,7 +34,7 @@
/* copy state in */
curMethod = self->interpSave.method;
pc = self->interpSave.pc;
- fp = self->interpSave.fp;
+ fp = self->interpSave.curFrame;
retval = self->retval; /* only need for kInterpEntryReturn? */
methodClassDex = curMethod->clazz->pDvmDex;
@@ -59,7 +59,7 @@
if (self->debugIsMethodEntry) {
ILOGD("|-- Now interpreting %s.%s", curMethod->clazz->descriptor,
curMethod->name);
- DUMP_REGS(curMethod, self->interpSave.fp, false);
+ DUMP_REGS(curMethod, self->interpSave.curFrame, false);
}
#endif
diff --git a/vm/mterp/portable/stubdefs.cpp b/vm/mterp/portable/stubdefs.cpp
index de9a8e7..57ff35c 100644
--- a/vm/mterp/portable/stubdefs.cpp
+++ b/vm/mterp/portable/stubdefs.cpp
@@ -21,7 +21,8 @@
*/
#define PC_FP_TO_SELF() \
self->interpSave.pc = pc; \
- self->interpSave.fp = fp;
+ self->interpSave.curFrame = fp;
+#define PC_TO_SELF() self->interpSave.pc = pc;
/*
* Instruction framing. For a switch-oriented implementation this is
diff --git a/vm/mterp/x86/entry.S b/vm/mterp/x86/entry.S
index b6f944a..3e2a708 100644
--- a/vm/mterp/x86/entry.S
+++ b/vm/mterp/x86/entry.S
@@ -43,7 +43,7 @@
/* Set up "named" registers */
movl offThread_pc(%ecx),rPC
- movl offThread_fp(%ecx),rFP
+ movl offThread_curFrame(%ecx),rFP
movl offThread_curHandlerTable(%ecx),rIBASE
/* Remember %esp for future "longjmp" */
diff --git a/vm/mterp/x86/footer.S b/vm/mterp/x86/footer.S
index b79d8cf..c9a88c1 100644
--- a/vm/mterp/x86/footer.S
+++ b/vm/mterp/x86/footer.S
@@ -393,7 +393,7 @@
movl offMethod_insns(%eax), rPC # rPC<- methodToCall->insns
movl $$1, offThread_debugIsMethodEntry(%ecx)
movl LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP
- movl rFP, offThread_curFrame(%ecx) # self->curFrame<- newFP
+ movl rFP, offThread_curFrame(%ecx) # curFrame<-newFP
movl offThread_curHandlerTable(%ecx),rIBASE
FETCH_INST
GOTO_NEXT # jump to methodToCall->insns
@@ -408,7 +408,6 @@
SPILL_TMP1(%eax) # preserve methodToCall
SPILL_TMP2(%edx) # preserve newSaveArea
movl rPC, offThread_pc(%ecx) # update interpSave.pc
- movl rFP, offThread_fp(%ecx) # update interpSave.fp
movl %ecx, OUT_ARG0(%esp)
movl %eax, OUT_ARG1(%esp)
call dvmReportInvoke # (self, method)
@@ -427,7 +426,7 @@
movl rINST, offStackSaveArea_localRefCookie(%edx) # newSaveArea->localRefCookie<- top
movl %edx, LOCAL2_OFFSET(%ebp) # save newSaveArea
movl LOCAL1_OFFSET(%ebp), rINST # rINST<- newFP
- movl rINST, offThread_curFrame(%ecx) # self->curFrame<- newFP
+ movl rINST, offThread_curFrame(%ecx) # curFrame<- newFP
cmpb $$0, offThread_subMode(%ecx) # Anything special going on?
jne 11f # yes - handle it
movl %ecx, OUT_ARG3(%esp) # push parameter self
@@ -441,7 +440,7 @@
movl rSELF, %eax # %eax<- self
movl offStackSaveArea_localRefCookie(%ecx), %edx # %edx<- old top
cmp $$0, offThread_exception(%eax) # check for exception
- movl rFP, offThread_curFrame(%eax) # self->curFrame<- rFP
+ movl rFP, offThread_curFrame(%eax) # curFrame<- rFP
movl %edx, offThread_jniLocal_topCookie(%eax) # new top <- old top
jne common_exceptionThrown # handle exception
movl offThread_curHandlerTable(%eax),rIBASE
@@ -456,10 +455,10 @@
*/
SPILL_TMP1(%eax) # save methodTocall
movl rPC, offThread_pc(%ecx)
- movl rFP, offThread_fp(%ecx)
movl %ecx, OUT_ARG0(%esp)
movl %eax, OUT_ARG1(%esp)
- call dvmReportPreNativeInvoke # (self, methodToCall)
+ movl rFP, OUT_ARG2(%esp)
+ call dvmReportPreNativeInvoke # (self, methodToCall, fp)
UNSPILL_TMP1(%eax) # restore methodToCall
movl rSELF,%ecx # restore self
@@ -475,7 +474,8 @@
movl rSELF, %ecx
movl %ecx, OUT_ARG0(%esp)
movl %eax, OUT_ARG1(%esp)
- call dvmReportPostNativeInvoke # (self, methodToCall)
+ movl rFP, OUT_ARG2(%esp)
+ call dvmReportPostNativeInvoke # (self, methodToCall, fp)
jmp 7b # rejoin
.LstackOverflow: # eax=methodToCall
@@ -502,7 +502,7 @@
movl offStackSaveArea_savedPc(%eax),rPC # pc<- saveArea->savedPC
movl rINST,offThread_method(%ecx) # self->method = newSave->meethod
- movl rFP,offThread_curFrame(%ecx) # self->curFrame = fp
+ movl rFP,offThread_curFrame(%ecx) # curFrame = fp
movl offMethod_clazz(rINST),%eax # eax<- method->clazz
movl offThread_curHandlerTable(%ecx),rIBASE
movl offClassObject_pDvmDex(%eax),rINST # rINST<- method->clazz->pDvmDex
@@ -516,7 +516,7 @@
* Handle special subMode actions
* On entry, rFP: prevFP, %ecx: self, %eax: saveArea
*/
- movl rFP, offThread_fp(%ecx) # update interpSave.fp
+ movl rFP, offThread_curFrame(%ecx) # update interpSave.curFrame
movl rPC, offThread_pc(%ecx) # update interpSave.pc
movl %ecx, OUT_ARG0(%esp) # parameter self
call dvmReportReturn # (self)
@@ -537,7 +537,7 @@
*/
common_gotoBail:
movl rPC,offThread_pc(%ecx) # export state to self
- movl rFP,offThread_fp(%ecx)
+ movl rFP,offThread_curFrame(%ecx)
movl %ecx,OUT_ARG0(%esp) # self in arg0
movl rINST,OUT_ARG1(%esp) # changeInterp in arg1
call dvmMterpStdBail # bail out....
@@ -550,7 +550,7 @@
common_resumeAfterGlueCall:
movl rSELF, %eax
movl offThread_pc(%eax),rPC
- movl offThread_fp(%eax),rFP
+ movl offThread_curFrame(%eax),rFP
movl offThread_curHandlerTable(%eax),rIBASE
FETCH_INST
GOTO_NEXT
@@ -625,7 +625,7 @@
common_exceptionThrown:
movl rSELF,%ecx
movl rPC,offThread_pc(%ecx)
- movl rFP,offThread_fp(%ecx)
+ movl rFP,offThread_curFrame(%ecx)
movl %ecx,OUT_ARG0(%esp)
call dvmMterp_exceptionThrown
jmp common_resumeAfterGlueCall
diff --git a/vm/mterp/x86/header.S b/vm/mterp/x86/header.S
index 0a34a6f..6f3be0c 100644
--- a/vm/mterp/x86/header.S
+++ b/vm/mterp/x86/header.S
@@ -123,13 +123,13 @@
.macro SAVE_PC_FP_TO_SELF _reg
movl rSELF,\_reg
movl rPC,offThread_pc(\_reg)
- movl rFP,offThread_fp(\_reg)
+ movl rFP,offThread_curFrame(\_reg)
.endm
.macro LOAD_PC_FP_FROM_SELF
movl rSELF,rFP
movl offThread_pc(rFP),rPC
- movl offThread_fp(rFP),rFP
+ movl offThread_curFrame(rFP),rFP
.endm
/* The interpreter assumes a properly aligned stack on entry, and
diff --git a/vm/native/dalvik_system_VMStack.cpp b/vm/native/dalvik_system_VMStack.cpp
index 62efe40..e69fa93 100644
--- a/vm/native/dalvik_system_VMStack.cpp
+++ b/vm/native/dalvik_system_VMStack.cpp
@@ -29,7 +29,8 @@
static void Dalvik_dalvik_system_VMStack_getCallingClassLoader(const u4* args,
JValue* pResult)
{
- ClassObject* clazz = dvmGetCaller2Class(dvmThreadSelf()->curFrame);
+ ClassObject* clazz =
+ dvmGetCaller2Class(dvmThreadSelf()->interpSave.curFrame);
UNUSED_PARAMETER(args);
@@ -46,7 +47,8 @@
static void Dalvik_dalvik_system_VMStack_getCallingClassLoader2(const u4* args,
JValue* pResult)
{
- ClassObject* clazz = dvmGetCaller3Class(dvmThreadSelf()->curFrame);
+ ClassObject* clazz =
+ dvmGetCaller3Class(dvmThreadSelf()->interpSave.curFrame);
UNUSED_PARAMETER(args);
@@ -63,7 +65,8 @@
static void Dalvik_dalvik_system_VMStack_getStackClass2(const u4* args,
JValue* pResult)
{
- ClassObject* clazz = dvmGetCaller3Class(dvmThreadSelf()->curFrame);
+ ClassObject* clazz =
+ dvmGetCaller3Class(dvmThreadSelf()->interpSave.curFrame);
UNUSED_PARAMETER(args);
@@ -88,7 +91,7 @@
/*
* Get an array with the stack trace in it.
*/
- void *fp = dvmThreadSelf()->curFrame;
+ void *fp = dvmThreadSelf()->interpSave.curFrame;
size_t depth = dvmComputeExactFrameDepth(fp);
UniquePtr<const Method*[]> methods(new const Method*[depth]);
dvmFillStackTraceArray(fp, methods.get(), depth);
diff --git a/vm/native/java_lang_Class.cpp b/vm/native/java_lang_Class.cpp
index f05faef..790e7b7 100644
--- a/vm/native/java_lang_Class.cpp
+++ b/vm/native/java_lang_Class.cpp
@@ -536,7 +536,7 @@
* constructor must be public or, if the caller is in the same package,
* have package scope.
*/
- ClassObject* callerClass = dvmGetCaller2Class(self->curFrame);
+ ClassObject* callerClass = dvmGetCaller2Class(self->interpSave.curFrame);
if (!dvmCheckClassAccess(callerClass, clazz)) {
LOGD("newInstance failed: %s not accessible to %s\n",
diff --git a/vm/native/java_lang_reflect_Field.cpp b/vm/native/java_lang_reflect_Field.cpp
index 2e8aab5..dc7d556 100644
--- a/vm/native/java_lang_reflect_Field.cpp
+++ b/vm/native/java_lang_reflect_Field.cpp
@@ -71,7 +71,7 @@
}
ClassObject* callerClass =
- dvmGetCaller2Class(dvmThreadSelf()->curFrame);
+ dvmGetCaller2Class(dvmThreadSelf()->interpSave.curFrame);
/*
* We need to check two things: