blob: 1680a18a6e19e1d23b6d63819a8cf1ae44efac91 (
plain)
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
|
#include "brk_shim.h"
#include <errno.h>
/*
* The idea is to just allocate a large buffer and rely on lazy page
* loading to not use more physical memory than necessary.
*/
#ifdef LARGEF
#define SHIMSIZE 0x4000000
/* 64MB */
#else
#define SHIMSIZE 0x200000
/* 2MB */
#endif
static char shim_space[SHIMSIZE];
static intptr_t shim_size = 0;
void *shim_sbrk(intptr_t increment) {
void* current = (void*)(shim_space + shim_size);
shim_size += increment;
if (shim_size < 0) {
shim_size = 0;
return (void*)-1;
} else if (shim_size > SHIMSIZE) {
shim_size = SHIMSIZE;
return (void*)-1;
}
return current;
}
int shim_brk(void* addr) {
if (addr < (void*)shim_space ||
addr > (void*)(shim_space + SHIMSIZE)) {
errno = EINVAL;
return -1;
}
shim_size = ((void*)shim_space) - addr;
return 0;
}
|