mirror of
				https://github.com/bytecodealliance/wasm-micro-runtime.git
				synced 2025-10-30 21:02:27 +00:00 
			
		
		
		
	 b038f2721b
			
		
	
	
		b038f2721b
		
			
		
	
	
	
	
		
			
			Implement the shared heap feature for interpreter, aot and llvm jit.
Add below runtime APIs:
```C
wasm_shared_heap_t
wasm_runtime_create_shared_heap(SharedHeapInitArgs *init_args);
bool
wasm_runtime_attach_shared_heap(wasm_module_inst_t module_inst,
                                wasm_shared_heap_t shared_heap);
void
wasm_runtime_detach_shared_heap(wasm_module_inst_t module_inst);
uint64_t
wasm_runtime_shared_heap_malloc(wasm_module_inst_t module_inst, uint64_t size,
                                void **p_native_addr);
void
wasm_runtime_shared_heap_free(wasm_module_inst_t module_inst, uint64_t ptr);
```
And allow wasm app to call API shared_heap_malloc and shared_heap_free:
```C
void *shared_heap_malloc(uint32_t size);
void shared_heap_free(void *ptr);
```
		
	
			
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2019 Intel Corporation. All rights reserved.
 | |
|  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
|  */
 | |
| 
 | |
| #ifndef __AOT_COMP_OPTION_H__
 | |
| #define __AOT_COMP_OPTION_H__
 | |
| 
 | |
| #include <stdint.h>
 | |
| 
 | |
| typedef struct {
 | |
|     /* Enables or disables bounds checks for stack frames. When enabled, the AOT
 | |
|      * compiler generates code to check if the stack pointer is within the
 | |
|      * bounds of the current stack frame (and if not, traps). */
 | |
|     bool bounds_checks;
 | |
| 
 | |
|     /* Enables or disables instruction pointer (IP) tracking. */
 | |
|     bool ip;
 | |
| 
 | |
|     /* Enables or disables function index in the stack trace. Please note that
 | |
|      * function index can be recovered from the instruction pointer using
 | |
|      * ip2function.py script, so enabling this feature along with `ip` might
 | |
|      * often be redundant.
 | |
|      * This option will automatically be enabled for GC and Perf Profiling mode.
 | |
|      */
 | |
|     bool func_idx;
 | |
| 
 | |
|     /* Enables or disables tracking instruction pointer of a trap. Only takes
 | |
|      * effect when `ip` is enabled. */
 | |
|     bool trap_ip;
 | |
| 
 | |
|     /* Enables or disables parameters, locals and stack operands. */
 | |
|     bool values;
 | |
| 
 | |
|     /* If enabled, stack frame is generated at the beginning of each
 | |
|      * function (frame-per-function mode). Otherwise, stack frame is
 | |
|      * generated before each call of a function (frame-per-call mode). */
 | |
|     bool frame_per_function;
 | |
| } AOTCallStackFeatures;
 | |
| 
 | |
| void
 | |
| aot_call_stack_features_init_default(AOTCallStackFeatures *features);
 | |
| 
 | |
| typedef enum {
 | |
|     AOT_STACK_FRAME_OFF = 0,
 | |
|     /* Use a small stack frame data structure (AOTTinyFrame) */
 | |
|     AOT_STACK_FRAME_TYPE_TINY,
 | |
|     /* Use a regular stack frame data structure (AOTFrame) */
 | |
|     AOT_STACK_FRAME_TYPE_STANDARD,
 | |
| } AOTStackFrameType;
 | |
| 
 | |
| typedef struct AOTCompOption {
 | |
|     bool is_jit_mode;
 | |
|     bool is_indirect_mode;
 | |
|     char *target_arch;
 | |
|     char *target_abi;
 | |
|     char *target_cpu;
 | |
|     char *cpu_features;
 | |
|     bool is_sgx_platform;
 | |
|     bool enable_bulk_memory;
 | |
|     bool enable_thread_mgr;
 | |
|     bool enable_tail_call;
 | |
|     bool enable_simd;
 | |
|     bool enable_ref_types;
 | |
|     bool enable_gc;
 | |
|     bool enable_aux_stack_check;
 | |
|     AOTStackFrameType aux_stack_frame_type;
 | |
|     AOTCallStackFeatures call_stack_features;
 | |
|     bool enable_perf_profiling;
 | |
|     bool enable_memory_profiling;
 | |
|     bool disable_llvm_intrinsics;
 | |
|     bool disable_llvm_lto;
 | |
|     bool enable_llvm_pgo;
 | |
|     bool enable_stack_estimation;
 | |
|     bool quick_invoke_c_api_import;
 | |
|     bool enable_shared_heap;
 | |
|     char *use_prof_file;
 | |
|     uint32_t opt_level;
 | |
|     uint32_t size_level;
 | |
|     uint32_t output_format;
 | |
|     uint32_t bounds_checks;
 | |
|     uint32_t stack_bounds_checks;
 | |
|     uint32_t segue_flags;
 | |
|     char **custom_sections;
 | |
|     uint32_t custom_sections_count;
 | |
|     const char *stack_usage_file;
 | |
|     const char *llvm_passes;
 | |
|     const char *builtin_intrinsics;
 | |
| } AOTCompOption, *aot_comp_option_t;
 | |
| 
 | |
| #endif
 |