From dfe62ceac8a7c8067490b58995ad68cbe296fc24 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 28 Mar 2021 14:31:11 +0200 Subject: Better Stack handling (backported from box86) --- src/tools/box64stack.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/tools/box64stack.c') 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 #include #include +#include #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; ielfsize; ++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; -- cgit 1.4.1