From f99c684cc53f9955c4ab834b9eafcc2d7f7dfb84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Mon, 27 Jun 2016 16:27:56 +0200 Subject: [PATCH] VM: set_border_locked is the same on windows and unix --- vm/master.hpp | 2 +- vm/os-unix.cpp | 13 ------------- vm/os-windows.cpp | 13 ------------- vm/segments.hpp | 15 ++++++++++++++- 4 files changed, 15 insertions(+), 28 deletions(-) diff --git a/vm/master.hpp b/vm/master.hpp index 5331a31e3d2..59c47a74fa6 100644 --- a/vm/master.hpp +++ b/vm/master.hpp @@ -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" diff --git a/vm/os-unix.cpp b/vm/os-unix.cpp index 8e5edec24d7..cb81c170e82 100644 --- a/vm/os-unix.cpp +++ b/vm/os-unix.cpp @@ -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); diff --git a/vm/os-windows.cpp b/vm/os-windows.cpp index 188ba704304..637efdb85f4 100644 --- a/vm/os-windows.cpp +++ b/vm/os-windows.cpp @@ -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); diff --git a/vm/segments.hpp b/vm/segments.hpp index b136d9cd5e3..466f1e491fa 100644 --- a/vm/segments.hpp +++ b/vm/segments.hpp @@ -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); + } + } }; }