VM Maker: VMMaker.oscog-eem.563.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.563.mcz

commits-2
 
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!