Georgii Rylov 11 месяцев назад
Родитель
Сommit
1f4d3dd4d4

+ 22 - 18
core/iwasm/aot/aot_runtime.c

@@ -4104,37 +4104,41 @@ aot_frame_update_profile_info(WASMExecEnv *exec_env, bool alloc_frame)
 #endif /* end of WASM_ENABLE_AOT_STACK_FRAME != 0 */
 #endif /* end of WASM_ENABLE_AOT_STACK_FRAME != 0 */
 
 
 #if WASM_ENABLE_DUMP_CALL_STACK != 0
 #if WASM_ENABLE_DUMP_CALL_STACK != 0
-void 
-aot_iterate_callstack(WASMExecEnv *exec_env, const wasm_frame_callback frame_handler, void* user_data)
+void
+aot_iterate_callstack(WASMExecEnv *exec_env,
+                      const wasm_frame_callback frame_handler, void *user_data)
 {
 {
-/*
-* Note for devs: please refrain from such modifications inside of aot_iterate_callstack
- * - any allocations/freeing memory
- * - dereferencing any pointers other than: exec_env, exec_env->module_inst,
- * exec_env->module_inst->module, pointers between stack's bottom and top_boundary
- * For more details check wasm_iterate_callstack in wasm_export.h
-*/
+    /*
+     * Note for devs: please refrain from such modifications inside of
+     * aot_iterate_callstack
+     * - any allocations/freeing memory
+     * - dereferencing any pointers other than: exec_env, exec_env->module_inst,
+     * exec_env->module_inst->module, pointers between stack's bottom and
+     * top_boundary For more details check wasm_iterate_callstack in
+     * wasm_export.h
+     */
     if (!is_tiny_frame(exec_env)) {
     if (!is_tiny_frame(exec_env)) {
-        //TODO: support standard frames
+        // TODO: support standard frames
         return;
         return;
     }
     }
-    uint8* top_boundary = exec_env->wasm_stack.top_boundary;
-    uint8* top = exec_env->wasm_stack.top;
-    uint8* bottom = exec_env->wasm_stack.bottom;
+    uint8 *top_boundary = exec_env->wasm_stack.top_boundary;
+    uint8 *top = exec_env->wasm_stack.top;
+    uint8 *bottom = exec_env->wasm_stack.bottom;
 
 
-    bool is_top_index_in_range = top_boundary >= top && top >= (bottom + sizeof(AOTTinyFrame));
+    bool is_top_index_in_range =
+        top_boundary >= top && top >= (bottom + sizeof(AOTTinyFrame));
     if (!is_top_index_in_range) {
     if (!is_top_index_in_range) {
         return;
         return;
     }
     }
-    bool is_top_aligned_with_bottom = (unsigned long)(top - bottom) % sizeof(AOTTinyFrame) == 0;
+    bool is_top_aligned_with_bottom =
+        (unsigned long)(top - bottom) % sizeof(AOTTinyFrame) == 0;
     if (!is_top_aligned_with_bottom) {
     if (!is_top_aligned_with_bottom) {
         return;
         return;
     }
     }
 
 
-    AOTTinyFrame* frame = (AOTTinyFrame*)(top - sizeof(AOTTinyFrame));
+    AOTTinyFrame *frame = (AOTTinyFrame *)(top - sizeof(AOTTinyFrame));
     WASMCApiFrame record_frame;
     WASMCApiFrame record_frame;
-    while (frame && 
-        (uint8_t*)frame >= bottom) {
+    while (frame && (uint8_t *)frame >= bottom) {
         record_frame.instance = exec_env->module_inst;
         record_frame.instance = exec_env->module_inst;
         record_frame.module_offset = 0;
         record_frame.module_offset = 0;
         record_frame.func_index = frame->func_index;
         record_frame.func_index = frame->func_index;

+ 3 - 2
core/iwasm/aot/aot_runtime.h

@@ -777,8 +777,9 @@ aot_frame_update_profile_info(WASMExecEnv *exec_env, bool alloc_frame);
 bool
 bool
 aot_create_call_stack(struct WASMExecEnv *exec_env);
 aot_create_call_stack(struct WASMExecEnv *exec_env);
 
 
-void 
-aot_iterate_callstack(WASMExecEnv *exec_env, const wasm_frame_callback frame_handler, void* user_data);
+void
+aot_iterate_callstack(WASMExecEnv *exec_env,
+                      const wasm_frame_callback frame_handler, void *user_data);
 
 
 /**
 /**
  * @brief Dump wasm call stack or get the size
  * @brief Dump wasm call stack or get the size

+ 22 - 17
core/iwasm/common/wasm_runtime_common.c

@@ -1741,31 +1741,36 @@ wasm_runtime_destroy_exec_env(WASMExecEnv *exec_env)
     wasm_exec_env_destroy(exec_env);
     wasm_exec_env_destroy(exec_env);
 }
 }
 
 
-void 
-wasm_iterate_callstack(const wasm_exec_env_t exec_env, const wasm_frame_callback frame_callback, void* user_data)
+void
+wasm_iterate_callstack(const wasm_exec_env_t exec_env,
+                       const wasm_frame_callback frame_callback,
+                       void *user_data)
 {
 {
-/*
-* Note for devs: please refrain from such modifications inside of wasm_iterate_callstack
- * - any allocations/freeing memory
- * - dereferencing any pointers other than: exec_env, exec_env->module_inst,
- * exec_env->module_inst->module, pointers between stack's bottom and top_boundary
- * For more details check wasm_iterate_callstack in wasm_export.h
-*/
-    #if WASM_ENABLE_DUMP_CALL_STACK
-    WASMModuleInstance* module_inst = (WASMModuleInstance *)get_module_inst(exec_env);
-
-    #if WASM_ENABLE_INTERP != 0
+    /*
+     * Note for devs: please refrain from such modifications inside of
+     * wasm_iterate_callstack
+     * - any allocations/freeing memory
+     * - dereferencing any pointers other than: exec_env, exec_env->module_inst,
+     * exec_env->module_inst->module, pointers between stack's bottom and
+     * top_boundary For more details check wasm_iterate_callstack in
+     * wasm_export.h
+     */
+#if WASM_ENABLE_DUMP_CALL_STACK
+    WASMModuleInstance *module_inst =
+        (WASMModuleInstance *)get_module_inst(exec_env);
+
+#if WASM_ENABLE_INTERP != 0
     if (module_inst->module_type == Wasm_Module_Bytecode) {
     if (module_inst->module_type == Wasm_Module_Bytecode) {
         wasm_interp_iterate_callstack(exec_env, frame_callback, user_data);
         wasm_interp_iterate_callstack(exec_env, frame_callback, user_data);
     }
     }
-    #endif
+#endif
 
 
-    #if WASM_ENABLE_AOT != 0
+#if WASM_ENABLE_AOT != 0
     if (module_inst->module_type == Wasm_Module_AoT) {
     if (module_inst->module_type == Wasm_Module_AoT) {
         aot_iterate_callstack(exec_env, frame_callback, user_data);
         aot_iterate_callstack(exec_env, frame_callback, user_data);
     }
     }
-    #endif
-    #endif
+#endif
+#endif
 }
 }
 
 
 bool
 bool

+ 4 - 2
core/iwasm/common/wasm_runtime_common.h

@@ -652,8 +652,10 @@ wasm_runtime_create_exec_env(WASMModuleInstanceCommon *module_inst,
 WASM_RUNTIME_API_EXTERN void
 WASM_RUNTIME_API_EXTERN void
 wasm_runtime_destroy_exec_env(WASMExecEnv *exec_env);
 wasm_runtime_destroy_exec_env(WASMExecEnv *exec_env);
 
 
-WASM_RUNTIME_API_EXTERN void 
-wasm_iterate_callstack(const wasm_exec_env_t exec_env, const wasm_frame_callback frame_handler, void* user_data);
+WASM_RUNTIME_API_EXTERN void
+wasm_iterate_callstack(const wasm_exec_env_t exec_env,
+                       const wasm_frame_callback frame_handler,
+                       void *user_data);
 
 
 /* See wasm_export.h for description */
 /* See wasm_export.h for description */
 WASM_RUNTIME_API_EXTERN WASMModuleInstanceCommon *
 WASM_RUNTIME_API_EXTERN WASMModuleInstanceCommon *

+ 12 - 11
core/iwasm/include/wasm_export.h

@@ -127,7 +127,7 @@ struct WASMMemoryInstance;
 typedef struct WASMMemoryInstance *wasm_memory_inst_t;
 typedef struct WASMMemoryInstance *wasm_memory_inst_t;
 
 
 struct wasm_frame_t;
 struct wasm_frame_t;
-typedef struct wasm_frame_t * wasm_frame_ptr_t;
+typedef struct wasm_frame_t *wasm_frame_ptr_t;
 
 
 /* WASM section */
 /* WASM section */
 typedef struct wasm_section_t {
 typedef struct wasm_section_t {
@@ -867,21 +867,20 @@ wasm_runtime_create_exec_env(wasm_module_inst_t module_inst,
 WASM_RUNTIME_API_EXTERN void
 WASM_RUNTIME_API_EXTERN void
 wasm_runtime_destroy_exec_env(wasm_exec_env_t exec_env);
 wasm_runtime_destroy_exec_env(wasm_exec_env_t exec_env);
 
 
-
-typedef bool (*wasm_frame_callback)(void*, wasm_frame_ptr_t);
+typedef bool (*wasm_frame_callback)(void *, wasm_frame_ptr_t);
 
 
 /**
 /**
  * @brief Iterate over callstack frames and execute callback on it.
  * @brief Iterate over callstack frames and execute callback on it.
  *
  *
- * Caution: This is not a thread-safe function. Ensure the exec_env 
+ * Caution: This is not a thread-safe function. Ensure the exec_env
  * is suspended before calling it from another thread.
  * is suspended before calling it from another thread.
  *
  *
- * Usage: In the callback to read frames fields use APIs 
+ * Usage: In the callback to read frames fields use APIs
  * for wasm_frame_t from wasm_c_api.h
  * for wasm_frame_t from wasm_c_api.h
  *
  *
- * Note: The function is async-signal-safe if called with verified arguments. 
- * Meaning it's safe to call it from a signal handler even on a signal interruption
- * from another thread if next variables hold valid pointers
+ * Note: The function is async-signal-safe if called with verified arguments.
+ * Meaning it's safe to call it from a signal handler even on a signal
+ * interruption from another thread if next variables hold valid pointers
  * - exec_env
  * - exec_env
  * - exec_env->module_inst
  * - exec_env->module_inst
  * - exec_env->module_inst->module
  * - exec_env->module_inst->module
@@ -889,14 +888,16 @@ typedef bool (*wasm_frame_callback)(void*, wasm_frame_ptr_t);
  * Note for devs: please refrain from such modifications inside of this call
  * Note for devs: please refrain from such modifications inside of this call
  * - any allocations/freeing memory
  * - any allocations/freeing memory
  * - dereferencing any pointers other than: exec_env, exec_env->module_inst,
  * - dereferencing any pointers other than: exec_env, exec_env->module_inst,
- * exec_env->module_inst->module, pointers between stack's bottom and top_boundary
+ * exec_env->module_inst->module, pointers between stack's bottom and
+ * top_boundary
  *
  *
  * @param exec_env the execution environment that containes frames
  * @param exec_env the execution environment that containes frames
  * @param callback the callback function provided by the user
  * @param callback the callback function provided by the user
  * @param user_data context for callback provided by the user
  * @param user_data context for callback provided by the user
  */
  */
-WASM_RUNTIME_API_EXTERN void 
-wasm_iterate_callstack(const wasm_exec_env_t exec_env, const wasm_frame_callback callback, void *user_data);
+WASM_RUNTIME_API_EXTERN void
+wasm_iterate_callstack(const wasm_exec_env_t exec_env,
+                       const wasm_frame_callback callback, void *user_data);
 
 
 /**
 /**
  * Get the singleton execution environment for the instance.
  * Get the singleton execution environment for the instance.

+ 27 - 23
core/iwasm/interpreter/wasm_runtime.c

@@ -4197,32 +4197,36 @@ wasm_get_module_inst_mem_consumption(const WASMModuleInstance *module_inst,
                  || (WASM_ENABLE_MEMORY_TRACING != 0) */
                  || (WASM_ENABLE_MEMORY_TRACING != 0) */
 
 
 #if WASM_ENABLE_DUMP_CALL_STACK != 0
 #if WASM_ENABLE_DUMP_CALL_STACK != 0
-uint32 
-wasm_interp_iterate_callstack(WASMExecEnv *exec_env, const wasm_frame_callback frame_handler, void* user_data)
+uint32
+wasm_interp_iterate_callstack(WASMExecEnv *exec_env,
+                              const wasm_frame_callback frame_handler,
+                              void *user_data)
 {
 {
-/*
-* Note for devs: please refrain from such modifications inside of wasm_interp_iterate_callstack
- * - any allocations/freeing memory
- * - dereferencing any pointers other than: exec_env, exec_env->module_inst,
- * exec_env->module_inst->module, pointers between stack's bottom and top_boundary
- * For more details check wasm_iterate_callstack in wasm_export.h
-*/
-    WASMModuleInstance *module_inst = (WASMModuleInstance *)wasm_exec_env_get_module_inst(exec_env);
-    WASMInterpFrame* cur_frame = wasm_exec_env_get_cur_frame(exec_env);
-    uint8* top_boundary = exec_env->wasm_stack.top_boundary;
-    uint8* bottom = exec_env->wasm_stack.bottom;
+    /*
+     * Note for devs: please refrain from such modifications inside of
+     * wasm_interp_iterate_callstack
+     * - any allocations/freeing memory
+     * - dereferencing any pointers other than: exec_env, exec_env->module_inst,
+     * exec_env->module_inst->module, pointers between stack's bottom and
+     * top_boundary For more details check wasm_iterate_callstack in
+     * wasm_export.h
+     */
+    WASMModuleInstance *module_inst =
+        (WASMModuleInstance *)wasm_exec_env_get_module_inst(exec_env);
+    WASMInterpFrame *cur_frame = wasm_exec_env_get_cur_frame(exec_env);
+    uint8 *top_boundary = exec_env->wasm_stack.top_boundary;
+    uint8 *bottom = exec_env->wasm_stack.bottom;
 
 
     WASMCApiFrame record_frame;
     WASMCApiFrame record_frame;
-    while (cur_frame &&
-        (uint8_t*)cur_frame >= bottom &&
-        (uint8_t*)cur_frame + sizeof(WASMInterpFrame) <= top_boundary) {
-            record_frame.instance = module_inst;
-            record_frame.module_offset = 0;
-            record_frame.func_index = cur_frame->func_index;
-            if (!frame_handler(user_data, &record_frame)) {
-                break;
-            }
-            cur_frame = cur_frame->prev_frame;
+    while (cur_frame && (uint8_t *)cur_frame >= bottom
+           && (uint8_t *)cur_frame + sizeof(WASMInterpFrame) <= top_boundary) {
+        record_frame.instance = module_inst;
+        record_frame.module_offset = 0;
+        record_frame.func_index = cur_frame->func_index;
+        if (!frame_handler(user_data, &record_frame)) {
+            break;
+        }
+        cur_frame = cur_frame->prev_frame;
     }
     }
 }
 }
 
 

+ 4 - 2
core/iwasm/interpreter/wasm_runtime.h

@@ -731,8 +731,10 @@ wasm_get_table_inst(const WASMModuleInstance *module_inst, uint32 tbl_idx)
 
 
 #if WASM_ENABLE_DUMP_CALL_STACK != 0
 #if WASM_ENABLE_DUMP_CALL_STACK != 0
 
 
-uint32 
-wasm_interp_iterate_callstack(WASMExecEnv *exec_env, const wasm_frame_callback frame_handler, void* user_data);
+uint32
+wasm_interp_iterate_callstack(WASMExecEnv *exec_env,
+                              const wasm_frame_callback frame_handler,
+                              void *user_data);
 
 
 bool
 bool
 wasm_interp_create_call_stack(struct WASMExecEnv *exec_env);
 wasm_interp_create_call_stack(struct WASMExecEnv *exec_env);