From cdb915bb1868cb7e52600d77afceaf84403ede5f Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 10 Jul 2025 10:14:03 +0200 Subject: feat: NeKernel.org's Exception ABI has been improved. Signed-off-by: Amlal El Mahrouss --- dev/LibC++/base_exception.h | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'dev/LibC++') 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 #include +#include -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 -- cgit v1.2.3