Index: libcfa/src/exception.c
===================================================================
--- libcfa/src/exception.c	(revision 3eb5a47849aa6054acbc7a319ad4cf0f46de50a3)
+++ libcfa/src/exception.c	(revision 73530d97ea6d30fa28964adee59eaccf93f77a8e)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 26 15:13:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Apr 02 14:47:00 2020
-// Update Count     : 13
+// Last Modified On : Fri Apr 03 11:57:00 2020
+// Update Count     : 14
 //
 
@@ -31,5 +31,5 @@
 // FIX ME: temporary hack to keep ARM build working
 #ifndef _URC_FATAL_PHASE1_ERROR
-#define _URC_FATAL_PHASE1_ERROR 2
+#define _URC_FATAL_PHASE1_ERROR 3
 #endif // ! _URC_FATAL_PHASE1_ERROR
 #ifndef _URC_FATAL_PHASE2_ERROR
@@ -39,4 +39,10 @@
 #include "lsda.h"
 
+/* The exception class for our exceptions. Because of the vendor component
+ * its value would not be standard.
+ * Vendor: UWPL
+ * Language: CFA\0
+ */
+const _Unwind_Exception_Class __cfaehm_exception_class = 0x4c50575500414643;
 
 // Base exception vtable is abstract, you should not have base exceptions.
@@ -116,4 +122,22 @@
 // May have to move to cfa for constructors and destructors (references).
 
+// How to clean up an exception in various situations.
+static void __cfaehm_exception_cleanup(
+		_Unwind_Reason_Code reason,
+		struct _Unwind_Exception * exception) {
+	switch (reason) {
+	case _URC_FOREIGN_EXCEPTION_CAUGHT:
+		// This one we could clean-up to allow cross-language exceptions.
+	case _URC_FATAL_PHASE1_ERROR:
+	case _URC_FATAL_PHASE2_ERROR:
+	default:
+		abort();
+	}
+}
+
+// We need a piece of storage to raise the exception, for now its a single
+// piece.
+static struct _Unwind_Exception this_exception_storage;
+
 struct __cfaehm_node {
 	struct __cfaehm_node * next;
@@ -142,4 +166,8 @@
 	// Copy the exception to storage.
 	except->virtual_table->copy( context->current_exception, except );
+
+	// Set up the exception storage.
+	this_exception_storage.exception_class = __cfaehm_exception_class;
+	this_exception_storage.exception_cleanup = __cfaehm_exception_cleanup;
 }
 
@@ -175,8 +203,4 @@
 	if ( *(void**)except ) __cfaehm_delete_exception( *(exception_t **)except );
 }
-
-
-// We need a piece of storage to raise the exception
-struct _Unwind_Exception this_exception_storage;
 
 // Function needed by force unwind
@@ -201,5 +225,4 @@
 		abort();
 	}
-
 
 	// Call stdlibc to raise the exception
