diff options
author | Mike Pavone <pavone@retrodev.com> | 2012-12-04 19:13:12 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2012-12-04 19:13:12 -0800 |
commit | 854a8a9abf29e5cab28871f7a81d0fd1e7474b3d (patch) | |
tree | 54651ed6d72de7191718ba8e26e015e2ee2720ef /mem.c | |
parent | e54fddc285255b26e7e0ca69db3efb009cfc9c15 (diff) |
M68K to x86 translation works for a limited subset of instructions and addressing modes
Diffstat (limited to 'mem.c')
-rw-r--r-- | mem.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -1,10 +1,35 @@ #include <sys/mman.h> #include <stddef.h> +#include <stdint.h> +#include <stdlib.h> +#include <unistd.h> #include "mem.h" +/* void * alloc_code(size_t *size) { *size += PAGE_SIZE - (*size & (PAGE_SIZE - 1)); return mmap(NULL, *size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); } +*/ +/* +void * alloc_code(size_t *size) +{ + char * ret = malloc(*size); + char * base = (char *)(((intptr_t)ret) & (~(PAGE_SIZE-1))); + mprotect(base, (ret + *size) - base, PROT_EXEC | PROT_READ | PROT_WRITE); + return ret; +} +*/ + +void * alloc_code(size_t *size) +{ + *size += PAGE_SIZE - (*size & (PAGE_SIZE - 1)); + void * ret = sbrk(*size); + if (ret == ((void *)-1)) { + return NULL; + } + mprotect(ret, *size, PROT_EXEC | PROT_READ | PROT_WRITE); + return ret; +} |