[Vm-dev] VM Maker: VMMaker.oscog-eem.1034.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Jan 31 02:14:10 UTC 2015

Eliot Miranda uploaded a new version of VMMaker to project VM Maker:

==================== Summary ====================

Name: VMMaker.oscog-eem.1034
Author: eem
Time: 30 January 2015, 6:12:49.023 pm
UUID: 1a93b31c-cf2c-4a2c-b53f-9eae1d7863c7
Ancestors: VMMaker.oscog-eem.1032

Clarify and ensure that we always follow receivers
after any become to ensure that e.g. super sends on non-pointer receivers (which don't check) will have
unforwarded receivers and hence any primitives that
don't validate their receivers will function correctly.
Better safe than sorry.

Don't prune unreachable code in plugins since the
pruning code doesn't yet work correctly for them.
(skip VMMaker.oscog-eem.1033)

=============== Diff against VMMaker.oscog-eem.1032 ===============

Item was changed:
  ----- Method: StackInterpreter>>spurPostBecomeAction: (in category 'object memory support') -----
  spurPostBecomeAction: theBecomeEffectsFlags
  	"Insulate the stack zone from the effects of a become.
  	 All receivers must be unfollowed for two reasons:
  		1. inst var access is direct with no read barrier
  		2. super sends (always to the receiver) have no class check and so don't trap
+ 		   for forwarded receivers.  This is an issue for primitives that assume their receiver
+ 		   is valid and don't validate.
- 		   for forwarded receivers.
  	 Methods must be unfollowed since bytecode access is direct with no read barrier.
  	 But this only needs to be done if the becomeEffectsFlags indicate that a
  	 CompiledMethod was becommed.
  	 The scheduler state must be followed, but only if the becomeEffectsFlags indicate
  	 that a pointer object was becommed."
  	<option: #SpurObjectMemory>
  	<inline: false> "For VM profiling"
+ 	self followForwardingPointersInStackZone: theBecomeEffectsFlags.
  	theBecomeEffectsFlags ~= 0 ifTrue:
+ 		[(theBecomeEffectsFlags anyMask: BecameCompiledMethodFlag) ifTrue:
- 		["(theBecomeEffectsFlags anyMask: BecamePointerObjectFlag+BecameCompiledMethodFlag) ifTrue:
- 			["self followForwardingPointersInStackZone: theBecomeEffectsFlags"]".
- 		 (theBecomeEffectsFlags anyMask: BecameCompiledMethodFlag) ifTrue:
  			[self followForwardedMethodsInMethodCache.
  			 self followForwardedMethodsInMethodZone]. "for CoInterpreter"
  		 (theBecomeEffectsFlags anyMask: BecameActiveClassFlag) ifTrue:
  			[self flushBecommedClassesInMethodCache.
  			 self flushBecommedClassesInMethodZone]. "for CoInterpreter"
  		 self followForwardingPointersInScheduler.
  		 self followForwardingPointersInSpecialObjectsArray.
  		 self followForwardingPointersInProfileState]!

More information about the Vm-dev mailing list