2008-02-02 Jb Evain <jbevain@novell.com>
[mono.git] / docs / exceptions
index d2d810ba7d0e585caf331697e66b65a9f02b9de9..d5ecaeead43a634984b2701a5c5bd5acaa8ff019 100644 (file)
@@ -1,5 +1,6 @@
-Author: Dietmar Maurer (dietmar@ximian.com)
-(C) 2001 Ximian, Inc.
+            Exception Implementation in the Mono Runtime
+                Dietmar Maurer (dietmar@ximian.com)
+                       (C) 2001 Ximian, Inc.
 
 Exception implementation (jit):
 ===============================
@@ -62,16 +63,14 @@ 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.
+also possible to execute them inside the stack unwinding code. The exception
+object for filters is passed in a local variable (cfg->exvar).
 
-throw: we first save all regs into a sigcontext struct (we pass the
-exception object in register ECX), and then call the stack unwinding
-code.
-
-catch handler: receives the exception object in ECX. They store that
-object into a local variable, so that rethrow can access the object.
+throw: we first save all regs into a sigcontext struct and then call the stack
+unwinding code.
 
+catch handler: catch hanlders are always called from the stack unwinding
+code. The exception object is passed in a local variable (cfg->exvar).
 
 gcc support for Exceptions
 ==========================