about summary refs log tree commit diff stats
path: root/src/tools/box64stack.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-28 14:31:11 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-03-28 14:31:11 +0200
commitdfe62ceac8a7c8067490b58995ad68cbe296fc24 (patch)
tree37292e5d7808978466390cd5a4038c3fb6c860ce /src/tools/box64stack.c
parenta36c9bfe73debeac10b87800020f23cb0d31da09 (diff)
downloadbox64-dfe62ceac8a7c8067490b58995ad68cbe296fc24.tar.gz
box64-dfe62ceac8a7c8067490b58995ad68cbe296fc24.zip
Better Stack handling (backported from box86)
Diffstat (limited to 'src/tools/box64stack.c')
-rwxr-xr-xsrc/tools/box64stack.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/tools/box64stack.c b/src/tools/box64stack.c
index dab38474..94ca4dd3 100755
--- a/src/tools/box64stack.c
+++ b/src/tools/box64stack.c
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
+#include <sys/mman.h>
 
 #include "box64stack.h"
 #include "box64context.h"
@@ -15,15 +16,17 @@ EXPORTDYN
 int CalcStackSize(box64context_t *context)
 {
     printf_log(LOG_DEBUG, "Calc stack size, based on %d elf(s)\n", context->elfsize);
-    context->stacksz = 8*1024*1024; context->stackalign=4;
+    context->stacksz = 8*1024*1024; context->stackalign=16;
     for (int i=0; i<context->elfsize; ++i)
         CalcStack(context->elfs[i], &context->stacksz, &context->stackalign);
 
-    if (posix_memalign((void**)&context->stack, context->stackalign, context->stacksz)) {
+//    if (posix_memalign((void**)&context->stack, context->stackalign, context->stacksz)) {
+    context->stack = mmap(NULL, context->stacksz, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0);
+    if (context->stack==(void*)-1) {
         printf_log(LOG_NONE, "Cannot allocate aligned memory (0x%x/0x%x) for stack\n", context->stacksz, context->stackalign);
         return 1;
     }
-    memset(context->stack, 0, context->stacksz);
+    //memset(context->stack, 0, context->stacksz);
     printf_log(LOG_DEBUG, "Stack is @%p size=0x%x align=0x%x\n", context->stack, context->stacksz, context->stackalign);
 
     return 0;