From 854a8a9abf29e5cab28871f7a81d0fd1e7474b3d Mon Sep 17 00:00:00 2001 From: Mike Pavone Date: Tue, 4 Dec 2012 19:13:12 -0800 Subject: M68K to x86 translation works for a limited subset of instructions and addressing modes --- mem.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'mem.c') diff --git a/mem.c b/mem.c index c3f03a4..cc07985 100644 --- a/mem.c +++ b/mem.c @@ -1,10 +1,35 @@ #include #include +#include +#include +#include #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; +} -- cgit v1.2.3