Revert "Make sure sandbox stack grows upwards in big-endian libretro builds"

This reverts commit 58e6f71ef3.

The original behaviour was the correct one. The stack should always grow
downwards.
This commit is contained in:
刘皓 2025-05-10 23:37:39 -04:00
parent 87eea255c5
commit 7347afed21
No known key found for this signature in database
GPG key ID: 7901753DB465B711
2 changed files with 4 additions and 29 deletions

View file

@ -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<T>::value);
b.stack_ptr = w2c_ruby_rb_wasm_get_stack_pointer(&b.instance()) - CEIL_WASMSTACKALIGN(declared_slots_size<T>::value);
assert(b.stack_ptr % sizeof(VALUE) == 0);
assert(b.stack_ptr % WASMSTACKALIGN == 0);
if (declared_slots_size<T>::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<T>::value)
);
w2c_ruby_rb_wasm_set_stack_pointer(&bind->instance(), fiber->stack.back().stack_ptr + CEIL_WASMSTACKALIGN(declared_slots_size<T>::value));
bind->stack_ptr = fiber->stack.back().stack_ptr;
fiber->stack.pop_back();
}

View file

@ -269,16 +269,6 @@ PRELUDE = <<~HEREDOC
bindings::bindings(std::shared_ptr<struct w2c_#{MODULE_NAME}> 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();
}