diff options
Diffstat (limited to 'wasm2c/wasm-rt-impl.c')
-rw-r--r-- | wasm2c/wasm-rt-impl.c | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/wasm2c/wasm-rt-impl.c b/wasm2c/wasm-rt-impl.c index 57bd74cf..7c88499d 100644 --- a/wasm2c/wasm-rt-impl.c +++ b/wasm2c/wasm-rt-impl.c @@ -36,8 +36,6 @@ #include <sys/mman.h> #endif -#define PAGE_SIZE 65536 - #ifndef NDEBUG #define DEBUG_PRINTF(...) fprintf(stderr, __VA_ARGS__); #else @@ -64,10 +62,6 @@ WASM_RT_THREAD_LOCAL wasm_rt_jmp_buf g_wasm_rt_jmp_buf; extern void WASM_RT_TRAP_HANDLER(wasm_rt_trap_t code); #endif -#ifdef WASM_RT_GROW_FAILED_HANDLER -extern void WASM_RT_GROW_FAILED_HANDLER(); -#endif - void wasm_rt_trap(wasm_rt_trap_t code) { assert(code != WASM_RT_TRAP_NONE); #if WASM_RT_STACK_DEPTH_COUNT @@ -83,47 +77,6 @@ void wasm_rt_trap(wasm_rt_trap_t code) { } #ifdef _WIN32 -static void* os_mmap(size_t size) { - void* ret = VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_NOACCESS); - return ret; -} - -static int os_munmap(void* addr, size_t size) { - // Windows can only unmap the whole mapping - (void)size; /* unused */ - BOOL succeeded = VirtualFree(addr, 0, MEM_RELEASE); - return succeeded ? 0 : -1; -} - -static int os_mprotect(void* addr, size_t size) { - if (size == 0) { - return 0; - } - void* ret = VirtualAlloc(addr, size, MEM_COMMIT, PAGE_READWRITE); - if (ret == addr) { - return 0; - } - VirtualFree(addr, 0, MEM_RELEASE); - return -1; -} - -static void os_print_last_error(const char* msg) { - DWORD errorMessageID = GetLastError(); - if (errorMessageID != 0) { - LPSTR messageBuffer = 0; - // The api creates the buffer that holds the message - size_t size = FormatMessageA( - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPSTR)&messageBuffer, 0, NULL); - (void)size; - printf("%s. %s\n", msg, messageBuffer); - LocalFree(messageBuffer); - } else { - printf("%s. No error code.\n", msg); - } -} #if WASM_RT_INSTALL_SIGNAL_HANDLER @@ -148,28 +101,6 @@ static void os_cleanup_signal_handler(void) { #endif #else -#if WASM_RT_USE_MMAP -static void* os_mmap(size_t size) { - int map_prot = PROT_NONE; - int map_flags = MAP_ANONYMOUS | MAP_PRIVATE; - uint8_t* addr = mmap(NULL, size, map_prot, map_flags, -1, 0); - if (addr == MAP_FAILED) - return NULL; - return addr; -} - -static int os_munmap(void* addr, size_t size) { - return munmap(addr, size); -} - -static int os_mprotect(void* addr, size_t size) { - return mprotect(addr, size, PROT_READ | PROT_WRITE); -} - -static void os_print_last_error(const char* msg) { - perror(msg); -} -#endif #if WASM_RT_INSTALL_SIGNAL_HANDLER static void os_signal_handler(int sig, siginfo_t* si, void* unused) { @@ -326,113 +257,6 @@ void wasm_rt_free_thread(void) { #endif } -#if WASM_RT_USE_MMAP - -static uint64_t get_allocation_size_for_mmap(wasm_rt_memory_t* memory) { - assert(!memory->is64 && - "memory64 is not yet compatible with WASM_RT_USE_MMAP"); -#if WASM_RT_MEMCHECK_GUARD_PAGES - /* Reserve 8GiB. */ - const uint64_t max_size = 0x200000000ul; - return max_size; -#else - if (memory->max_pages != 0) { - const uint64_t max_size = memory->max_pages * PAGE_SIZE; - return max_size; - } - - /* Reserve 4GiB. */ - const uint64_t max_size = 0x100000000ul; - return max_size; -#endif -} - -#endif - -void wasm_rt_allocate_memory(wasm_rt_memory_t* memory, - uint64_t initial_pages, - uint64_t max_pages, - bool is64) { - uint64_t byte_length = initial_pages * PAGE_SIZE; - memory->size = byte_length; - memory->pages = initial_pages; - memory->max_pages = max_pages; - memory->is64 = is64; - -#if WASM_RT_USE_MMAP - const uint64_t mmap_size = get_allocation_size_for_mmap(memory); - void* addr = os_mmap(mmap_size); - if (!addr) { - os_print_last_error("os_mmap failed."); - abort(); - } - int ret = os_mprotect(addr, byte_length); - if (ret != 0) { - os_print_last_error("os_mprotect failed."); - abort(); - } - memory->data = addr; -#else - memory->data = calloc(byte_length, 1); -#endif -} - -static uint64_t grow_memory_impl(wasm_rt_memory_t* memory, uint64_t delta) { - uint64_t old_pages = memory->pages; - uint64_t new_pages = memory->pages + delta; - if (new_pages == 0) { - return 0; - } - if (new_pages < old_pages || new_pages > memory->max_pages) { - return (uint64_t)-1; - } - uint64_t old_size = old_pages * PAGE_SIZE; - uint64_t new_size = new_pages * PAGE_SIZE; - uint64_t delta_size = delta * PAGE_SIZE; -#if WASM_RT_USE_MMAP - uint8_t* new_data = memory->data; - int ret = os_mprotect(new_data + old_size, delta_size); - if (ret != 0) { - return (uint64_t)-1; - } -#else - uint8_t* new_data = realloc(memory->data, new_size); - if (new_data == NULL) { - return (uint64_t)-1; - } -#if !WABT_BIG_ENDIAN - memset(new_data + old_size, 0, delta_size); -#endif -#endif -#if WABT_BIG_ENDIAN - memmove(new_data + new_size - old_size, new_data, old_size); - memset(new_data, 0, delta_size); -#endif - memory->pages = new_pages; - memory->size = new_size; - memory->data = new_data; - return old_pages; -} - -uint64_t wasm_rt_grow_memory(wasm_rt_memory_t* memory, uint64_t delta) { - uint64_t ret = grow_memory_impl(memory, delta); -#ifdef WASM_RT_GROW_FAILED_HANDLER - if (ret == -1) { - WASM_RT_GROW_FAILED_HANDLER(); - } -#endif - return ret; -} - -void wasm_rt_free_memory(wasm_rt_memory_t* memory) { -#if WASM_RT_USE_MMAP - const uint64_t mmap_size = get_allocation_size_for_mmap(memory); - os_munmap(memory->data, mmap_size); // ignore error -#else - free(memory->data); -#endif -} - #define DEFINE_TABLE_OPS(type) \ void wasm_rt_allocate_##type##_table(wasm_rt_##type##_table_t* table, \ uint32_t elements, \ |