Index: uspace/lib/cpp/include/__bits/trycatch.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/trycatch.hpp	(revision fda6dd42980de15a818ca59cb511b46996f9f5a5)
+++ uspace/lib/cpp/include/__bits/trycatch.hpp	(revision 239d25be0115eb1fffb1fda326d519514292ac92)
@@ -67,4 +67,22 @@
 
 /**
+ * The language allows us to odr-use a variable
+ * that is not defined. We use this to support
+ * macros redefining the catch keyword that are
+ * followed by a block that uses that symbol.
+ *
+ * Normally, that would produce a compiler error
+ * as the declaration of that variale would be removed
+ * with the catch statement, but if we use the following
+ * declaration's name as the name of the caught exception,
+ * all will work well because of this extern declaration.
+ *
+ * Note: We do not follow our usual convention of using
+ * the aux:: namespace because that cannot be used in
+ * variable declaration.
+ */
+extern int __exception;
+
+/**
  * These macros allow us to choose how the program
  * should behave when an exception is thrown
@@ -87,5 +105,5 @@
 #define LIBCPP_EXCEPTION_IGNORE       /* IGNORE */
 #define LIBCPP_EXCEPTION_HANDLE_THROW LIBCPP_EXCEPTION_IGNORE
-#define LIBCPP_EXCEPTION_HANDLE_CATCH LIBCPP_EXCEPTION_HANG
+#define LIBCPP_EXCEPTION_HANDLE_CATCH LIBCPP_EXCEPTION_ABORT
 
 #define try if constexpr (::std::aux::try_blocks_allowed)
