diff options
author | Tatsuya Kawano <tatsuya@hibaridb.org> | 2022-10-18 00:26:36 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-17 12:26:36 -0400 |
commit | 07a93b1e378bf2ea356b0561e5e89e60d30fc684 (patch) | |
tree | cc3ed40fb50267ef8844f11ea37b693d81c157d9 /yjit.c | |
parent | ad3d210beab9d162b96e2601aa3ad896785b831b (diff) | |
download | ruby-07a93b1e378bf2ea356b0561e5e89e60d30fc684.tar.gz |
YJIT: Do not call `mprotect` when `mem_size` is zero (#6563)
This allows x86_64 based YJIT to run on Docker Desktop on Apple silicon (arm64)
Mac because it will avoid a subtle behavior difference in `mprotect` system call
between the Linux kernel and `qemu-x86_64` user space emulator.
Diffstat (limited to 'yjit.c')
-rw-r--r-- | yjit.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -74,6 +74,11 @@ rb_yjit_mark_writable(void *mem_block, uint32_t mem_size) void rb_yjit_mark_executable(void *mem_block, uint32_t mem_size) { + // Do not call mprotect when mem_size is zero. Some platforms may return + // an error for it. https://github.com/Shopify/ruby/issues/450 + if (mem_size == 0) { + return; + } if (mprotect(mem_block, mem_size, PROT_READ | PROT_EXEC)) { rb_bug("Couldn't make JIT page (%p, %lu bytes) executable, errno: %s\n", mem_block, (unsigned long)mem_size, strerror(errno)); |