|
133 | 133 | # include <errno.h>
|
134 | 134 | #endif
|
135 | 135 |
|
136 |
| -#ifdef UNIX_LIKE |
| 136 | +#if defined( UNIX_LIKE ) || defined(NACL) |
137 | 137 | # include <fcntl.h>
|
138 | 138 | #endif
|
139 | 139 |
|
@@ -618,6 +618,12 @@ void GC_enable_signals(void)
|
618 | 618 | /* longjmp implementations. Most systems appear not to have */
|
619 | 619 | /* a signal 32. */
|
620 | 620 | # define SIGSETMASK(old, new) (old) = sigsetmask(new)
|
| 621 | +# elif defined(NACL) |
| 622 | + /* We don't use signals in NaCl. */ |
| 623 | +# define SIGSET_T int |
| 624 | +# define SIG_DEL(set, signal) |
| 625 | +# define SIG_FILL(set) |
| 626 | +# define SIGSETMASK(old, new) |
621 | 627 | # else
|
622 | 628 | /* Use POSIX/SYSV interface */
|
623 | 629 | # define SIGSET_T sigset_t
|
@@ -2067,8 +2073,21 @@ void GC_remap(ptr_t start, word bytes)
|
2067 | 2073 | int result;
|
2068 | 2074 |
|
2069 | 2075 | if (0 == start_addr) return;
|
| 2076 | +#ifdef NACL |
| 2077 | + { |
| 2078 | + /* NaCl doesn't expose mprotect, but mmap should work fine */ |
| 2079 | + void * mmap_result; |
| 2080 | + mmap_result = mmap(start_addr, len, PROT_READ | PROT_WRITE | OPT_PROT_EXEC, |
| 2081 | + MAP_PRIVATE | MAP_FIXED | OPT_MAP_ANON, |
| 2082 | + zero_fd, 0/* offset */); |
| 2083 | + if (mmap_result != (void *)start_addr) ABORT("mmap as mprotect failed"); |
| 2084 | + /* Fake the return value as if mprotect succeeded. */ |
| 2085 | + result = 0; |
| 2086 | + } |
| 2087 | +#else /* NACL */ |
2070 | 2088 | result = mprotect(start_addr, len,
|
2071 | 2089 | PROT_READ | PROT_WRITE | OPT_PROT_EXEC);
|
| 2090 | +#endif /* NACL */ |
2072 | 2091 | if (result != 0) {
|
2073 | 2092 | GC_err_printf3(
|
2074 | 2093 | "Mprotect failed at 0x%lx (length %ld) with errno %ld\n",
|
|
0 commit comments