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! |
Free forum by Nabble | Edit this page |