VM: set_border_locked is the same on windows and unix
parent
a331ad3788
commit
f99c684cc5
|
@ -92,9 +92,9 @@ namespace factor { struct factor_vm; }
|
|||
#include "platform.hpp"
|
||||
#include "utilities.hpp"
|
||||
#include "primitives.hpp"
|
||||
#include "errors.hpp"
|
||||
#include "segments.hpp"
|
||||
#include "gc_info.hpp"
|
||||
#include "errors.hpp"
|
||||
#include "contexts.hpp"
|
||||
#include "run.hpp"
|
||||
#include "objects.hpp"
|
||||
|
|
|
@ -98,19 +98,6 @@ segment::segment(cell size_, bool executable_p) {
|
|||
set_border_locked(true);
|
||||
}
|
||||
|
||||
void segment::set_border_locked(bool locked) {
|
||||
int pagesize = getpagesize();
|
||||
cell lo = start - pagesize;
|
||||
if (!set_memory_locked(lo, pagesize, locked)) {
|
||||
fatal_error("Cannot (un)protect low guard page", lo);
|
||||
}
|
||||
|
||||
cell hi = end;
|
||||
if (!set_memory_locked(hi, pagesize, locked)) {
|
||||
fatal_error("Cannot (un)protect high guard page", hi);
|
||||
}
|
||||
}
|
||||
|
||||
segment::~segment() {
|
||||
int pagesize = getpagesize();
|
||||
int retval = munmap((void*)(start - pagesize), pagesize + size + pagesize);
|
||||
|
|
|
@ -107,19 +107,6 @@ segment::segment(cell size_, bool executable_p) {
|
|||
set_border_locked(true);
|
||||
}
|
||||
|
||||
void segment::set_border_locked(bool locked) {
|
||||
int pagesize = getpagesize();
|
||||
cell lo = start - pagesize;
|
||||
if (!set_memory_locked(lo, pagesize, locked)) {
|
||||
fatal_error("Cannot (un)protect low guard page", lo);
|
||||
}
|
||||
|
||||
cell hi = end;
|
||||
if (!set_memory_locked(hi, pagesize, locked)) {
|
||||
fatal_error("Cannot (un)protect high guard page", hi);
|
||||
}
|
||||
}
|
||||
|
||||
segment::~segment() {
|
||||
SYSTEM_INFO si;
|
||||
GetSystemInfo(&si);
|
||||
|
|
|
@ -2,6 +2,8 @@ namespace factor {
|
|||
|
||||
inline cell align_page(cell a) { return align(a, getpagesize()); }
|
||||
|
||||
bool set_memory_locked(cell base, cell size, bool locked);
|
||||
|
||||
/* segments set up guard pages to check for under/overflow.
|
||||
size must be a multiple of the page size */
|
||||
struct segment {
|
||||
|
@ -24,7 +26,18 @@ struct segment {
|
|||
return addr >= start && addr < end;
|
||||
}
|
||||
|
||||
void set_border_locked(bool locked);
|
||||
void set_border_locked(bool locked) {
|
||||
int pagesize = getpagesize();
|
||||
cell lo = start - pagesize;
|
||||
if (!set_memory_locked(lo, pagesize, locked)) {
|
||||
fatal_error("Cannot (un)protect low guard page", lo);
|
||||
}
|
||||
|
||||
cell hi = end;
|
||||
if (!set_memory_locked(hi, pagesize, locked)) {
|
||||
fatal_error("Cannot (un)protect high guard page", hi);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue