Просмотр исходного кода

Add more checks for Fast JIT (#1433)

Add more checks for Fast JIT to fix the issues reported by instrument test:
- add check for the jit_value before pushing it into the stack
- add check at the end of form_and_translate_func
- add checks after each jit pass
Qiang 3 лет назад
Родитель
Сommit
18774805cc

+ 1 - 1
core/iwasm/fast-jit/jit_compiler.c

@@ -64,7 +64,7 @@ apply_compiler_passes(JitCompContext *cc)
         cc->cur_pass_no = p - jit_globals.passes;
         bh_assert(*p < COMPILER_PASS_NUM);
 
-        if (!compiler_passes[*p].run(cc)) {
+        if (!compiler_passes[*p].run(cc) || jit_get_last_error(cc)) {
             LOG_VERBOSE("JIT: compilation failed at pass[%td] = %s\n",
                         p - jit_globals.passes, compiler_passes[*p].name);
             return false;

+ 3 - 0
core/iwasm/fast-jit/jit_frontend.c

@@ -731,6 +731,9 @@ form_and_translate_func(JitCompContext *cc)
                 *(jit_annl_end_bcip(cc, cc->exit_label)) =
                     cc->cur_wasm_module->load_addr;
 
+    if (jit_get_last_error(cc)) {
+        return false;
+    }
     return true;
 }
 

+ 2 - 0
core/iwasm/fast-jit/jit_frontend.h

@@ -513,6 +513,8 @@ set_local_f64(JitFrame *frame, int n, JitReg val)
 
 #define PUSH(jit_value, value_type)                        \
     do {                                                   \
+        if (!jit_value)                                    \
+            goto fail;                                     \
         if (!jit_cc_push_value(cc, value_type, jit_value)) \
             goto fail;                                     \
     } while (0)