[Vm-dev] VM Maker: VMMaker.oscog-eem.563.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Dec 16 23:43:47 UTC 2013
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!
More information about the Vm-dev
mailing list