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 "platform.hpp"
|
||||||
#include "utilities.hpp"
|
#include "utilities.hpp"
|
||||||
#include "primitives.hpp"
|
#include "primitives.hpp"
|
||||||
|
#include "errors.hpp"
|
||||||
#include "segments.hpp"
|
#include "segments.hpp"
|
||||||
#include "gc_info.hpp"
|
#include "gc_info.hpp"
|
||||||
#include "errors.hpp"
|
|
||||||
#include "contexts.hpp"
|
#include "contexts.hpp"
|
||||||
#include "run.hpp"
|
#include "run.hpp"
|
||||||
#include "objects.hpp"
|
#include "objects.hpp"
|
||||||
|
|
|
@ -98,19 +98,6 @@ segment::segment(cell size_, bool executable_p) {
|
||||||
set_border_locked(true);
|
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() {
|
segment::~segment() {
|
||||||
int pagesize = getpagesize();
|
int pagesize = getpagesize();
|
||||||
int retval = munmap((void*)(start - pagesize), pagesize + size + pagesize);
|
int retval = munmap((void*)(start - pagesize), pagesize + size + pagesize);
|
||||||
|
|
|
@ -107,19 +107,6 @@ segment::segment(cell size_, bool executable_p) {
|
||||||
set_border_locked(true);
|
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() {
|
segment::~segment() {
|
||||||
SYSTEM_INFO si;
|
SYSTEM_INFO si;
|
||||||
GetSystemInfo(&si);
|
GetSystemInfo(&si);
|
||||||
|
|
|
@ -2,6 +2,8 @@ namespace factor {
|
||||||
|
|
||||||
inline cell align_page(cell a) { return align(a, getpagesize()); }
|
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.
|
/* segments set up guard pages to check for under/overflow.
|
||||||
size must be a multiple of the page size */
|
size must be a multiple of the page size */
|
||||||
struct segment {
|
struct segment {
|
||||||
|
@ -24,7 +26,18 @@ struct segment {
|
||||||
return addr >= start && addr < end;
|
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