Lars Wassermann uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-lw.60.mcz
==================== Summary ====================
Name: Cog-lw.60 Author: lw Time: 2 February 2013, 12:07:28.211 am UUID: 826fc17b-8f27-5b40-8103-3e2a690b49cb Ancestors: Cog-eem.59
Implemented Simulation frame building as hinted in Eliots Email 'Changing CogSimulator abi'
=============== Diff against Cog-eem.59 ===============
Item was added: + ----- Method: GdbARMAlien>>pushWord:in: (in category 'execution') ----- + pushWord: aValue in: aMemory + aMemory longAt: (self sp: self sp - 4) + 1 put: aValue bigEndian: false!
Item was changed: ----- Method: GdbARMAlien>>simulateCallOf:nextpc:memory: (in category 'execution simulation') ----- simulateCallOf: address nextpc: nextpc memory: aMemory "Simulate a frame-building call of address. Build a frame since + a) this is used for calls into the run-time which are unlikely to be leaf-calls" + "This method builds a stack frame as expected by the simulator, not as defined by ARM aapcs-abi. + In ARM aapcs, every method can define for itself, wether it wants to push lr (nextpc), and wether it + uses a frame pointer. The standard never mentions a fp. It merely defines r4-r11 to be callee-saved." + + self assert: self sp \ 8 = 0. "This check ensures, that we conform with ARM abi. Before doing anything to the stack, we ensure 2-word alignment." + self pushWord: nextpc in: aMemory. + self pushWord: self r11 in: aMemory. + self r11: self sp. + PostBuildStackDelta ~= 0 ifTrue: + [self sp: self sp - PostBuildStackDelta]. "In order to satisfy the CStackAlignment check by cogit, which is only valid on IA32 platforms." - a) this is used for calls into the run-time which are unlikely to be leaf-calls, and - b) stack alignment needs to be realistic for assert checking for platforms such as Mac OS X" - self lr: nextpc. self pc: address!
Item was changed: + ----- Method: GdbARMAlien>>simulateLeafCallOf:nextpc:memory: (in category 'execution simulation') ----- - ----- Method: GdbARMAlien>>simulateLeafCallOf:nextpc:memory: (in category 'execution') ----- simulateLeafCallOf: address nextpc: nextpc memory: aMemory self lr: nextpc. self pc: address!
Item was added: + ----- Method: GdbARMAlien>>simulateLeafReturnIn: (in category 'execution simulation') ----- + simulateLeafReturnIn: aMemory + self pc: self lr!
Item was added: + ----- Method: GdbARMAlien>>simulateReturnIn: (in category 'execution simulation') ----- + simulateReturnIn: aMemory + PostBuildStackDelta ~= 0 ifTrue: + [self sp: self sp + PostBuildStackDelta]. + self r11: (self popWordIn: aMemory). + self pc: (self popWordIn: aMemory)!
vm-dev@lists.squeakfoundation.org