Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.343.mcz==================== Summary ====================
Name: Cog-eem.343
Author: eem
Time: 29 May 2017, 8:52:07.276334 am
UUID: 1930114c-32c6-4acc-8c08-0b9e2aca3bfb
Ancestors: Cog-eem.341
Fix saving the argument registers to the shadow stack space in smashCallerSavedRegistersWithValuesFrom:by:in:; aMemory is one-relative, not 0-relative.
=============== Diff against Cog-eem.341 ===============
Item was changed:
----- Method: BochsX64Alien>>smashCallerSavedRegistersWithValuesFrom:by:in: (in category 'accessing-abstract') -----
smashCallerSavedRegistersWithValuesFrom: base by: step in: aMemory
| volatileRegisters |
CogX64Compiler isSysV
ifTrue:
[volatileRegisters := #(rax: rcx: rdx: rsi: rdi: r8: r9: r10: r11:)]
ifFalse: "We should also save the registers to the shadow parameter space."
[volatileRegisters := #(rax: rcx: rdx: r8: r9: r10: r11:).
#(rcx rdx r8 r9) withIndexDo:
[:getter :index|
aMemory
+ unsignedLong64At: self rbp + 9 + (index * 8) "skip saved fp and retpc; aMemory is 1-relative"
- unsignedLong64At: self rbp + 8 + (index * 8) "skip saved fp and retpc"
put: (self perform: getter)]].
volatileRegisters withIndexDo:
[:setter :index|
self perform: setter with: index - 1 * step + base]!