mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-26 22:29:19 +00:00
4b420f6e71
The x86_64 ABI requires the stack pointer to be 16-byte aligned before the call of a function and decreased by 8 at the function entrypoint (after the return address has been pushed to the stack). Currently, when a new Genode thread gets created, the initial stack pointer is aligned to 16 byte. On Genode/Linux, the thread entry function is entered by a 'call' instruction, so the stack pointer alignment at the function entrypoint is correct. On Fiasco.OC and NOVA, however, the thread entry function gets executed without a return address being pushed to the stack, so at the function entrypoint the stack pointer is still aligned to 16 byte, which can cause problems with compiler-generated SSE instructions. With this patch, the stack pointer given to a new thread gets aligned to 16 bytes and decreased by 8 by default, since most of the currently supported base platforms execute the thread entry function without pushing a return address to the stack. For base-linux, the stack pointer gets realigned to 16 bytes before the thread entry function gets called. Fixes #1043.
This repository contains the Linux-specific implementation of Genode.