Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.563.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.563 Author: eem Time: 16 December 2013, 3:41:22.598 pm UUID: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247 Ancestors: VMMaker.oscog-eem.562 Avoid including the instrucitonPointer in the context when marrying the top frame during divorceAllFrames for voidVMState....If:. (how did this ever work??). Fix bogus assert failure in checkIfValidObjectRef:pc:cogMethod:. =============== Diff against VMMaker.oscog-eem.562 =============== Item was changed: ----- Method: Cogit>>checkIfValidObjectRef:pc:cogMethod: (in category 'garbage collection') ----- checkIfValidObjectRef: annotation pc: mcpc cogMethod: cogMethod <var: #mcpc type: #'char *'> <var: #sendTable type: #'sqInt *'> annotation = IsObjectReference ifTrue: [| literal | literal := backEnd literalBeforeFollowingAddress: mcpc asInteger. (objectRepresentation checkValidObjectReference: literal) ifFalse: [coInterpreter print: 'object ref leak in CM '; printHex: cogMethod asInteger; print: ' @ '; printHex: mcpc asInteger; cr. ^1]]. (self isSendAnnotation: annotation) ifTrue: [| entryPoint selectorOrCacheTag offset sendTable | entryPoint := backEnd callTargetFromReturnAddress: mcpc asInteger. + entryPoint <= methodZoneBase + ifTrue: + [offset := entryPoint] + ifFalse: + [self + offsetAndSendTableFor: entryPoint + annotation: annotation + into: [:off :table| offset := off. sendTable := table]]. - self - offsetAndSendTableFor: entryPoint - annotation: annotation - into: [:off :table| offset := off. sendTable := table]. selectorOrCacheTag := backEnd inlineCacheTagAt: mcpc asInteger. (entryPoint > methodZoneBase and: [offset ~= cmNoCheckEntryOffset and: [(self cCoerceSimple: entryPoint - offset to: #'CogMethod *') cmType ~= CMOpenPIC]]) ifTrue: "linked non-super send, cacheTag is a cacheTag" [(objectRepresentation checkValidInlineCacheTag: selectorOrCacheTag) ifFalse: [coInterpreter print: 'cache tag leak in CM '; printHex: cogMethod asInteger; print: ' @ '; printHex: mcpc asInteger; cr. ^1]] ifFalse: "unlinked send or super send; cacheTag is a selector" [(objectRepresentation checkValidObjectReference: selectorOrCacheTag) ifFalse: [coInterpreter print: 'selector leak in CM '; printHex: cogMethod asInteger; print: ' @ '; printHex: mcpc asInteger; cr. ^1]]]. ^0 "keep scanning"! Item was changed: ----- Method: StackInterpreter>>divorceAllFrames (in category 'frame access') ----- divorceAllFrames | activeContext | <inline: false> <var: #aPage type: #'StackPage *'> stackPage ~= 0 ifTrue: [self externalWriteBackHeadFramePointers]. + activeContext := self + ensureFrameIsMarried: framePointer + SP: stackPointer + BytesPerWord. - activeContext := self ensureFrameIsMarried: framePointer SP: stackPointer. 0 to: numStackPages - 1 do: [:i| | aPage | aPage := stackPages stackPageAt: i. (stackPages isFree: aPage) ifFalse: [self divorceFramesIn: aPage]]. self zeroStackPage. ^activeContext! |
Free forum by Nabble | Edit this page |