Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/c++abi/include/cxxabi.h
12346 views
1
//===--------------------------- cxxabi.h ---------------------------------===//
2
//
3
// The LLVM Compiler Infrastructure
4
//
5
// This file is dual licensed under the MIT and the University of Illinois Open
6
// Source Licenses. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
10
#ifndef __CXXABI_H
11
#define __CXXABI_H
12
13
/*
14
* This header provides the interface to the C++ ABI as defined at:
15
* http://www.codesourcery.com/cxx-abi/
16
*/
17
18
#include <stddef.h>
19
#include <stdint.h>
20
21
#include <__cxxabi_config.h>
22
23
#define _LIBCPPABI_VERSION 1002
24
#define _LIBCXXABI_NORETURN __attribute__((noreturn))
25
26
#ifdef __cplusplus
27
28
namespace std {
29
#if defined(_WIN32)
30
class _LIBCXXABI_TYPE_VIS type_info; // forward declaration
31
#else
32
class type_info; // forward declaration
33
#endif
34
}
35
36
37
// runtime routines use C calling conventions, but are in __cxxabiv1 namespace
38
namespace __cxxabiv1 {
39
extern "C" {
40
41
// 2.4.2 Allocating the Exception Object
42
extern _LIBCXXABI_FUNC_VIS void *
43
__cxa_allocate_exception(size_t thrown_size) throw();
44
extern _LIBCXXABI_FUNC_VIS void
45
__cxa_free_exception(void *thrown_exception) throw();
46
47
// 2.4.3 Throwing the Exception Object
48
extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void
49
__cxa_throw(void *thrown_exception, std::type_info *tinfo,
50
void (*dest)(void *));
51
52
// 2.5.3 Exception Handlers
53
extern _LIBCXXABI_FUNC_VIS void *
54
__cxa_get_exception_ptr(void *exceptionObject) throw();
55
extern _LIBCXXABI_FUNC_VIS void *
56
__cxa_begin_catch(void *exceptionObject) throw();
57
extern _LIBCXXABI_FUNC_VIS void __cxa_end_catch();
58
#if defined(_LIBCXXABI_ARM_EHABI)
59
extern _LIBCXXABI_FUNC_VIS bool
60
__cxa_begin_cleanup(void *exceptionObject) throw();
61
extern _LIBCXXABI_FUNC_VIS void __cxa_end_cleanup();
62
#endif
63
extern _LIBCXXABI_FUNC_VIS std::type_info *__cxa_current_exception_type();
64
65
// 2.5.4 Rethrowing Exceptions
66
extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void __cxa_rethrow();
67
68
// 2.6 Auxiliary Runtime APIs
69
extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void __cxa_bad_cast(void);
70
extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void __cxa_bad_typeid(void);
71
extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void
72
__cxa_throw_bad_array_new_length(void);
73
74
// 3.2.6 Pure Virtual Function API
75
extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void __cxa_pure_virtual(void);
76
77
// 3.2.7 Deleted Virtual Function API
78
extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void __cxa_deleted_virtual(void);
79
80
// 3.3.2 One-time Construction API
81
#ifdef __arm__
82
extern _LIBCXXABI_FUNC_VIS int __cxa_guard_acquire(uint32_t *);
83
extern _LIBCXXABI_FUNC_VIS void __cxa_guard_release(uint32_t *);
84
extern _LIBCXXABI_FUNC_VIS void __cxa_guard_abort(uint32_t *);
85
#else
86
extern _LIBCXXABI_FUNC_VIS int __cxa_guard_acquire(uint64_t *);
87
extern _LIBCXXABI_FUNC_VIS void __cxa_guard_release(uint64_t *);
88
extern _LIBCXXABI_FUNC_VIS void __cxa_guard_abort(uint64_t *);
89
#endif
90
91
// 3.3.3 Array Construction and Destruction API
92
extern _LIBCXXABI_FUNC_VIS void *
93
__cxa_vec_new(size_t element_count, size_t element_size, size_t padding_size,
94
void (*constructor)(void *), void (*destructor)(void *));
95
96
extern _LIBCXXABI_FUNC_VIS void *
97
__cxa_vec_new2(size_t element_count, size_t element_size, size_t padding_size,
98
void (*constructor)(void *), void (*destructor)(void *),
99
void *(*alloc)(size_t), void (*dealloc)(void *));
100
101
extern _LIBCXXABI_FUNC_VIS void *
102
__cxa_vec_new3(size_t element_count, size_t element_size, size_t padding_size,
103
void (*constructor)(void *), void (*destructor)(void *),
104
void *(*alloc)(size_t), void (*dealloc)(void *, size_t));
105
106
extern _LIBCXXABI_FUNC_VIS void
107
__cxa_vec_ctor(void *array_address, size_t element_count, size_t element_size,
108
void (*constructor)(void *), void (*destructor)(void *));
109
110
extern _LIBCXXABI_FUNC_VIS void __cxa_vec_dtor(void *array_address,
111
size_t element_count,
112
size_t element_size,
113
void (*destructor)(void *));
114
115
extern _LIBCXXABI_FUNC_VIS void __cxa_vec_cleanup(void *array_address,
116
size_t element_count,
117
size_t element_size,
118
void (*destructor)(void *));
119
120
extern _LIBCXXABI_FUNC_VIS void __cxa_vec_delete(void *array_address,
121
size_t element_size,
122
size_t padding_size,
123
void (*destructor)(void *));
124
125
extern _LIBCXXABI_FUNC_VIS void
126
__cxa_vec_delete2(void *array_address, size_t element_size, size_t padding_size,
127
void (*destructor)(void *), void (*dealloc)(void *));
128
129
extern _LIBCXXABI_FUNC_VIS void
130
__cxa_vec_delete3(void *__array_address, size_t element_size,
131
size_t padding_size, void (*destructor)(void *),
132
void (*dealloc)(void *, size_t));
133
134
extern _LIBCXXABI_FUNC_VIS void
135
__cxa_vec_cctor(void *dest_array, void *src_array, size_t element_count,
136
size_t element_size, void (*constructor)(void *, void *),
137
void (*destructor)(void *));
138
139
// 3.3.5.3 Runtime API
140
extern _LIBCXXABI_FUNC_VIS int __cxa_atexit(void (*f)(void *), void *p,
141
void *d);
142
extern _LIBCXXABI_FUNC_VIS int __cxa_finalize(void *);
143
144
// 3.4 Demangler API
145
extern _LIBCXXABI_FUNC_VIS char *__cxa_demangle(const char *mangled_name,
146
char *output_buffer,
147
size_t *length, int *status);
148
149
// Apple additions to support C++ 0x exception_ptr class
150
// These are primitives to wrap a smart pointer around an exception object
151
extern _LIBCXXABI_FUNC_VIS void *__cxa_current_primary_exception() throw();
152
extern _LIBCXXABI_FUNC_VIS void
153
__cxa_rethrow_primary_exception(void *primary_exception);
154
extern _LIBCXXABI_FUNC_VIS void
155
__cxa_increment_exception_refcount(void *primary_exception) throw();
156
extern _LIBCXXABI_FUNC_VIS void
157
__cxa_decrement_exception_refcount(void *primary_exception) throw();
158
159
// Apple extension to support std::uncaught_exception()
160
extern _LIBCXXABI_FUNC_VIS bool __cxa_uncaught_exception() throw();
161
extern _LIBCXXABI_FUNC_VIS unsigned int __cxa_uncaught_exceptions() throw();
162
163
#if defined(__linux__) || defined(__Fuchsia__)
164
// Linux and Fuchsia TLS support. Not yet an official part of the Itanium ABI.
165
// https://sourceware.org/glibc/wiki/Destructor%20support%20for%20thread_local%20variables
166
extern _LIBCXXABI_FUNC_VIS int __cxa_thread_atexit(void (*)(void *), void *,
167
void *) throw();
168
#endif
169
170
} // extern "C"
171
} // namespace __cxxabiv1
172
173
namespace abi = __cxxabiv1;
174
175
#endif // __cplusplus
176
177
#endif // __CXXABI_H
178
179