From 7347afed21d82fd0bec745d78401dc2d74328ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=9A=93?= Date: Sat, 10 May 2025 23:37:39 -0400 Subject: [PATCH] Revert "Make sure sandbox stack grows upwards in big-endian libretro builds" This reverts commit 58e6f71ef3153ff7788a4204339e01c4490830cd. The original behaviour was the correct one. The stack should always grow downwards. --- binding-sandbox/binding-base.h | 19 ++----------------- libretro/sandbox-bindgen.rb | 14 ++------------ 2 files changed, 4 insertions(+), 29 deletions(-) diff --git a/binding-sandbox/binding-base.h b/binding-sandbox/binding-base.h index c7100a85..6a010c9c 100644 --- a/binding-sandbox/binding-base.h +++ b/binding-sandbox/binding-base.h @@ -289,13 +289,7 @@ namespace mkxp_sandbox { fiber->stack.pop_back(); } ++fiber->stack_index; - b.stack_ptr = w2c_ruby_rb_wasm_get_stack_pointer(&b.instance()) -#ifdef MKXPZ_BIG_ENDIAN - + -#else - - -#endif // MKXPZ_BIG_ENDIAN - CEIL_WASMSTACKALIGN(declared_slots_size::value); + b.stack_ptr = w2c_ruby_rb_wasm_get_stack_pointer(&b.instance()) - CEIL_WASMSTACKALIGN(declared_slots_size::value); assert(b.stack_ptr % sizeof(VALUE) == 0); assert(b.stack_ptr % WASMSTACKALIGN == 0); if (declared_slots_size::value != 0) { @@ -339,16 +333,7 @@ namespace mkxp_sandbox { assert(fiber->stack.size() == fiber->stack_index); - w2c_ruby_rb_wasm_set_stack_pointer( - &bind->instance(), - fiber->stack.back().stack_ptr -#ifdef MKXPZ_BIG_ENDIAN - - -#else - + -#endif // MKXPZ_BIG_ENDIAN - CEIL_WASMSTACKALIGN(declared_slots_size::value) - ); + w2c_ruby_rb_wasm_set_stack_pointer(&bind->instance(), fiber->stack.back().stack_ptr + CEIL_WASMSTACKALIGN(declared_slots_size::value)); bind->stack_ptr = fiber->stack.back().stack_ptr; fiber->stack.pop_back(); } diff --git a/libretro/sandbox-bindgen.rb b/libretro/sandbox-bindgen.rb index 0dedece6..95fbe246 100644 --- a/libretro/sandbox-bindgen.rb +++ b/libretro/sandbox-bindgen.rb @@ -269,16 +269,6 @@ PRELUDE = <<~HEREDOC bindings::bindings(std::shared_ptr m) : binding_base(m) {} - static wasm_ptr_t _sbindgen_stack_push(wasm_ptr_t frame_pointer, wasm_size_t num_bytes) { - return frame_pointer - #ifdef MKXPZ_BIG_ENDIAN - + - #else - - - #endif // MKXPZ_BIG_ENDIAN - num_bytes; - } - static void _sbindgen_strcpy(char *dst, const char *src) { #ifdef MKXPZ_BIG_ENDIAN do { @@ -522,7 +512,7 @@ File.readlines('tags', chomp: true).each do |line| coroutine_initializer += <<~HEREDOC { wasm_ptr_t fp = w2c_ruby_rb_wasm_get_stack_pointer(&bind.instance()); - wasm_ptr_t sp = _sbindgen_stack_push(fp, CEIL_WASMSTACKALIGN(a#{args.length - 2} * sizeof(VALUE))); + wasm_ptr_t sp = fp - CEIL_WASMSTACKALIGN(a#{args.length - 2} * sizeof(VALUE)); if (sp > fp) { throw std::bad_alloc(); } @@ -549,7 +539,7 @@ File.readlines('tags', chomp: true).each do |line| do ++n; while (va_arg(b, VALUE)); va_end(b); wasm_ptr_t fp = w2c_ruby_rb_wasm_get_stack_pointer(&bind.instance()); - wasm_ptr_t sp = _sbindgen_stack_push(fp, CEIL_WASMSTACKALIGN(n * sizeof(VALUE))); + wasm_ptr_t sp = fp - CEIL_WASMSTACKALIGN(n * sizeof(VALUE)); if (sp > fp) { throw std::bad_alloc(); }