Lines Matching full:shadowspace
36 /* Allocate space for per-thread ShadowSpace data structures */
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;
50 /* Free per-thread ShadowSpace data structures */
53 free(self->shadowSpace->registerSpace);
54 free(self->shadowSpace);
72 ShadowSpace *shadowSpace = self->shadowSpace;
80 if (shadowSpace->selfVerificationState != kSVSIdle) {
82 self->threadId, shadowSpace->selfVerificationState);
86 shadowSpace->selfVerificationState = kSVSStart;
89 if (preBytes + postBytes > shadowSpace->registerSpaceSize * sizeof(u4)) {
90 free(shadowSpace->registerSpace);
91 shadowSpace->registerSpaceSize = (preBytes + postBytes) / sizeof(u4);
92 shadowSpace->registerSpace =
93 (int*) calloc(shadowSpace->registerSpaceSize, sizeof(u4));
97 shadowSpace->startPC = pc;
98 shadowSpace->fp = fp;
99 shadowSpace->retval = self->interpSave.retval;
100 shadowSpace->interpStackEnd = self->interpStackEnd;
106 shadowSpace->method = self->interpSave.method;
107 shadowSpace->methodClassDex = self->interpSave.methodClassDex;
109 shadowSpace->shadowFP = shadowSpace->registerSpace +
110 shadowSpace->registerSpaceSize - postBytes/4;
112 self->interpSave.curFrame = (u4*)shadowSpace->shadowFP;
113 self->interpStackEnd = (u1*)shadowSpace->registerSpace;
116 memcpy(((char*)shadowSpace->shadowFP)-preBytes, ((char*)fp)-preBytes,
120 shadowSpace->heapSpaceTail = shadowSpace->heapSpace;
123 shadowSpace->traceLength = 0;
125 return shadowSpace;
136 ShadowSpace *shadowSpace = self->shadowSpace;
137 shadowSpace->endPC = pc;
138 shadowSpace->endShadowFP = fp;
139 shadowSpace->jitExitState = exitState;
142 // self->threadId, (int)shadowSpace->startPC, (int)shadowSpace->fp,
145 if (shadowSpace->selfVerificationState != kSVSStart) {
147 self->threadId, shadowSpace->selfVerificationState);
149 LOGD("Dalvik PC: %#x endPC: %#x", (int)shadowSpace->startPC,
150 (int)shadowSpace->endPC);
151 LOGD("Interp FP: %#x", (int)shadowSpace->fp);
152 LOGD("Shadow FP: %#x endFP: %#x", (int)shadowSpace->shadowFP,
153 (int)shadowSpace->endShadowFP);
157 if (exitState == kSVSPunt && pc == shadowSpace->startPC) {
158 shadowSpace->selfVerificationState = kSVSIdle;
160 shadowSpace->selfVerificationState = exitState;
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;
171 return shadowSpace;
184 /* Print values maintained in shadowSpace */
187 ShadowSpace* shadowSpace = self->shadowSpace;
189 int frameBytes = (int) shadowSpace->registerSpace +
190 shadowSpace->registerSpaceSize*4 -
191 (int) shadowSpace->shadowFP;
194 if ((uintptr_t)self->interpSave.curFrame < (uintptr_t)shadowSpace->fp) {
197 frameBytes2 = (int) shadowSpace->fp -
203 LOGD("Class: %s", shadowSpace->method->clazz->descriptor);
204 LOGD("Method: %s", shadowSpace->method->name);
205 LOGD("Dalvik PC: %#x endPC: %#x", (int)shadowSpace->startPC,
206 (int)shadowSpace->endPC);
207 LOGD("Interp FP: %#x endFP: %#x", (int)shadowSpace->fp,
209 LOGD("Shadow FP: %#x endFP: %#x", (int)shadowSpace->shadowFP,
210 (int)shadowSpace->endShadowFP);
213 LOGD("Trace length: %d State: %d", shadowSpace->traceLength,
214 shadowSpace->selfVerificationState);
220 ShadowSpace* shadowSpace = self->shadowSpace;
226 for (i = 0; i < shadowSpace->traceLength; i++) {
227 addr = shadowSpace->trace[i].addr;
229 decInsn = &(shadowSpace->trace[i].decInsn);
237 static void selfVerificationSpinLoop(ShadowSpace *shadowSpace)
239 const u2 *startPC = shadowSpace->startPC;
266 ShadowSpace *shadowSpace = self->shadowSpace;
267 SelfVerificationState state = shadowSpace->selfVerificationState;
273 // self->threadId, (int)pc, (int)shadowSpace->endPC, state,
274 // shadowSpace->traceLength, dexGetOpcodeName(decInsn.opcode));
288 shadowSpace->selfVerificationState = kSVSDebugInterp;
295 if (pc == shadowSpace->endPC &&
297 (state == kSVSBackwardBranch && shadowSpace->traceLength != 0))) {
299 shadowSpace->selfVerificationState = kSVSIdle;
302 int frameBytes = (int) shadowSpace->registerSpace +
303 shadowSpace->registerSpaceSize*4 -
304 (int) shadowSpace->shadowFP;
305 if (memcmp(shadowSpace->fp, shadowSpace->shadowFP, frameBytes)) {
308 shadowSpace->selfVerificationState = kSVSDebugInterp;
315 (int)shadowSpace->fp, frameBytes);
316 selfVerificationPrintRegisters((int*)shadowSpace->fp,
317 (int*)shadowSpace->shadowFP,
320 (int)shadowSpace->shadowFP, frameBytes);
321 selfVerificationPrintRegisters((int*)shadowSpace->shadowFP,
322 (int*)shadowSpace->fp,
324 selfVerificationSpinLoop(shadowSpace);
327 if ((uintptr_t)self->interpSave.curFrame < (uintptr_t)shadowSpace->fp) {
332 int frameBytes2 = (int) shadowSpace->fp -
335 ((char*)shadowSpace->endShadowFP)+localRegs, frameBytes2)) {
341 shadowSpace->selfVerificationState = kSVSDebugInterp;
351 (int*)shadowSpace->endShadowFP,
354 (int)shadowSpace->endShadowFP, localRegs, frameBytes2);
355 selfVerificationPrintRegisters((int*)shadowSpace->endShadowFP,
358 selfVerificationSpinLoop(shadowSpace);
365 for (heapSpacePtr = shadowSpace->heapSpace;
366 heapSpacePtr != shadowSpace->heapSpaceTail; heapSpacePtr++) {
374 shadowSpace->selfVerificationState = kSVSDebugInterp;
385 if (memDiff) selfVerificationSpinLoop(shadowSpace);
411 if (shadowSpace->traceLength >= JIT_MAX_TRACE_LEN) {
414 (int)shadowSpace->startPC, (int)shadowSpace->endPC, (int)pc);
417 selfVerificationSpinLoop(shadowSpace);
421 shadowSpace->trace[shadowSpace->traceLength].addr = (int)pc;
422 shadowSpace->trace[shadowSpace->traceLength].decInsn = decInsn;
423 shadowSpace->traceLength++;