diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2021-12-05 10:08:19 -0500 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-12-05 10:26:35 -0500 |
commit | 26063d39546ccd6d0b9d42defc2ad1bb8d35cc27 (patch) | |
tree | 385f99a442896c952ad31de5f67c8ee85514abc2 /yjit_asm.c | |
parent | bbfefd45c6c99c4371cc0789bdd1da9ea3ade701 (diff) |
YJIT: Initialize code buffer with PUSH DS
PUSH DS triggers the #UD processor exception in 64-bit mode, which the
OS translates to a SIGILL. Unlike INT3, this triggers the usual crash
reporter, which makes failures easier to notice. When there is a
debugger attached, the PUSH DS pauses execution just like INT3.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5217
Diffstat (limited to 'yjit_asm.c')
-rw-r--r-- | yjit_asm.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/yjit_asm.c b/yjit_asm.c index 98f4a4e515..3a43c80ef0 100644 --- a/yjit_asm.c +++ b/yjit_asm.c @@ -215,10 +215,11 @@ static uint8_t *alloc_exec_mem(uint32_t mem_size) cb_init(cb, mem_block, mem_size); - // Fill the executable memory with INT3 (0xCC) so that - // executing uninitialized memory will fault + // Fill the executable memory with PUSH DS (0x1E) so that + // executing uninitialized memory will fault with #UD in + // 64-bit mode. cb_mark_all_writeable(cb); - memset(mem_block, 0xCC, mem_size); + memset(mem_block, 0x1E, mem_size); cb_mark_all_executable(cb); return mem_block; |