diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-28 14:31:11 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-28 14:31:11 +0200 |
| commit | dfe62ceac8a7c8067490b58995ad68cbe296fc24 (patch) | |
| tree | 37292e5d7808978466390cd5a4038c3fb6c860ce /src/tools/box64stack.c | |
| parent | a36c9bfe73debeac10b87800020f23cb0d31da09 (diff) | |
| download | box64-dfe62ceac8a7c8067490b58995ad68cbe296fc24.tar.gz box64-dfe62ceac8a7c8067490b58995ad68cbe296fc24.zip | |
Better Stack handling (backported from box86)
Diffstat (limited to 'src/tools/box64stack.c')
| -rwxr-xr-x | src/tools/box64stack.c | 9 |
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; |