Index: sysdeps/nacl/irt_syscalls.c |
diff --git a/sysdeps/nacl/irt_syscalls.c b/sysdeps/nacl/irt_syscalls.c |
index 14862fe333435d91dcba5ab87589f74d024dd27c..2ea024cc4ef08fe5fadc993b369eb3c0eccbdd09 100644 |
--- a/sysdeps/nacl/irt_syscalls.c |
+++ b/sysdeps/nacl/irt_syscalls.c |
@@ -145,6 +145,10 @@ static int nacl_irt_munmap (void *addr, size_t len) { |
return -NACL_SYSCALL (munmap) (addr, len); |
} |
+static int nacl_irt_mprotect (void *addr, size_t len, int prot) { |
+ return -NACL_SYSCALL (mprotect) (addr, len, prot); |
+} |
+ |
static int nacl_irt_dyncode_create(void *dest, const void *src, size_t size) { |
return -NACL_SYSCALL(dyncode_create)(dest, src, size); |
} |
@@ -360,6 +364,7 @@ int (*__nacl_irt_sysbrk) (void **newbrk); |
int (*__nacl_irt_mmap) (void **addr, size_t len, int prot, int flags, |
int fd, off_t off); |
int (*__nacl_irt_munmap) (void *addr, size_t len); |
+int (*__nacl_irt_mprotect) (void *addr, size_t len, int prot); |
int (*__nacl_irt_dyncode_create) (void *dest, const void *src, size_t size); |
int (*__nacl_irt_dyncode_modify) (void *dest, const void *src, size_t size); |
@@ -399,7 +404,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 +474,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 = not_implemented; |
} |
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 && |