Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
17:de0085d4ea40 | 18:3e7bfde7606e |
---|---|
1 #include <sys/mman.h> | 1 #include <sys/mman.h> |
2 #include <stddef.h> | 2 #include <stddef.h> |
3 #include <stdint.h> | |
4 #include <stdlib.h> | |
5 #include <unistd.h> | |
3 #include "mem.h" | 6 #include "mem.h" |
4 | 7 |
8 /* | |
5 void * alloc_code(size_t *size) | 9 void * alloc_code(size_t *size) |
6 { | 10 { |
7 *size += PAGE_SIZE - (*size & (PAGE_SIZE - 1)); | 11 *size += PAGE_SIZE - (*size & (PAGE_SIZE - 1)); |
8 return mmap(NULL, *size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | 12 return mmap(NULL, *size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); |
9 } | 13 } |
14 */ | |
10 | 15 |
16 /* | |
17 void * alloc_code(size_t *size) | |
18 { | |
19 char * ret = malloc(*size); | |
20 char * base = (char *)(((intptr_t)ret) & (~(PAGE_SIZE-1))); | |
21 mprotect(base, (ret + *size) - base, PROT_EXEC | PROT_READ | PROT_WRITE); | |
22 return ret; | |
23 } | |
24 */ | |
25 | |
26 void * alloc_code(size_t *size) | |
27 { | |
28 *size += PAGE_SIZE - (*size & (PAGE_SIZE - 1)); | |
29 void * ret = sbrk(*size); | |
30 if (ret == ((void *)-1)) { | |
31 return NULL; | |
32 } | |
33 mprotect(ret, *size, PROT_EXEC | PROT_READ | PROT_WRITE); | |
34 return ret; | |
35 } |