Skip to content

Commit

Permalink
VM: set_border_locked is the same on windows and unix
Browse files Browse the repository at this point in the history
  • Loading branch information
bjourne committed Jun 27, 2016
1 parent a331ad3 commit f99c684
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 28 deletions.
2 changes: 1 addition & 1 deletion vm/master.hpp
Expand Up @@ -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"
Expand Down
13 changes: 0 additions & 13 deletions vm/os-unix.cpp
Expand Up @@ -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);
Expand Down
13 changes: 0 additions & 13 deletions vm/os-windows.cpp
Expand Up @@ -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);
Expand Down
15 changes: 14 additions & 1 deletion vm/segments.hpp
Expand Up @@ -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 {
Expand All @@ -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);
}
}
};

}

0 comments on commit f99c684

Please sign in to comment.