Mercurial > repos > blastem
diff mem.c @ 18:3e7bfde7606e
M68K to x86 translation works for a limited subset of instructions and addressing modes
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 04 Dec 2012 19:13:12 -0800 |
parents | 2bdad0f52f42 |
children | 140af5509ce7 |
line wrap: on
line diff
--- a/mem.c Tue Nov 27 22:54:38 2012 -0800 +++ b/mem.c Tue Dec 04 19:13:12 2012 -0800 @@ -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; +}