-#define xbt_deferring \
- (__xbt_ex_ctx()->ctx_deferring > 0)
-
-/* optional namespace mapping */
-#if defined(__EX_NS_UCCXX__)
-#define Try xbt_try
-#define Cleanup xbt_cleanup
-#define Catch xbt_catch
-#define Throw xbt_throw
-#define Rethrow xbt_rethrow
-#define Shield xbt_shield
-#define Defer xbt_defer
-#elif defined(__EX_NS_CXX__) || (!defined(__cplusplus) && !defined(__EX_NS_CUSTOM__))
-#define try xbt_try
-#define cleanup xbt_cleanup
-#define catch xbt_catch
-#define throw xbt_throw
-#define rethrow xbt_rethrow
-#define shield xbt_shield
-#define defer xbt_defer
+#define RETHROWF(...) \
+ do { \
+ char *_xbt_ex_internal_msg = __xbt_running_ctx_fetch()->exception.msg; \
+ __xbt_running_ctx_fetch()->exception.msg = bprintf(__VA_ARGS__, \
+ _xbt_ex_internal_msg); \
+ free(_xbt_ex_internal_msg); \
+ RETHROW; \
+ } while (0)
+
+/** @brief Exception destructor */
+XBT_PUBLIC(void) xbt_ex_free(xbt_ex_t e);
+
+/** @brief Shows a backtrace of the current location */
+XBT_PUBLIC(void) xbt_backtrace_display_current(void);
+/** @brief reimplementation of glibc backtrace based directly on gcc library, without implicit malloc */
+XBT_PUBLIC(int)xbt_backtrace_no_malloc(void**bt, int size);
+/** @brief Captures a backtrace for further use */
+XBT_PUBLIC(void) xbt_backtrace_current(xbt_ex_t * e);
+/** @brief Display a previously captured backtrace */
+XBT_PUBLIC(void) xbt_backtrace_display(xbt_ex_t * e);
+
+#ifdef XBT_USE_DEPRECATED
+
+/* Kept for backward compatibility. */
+
+#define THROW0(c, v, m) \
+ do { if (m) THROWF(c, v, m); else THROW(c, v); } while (0)
+#define THROW1(c, v, ...) THROWF(c, v, __VA_ARGS__)
+#define THROW2(c, v, ...) THROWF(c, v, __VA_ARGS__)
+#define THROW3(c, v, ...) THROWF(c, v, __VA_ARGS__)
+#define THROW4(c, v, ...) THROWF(c, v, __VA_ARGS__)
+#define THROW5(c, v, ...) THROWF(c, v, __VA_ARGS__)
+#define THROW6(c, v, ...) THROWF(c, v, __VA_ARGS__)
+#define THROW7(c, v, ...) THROWF(c, v, __VA_ARGS__)
+
+#define RETHROW0(...) RETHROWF(__VA_ARGS__)
+#define RETHROW1(...) RETHROWF(__VA_ARGS__)
+#define RETHROW2(...) RETHROWF(__VA_ARGS__)
+#define RETHROW3(...) RETHROWF(__VA_ARGS__)
+#define RETHROW4(...) RETHROWF(__VA_ARGS__)
+#define RETHROW5(...) RETHROWF(__VA_ARGS__)
+