diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-07-10 10:14:03 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-07-10 10:16:22 +0200 |
| commit | cdb915bb1868cb7e52600d77afceaf84403ede5f (patch) | |
| tree | 5ba9c0fb7d2ea931d0f92f21011651fd9eff01e5 /dev | |
| parent | b36a317c30acee30694a5068bae1abcd622bfec0 (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.h | 24 |
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 |
