Merge pull request #866 from linquize/content-type-encoding
[mono.git] / mono / mini / exceptions-x86.c
index 7badd246e8977d2b6598e4fb3ef550cd96897ad4..aa10aaad593921b4ef331e96cd14143bbde88914 100644 (file)
@@ -343,8 +343,6 @@ mono_arch_get_restore_context (MonoTrampInfo **info, gboolean aot)
 
        /* load ESP into EBP */
        x86_mov_reg_membase (code, X86_EBP, X86_EAX,  G_STRUCT_OFFSET (MonoContext, esp), 4);
-       /* Align it, it can be unaligned if it was captured asynchronously */
-       x86_alu_reg_imm (code, X86_AND, X86_EBP, ~(MONO_ARCH_LOCALLOC_ALIGNMENT - 1));
        /* load return address into ECX */
        x86_mov_reg_membase (code, X86_ECX, X86_EAX,  G_STRUCT_OFFSET (MonoContext, eip), 4);
        /* save the return addr to the restored stack - 4 */
@@ -803,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;
@@ -855,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) {