primitiveFlushICacheFromTo(void) { void *cpu; sqInt cpuAlien; usqIntptr_t endAddress; usqIntptr_t startAddress; startAddress = (BytesPerOop == 4 ? positive32BitValueOf(stackValue(1)) : positive64BitValueOf(stackValue(1))); endAddress = (BytesPerOop == 4 ? positive32BitValueOf(stackValue(0)) : positive64BitValueOf(stackValue(0))); cpuAlien = stackValue(2); if (failed()) { return null; } if (((cpu = ((longAt(cpuAlien + BaseHeaderSize)) > 0 ? (cpuAlien + BaseHeaderSize) + BytesPerOop : longAt((cpuAlien + BaseHeaderSize) + BytesPerOop)))) == 0) { primitiveFailFor(PrimErrBadReceiver); return null; } flushICacheFromTo(cpu, startAddress, endAddress); if (failed()) { return null; } pop(2); return null; }
primitiveSingleStepInMemoryMinAddressMaxAddressReadWrite(void) { void *cpu; sqInt cpuAlien; usqIntptr_t maxAddress; sqInt maybeErr; char *memory; sqInt memorySize; usqIntptr_t minAddress; usqIntptr_t minWriteMaxExecAddress; success(isWordsOrBytes(stackValue(3))); memory = ((char *) (firstIndexableField(stackValue(3)))); minAddress = (BytesPerOop == 4 ? positive32BitValueOf(stackValue(2)) : positive64BitValueOf(stackValue(2))); maxAddress = (BytesPerOop == 4 ? positive32BitValueOf(stackValue(1)) : positive64BitValueOf(stackValue(1))); minWriteMaxExecAddress = (BytesPerOop == 4 ? positive32BitValueOf(stackValue(0)) : positive64BitValueOf(stackValue(0))); cpuAlien = stackValue(4); if (failed()) { return null; } if (((cpu = ((longAt(cpuAlien + BaseHeaderSize)) > 0 ? (cpuAlien + BaseHeaderSize) + BytesPerOop : longAt((cpuAlien + BaseHeaderSize) + BytesPerOop)))) == 0) { primitiveFailFor(PrimErrBadReceiver); return null; } prevInterruptCheckChain = setInterruptCheckChain(forceStopOnInterrupt); if (prevInterruptCheckChain == (forceStopOnInterrupt)) { prevInterruptCheckChain == 0; } memorySize = byteSizeOf(((sqInt)(sqIntptr_t)(memory) - BaseHeaderSize)); maybeErr = singleStepCPUInSizeMinAddressReadWrite(cpu, memory, ((memorySize < maxAddress) ? memorySize : maxAddress), minAddress, minWriteMaxExecAddress); setInterruptCheckChain(prevInterruptCheckChain); if (maybeErr != 0) { primitiveFailFor(PrimErrInappropriate); return null; } if (failed()) { return null; } popthenPush(5, cpuAlien); return null; }
primitiveFileTruncate(void) { // FilePlugin>>#primitiveFileTruncate SQFile *file; sqInt objectPointer; sqInt sz; squeakFileOffsetType truncatePosition; if (!(isIntegerObject(stackValue(0)))) { sz = sizeof(squeakFileOffsetType); if ((byteSizeOf(stackValue(0))) > sz) { return primitiveFail(); } } truncatePosition = positive64BitValueOf(stackValue(0)); /* begin fileValueOf: */ objectPointer = stackValue(1); if (!((isBytes(objectPointer)) && ((byteSizeOf(objectPointer)) == (sizeof(SQFile))))) { primitiveFail(); file = null; goto l1; } file = firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(failed())) { sqFileTruncate(file, truncatePosition); } if (!(failed())) { pop(2); } }
primitiveDisassembleAtInMemory(void) { usqIntptr_t address; void *cpu; sqInt cpuAlien; sqInt instrLenOrErr; sqInt log; sqInt logLen; sqInt logObj; sqInt logObjData; char *memory; sqInt resultObj; logLen = 0; address = (BytesPerOop == 4 ? positive32BitValueOf(stackValue(1)) : positive64BitValueOf(stackValue(1))); success(isWordsOrBytes(stackValue(0))); memory = ((char *) (firstIndexableField(stackValue(0)))); cpuAlien = stackValue(2); if (failed()) { return null; } if (((cpu = ((longAt(cpuAlien + BaseHeaderSize)) > 0 ? (cpuAlien + BaseHeaderSize) + BytesPerOop : longAt((cpuAlien + BaseHeaderSize) + BytesPerOop)))) == 0) { primitiveFailFor(PrimErrBadReceiver); return null; } instrLenOrErr = disassembleForAtInSize(cpu, address, memory, byteSizeOf(((sqInt)(sqIntptr_t)(memory) - BaseHeaderSize))); if (instrLenOrErr < 0) { primitiveFailFor(PrimErrInappropriate); return null; } log = getlog((&logLen)); resultObj = instantiateClassindexableSize(classArray(), 2); if (resultObj == 0) { primitiveFailFor(PrimErrNoMemory); return null; } pushRemappableOop(resultObj); logObj = instantiateClassindexableSize(classString(), logLen); if (failed()) { popRemappableOop(); primitiveFailFor(PrimErrNoMemory); return null; } logObjData = arrayValueOf(logObj); memcpy(logObjData, log, logLen); resultObj = popRemappableOop(); storePointerofObjectwithValue(0, resultObj, integerObjectOf(instrLenOrErr)); storePointerofObjectwithValue(1, resultObj, logObj); if (failed()) { return null; } popthenPush(3, resultObj); return null; }
primitiveSingleStepInMemoryMinimumAddressReadWrite(void) { void *cpu; sqInt cpuAlien; sqInt maybeErr; char *memory; usqIntptr_t minAddress; usqIntptr_t minWriteMaxExecAddress; success(isWordsOrBytes(stackValue(2))); memory = ((char *) (firstIndexableField(stackValue(2)))); minAddress = (BytesPerOop == 4 ? positive32BitValueOf(stackValue(1)) : positive64BitValueOf(stackValue(1))); minWriteMaxExecAddress = (BytesPerOop == 4 ? positive32BitValueOf(stackValue(0)) : positive64BitValueOf(stackValue(0))); cpuAlien = stackValue(3); if (failed()) { return null; } if (((cpu = ((longAt(cpuAlien + BaseHeaderSize)) > 0 ? (cpuAlien + BaseHeaderSize) + BytesPerOop : longAt((cpuAlien + BaseHeaderSize) + BytesPerOop)))) == 0) { primitiveFailFor(PrimErrBadReceiver); return null; } maybeErr = singleStepCPUInSizeMinAddressReadWrite(cpu, memory, byteSizeOf(((sqInt)(sqIntptr_t)(memory) - BaseHeaderSize)), minAddress, minWriteMaxExecAddress); if (maybeErr != 0) { primitiveFailFor(PrimErrInappropriate); return null; } if (failed()) { return null; } popthenPush(4, cpuAlien); return null; }