X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flightning%2Fcheck%2Fsetcode.c;h=62719eefae79be49f02074b836036e8379047e3e;hb=c0c162422385a60ea7c8fa1dfe439e83e0a13d88;hp=0047f34880fac62ea56d627ff717011c45ec90ef;hpb=a34093eb63d1645fd2de9b412efe2587df9fdb3f;p=pcsx_rearmed.git diff --git a/deps/lightning/check/setcode.c b/deps/lightning/check/setcode.c index 0047f348..62719eef 100644 --- a/deps/lightning/check/setcode.c +++ b/deps/lightning/check/setcode.c @@ -31,14 +31,24 @@ main(int argc, char *argv[]) int mmap_fd; #endif void (*function)(void); + int mmap_prot, mmap_flags; #if defined(__sgi) mmap_fd = open("/dev/zero", O_RDWR); #endif - ptr = mmap(NULL, 1024 * 1024, - PROT_EXEC | PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON, mmap_fd, 0); + mmap_prot = PROT_READ | PROT_WRITE; +#if !__OpenBSD__ + mmap_prot |= PROT_EXEC; +#endif +#if __NetBSD__ + mmap_prot = PROT_MPROTECT(mmap_prot); + mmap_flags = 0; +#else + mmap_flags = MAP_PRIVATE; +#endif + mmap_flags |= MAP_ANON; + ptr = mmap(NULL, 1024 * 1024, mmap_prot, mmap_flags, mmap_fd, 0); assert(ptr != MAP_FAILED); #if defined(__sgi) close(mmap_fd); @@ -72,6 +82,9 @@ main(int argc, char *argv[]) if (function != NULL) abort(); +#if __NetBSD__ + assert(mprotect(ptr, 1024 * 1024, PROT_READ | PROT_WRITE) == 0); +#endif /* and calling again with enough space works */ jit_set_code(ptr, 1024 * 1024); function = jit_emit(); @@ -79,6 +92,9 @@ main(int argc, char *argv[]) abort(); jit_clear_state(); +#if __NetBSD__ || __OpenBSD__ + assert(mprotect(ptr, 1024 * 1024, PROT_READ | PROT_EXEC) == 0); +#endif (*function)(); jit_destroy_state(); finish_jit();