From f41b4d44f95978dfa97af04af00055dc3fbf7978 Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Wed, 1 Dec 2021 14:15:23 -0500 Subject: YJIT: Bounds check every byte in the assembler Previously, YJIT assumed that basic blocks never consume more than 1 KiB of memory. This assumption does not hold for long Ruby methods such as the one in the following: ```ruby eval(< --- misc/test_yjit_asm.sh | 4 ++-- misc/yjit_asm_tests.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'misc') diff --git a/misc/test_yjit_asm.sh b/misc/test_yjit_asm.sh index cf1ae7bee5..e09d83f0fb 100755 --- a/misc/test_yjit_asm.sh +++ b/misc/test_yjit_asm.sh @@ -1,9 +1,9 @@ -#!/bin/bash +#!/bin/sh set -e set -x -clang -std=gnu99 -Wall -Werror -Wno-error=unused-function -Wshorten-64-to-32 -I ${0%/*/*} ${0%/*}/yjit_asm_tests.c -o asm_test +clang -std=gnu99 -Wall -Werror -Wno-error=unused-function -Wshorten-64-to-32 -I "${0%/*/*}" "${0%/*}/yjit_asm_tests.c" -o asm_test ./asm_test diff --git a/misc/yjit_asm_tests.c b/misc/yjit_asm_tests.c index b37d483ecf..ccf8822bbe 100644 --- a/misc/yjit_asm_tests.c +++ b/misc/yjit_asm_tests.c @@ -26,7 +26,7 @@ void print_bytes(codeblock_t* cb) { for (uint32_t i = 0; i < cb->write_pos; ++i) { - printf("%02X", (int)cb->mem_block[i]); + printf("%02X", (int)*cb_get_ptr(cb, i)); } printf("\n"); @@ -59,7 +59,7 @@ void check_bytes(codeblock_t* cb, const char* bytes) char* endptr; long int byte = strtol(byte_str, &endptr, 16); - uint8_t cb_byte = cb->mem_block[i]; + uint8_t cb_byte = *cb_get_ptr(cb, i); if (cb_byte != byte) { -- cgit v1.2.3