Lines Matching refs:self

37 void* dvmSelfVerificationShadowSpaceAlloc(Thread* self)
39 self->shadowSpace = (ShadowSpace*) calloc(1, sizeof(ShadowSpace));
40 if (self->shadowSpace == NULL)
43 self->shadowSpace->registerSpaceSize = REG_SPACE;
44 self->shadowSpace->registerSpace =
45 (int*) calloc(self->shadowSpace->registerSpaceSize, sizeof(int));
47 return self->shadowSpace->registerSpace;
51 void dvmSelfVerificationShadowSpaceFree(Thread* self)
53 free(self->shadowSpace->registerSpace);
54 free(self->shadowSpace);
70 Thread* self, int targetTrace)
72 ShadowSpace *shadowSpace = self->shadowSpace;
73 unsigned preBytes = self->interpSave.method->outsSize*4 +
75 unsigned postBytes = self->interpSave.method->registersSize*4;
78 // self->threadId, (int)pc, (int)fp);
82 self->threadId, shadowSpace->selfVerificationState);
99 shadowSpace->retval = self->interpSave.retval;
100 shadowSpace->interpStackEnd = self->interpStackEnd;
106 shadowSpace->method = self->interpSave.method;
107 shadowSpace->methodClassDex = self->interpSave.methodClassDex;
112 self->interpSave.curFrame = (u4*)shadowSpace->shadowFP;
113 self->interpStackEnd = (u1*)shadowSpace->registerSpace;
134 Thread* self)
136 ShadowSpace *shadowSpace = self->shadowSpace;
142 // self->threadId, (int)shadowSpace->startPC, (int)shadowSpace->fp,
147 self->threadId, shadowSpace->selfVerificationState);
164 self->interpSave.pc = shadowSpace->startPC;
165 self->interpSave.curFrame = shadowSpace->fp;
166 self->interpSave.method = shadowSpace->method;
167 self->interpSave.methodClassDex = shadowSpace->methodClassDex;
168 self->interpSave.retval = shadowSpace->retval;
169 self->interpStackEnd = shadowSpace->interpStackEnd;
185 static void selfVerificationDumpState(const u2* pc, Thread* self)
187 ShadowSpace* shadowSpace = self->shadowSpace;
188 StackSaveArea* stackSave = SAVEAREA_FROM_FP(self->interpSave.curFrame);
194 if ((uintptr_t)self->interpSave.curFrame < (uintptr_t)shadowSpace->fp) {
198 (int)self->interpSave.curFrame - localRegs;
208 (int)self->interpSave.curFrame);
218 static void selfVerificationDumpTrace(const u2* pc, Thread* self)
220 ShadowSpace* shadowSpace = self->shadowSpace;
221 StackSaveArea* stackSave = SAVEAREA_FROM_FP(self->interpSave.curFrame);
264 void dvmCheckSelfVerification(const u2* pc, Thread* self)
266 ShadowSpace *shadowSpace = self->shadowSpace;
273 // self->threadId, (int)pc, (int)shadowSpace->endPC, state,
278 self->threadId, state);
279 selfVerificationDumpState(pc, self);
280 selfVerificationDumpTrace(pc, self);
284 * Generalize the self verification state to kSVSDebugInterp unless the
311 ALOGD("~~~ DbgIntp(%d): REGISTERS DIVERGENCE!", self->threadId);
312 selfVerificationDumpState(pc, self);
313 selfVerificationDumpTrace(pc, self);
327 if ((uintptr_t)self->interpSave.curFrame < (uintptr_t)shadowSpace->fp) {
329 SAVEAREA_FROM_FP(self->interpSave.curFrame);
333 (int) self->interpSave.curFrame - localRegs;
334 if (memcmp(((char*)self->interpSave.curFrame)+localRegs,
345 self->threadId);
346 selfVerificationDumpState(pc, self);
347 selfVerificationDumpTrace(pc, self);
349 (int)self->interpSave.curFrame, localRegs, frameBytes2);
350 selfVerificationPrintRegisters((int*)self->interpSave.curFrame,
356 (int*)self->interpSave.curFrame,
377 ALOGD("~~~ DbgIntp(%d): MEMORY DIVERGENCE!", self->threadId);
380 selfVerificationDumpState(pc, self);
381 selfVerificationDumpTrace(pc, self);
394 assert(self->jitResumeNPC != NULL);
395 assert(self->singleStepCount == 0);
396 self->singleStepCount = 1;
397 dvmEnableSubMode(self, kSubModeCountedStep);
404 dvmDisableSubMode(self, kSubModeJitSV);
406 self->jitState = kJitDone;
412 ALOGD("~~~ DbgIntp(%d): CONTROL DIVERGENCE!", self->threadId);
415 selfVerificationDumpState(pc, self);
416 selfVerificationDumpTrace(pc, self);
546 void dvmJitEndTraceSelect(Thread* self, const u2* dPC)
548 if (self->jitState == kJitTSelect) {
549 self->jitState = kJitTSelectEnd;
551 if (self->jitState == kJitTSelectEnd) {
553 dvmCheckJit(dPC, self);
706 static void insertClassMethodInfo(Thread* self,
711 int currTraceRun = ++self->currTraceRun;
712 self->trace[currTraceRun].info.meta = thisClass ?
714 self->trace[currTraceRun].isCode = false;
716 currTraceRun = ++self->currTraceRun;
717 self->trace[currTraceRun].info.meta = thisClass ?
719 self->trace[currTraceRun].isCode = false;
721 currTraceRun = ++self->currTraceRun;
722 self->trace[currTraceRun].info.meta = (void *) calleeMethod;
723 self->trace[currTraceRun].isCode = false;
739 Thread *self)
751 int currTraceRun = ++self->currTraceRun;
752 self->currRunHead = moveResultPC;
753 self->trace[currTraceRun].info.frag.startOffset = offset + len;
754 self->trace[currTraceRun].info.frag.numInsts = 1;
755 self->trace[currTraceRun].info.frag.runEnd = false;
756 self->trace[currTraceRun].info.frag.hint = kJitHintNone;
757 self->trace[currTraceRun].isCode = true;
758 self->totalTraceLen++;
760 self->currRunLen = dexGetWidthFromInstruction(moveResultPC);
779 void dvmCheckJit(const u2* pc, Thread* self)
781 const ClassObject *thisClass = self->callsiteClass;
782 const Method* curMethod = self->methodToCall;
789 const u2 *lastPC = self->lastPC;
791 self->lastPC = pc;
793 switch (self->jitState) {
806 self->jitState = kJitTSelectEnd;
815 if (self->totalTraceLen != 0 &&
818 self->jitState = kJitTSelectEnd;
828 offset = lastPC - self->traceMethod->insns;
830 dvmGetMethodInsnsSize(self->traceMethod));
831 if (lastPC != self->currRunHead + self->currRunLen) {
834 currTraceRun = ++self->currTraceRun;
835 self->currRunLen = 0;
836 self->currRunHead = (u2*)lastPC;
837 self->trace[currTraceRun].info.frag.startOffset = offset;
838 self->trace[currTraceRun].info.frag.numInsts = 0;
839 self->trace[currTraceRun].info.frag.runEnd = false;
840 self->trace[currTraceRun].info.frag.hint = kJitHintNone;
841 self->trace[currTraceRun].isCode = true;
843 self->trace[self->currTraceRun].info.frag.numInsts++;
844 self->totalTraceLen++;
845 self->currRunLen += len;
855 if (self->currTraceRun ==
857 self->jitState = kJitTSelectEnd;
866 self->jitState = kJitTSelectEnd;
879 insertClassMethodInfo(self, thisClass, curMethod,
881 insertMoveResult(lastPC, len, offset, self);
884 /* Break on throw or self-loop */
886 self->jitState = kJitTSelectEnd;
888 if (self->totalTraceLen >= JIT_MAX_TRACE_LEN) {
889 self->jitState = kJitTSelectEnd;
910 if (self->totalTraceLen == 0) {
911 dvmJitSetCodeAddr(self->currTraceHead,
915 self->jitState = kJitDone;
920 int lastTraceDesc = self->currTraceRun;
923 if (!self->trace[lastTraceDesc].isCode) {
924 lastTraceDesc = ++self->currTraceRun;
925 self->trace[lastTraceDesc].info.frag.startOffset = 0;
926 self->trace[lastTraceDesc].info.frag.numInsts = 0;
927 self->trace[lastTraceDesc].info.frag.hint = kJitHintNone;
928 self->trace[lastTraceDesc].isCode = true;
932 self->trace[lastTraceDesc].info.frag.runEnd = true;
936 sizeof(JitTraceRun) * (self->currTraceRun+1));
941 self->jitState = kJitDone;
946 desc->method = self->traceMethod;
948 (char*)&(self->trace[0]),
949 sizeof(JitTraceRun) * (self->currTraceRun+1));
955 self->currTraceHead,kWorkOrderTrace,desc)) {
967 self->jitState = kJitDone;
978 ALOGE("Unexpected JIT state: %d", self->jitState);
987 dvmDisableSubMode(self, kSubModeJitTraceBuild);
991 self->jitResumeNPC = NULL;
993 if (self->singleStepCount == 0)
994 self->singleStepCount = 1;
995 dvmEnableSubMode(self, kSubModeCountedStep);
1092 void* dvmJitGetTraceAddrThread(const u2* dPC, Thread* self)
1094 return (self->interpBreak.ctl.breakFlags != 0) ? NULL :
1102 void* dvmJitGetMethodAddrThread(const u2* dPC, Thread* self)
1104 return (self->interpBreak.ctl.breakFlags != 0) ? NULL :
1153 void dvmJitCheckTraceRequest(Thread* self)
1174 * intptr_t filterKey = (intptr_t)self->interpSave.pc
1182 * intptr_t filterKey = (intptr_t)self->interpSave.method
1204 u4 methodKey = (u4)self->interpSave.method <<
1206 u4 pcKey = ((u4)self->interpSave.pc >> 1) &
1211 assert((self->interpBreak.ctl.subMode & kSubModeJitTraceBuild)==0);
1215 ((self->interpBreak.ctl.breakFlags & kInterpSingleStep) == 0)){
1217 if (self->jitState == kJitTSelectRequest &&
1221 if (filterKey == self->threshFilter[i]) {
1222 self->threshFilter[i] = 0; // Reset filter entry
1233 self->threshFilter[i] = filterKey;
1234 self->jitState = kJitDone;
1240 self->jitState = kJitDone;
1247 if (self->jitState == kJitTSelectRequest ||
1248 self->jitState == kJitTSelectRequestHot) {
1249 if (dvmJitFindEntry(self->interpSave.pc, false)) {
1251 self->jitState = kJitDone;
1253 JitEntry *slot = lookupAndAdd(self->interpSave.pc,
1263 self->jitState = kJitDone;
1270 switch (self->jitState) {
1273 self->jitState = kJitTSelect;
1274 self->traceMethod = self->interpSave.method;
1275 self->currTraceHead = self->interpSave.pc;
1276 self->currTraceRun = 0;
1277 self->totalTraceLen = 0;
1278 self->currRunHead = self->interpSave.pc;
1279 self->currRunLen = 0;
1280 self->trace[0].info.frag.startOffset =
1281 self->interpSave.pc - self->interpSave.method->insns;
1282 self->trace[0].info.frag.numInsts = 0;
1283 self->trace[0].info.frag.runEnd = false;
1284 self->trace[0].info.frag.hint = kJitHintNone;
1285 self->trace[0].isCode = true;
1286 self->lastPC = 0;
1288 dvmEnableSubMode(self, kSubModeJitTraceBuild);
1291 self->interpSave.method->name, (int)self->interpSave.pc);
1297 ALOGE("Unexpected JIT state: %d", self->jitState);
1302 self->jitState = kJitDone;
1509 Thread* self = dvmThreadSelf();
1512 dvmLockThreadList(self);