From d0264201dd42d7735c41338f78c6065b2f9593bc Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 12 Mar 2010 14:22:24 +0100 Subject: Initial implementation. --- src/backend/initializestack_64_linux_mac.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/backend/initializestack_64_linux_mac.cpp (limited to 'src/backend/initializestack_64_linux_mac.cpp') diff --git a/src/backend/initializestack_64_linux_mac.cpp b/src/backend/initializestack_64_linux_mac.cpp new file mode 100644 index 0000000..5465dfb --- /dev/null +++ b/src/backend/initializestack_64_linux_mac.cpp @@ -0,0 +1,22 @@ +#include + +void initializeStack(void *data, int size, void (*entry)(), void **stackPointer) +{ + void* stackBottom = (char*)data + size; + // align to 16 byte + stackBottom = (void*)((size_t)stackBottom & ~0xF); + + void **p = (void**)stackBottom; + + *(--p) = 0; // align + *(--p) = (void*)entry; // rip + *(--p) = stackBottom; // rbp + *(--p) = 0; // rbx + *(--p) = 0; // r12 + *(--p) = 0; // r13 + *(--p) = 0; // r14 + *(--p) = 0; // r15 + *(--p) = (void*)0x00001f800000033f; // SIMD and regular floating point control defaults + + *stackPointer = p; +} -- cgit v1.2.3