Index: libcfa/src/concurrency/preemption.cfa
===================================================================
--- libcfa/src/concurrency/preemption.cfa	(revision bfcf6b93d595af7bc5fcb05405720c63f503db8f)
+++ libcfa/src/concurrency/preemption.cfa	(revision 3e3f236be88fc36d0ee588b73fcfe7a922800c77)
@@ -354,5 +354,42 @@
 }
 
+//-----------------------------------------------------------------------------
+// Kernel Signal Debug
+void __cfaabi_check_preemption() {
+	bool ready = __preemption_enabled();
+	if(!ready) { abort("Preemption should be ready"); }
+
+	__cfaasm_label(debug, before);
+
+		sigset_t oldset;
+		int ret;
+		ret = pthread_sigmask(0, ( const sigset_t * ) 0p, &oldset);  // workaround trac#208: cast should be unnecessary
+		if(ret != 0) { abort("ERROR sigprocmask returned %d", ret); }
+
+		ret = sigismember(&oldset, SIGUSR1);
+		if(ret <  0) { abort("ERROR sigismember returned %d", ret); }
+		if(ret == 1) { abort("ERROR SIGUSR1 is disabled"); }
+
+		ret = sigismember(&oldset, SIGALRM);
+		if(ret <  0) { abort("ERROR sigismember returned %d", ret); }
+		if(ret == 0) { abort("ERROR SIGALRM is enabled"); }
+
+		ret = sigismember(&oldset, SIGTERM);
+		if(ret <  0) { abort("ERROR sigismember returned %d", ret); }
+		if(ret == 1) { abort("ERROR SIGTERM is disabled"); }
+
+	__cfaasm_label(debug, after);
+}
+
+#ifdef __CFA_WITH_VERIFY__
+bool __cfaabi_dbg_in_kernel() {
+	return !__preemption_enabled();
+}
+#endif
+
 #undef __cfaasm_label
+
+//-----------------------------------------------------------------------------
+// Signal handling
 
 // sigprocmask wrapper : unblock a single signal
@@ -479,4 +516,5 @@
 	__cfaasm_label( check  );
 	__cfaasm_label( dsable );
+	__cfaasm_label( debug  );
 
 	// Check if preemption is safe
@@ -485,4 +523,5 @@
 	if( __cfaasm_in( ip, check  ) ) { ready = false; goto EXIT; };
 	if( __cfaasm_in( ip, dsable ) ) { ready = false; goto EXIT; };
+	if( __cfaasm_in( ip, debug  ) ) { ready = false; goto EXIT; };
 	if( !__cfaabi_tls.preemption_state.enabled) { ready = false; goto EXIT; };
 	if( __cfaabi_tls.preemption_state.in_progress ) { ready = false; goto EXIT; };
@@ -696,36 +735,4 @@
 }
 
-//=============================================================================================
-// Kernel Signal Debug
-//=============================================================================================
-
-void __cfaabi_check_preemption() {
-	bool ready = __preemption_enabled();
-	if(!ready) { abort("Preemption should be ready"); }
-
-	sigset_t oldset;
-	int ret;
-	ret = pthread_sigmask(0, ( const sigset_t * ) 0p, &oldset);  // workaround trac#208: cast should be unnecessary
-	if(ret != 0) { abort("ERROR sigprocmask returned %d", ret); }
-
-	ret = sigismember(&oldset, SIGUSR1);
-	if(ret <  0) { abort("ERROR sigismember returned %d", ret); }
-	if(ret == 1) { abort("ERROR SIGUSR1 is disabled"); }
-
-	ret = sigismember(&oldset, SIGALRM);
-	if(ret <  0) { abort("ERROR sigismember returned %d", ret); }
-	if(ret == 0) { abort("ERROR SIGALRM is enabled"); }
-
-	ret = sigismember(&oldset, SIGTERM);
-	if(ret <  0) { abort("ERROR sigismember returned %d", ret); }
-	if(ret == 1) { abort("ERROR SIGTERM is disabled"); }
-}
-
-#ifdef __CFA_WITH_VERIFY__
-bool __cfaabi_dbg_in_kernel() {
-	return !__preemption_enabled();
-}
-#endif
-
 // Local Variables: //
 // mode: c //
