Lines Matching full:self
59 static bool dvmPushInterpFrame(Thread* self, const Method* method)
73 if (self->curFrame != NULL)
74 stackPtr = (u1*) SAVEAREA_FROM_FP(self->curFrame);
76 stackPtr = self->interpStackStart;
78 if (stackPtr - stackReq < self->interpStackEnd) {
82 stackReq, self->interpStackStart, self->curFrame,
83 self->interpStackSize, method->clazz->descriptor, method->name);
84 dvmHandleStackOverflow(self, method);
85 assert(dvmCheckException(self));
103 breakSaveBlock->prevSave = FP_FROM_SAVEAREA(self->curFrame);
107 breakSaveBlock->prevFrame = self->curFrame;
117 self->curFrame, FP_FROM_SAVEAREA(saveBlock),
118 (u1*)self->curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
120 self->curFrame = FP_FROM_SAVEAREA(saveBlock);
134 bool dvmPushJNIFrame(Thread* self, const Method* method)
146 if (self->curFrame != NULL)
147 stackPtr = (u1*) SAVEAREA_FROM_FP(self->curFrame);
149 stackPtr = self->interpStackStart;
151 if (stackPtr - stackReq < self->interpStackEnd) {
155 stackReq, self->interpStackStart, self->curFrame,
156 self->interpStackSize, method->name);
157 dvmHandleStackOverflow(self, method);
158 assert(dvmCheckException(self));
177 if (self->curFrame == NULL)
180 breakSaveBlock->prevSave = FP_FROM_SAVEAREA(self->curFrame);
184 breakSaveBlock->prevFrame = self->curFrame;
191 saveBlock->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
193 saveBlock->xtra.localRefCookie = self->jniLocalRefTable.nextEntry;
198 self->curFrame, FP_FROM_SAVEAREA(saveBlock),
199 (u1*)self->curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
201 self->curFrame = FP_FROM_SAVEAREA(saveBlock);
212 bool dvmPushLocalFrame(Thread* self, const Method* method)
222 assert(self->curFrame != NULL);
223 stackPtr = (u1*) SAVEAREA_FROM_FP(self->curFrame);
225 if (stackPtr - stackReq < self->interpStackEnd) {
229 stackReq, self->interpStackStart, self->curFrame,
230 self->interpStackSize, method->name);
231 dvmHandleStackOverflow(self, method);
232 assert(dvmCheckException(self));
248 saveBlock->prevSave = FP_FROM_SAVEAREA(self->curFrame);
251 saveBlock->prevFrame = self->curFrame;
254 saveBlock->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
256 saveBlock->xtra.localRefCookie = self->jniLocalRefTable.nextEntry;
261 self->curFrame, FP_FROM_SAVEAREA(saveBlock),
262 (u1*)self->curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
264 self->curFrame = FP_FROM_SAVEAREA(saveBlock);
275 bool dvmPopLocalFrame(Thread* self)
277 StackSaveArea* saveBlock = SAVEAREA_FROM_FP(self->curFrame);
279 assert(!dvmIsBreakFrame(self->curFrame));
294 dvmPopJniLocals(self, saveBlock);
295 self->curFrame = saveBlock->prevFrame;
309 static bool dvmPopFrame(Thread* self)
313 if (self->curFrame == NULL)
316 saveBlock = SAVEAREA_FROM_FP(self->curFrame);
317 assert(!dvmIsBreakFrame(self->curFrame));
333 //assert(saveBlock->xtra.localRefCookie >= self->jniLocalRefTable.table &&
334 // saveBlock->xtra.localRefCookie <=self->jniLocalRefTable.nextEntry);
336 dvmPopJniLocals(self, saveBlock);
348 self->curFrame, saveBlock->prevFrame);
350 self->curFrame = saveBlock->prevFrame;
357 * Pushes a call frame on, advancing self->curFrame.
359 static ClassObject* callPrep(Thread* self, const Method* method, Object* obj,
365 if (self->status != THREAD_RUNNING) {
367 self->threadId, self->status,
372 assert(self != NULL);
382 LOGVV("thread=%d native code calling %s.%s %s\n", self->threadId,
389 if (!dvmCheckMethodAccess(dvmGetCaller2Class(self->curFrame),
403 * This updates self->curFrame.
407 if (!dvmPushJNIFrame(self, method)) {
408 assert(dvmCheckException(self));
413 if (!dvmPushInterpFrame(self, method)) {
414 assert(dvmCheckException(self));
429 void dvmCallMethod(Thread* self, const Method* method, Object* obj,
436 dvmCallMethodV(self, method, obj, false, pResult, args);
449 void dvmCallMethodV(Thread* self, const Method* method, Object* obj,
457 clazz = callPrep(self, method, obj, false);
462 ins = ((u4*)self->curFrame) + (method->registersSize - method->insSize);
464 //LOGD(" FP is %p, INs live at >= %p\n", self->curFrame, ins);
475 JNIEnv* env = self->jniEnv;
524 TRACE_METHOD_ENTER(self, method);
530 (*method->nativeFunc)(self->curFrame, pResult, method, self);
532 TRACE_METHOD_EXIT(self, method);
535 dvmInterpret(self, method, pResult);
539 dvmPopFrame(self);
555 void dvmCallMethodA(Thread* self, const Method* method, Object* obj,
563 clazz = callPrep(self, method, obj, false);
568 ins = ((u4*)self->curFrame) + (method->registersSize - method->insSize);
577 JNIEnv* env = self->jniEnv;
630 TRACE_METHOD_ENTER(self, method);
636 (*method->nativeFunc)(self->curFrame, pResult, method, self);
638 TRACE_METHOD_EXIT(self, method);
641 dvmInterpret(self, method, pResult);
645 dvmPopFrame(self);
665 Thread* self = dvmThreadSelf();
683 clazz = callPrep(self, method, obj, !noAccessCheck);
688 ins = ((s4*)self->curFrame) + (method->registersSize - method->insSize);
691 //LOGD(" FP is %p, INs live at >= %p\n", self->curFrame, ins);
720 dvmPopFrame(self); // throw wants to pull PC out of stack
740 TRACE_METHOD_ENTER(self, method);
746 (*method->nativeFunc)(self->curFrame, &retval, method, self);
748 TRACE_METHOD_EXIT(self, method);
751 dvmInterpret(self, method, &retval);
762 if (dvmCheckException(self)) {
779 dvmPopFrame(self);
1018 void dvmHandleStackOverflow(Thread* self, const Method* method)
1023 if (self->stackOverflowed) {
1028 self->threadId);
1029 dvmDumpThread(self, false);
1035 self->threadId,
1037 StackSaveArea* saveArea = SAVEAREA_FROM_FP(self->curFrame);
1041 saveArea, (u1*) saveArea - self->interpStackEnd);
1042 self->interpStackEnd,
1043 self->interpStackStart - self->interpStackSize);
1044 //dvmDumpThread(self, false);
1045 self->interpStackEnd = self->interpStackStart - self->interpStackSize;
1046 self->stackOverflowed = true;
1054 Object* excep = dvmGetException(self);
1057 dvmClearException(self);
1067 void dvmCleanupStackOverflow(Thread* self, const Object* exception)
1071 assert(self->stackOverflowed);
1078 newStackEnd = (self->interpStackStart - self->interpStackSize)
1080 if ((u1*)self->curFrame <= newStackEnd) {
1082 self->interpStackEnd, self->curFrame);
1083 dvmDumpThread(self, false);
1087 self->interpStackEnd = newStackEnd;
1088 self->stackOverflowed = false;
1090 LOGI("Shrank stack (to %p, curFrame is %p)\n", self->interpStackEnd,
1091 self->curFrame);