Index: src/libcfa/bits/defs.h
===================================================================
--- src/libcfa/bits/defs.h	(revision 695571caddbe32592952f38ba63492a195b9d86e)
+++ src/libcfa/bits/defs.h	(revision 3d5f2ef15444a7e83c0cb4a9524f6e07e298648e)
@@ -1,10 +1,10 @@
-// 
+//
 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
 //
 // The contents of this file are covered under the licence agreement in the
 // file "LICENCE" distributed with Cforall.
-// 
-// defs.h -- 
-// 
+//
+// defs.h --
+//
 // Author           : Thierry Delisle
 // Created On       : Thu Nov  9 13:24:10 2017
@@ -12,5 +12,5 @@
 // Last Modified On : Tue Jan  2 09:17:06 2018
 // Update Count     : 2
-// 
+//
 
 #pragma once
@@ -34,4 +34,7 @@
 
 #ifdef __cforall
+#ifndef __NO_ABORT_OVERLOAD
+void abort ( const char fmt[], ... ) __attribute__ ((__nothrow__, __leaf__, __noreturn__));
+#endif
 extern "C" {
 #endif
Index: src/libcfa/interpose.c
===================================================================
--- src/libcfa/interpose.c	(revision 695571caddbe32592952f38ba63492a195b9d86e)
+++ src/libcfa/interpose.c	(revision 3d5f2ef15444a7e83c0cb4a9524f6e07e298648e)
@@ -28,8 +28,13 @@
 }
 
+#define __NO_ABORT_OVERLOAD // no abort overload avoid ambiguities
 #include "bits/debug.h"
 #include "bits/defs.h"
 #include "bits/signal.h"
 #include "startup.h"
+
+//=============================================================================================
+// Interposing helpers
+//=============================================================================================
 
 typedef void (*generic_fptr_t)(void);
@@ -69,10 +74,6 @@
 }
 
-
-__typeof__( exit ) libc_exit __attribute__(( noreturn ));
-__typeof__( abort ) libc_abort __attribute__(( noreturn ));
-
 forall(dtype T)
-static inline void assign_ptr( T** symbol_ptr, const char * symbol_name, const char * version) {
+static inline void ptr_from_symbol( T** symbol_ptr, const char * symbol_name, const char * version) {
 	union {
 		generic_fptr_t gp;
@@ -85,5 +86,9 @@
 }
 
-#define INIT_REALRTN( x, ver ) assign_ptr( (void**)&libc_##x, #x, ver)
+#define INTERPOSE_LIBC( x, ver ) ptr_from_symbol( (void**)&__cabi_libc.x, #x, ver)
+
+//=============================================================================================
+// Terminating Signals logic
+//=============================================================================================
 
 void sigHandler_segv ( __CFA_SIGPARMS__ );
@@ -92,4 +97,9 @@
 void sigHandler_abort( __CFA_SIGPARMS__ );
 
+struct {
+	__typeof__( exit  ) exit  __attribute__(( noreturn ));
+	__typeof__( abort ) abort __attribute__(( noreturn ));
+} __cabi_libc;
+
 extern "C" {
 	void __cfaabi_interpose_startup(void)  __attribute__(( constructor( STARTUP_PRIORITY_CORE ) ));
@@ -97,6 +107,6 @@
 		const char *version = NULL;
 
-		INIT_REALRTN( abort, version );
-		INIT_REALRTN( exit, version );
+		INTERPOSE_LIBC( abort, version );
+		INTERPOSE_LIBC( exit , version );
 
 		__cfaabi_sigaction( SIGSEGV, sigHandler_segv , SA_SIGINFO ); // Failure handler
@@ -112,4 +122,7 @@
 //=============================================================================================
 
+// Forward declare abort after the __typeof__ call to avoid ambiguities
+void abort ( const char fmt[], ... ) __attribute__ ((__nothrow__, __leaf__, __noreturn__));
+
 extern "C" {
 	void abort( void ) __attribute__ ((__nothrow__, __leaf__, __noreturn__)) {
@@ -117,14 +130,14 @@
 	}
 
+	void abortf( const char fmt[], ... ) __attribute__ ((__nothrow__, __leaf__, __noreturn__)) {
+		va_list argp;
+		va_start( argp, fmt );
+		abort( fmt, argp );
+		va_end( argp );
+	}
+
 	void exit( int __status ) __attribute__ ((__nothrow__, __leaf__, __noreturn__)) {
-		libc_exit(__status);
-	}
-}
-
-void abort( const char fmt[], ... ) __attribute__ ((__nothrow__, __leaf__, __noreturn__)) {
-	va_list argp;
-	va_start( argp, fmt );
-	abortf( fmt, argp );
-	va_end( argp );
+		__cabi_libc.exit(__status);
+	}
 }
 
@@ -137,29 +150,27 @@
 static int abort_lastframe;
 
-extern "C" {
-	void abortf( const char fmt[], ... ) __attribute__ ((__nothrow__, __leaf__, __noreturn__)) {
-		void * kernel_data = kernel_abort();			// must be done here to lock down kernel
-		int len;
-
-		abort_lastframe = kernel_abort_lastframe();
-		len = snprintf( abort_text, abort_text_size, "Cforall Runtime error (UNIX pid:%ld) ", (long int)getpid() ); // use UNIX pid (versus getPid)
+void abort( const char fmt[], ... ) __attribute__ ((__nothrow__, __leaf__, __noreturn__)) {
+	void * kernel_data = kernel_abort();			// must be done here to lock down kernel
+	int len;
+
+	abort_lastframe = kernel_abort_lastframe();
+	len = snprintf( abort_text, abort_text_size, "Cforall Runtime error (UNIX pid:%ld) ", (long int)getpid() ); // use UNIX pid (versus getPid)
+	__cfaabi_dbg_bits_write( abort_text, len );
+
+	if ( fmt ) {
+		va_list args;
+		va_start( args, fmt );
+
+		len = vsnprintf( abort_text, abort_text_size, fmt, args );
+		va_end( args );
 		__cfaabi_dbg_bits_write( abort_text, len );
 
-		if ( fmt ) {
-			va_list args;
-			va_start( args, fmt );
-
-			len = vsnprintf( abort_text, abort_text_size, fmt, args );
-			va_end( args );
-			__cfaabi_dbg_bits_write( abort_text, len );
-
-			if ( fmt[strlen( fmt ) - 1] != '\n' ) {		// add optional newline if missing at the end of the format text
-				__cfaabi_dbg_bits_write( "\n", 1 );
-			}
-		}
-
-		kernel_abort_msg( kernel_data, abort_text, abort_text_size );
-		libc_abort();
-	}
+		if ( fmt[strlen( fmt ) - 1] != '\n' ) {		// add optional newline if missing at the end of the format text
+			__cfaabi_dbg_bits_write( "\n", 1 );
+		}
+	}
+
+	kernel_abort_msg( kernel_data, abort_text, abort_text_size );
+	__cabi_libc.abort();
 }
 
