| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- /*
- * Copyright (C) 2019 Intel Corporation. All rights reserved.
- * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- */
- #ifndef _WASM_MEMORY_H
- #define _WASM_MEMORY_H
- #include "bh_common.h"
- #include "../include/wasm_export.h"
- #include "../interpreter/wasm_runtime.h"
- #include "../common/wasm_shared_memory.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if WASM_ENABLE_SHARED_MEMORY != 0 && BH_ATOMIC_64_IS_ATOMIC != 0
- #define GET_LINEAR_MEMORY_SIZE(memory) \
- BH_ATOMIC_64_LOAD(memory->memory_data_size)
- #define SET_LINEAR_MEMORY_SIZE(memory, size) \
- BH_ATOMIC_64_STORE(memory->memory_data_size, size)
- #elif WASM_ENABLE_SHARED_MEMORY != 0
- static inline uint64
- GET_LINEAR_MEMORY_SIZE(const WASMMemoryInstance *memory)
- {
- SHARED_MEMORY_LOCK(memory);
- uint64 memory_data_size = BH_ATOMIC_64_LOAD(memory->memory_data_size);
- SHARED_MEMORY_UNLOCK(memory);
- return memory_data_size;
- }
- static inline void
- SET_LINEAR_MEMORY_SIZE(WASMMemoryInstance *memory, uint64 size)
- {
- SHARED_MEMORY_LOCK(memory);
- BH_ATOMIC_64_STORE(memory->memory_data_size, size);
- SHARED_MEMORY_UNLOCK(memory);
- }
- #else
- #define GET_LINEAR_MEMORY_SIZE(memory) memory->memory_data_size
- #define SET_LINEAR_MEMORY_SIZE(memory, size) memory->memory_data_size = size
- #endif
- #if WASM_ENABLE_INTERP != 0
- #if WASM_ENABLE_SHARED_HEAP != 0
- #if WASM_ENABLE_MULTI_MEMORY != 0
- /* Only enable shared heap for the default memory */
- #define is_default_memory (memidx == 0)
- #else
- #define is_default_memory true
- #endif
- #if UINTPTR_MAX == UINT64_MAX
- #define get_shared_heap_end_off() module->e->shared_heap_end_off.u64
- #else
- #define get_shared_heap_end_off() \
- (uint64)(module->e->shared_heap_end_off.u32[0])
- #endif
- #if WASM_ENABLE_MEMORY64 != 0
- #define shared_heap_is_memory64 is_memory64
- #else
- #define shared_heap_is_memory64 false
- #endif
- #define app_addr_in_shared_heap(app_addr, bytes) \
- (is_default_memory \
- && is_app_addr_in_shared_heap((WASMModuleInstanceCommon *)module, \
- shared_heap_is_memory64, (uint64)app_addr, \
- bytes))
- #define shared_heap_addr_app_to_native(app_addr, native_addr) \
- native_addr = module->e->shared_heap_base_addr_adj + app_addr
- #define CHECK_SHARED_HEAP_OVERFLOW(app_addr, bytes, native_addr) \
- if (app_addr_in_shared_heap(app_addr, bytes)) \
- shared_heap_addr_app_to_native(app_addr, native_addr); \
- else
- #else /* else of WASM_ENABLE_SHARED_HEAP != 0 */
- #define CHECK_SHARED_HEAP_OVERFLOW(app_addr, bytes, native_addr)
- #endif /* end of WASM_ENABLE_SHARED_HEAP != 0 */
- #endif /* end of WASM_ENABLE_INTERP != 0 */
- #if WASM_ENABLE_SHARED_HEAP != 0
- bool
- is_app_addr_in_shared_heap(WASMModuleInstanceCommon *module_inst,
- bool is_memory64, uint64 app_offset, uint64 bytes);
- WASMSharedHeap *
- wasm_runtime_create_shared_heap(SharedHeapInitArgs *init_args);
- WASMSharedHeap *
- wasm_runtime_chain_shared_heaps(WASMSharedHeap *head, WASMSharedHeap *body);
- WASMSharedHeap *
- wasm_runtime_unchain_shared_heaps(WASMSharedHeap *head, bool entire_chain);
- bool
- wasm_runtime_reset_shared_heap_chain(WASMSharedHeap *shared_heap);
- bool
- wasm_runtime_attach_shared_heap(WASMModuleInstanceCommon *module_inst,
- WASMSharedHeap *shared_heap);
- bool
- wasm_runtime_attach_shared_heap_internal(WASMModuleInstanceCommon *module_inst,
- WASMSharedHeap *shared_heap);
- void
- wasm_runtime_detach_shared_heap(WASMModuleInstanceCommon *module_inst);
- void
- wasm_runtime_detach_shared_heap_internal(WASMModuleInstanceCommon *module_inst);
- WASMSharedHeap *
- wasm_runtime_get_shared_heap(WASMModuleInstanceCommon *module_inst_comm);
- uint64
- wasm_runtime_shared_heap_malloc(WASMModuleInstanceCommon *module_inst,
- uint64 size, void **p_native_addr);
- void
- wasm_runtime_shared_heap_free(WASMModuleInstanceCommon *module_inst,
- uint64 ptr);
- #endif /* end of WASM_ENABLE_SHARED_HEAP != 0 */
- bool
- wasm_runtime_memory_init(mem_alloc_type_t mem_alloc_type,
- const MemAllocOption *alloc_option);
- void
- wasm_runtime_memory_destroy(void);
- unsigned
- wasm_runtime_memory_pool_size(void);
- void
- wasm_runtime_set_mem_bound_check_bytes(WASMMemoryInstance *memory,
- uint64 memory_data_size);
- void
- wasm_runtime_set_enlarge_mem_error_callback(
- const enlarge_memory_error_callback_t callback, void *user_data);
- void
- wasm_deallocate_linear_memory(WASMMemoryInstance *memory_inst);
- int
- wasm_allocate_linear_memory(uint8 **data, bool is_shared_memory,
- bool is_memory64, uint64 num_bytes_per_page,
- uint64 init_page_count, uint64 max_page_count,
- uint64 *memory_data_size);
- #ifdef __cplusplus
- }
- #endif
- #endif /* end of _WASM_MEMORY_H */
|