[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