Index: libcfa/src/exception.c
===================================================================
--- libcfa/src/exception.c	(revision 0f6ac8285247f21eb5c75eb0f4845c25b860b6e6)
+++ libcfa/src/exception.c	(revision 96408131feacd68fbeb7fc176ecc9b9a04c732a4)
@@ -14,9 +14,13 @@
 //
 
+// Normally we would get this from the CFA prelude.
 #include <stddef.h> // for size_t
 
 #include "exception.h"
 
-// Implementation of the secret header.
+// Implementation of the secret header is hardware dependent.
+#if !( defined( __x86_64 ) || defined( __i386 ) )
+#error Exception Handling: No known architecture detected.
+#endif
 
 #include <stdlib.h>
@@ -68,15 +72,4 @@
 //}
 
-
-// This macro should be the only thing that needs to change across machines.
-// Used in the personality function, way down in termination.
-// struct _Unwind_Context * -> _Unwind_Reason_Code(*)(exception_t *)
-#if defined( __x86_64 )
-#define MATCHER_FROM_CONTEXT(ptr_to_context) \
-	(*(_Unwind_Reason_Code(**)(exception_t *))(_Unwind_GetCFA(ptr_to_context) + 8))
-#elif defined( __i386 )
-#define MATCHER_FROM_CONTEXT(ptr_to_context) \
-	(*(_Unwind_Reason_Code(**)(exception_t *))(_Unwind_GetCFA(ptr_to_context) + 24))
-#endif
 
 // RESUMPTION ================================================================
@@ -354,6 +347,11 @@
 					cur_ptr = read_uleb128(cur_ptr, &imatcher);
 
-					_Unwind_Reason_Code (*matcher)(exception_t *) =
-						MATCHER_FROM_CONTEXT(context);
+#					if defined( __x86_64 )
+					_Unwind_Word match_pos = _Unwind_GetCFA(context) + 8;
+#					elif defined( __i386 )
+					_Unwind_Word match_pos = _Unwind_GetCFA(context) + 24;
+#					endif
+					int (*matcher)(exception_t *) = *(int(**)(exception_t *))match_pos;
+
 					int index = matcher(shared_stack.current_exception);
 					_Unwind_Reason_Code ret = (0 == index)
@@ -468,5 +466,4 @@
 
 #ifdef __PIC__
-#if defined( __i386 ) || defined( __x86_64 )
 asm (
 	// HEADER
@@ -514,9 +511,5 @@
 #endif
 );
-#else
-#error Exception Handling: unknown architecture for position independent code.
-#endif // __i386 || __x86_64
 #else // __PIC__
-#if defined( __i386 ) || defined( __x86_64 )
 asm (
 	// HEADER
@@ -547,7 +540,4 @@
 	"	.section	.note.GNU-stack,\"x\",@progbits\n"
 );
-#else
-#error Exception Handling: unknown architecture for position dependent code.
-#endif // __i386 || __x86_64
 #endif // __PIC__
 
