-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathmalloc_shim.c
52 lines (40 loc) · 902 Bytes
/
malloc_shim.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#define SIZE (8*1024*1024)
#define ADDR ((char*)0x70000000)
#define ADDR_END (ADDR + SIZE)
static int init = 0;
static char * ptr = ADDR;
static void ensure_init(void)
{
if (init) return;
void *mem = mmap(ADDR, SIZE, PROT_EXEC|PROT_WRITE|PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (mem != ADDR) {
fprintf(stderr, "Failed to map memory to %x in malloc_shim\n", (size_t)ADDR);
exit(42);
}
init = 1;
}
void *malloc(size_t sz)
{
ensure_init();
sz = (sz+16)&~15; /* align up */
size_t left = ADDR_END - ptr;
if (sz > left) abort(); /* out-of-memory */
char *ptr_ret = ptr;
ptr += sz;
return ptr;
}
void *calloc(size_t num, size_t sz)
{
void *ret = malloc(sz);
memset(ret, 0, sz);
return ret;
}
void free(void *)
{
/* just ignore frees */
}