diff options
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; +} |