summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-07-10 10:14:03 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-07-10 10:16:22 +0200
commitcdb915bb1868cb7e52600d77afceaf84403ede5f (patch)
tree5ba9c0fb7d2ea931d0f92f21011651fd9eff01e5 /dev
parentb36a317c30acee30694a5068bae1abcd622bfec0 (diff)
feat: NeKernel.org's Exception ABI has been improved.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev')
-rw-r--r--dev/LibC++/base_exception.h24
1 files changed, 17 insertions, 7 deletions
diff --git a/dev/LibC++/base_exception.h b/dev/LibC++/base_exception.h
index 17b41e3..db4b863 100644
--- a/dev/LibC++/base_exception.h
+++ b/dev/LibC++/base_exception.h
@@ -8,19 +8,29 @@
#include <LibC++/defines.h>
#include <LibC++/base_process.h>
+#include <iostream>
-namespace std::base_exception {
-inline void __throw_general(void) {
- base_process::exit(33);
+/// @author Amlal El Mahrouss (amlal@nekernel.org)
+
+namespace std::base_exception::abi {
+inline constexpr int __terminate_id = 33;
+
+/// @note This function is internal, don't call it.
+extern void __unwind_object_list();
+
+inline void __throw_general(const char* what) {
+ std::cout << "LibC++: Unwinding exception of kind: " << what << ", aborting here..." << std::endl;
+ __unwind_object_list();
+ base_process::exit(__terminate_id);
}
-inline void __throw_domain_error(const char* error) {
- __throw_general();
+inline void __throw_domain_error(const char* what) {
+ __throw_general(what);
__builtin_unreachable(); // prevent from continuing.
}
-inline void __throw_bad_array_new_length(void) {
- __throw_general();
+inline void __throw_bad_array_new_length(const char* what) {
+ __throw_general(what);
__builtin_unreachable(); // prevent from continuing.
}
} // namespace std::base_exception