2010-06-21 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Mon, 21 Jun 2010 17:51:36 +0000 (17:51 -0000)
committerZoltan Varga <vargaz@gmail.com>
Mon, 21 Jun 2010 17:51:36 +0000 (17:51 -0000)
commite0447a8328e8f0c67449f82787e25105db976270
tree2db6629435b86ae440e01bd70b0119ecb17fc53a
parent519daf43f5e48e51b0cc5a2e0b1ed32216ef75d5
2010-06-21  Zoltan Varga  <vargaz@gmail.com>

* mini-llvm.c (exception_cb): For nested clauses, add the same try range to the
nesting clause too.
(mono_llvm_check_method_supported): Enable llvm for methods with nested clauses.
(mono_llvm_emit_method): Instead of calling 'mono_resume_unwind' directly, call a
trampoline which saves the context, so changes made to callee saved registers in
finally clauses are visible to a nesting catch clause.

* exceptions-amd64.c: Add a resume_unwind trampoline for LLVM.

* mini-exceptions.c (mono_handle_exception_internal): Fix support for nested clauses
in LLVM compiled code.
(mono_handle_exception_internal): Add a 'ctx' argument containing the state after
the finally handler has ran.

* mini.h (ResumeState): New structure containing information required to resume
exception handling after executing LLVM compiled finally clauses.

svn path=/trunk/mono/; revision=159274
mono/mini/ChangeLog
mono/mini/exceptions-amd64.c
mono/mini/mini-exceptions.c
mono/mini/mini-llvm.c
mono/mini/mini.h