Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 352de13869ef1aefeae1c6f863eeb41111db7ffe https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/352de13869ef1aefeae... Author: Eliot Miranda eliot.miranda@gmail.com Date: 2019-10-05 (Sat, 05 Oct 2019)
Changed paths: M platforms/unix/vm/aio.c M platforms/unix/vm/sqUnixITimerHeartbeat.c M platforms/unix/vm/sqUnixITimerTickerHeartbeat.c
Log Message: ----------- Ensure that sigaltstack is used to establish an alternative signal stack on Unix platforms, and that the SIGIO handler (forceInterruptCheck) runs on that stack. Although we don't have absolute proof we have strong evidence to suggest that on recent macOS versions (e.g. 10.13) the first delivery of SIGIO to the VM causes corruption of the code zone if the VM is in or transitioning to machine code. This is similar to crashes seen in the Newspeak VM on linux using the ITIMER heartbeat. There-on the issue was that the dynamic linker would be called within the signal handler on first invocation, and that this would cause the dynamic linker to traverse the Smalltalk JIT code stack, misinteerpret Smalltalk stack frames as ABI-compliant stack frames and cause corruption as a result.
Since the code is now system wide on Unix, not merely confined to the ITIMER VM, move the sigaltstack initialization to platforms/unix/vm/aio.c and delete the duplications in the ITIMER heartbeat variants.
vm-dev@lists.squeakfoundation.org