1 //===------------------------- cxa_exception.cpp --------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //
8 //  This file implements the "Exception Handling APIs"
9 //  https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html
10 //
11 //===----------------------------------------------------------------------===//
12 
13 // Support functions for the no-exceptions libc++ library
14 
15 #include "cxxabi.h"
16 
17 #include <exception>        // for std::terminate
18 #include "cxa_exception.h"
19 #include "cxa_handlers.h"
20 
21 namespace __cxxabiv1 {
22 
23 extern "C" {
24 
25 void
__cxa_increment_exception_refcount(void * thrown_object)26 __cxa_increment_exception_refcount(void *thrown_object) throw() {
27     if (thrown_object != nullptr)
28         std::terminate();
29 }
30 
31 void
__cxa_decrement_exception_refcount(void * thrown_object)32 __cxa_decrement_exception_refcount(void *thrown_object) throw() {
33     if (thrown_object != nullptr)
34       std::terminate();
35 }
36 
37 
__cxa_current_primary_exception()38 void *__cxa_current_primary_exception() throw() { return nullptr; }
39 
40 void
__cxa_rethrow_primary_exception(void * thrown_object)41 __cxa_rethrow_primary_exception(void* thrown_object) {
42     if (thrown_object != nullptr)
43       std::terminate();
44 }
45 
46 bool
__cxa_uncaught_exception()47 __cxa_uncaught_exception() throw() { return false; }
48 
49 unsigned int
__cxa_uncaught_exceptions()50 __cxa_uncaught_exceptions() throw() { return 0; }
51 
52 }  // extern "C"
53 
54 // provide dummy implementations for the 'no exceptions' case.
__getExceptionClass(const _Unwind_Exception *)55 uint64_t __getExceptionClass  (const _Unwind_Exception*)           { return 0; }
__setExceptionClass(_Unwind_Exception *,uint64_t)56 void     __setExceptionClass  (      _Unwind_Exception*, uint64_t) {}
__isOurExceptionClass(const _Unwind_Exception *)57 bool     __isOurExceptionClass(const _Unwind_Exception*)           { return false; }
58 
59 }  // abi
60