Procházet zdrojové kódy

aot_runtime.c: Add static assertions for some offset assumptions (#1103)

YAMAMOTO Takashi před 3 roky
rodič
revize
0f505aafd9
2 změnil soubory, kde provedl 29 přidání a 0 odebrání
  1. 16 0
      core/iwasm/aot/aot_runtime.c
  2. 13 0
      core/shared/utils/bh_assert.h

+ 16 - 0
core/iwasm/aot/aot_runtime.c

@@ -14,6 +14,22 @@
 #include "../libraries/thread-mgr/thread_manager.h"
 #endif
 
+/*
+ * Note: These offsets need to match the values hardcoded in
+ * AoT compilation code: aot_create_func_context, check_suspend_flags.
+ */
+
+bh_static_assert(offsetof(WASMExecEnv, module_inst) == 2 * sizeof(uintptr_t));
+bh_static_assert(offsetof(WASMExecEnv, argv_buf) == 3 * sizeof(uintptr_t));
+bh_static_assert(offsetof(WASMExecEnv, native_stack_boundary)
+                 == 4 * sizeof(uintptr_t));
+bh_static_assert(offsetof(WASMExecEnv, suspend_flags) == 5 * sizeof(uintptr_t));
+bh_static_assert(offsetof(WASMExecEnv, aux_stack_boundary)
+                 == 6 * sizeof(uintptr_t));
+bh_static_assert(offsetof(WASMExecEnv, aux_stack_bottom)
+                 == 7 * sizeof(uintptr_t));
+bh_static_assert(offsetof(WASMExecEnv, native_symbol) == 8 * sizeof(uintptr_t));
+
 static void
 set_error_buf(char *error_buf, uint32 error_buf_size, const char *string)
 {

+ 13 - 0
core/shared/utils/bh_assert.h

@@ -22,6 +22,19 @@ bh_assert_internal(int v, const char *file_name, int line_number,
 #define bh_assert(expr) (void)0
 #endif /* end of BH_DEBUG */
 
+#if !defined(__has_extension)
+#define __has_extension(a) 0
+#endif
+
+#if __STDC_VERSION__ >= 201112L                                          \
+    || (defined(__GNUC__) && __GNUC__ * 0x100 + __GNUC_MINOR__ >= 0x406) \
+    || __has_extension(c_static_assert)
+
+#define bh_static_assert(expr) _Static_assert(expr, #expr)
+#else
+#define bh_static_assert(expr) /* nothing */
+#endif
+
 #ifdef __cplusplus
 }
 #endif