3 inline cell align_page(cell a) { return align(a, getpagesize()); }
5 bool set_memory_locked(cell base, cell size, bool locked);
7 // segments set up guard pages to check for under/overflow.
8 // size must be a multiple of the page size
14 segment(cell size, bool executable_p);
17 bool underflow_p(cell addr) {
18 return addr >= (start - getpagesize()) && addr < start;
21 bool overflow_p(cell addr) {
22 return addr >= end && addr < (end + getpagesize());
25 bool in_segment_p(cell addr) {
26 return addr >= start && addr < end;
29 void set_border_locked(bool locked) {
30 int pagesize = getpagesize();
31 cell lo = start - pagesize;
32 if (!set_memory_locked(lo, pagesize, locked)) {
33 fatal_error("Cannot (un)protect low guard page", lo);
37 if (!set_memory_locked(hi, pagesize, locked)) {
38 fatal_error("Cannot (un)protect high guard page", hi);