Merge pull request #866 from linquize/content-type-encoding
[mono.git] / mono / mini / exceptions-x86.c
index 531b556e8c0442a9a7ac261fdafd9c5f2d5879e1..aa10aaad593921b4ef331e96cd14143bbde88914 100644 (file)
@@ -801,10 +801,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
 
                frame->type = FRAME_TYPE_MANAGED;
 
-               if (ji->from_aot)
-                       unwind_info = mono_aot_get_unwind_info (ji, &unwind_info_len);
-               else
-                       unwind_info = mono_get_cached_unwind_info (ji->used_regs, &unwind_info_len);
+               unwind_info = mono_jinfo_get_unwind_info (ji, &unwind_info_len);
 
                regs [X86_EAX] = new_ctx->eax;
                regs [X86_EBX] = new_ctx->ebx;
@@ -853,14 +850,24 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
                }
 
                /* Pop arguments off the stack */
-               /* 
-                * FIXME: LLVM doesn't push these, we can't use ji->from_llvm as it describes
-                * the callee.
-                */
-#ifndef ENABLE_LLVM
-               if (ji->has_arch_eh_info)
-                       new_ctx->esp += mono_jit_info_get_arch_eh_info (ji)->stack_size;
+               if (ji->has_arch_eh_info) {
+                       int stack_size;
+
+                       stack_size = mono_jit_info_get_arch_eh_info (ji)->stack_size;
+
+                       if (stack_size) {
+#ifdef ENABLE_LLVM
+                               MonoJitInfo *caller_ji;
+
+                               caller_ji = mini_jit_info_table_find (domain, (char*)new_ctx->eip, NULL);
+                               /* LLVM doesn't push the arguments */
+                               if (caller_ji && !caller_ji->from_llvm)
+                                       new_ctx->esp += stack_size;
+#else
+                                       new_ctx->esp += stack_size;
 #endif
+                       }
+               }
 
                return TRUE;
        } else if (*lmf) {