VM Maker: VMMaker.oscog-eem.2242.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.2242.mcz

commits-2
 
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2242.mcz

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

Name: VMMaker.oscog-eem.2242
Author: eem
Time: 12 June 2017, 2:11:49.884748 pm
UUID: 962fc704-64b1-41a9-9080-3eb3eb75c494
Ancestors: VMMaker.oscog-eem.2241

The self assert: (stackPages isFree: thePage) not in findSPOf:on:startingFrom: is misplaced.  Relocate it to avoid a bogus assert ail running the Cadence debugger tests.

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

Item was changed:
  ----- Method: StackInterpreter>>checkStackPointerIndexForFrame: (in category 'frame access') -----
  checkStackPointerIndexForFrame: theFP
  "Version of stackPointerIndexForFrame: that does not depend on writing back head frame pointers.
  Used for assertion checking. Safe only in external primitives (framePointer valid).
  Answer the 0-based index rel to the given frame.
  (This is what stackPointer used to be before conversion to pointer)"
  "In the StackInterpreter stacks grow down."
  | thePage theSP |
  <inline: false>
  <var: #theFP type: #'char *'>
  <var: #thePage type: #'StackPage *'>
  <var: #theSP type: #'char *'>
  theFP = framePointer ifTrue:
  [^self stackPointerIndexForFrame: theFP WithSP: stackPointer].
  thePage := stackPages stackPageFor: theFP.
  theSP := self findSPOrNilOf: theFP
  on: thePage
  startingFrom: (thePage = stackPage ifTrue: [framePointer] ifFalse: [thePage headFP]).
+ theSP ifNil: [^-1].
  ^self stackPointerIndexForFrame: theFP WithSP: theSP!

Item was changed:
  ----- Method: StackInterpreter>>findSPOf:on: (in category 'frame access') -----
  findSPOf: theFP on: thePage
  "Search for the stack pointer for theFP.  This points to the hottest item on the frame's stack.
  DO NOT CALL THIS WITH theFP == localFP OR theFP == framePointer!!"
  <var: #theFP type: #'char *'>
  <var: #thePage type: #'StackPage *'>
  <returnTypeC: #'char *'>
  | theSP |
  <inline: false>
  <var: #theSP type: #'char *'>
+ self deny: (stackPages isFree: thePage).
  theSP := self findSPOrNilOf: theFP on: thePage startingFrom: thePage headFP.
+ theSP ifNotNil:
- theSP notNil ifTrue:
  [^theSP].
  self error: 'did not find theFP in stack page'.
  ^0!

Item was changed:
  ----- Method: StackInterpreter>>findSPOrNilOf:on:startingFrom: (in category 'frame access') -----
  findSPOrNilOf: theFP on: thePage startingFrom: startFrame
  "Search for the stack pointer for theFP.  This points to the hottest item on the frame's stack.
  DO NOT CALL THIS WITH theFP == localFP OR theFP == framePointer!!"
  <var: #theFP type: #'char *'>
  <var: #thePage type: #'StackPage *'>
  <var: #startFrame type: #'char *'>
  <returnTypeC: #'char *'>
  | aFrame prevFrame |
  <inline: true>
  <var: #aFrame type: #'char *'>
  <var: #prevFrame type: #'char *'>
- self assert: (stackPages isFree: thePage) not.
  startFrame = theFP ifTrue:
  [thePage headSP >= startFrame ifTrue:
  ["If the SP is invalid return the pointer to the receiver field."
  ^self frameReceiverLocation: theFP].
  "Skip the instruction pointer on top of stack of inactive pages."
  ^thePage = stackPage
  ifTrue: [thePage headSP]
  ifFalse: [thePage headSP + objectMemory wordSize]].
  aFrame := startFrame.
  [prevFrame := aFrame.
  aFrame := self frameCallerFP: aFrame.
  aFrame ~= 0] whileTrue:
  [theFP = aFrame ifTrue:
  [^self frameCallerSP: prevFrame]].
  ^nil!