26
26
#ifdef __cplusplus
27
27
28
28
namespace std {
29
+ #if defined(_WIN32)
30
+ class _LIBCXXABI_TYPE_VIS type_info; // forward declaration
31
+ #else
29
32
class type_info ; // forward declaration
33
+ #endif
30
34
}
31
35
32
36
@@ -35,113 +39,132 @@ namespace __cxxabiv1 {
35
39
extern " C" {
36
40
37
41
// 2.4.2 Allocating the Exception Object
38
- extern void *__cxa_allocate_exception (size_t thrown_size) throw();
39
- extern void __cxa_free_exception (void *thrown_exception) throw();
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();
40
46
41
47
// 2.4.3 Throwing the Exception Object
42
- extern LIBCXXABI_NORETURN void __cxa_throw ( void *thrown_exception,
43
- std::type_info *tinfo,
44
- void (*dest)(void *));
48
+ extern _LIBCXXABI_FUNC_VIS LIBCXXABI_NORETURN void
49
+ __cxa_throw ( void *thrown_exception, std::type_info *tinfo,
50
+ void (*dest)(void *));
45
51
46
52
// 2.5.3 Exception Handlers
47
- extern void *__cxa_get_exception_ptr (void *exceptionObject) throw();
48
- extern void *__cxa_begin_catch (void *exceptionObject) throw();
49
- extern void __cxa_end_catch ();
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 ();
50
58
#if LIBCXXABI_ARM_EHABI
51
- extern bool __cxa_begin_cleanup (void *exceptionObject) throw();
52
- extern void __cxa_end_cleanup ();
59
+ extern _LIBCXXABI_FUNC_VIS bool
60
+ __cxa_begin_cleanup (void *exceptionObject) throw();
61
+ extern _LIBCXXABI_FUNC_VIS void __cxa_end_cleanup ();
53
62
#endif
54
- extern std::type_info *__cxa_current_exception_type ();
63
+ extern _LIBCXXABI_FUNC_VIS std::type_info *__cxa_current_exception_type ();
55
64
56
65
// 2.5.4 Rethrowing Exceptions
57
- extern LIBCXXABI_NORETURN void __cxa_rethrow ();
66
+ extern _LIBCXXABI_FUNC_VIS LIBCXXABI_NORETURN void __cxa_rethrow ();
58
67
59
68
// 2.6 Auxiliary Runtime APIs
60
- extern LIBCXXABI_NORETURN void __cxa_bad_cast (void );
61
- extern LIBCXXABI_NORETURN void __cxa_bad_typeid (void );
62
- extern LIBCXXABI_NORETURN void __cxa_throw_bad_array_new_length (void );
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 );
63
73
64
74
// 3.2.6 Pure Virtual Function API
65
- extern LIBCXXABI_NORETURN void __cxa_pure_virtual (void );
75
+ extern _LIBCXXABI_FUNC_VIS LIBCXXABI_NORETURN void __cxa_pure_virtual (void );
66
76
67
77
// 3.2.7 Deleted Virtual Function API
68
- extern LIBCXXABI_NORETURN void __cxa_deleted_virtual (void );
78
+ extern _LIBCXXABI_FUNC_VIS LIBCXXABI_NORETURN void __cxa_deleted_virtual (void );
69
79
70
80
// 3.3.2 One-time Construction API
71
81
#ifdef __arm__
72
- extern int __cxa_guard_acquire (uint32_t *);
73
- extern void __cxa_guard_release (uint32_t *);
74
- extern void __cxa_guard_abort (uint32_t *);
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 *);
75
85
#else
76
- extern int __cxa_guard_acquire (uint64_t *);
77
- extern void __cxa_guard_release (uint64_t *);
78
- extern void __cxa_guard_abort (uint64_t *);
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 *);
79
89
#endif
80
90
81
91
// 3.3.3 Array Construction and Destruction API
82
- extern void *__cxa_vec_new (size_t element_count, size_t element_size,
83
- size_t padding_size, void (*constructor)(void *),
84
- void (*destructor)(void *));
85
-
86
- extern void *__cxa_vec_new2 (size_t element_count, size_t element_size,
87
- size_t padding_size, void (*constructor)(void *),
88
- void (*destructor)(void *), void *(*alloc)(size_t ),
89
- void (*dealloc)(void *));
90
-
91
- extern void *__cxa_vec_new3 (size_t element_count, size_t element_size,
92
- size_t padding_size, void (*constructor)(void *),
93
- void (*destructor)(void *), void *(*alloc)(size_t ),
94
- void (*dealloc)(void *, size_t ));
95
-
96
- extern void __cxa_vec_ctor (void *array_address, size_t element_count,
97
- size_t element_size, void (*constructor)(void *),
98
- void (*destructor)(void *));
99
-
100
- extern void __cxa_vec_dtor (void *array_address, size_t element_count,
101
- size_t element_size, void (*destructor)(void *));
102
-
103
- extern void __cxa_vec_cleanup (void *array_address, size_t element_count,
104
- size_t element_size, void (*destructor)(void *));
105
-
106
- extern void __cxa_vec_delete (void *array_address, size_t element_size,
107
- size_t padding_size, void (*destructor)(void *));
108
-
109
- extern void __cxa_vec_delete2 (void *array_address, size_t element_size,
110
- size_t padding_size, void (*destructor)(void *),
111
- void (*dealloc)(void *));
112
-
113
- extern void __cxa_vec_delete3 (void *__array_address, size_t element_size,
114
- size_t padding_size, void (*destructor)(void *),
115
- void (*dealloc)(void *, size_t ));
116
-
117
- extern void __cxa_vec_cctor (void *dest_array, void *src_array,
118
- size_t element_count, size_t element_size,
119
- void (*constructor)(void *, void *),
120
- void (*destructor)(void *));
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 *));
121
138
122
139
// 3.3.5.3 Runtime API
123
- extern int __cxa_atexit (void (*f)(void *), void *p, void *d);
124
- extern int __cxa_finalize (void *);
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 *);
125
143
126
144
// 3.4 Demangler API
127
- extern char *__cxa_demangle (const char *mangled_name, char *output_buffer,
128
- size_t *length, int *status);
145
+ extern _LIBCXXABI_FUNC_VIS char *__cxa_demangle (const char *mangled_name,
146
+ char *output_buffer,
147
+ size_t *length, int *status);
129
148
130
149
// Apple additions to support C++ 0x exception_ptr class
131
150
// These are primitives to wrap a smart pointer around an exception object
132
- extern void *__cxa_current_primary_exception () throw();
133
- extern void __cxa_rethrow_primary_exception (void *primary_exception);
134
- extern void __cxa_increment_exception_refcount (void *primary_exception) throw();
135
- extern void __cxa_decrement_exception_refcount (void *primary_exception) throw();
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();
136
158
137
159
// Apple extension to support std::uncaught_exception()
138
- extern bool __cxa_uncaught_exception () throw();
139
- extern unsigned int __cxa_uncaught_exceptions () throw();
160
+ extern _LIBCXXABI_FUNC_VIS bool __cxa_uncaught_exception () throw();
161
+ extern _LIBCXXABI_FUNC_VIS unsigned int __cxa_uncaught_exceptions () throw();
140
162
141
163
#ifdef __linux__
142
164
// Linux TLS support. Not yet an official part of the Itanium ABI.
143
165
// https://sourceware.org/glibc/wiki/Destructor%20support%20for%20thread_local%20variables
144
- extern int __cxa_thread_atexit (void (*)(void *), void *, void *) throw();
166
+ extern _LIBCXXABI_FUNC_VIS int __cxa_thread_atexit (void (*)(void *), void *,
167
+ void *) throw();
145
168
#endif
146
169
147
170
} // extern "C"
0 commit comments