Index: sysdeps/nacl/irt_syscalls.c |
diff --git a/sysdeps/nacl/irt_syscalls.c b/sysdeps/nacl/irt_syscalls.c |
index 14862fe333435d91dcba5ab87589f74d024dd27c..d4b5cd73501c517fbc5aa3dd2efcb37fc8b0f15d 100644 |
--- a/sysdeps/nacl/irt_syscalls.c |
+++ b/sysdeps/nacl/irt_syscalls.c |
@@ -269,6 +269,10 @@ static int nacl_irt_clock_gettime(clockid_t clk_id, |
return -NACL_SYSCALL (clock_gettime) (clk_id, tp); |
} |
+static int nacl_irt_mprotect (void *addr, size_t len, int prot) { |
Mark Seaborn
2013/03/29 15:48:07
Nit: put this after munmap()
Petr Hosek
2013/03/29 21:02:21
Moved.
|
+ return -NACL_SYSCALL (mprotect) (addr, len, prot); |
+} |
+ |
static size_t no_interface (const char *interface_ident, |
void *table, size_t tablesize) { |
return 0; |
@@ -392,6 +396,8 @@ int (*__nacl_irt_open_resource) (const char* file, int *fd); |
int (*__nacl_irt_clock_getres) (clockid_t clk_id, struct timespec *res); |
int (*__nacl_irt_clock_gettime) (clockid_t clk_id, struct timespec *tp); |
+int (*__nacl_irt_mprotect) (void *addr, size_t len, int prot); |
Mark Seaborn
2013/03/29 15:48:07
Put this after munmap() too
Petr Hosek
2013/03/29 21:02:21
Moved.
|
+ |
void |
init_irt_table (void) |
{ |
@@ -399,7 +405,7 @@ init_irt_table (void) |
struct nacl_irt_basic nacl_irt_basic; |
struct nacl_irt_fdio nacl_irt_fdio; |
struct nacl_irt_filename nacl_irt_filename; |
- struct nacl_irt_memory nacl_irt_memory; |
+ struct nacl_irt_memory_v0_2 nacl_irt_memory; |
struct nacl_irt_dyncode nacl_irt_dyncode; |
struct nacl_irt_thread nacl_irt_thread; |
struct nacl_irt_mutex nacl_irt_mutex; |
@@ -469,18 +475,30 @@ init_irt_table (void) |
} |
if (__nacl_irt_query && |
- __nacl_irt_query (NACL_IRT_MEMORY_v0_1, &u.nacl_irt_memory, |
+ __nacl_irt_query (NACL_IRT_MEMORY_v0_2, &u.nacl_irt_memory, |
sizeof(u.nacl_irt_memory)) == sizeof(u.nacl_irt_memory)) |
{ |
__nacl_irt_sysbrk = u.nacl_irt_memory.sysbrk; |
__nacl_irt_mmap = u.nacl_irt_memory.mmap; |
__nacl_irt_munmap = u.nacl_irt_memory.munmap; |
+ __nacl_irt_mprotect = u.nacl_irt_memory.mprotect; |
+ } |
+ else if (__nacl_irt_query && |
+ __nacl_irt_query (NACL_IRT_MEMORY_v0_1, &u.nacl_irt_memory, |
+ sizeof(struct nacl_irt_memory_v0_1)) == |
+ sizeof(struct nacl_irt_memory_v0_1)) |
+ { |
+ __nacl_irt_sysbrk = u.nacl_irt_memory.sysbrk; |
+ __nacl_irt_mmap = u.nacl_irt_memory.mmap; |
+ __nacl_irt_munmap = u.nacl_irt_memory.munmap; |
+ __nacl_irt_mprotect = nacl_irt_mprotect; |
Mark Seaborn
2013/03/29 15:48:07
You shouldn't fall back to using the syscall direc
Petr Hosek
2013/03/29 21:02:21
Fixed.
|
} |
else |
{ |
__nacl_irt_sysbrk = nacl_irt_sysbrk; |
__nacl_irt_mmap = nacl_irt_mmap; |
__nacl_irt_munmap = nacl_irt_munmap; |
+ __nacl_irt_mprotect = nacl_irt_mprotect; |
} |
if (__nacl_irt_query && |