mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-09-10 12:02:53 +02:00
Mark wasm_rt_trap
as noreturn
This commit is contained in:
parent
f355a6585e
commit
5e93e5e834
2 changed files with 23 additions and 11 deletions
|
@ -24,43 +24,49 @@
|
|||
#include "core.h"
|
||||
#include "wasm-rt.h"
|
||||
|
||||
#define WASM_PAGE_SIZE 65536U
|
||||
#define WASM_PAGE_SIZE ((uint64_t)65536U)
|
||||
|
||||
#define WASM_MIN_PAGES 1024U // tentative
|
||||
#define WASM_MIN_PAGES ((uint32_t)1024U) // tentative
|
||||
|
||||
extern "C" bool wasm_rt_is_initialized(void) {
|
||||
return true;
|
||||
}
|
||||
|
||||
extern "C" void wasm_rt_trap(wasm_rt_trap_t error) {
|
||||
extern "C" WASM_RT_NO_RETURN void wasm_rt_trap(wasm_rt_trap_t error) {
|
||||
mkxp_retro::log_printf(RETRO_LOG_ERROR, "Sandbox error %d\n", error);
|
||||
std::abort();
|
||||
}
|
||||
|
||||
extern "C" void wasm_rt_allocate_memory(wasm_rt_memory_t *memory, uint32_t initial_pages, uint32_t max_pages, bool is64) {
|
||||
memory->data = (uint8_t *)std::malloc(std::max(initial_pages, WASM_MIN_PAGES) * WASM_PAGE_SIZE);
|
||||
if ((memory->size = (uint64_t)initial_pages * WASM_PAGE_SIZE) > SIZE_MAX) {
|
||||
throw std::bad_alloc();
|
||||
}
|
||||
memory->data = (uint8_t *)std::malloc(std::max((size_t)memory->size, (size_t)WASM_MIN_PAGES));
|
||||
if (memory->data == NULL) {
|
||||
throw std::bad_alloc();
|
||||
}
|
||||
memory->pages = initial_pages;
|
||||
memory->size = initial_pages * WASM_PAGE_SIZE;
|
||||
}
|
||||
|
||||
extern "C" uint32_t wasm_rt_grow_memory(wasm_rt_memory_t *memory, uint32_t pages) {
|
||||
uint32_t new_pages;
|
||||
if (__builtin_add_overflow(memory->pages, pages, &new_pages)) {
|
||||
uint32_t new_pages = memory->pages + pages;
|
||||
if (new_pages < memory->pages) { // Unsigned integer overflow
|
||||
return -1;
|
||||
}
|
||||
uint8_t *new_data = new_pages <= WASM_MIN_PAGES ? memory->data : (uint8_t *)std::realloc(memory->data, new_pages * WASM_PAGE_SIZE);
|
||||
uint64_t new_size = (uint64_t)new_pages * WASM_PAGE_SIZE;
|
||||
if (new_size > SIZE_MAX) {
|
||||
return -1;
|
||||
}
|
||||
uint8_t *new_data = new_pages <= WASM_MIN_PAGES ? memory->data : (uint8_t *)std::realloc(memory->data, (size_t)new_size);
|
||||
if (new_data == NULL) {
|
||||
return -1;
|
||||
}
|
||||
#ifdef MKXPZ_BIG_ENDIAN
|
||||
std::memmove(new_data + pages * WASM_PAGE_SIZE, new_data, memory->size);
|
||||
std::memmove(new_data + (size_t)pages * WASM_PAGE_SIZE, new_data, (size_t)memory->size);
|
||||
#endif // MKXPZ_BIG_ENDIAN
|
||||
uint32_t old_pages = memory->pages;
|
||||
memory->pages = new_pages;
|
||||
memory->size = new_pages * WASM_PAGE_SIZE;
|
||||
memory->size = new_size;
|
||||
memory->data = new_data;
|
||||
return old_pages;
|
||||
}
|
||||
|
|
|
@ -58,6 +58,12 @@ extern "C" {
|
|||
# define wasm_rt_memcpy memcpy
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# define WASM_RT_NO_RETURN __declspec(noreturn)
|
||||
#else
|
||||
# define WASM_RT_NO_RETURN __attribute__((noreturn))
|
||||
#endif
|
||||
|
||||
/* Don't define this as an enum. It causes builds using devkitARM or Vita SDK to successfully compile but crash on startup. */
|
||||
typedef int wasm_rt_type_t;
|
||||
#define WASM_RT_I32 0
|
||||
|
@ -118,7 +124,7 @@ typedef struct {
|
|||
|
||||
bool wasm_rt_is_initialized(void);
|
||||
|
||||
void wasm_rt_trap(wasm_rt_trap_t error);
|
||||
WASM_RT_NO_RETURN void wasm_rt_trap(wasm_rt_trap_t error);
|
||||
|
||||
void wasm_rt_allocate_memory(wasm_rt_memory_t *memory, uint32_t initial_pages, uint32_t max_pages, bool is64);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue