diff options
author | Dietmar Maurer <dietmar@mono-cvs.ximian.com> | 2003-05-22 18:22:54 +0400 |
---|---|---|
committer | Dietmar Maurer <dietmar@mono-cvs.ximian.com> | 2003-05-22 18:22:54 +0400 |
commit | 5964ed275afed6a8ce3c9b8ef03a85bfc606f51a (patch) | |
tree | 8b42f9b84cb0c1ca8aadd04f817027458611af28 /docs | |
parent | e7bb3eb619bd7fbe878ba1bcae62490403256d42 (diff) |
update
svn path=/trunk/mono/; revision=14798
Diffstat (limited to 'docs')
-rw-r--r-- | docs/exceptions | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/docs/exceptions b/docs/exceptions index e98202cf07b..d2d810ba7d0 100644 --- a/docs/exceptions +++ b/docs/exceptions @@ -56,11 +56,14 @@ leave: is simply translated into a branch to the target. If the leave instruction is inside a finally block (but not inside another handler) we call the finally handler before we branch to the target. -finally/endfinally: is translated into subroutine ending with a "return" -statement. The subroutine does not save EBP/ESP, because we need access to the -local variables of the enclosing method. We have to use a "call" -instruction to execute such finally handlers. This makes it possible to -execute them inside the stack unwinding code. +finally/endfinally, filter/endfilter: is translated into subroutine ending with +a "return" statement. The subroutine does not save EBP, because we need access +to the local variables of the enclosing method. Its is possible that +instructions inside those handlers modify the stack pointer, thus we save the +stack pointer at the start of the handler, and restore it at the end. We have +to use a "call" instruction to execute such finally handlers. This makes it +also possible to execute them inside the stack unwinding code. Filters receives +the exception object in ECX. throw: we first save all regs into a sigcontext struct (we pass the exception object in register ECX), and then call the stack unwinding |