1# Define the same version as the libsupc++ from gcc 4.2.1 so that we can use
2# libcxxrt as a drop-in replacement.
3
4CXXABI_1.3 {
5
6  global:
7
8    # ABI functions with C linkage
9    __cxa_allocate_exception;
10    __cxa_bad_cast;
11    __cxa_bad_typeid;
12    __cxa_begin_catch;
13    __cxa_call_unexpected;
14    __cxa_current_exception_type;
15    __cxa_demangle;
16    __cxa_end_catch;
17    __cxa_free_exception;
18    __cxa_get_globals;
19    __cxa_get_globals_fast;
20    __cxa_guard_abort;
21    __cxa_guard_acquire;
22    __cxa_guard_release;
23    __cxa_pure_virtual;
24    __cxa_rethrow;
25    __cxa_throw;
26    __cxa_throw_bad_array_new_length;
27    __dynamic_cast;
28    __gxx_personality_v0;
29
30    extern "C++" {
31        # Type info classes and their destructors
32        "__cxxabiv1::__array_type_info::~__array_type_info()";
33        "__cxxabiv1::__class_type_info::~__class_type_info()";
34        "__cxxabiv1::__enum_type_info::~__enum_type_info()";
35        "__cxxabiv1::__function_type_info::~__function_type_info()";
36        "__cxxabiv1::__fundamental_type_info::~__fundamental_type_info()";
37        "__cxxabiv1::__pbase_type_info::~__pbase_type_info()";
38        "__cxxabiv1::__pointer_to_member_type_info::~__pointer_to_member_type_info()";
39        "__cxxabiv1::__pointer_type_info::~__pointer_type_info()";
40        "__cxxabiv1::__si_class_type_info::~__si_class_type_info()";
41        "__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info()";
42
43        # vtables typeinfo classes.
44        "vtable for __cxxabiv1::__array_type_info";
45        "vtable for __cxxabiv1::__class_type_info";
46        "vtable for __cxxabiv1::__enum_type_info";
47        "vtable for __cxxabiv1::__function_type_info";
48        "vtable for __cxxabiv1::__fundamental_type_info";
49        "vtable for __cxxabiv1::__pbase_type_info";
50        "vtable for __cxxabiv1::__pointer_to_member_type_info";
51        "vtable for __cxxabiv1::__pointer_type_info";
52        "vtable for __cxxabiv1::__si_class_type_info";
53        "vtable for __cxxabiv1::__vmi_class_type_info";
54
55        # Type info for built-in types
56        "typeinfo for bool const*";
57        "typeinfo for bool";
58        "typeinfo for char const*";
59        "typeinfo for char";
60        "typeinfo for double const*";
61        "typeinfo for double";
62        "typeinfo for float const*";
63        "typeinfo for float";
64        "typeinfo for int const*";
65        "typeinfo for int";
66        "typeinfo for long const*";
67        "typeinfo for long double const*";
68        "typeinfo for long double";
69        "typeinfo for long long const*";
70        "typeinfo for long long";
71        "typeinfo for long";
72        "typeinfo for short const*";
73        "typeinfo for short";
74        "typeinfo for signed char const*";
75        "typeinfo for signed char";
76        "typeinfo for unsigned char const*";
77        "typeinfo for unsigned char";
78        "typeinfo for unsigned int const*";
79        "typeinfo for unsigned int";
80        "typeinfo for unsigned long const*";
81        "typeinfo for unsigned long long const*";
82        "typeinfo for unsigned long long";
83        "typeinfo for unsigned long";
84        "typeinfo for unsigned short const*";
85        "typeinfo for unsigned short";
86        "typeinfo for void const*";
87        "typeinfo for void";
88        "typeinfo for wchar_t const*";
89        "typeinfo for wchar_t";
90
91        "typeinfo for bool*";
92        "typeinfo for wchar_t*";
93        "typeinfo for short*";
94        "typeinfo for char*";
95        "typeinfo for unsigned char*";
96        "typeinfo for long long*";
97        "typeinfo for unsigned short*";
98        "typeinfo for long*";
99        "typeinfo for double*";
100        "typeinfo for unsigned long*";
101        "typeinfo for unsigned long long*";
102        "typeinfo for int*";
103        "typeinfo for long double*";
104        "typeinfo for signed char*";
105        "typeinfo for void*";
106        "typeinfo for unsigned int*";
107        "typeinfo for float*";
108
109        "typeinfo for __cxxabiv1::__array_type_info";
110        "typeinfo for __cxxabiv1::__class_type_info";
111        "typeinfo for __cxxabiv1::__enum_type_info";
112        "typeinfo for __cxxabiv1::__function_type_info";
113        "typeinfo for __cxxabiv1::__fundamental_type_info";
114        "typeinfo for __cxxabiv1::__pbase_type_info";
115        "typeinfo for __cxxabiv1::__pointer_to_member_type_info";
116        "typeinfo for __cxxabiv1::__pointer_type_info";
117        "typeinfo for __cxxabiv1::__si_class_type_info";
118        "typeinfo for __cxxabiv1::__vmi_class_type_info";
119
120        # Typeinfo names.
121
122        "typeinfo name for unsigned char const*";
123        "typeinfo name for long const*";
124        "typeinfo name for double const*";
125        "typeinfo name for unsigned long long const*";
126        "typeinfo name for unsigned short const*";
127        "typeinfo name for char const*";
128        "typeinfo name for long long const*";
129        "typeinfo name for short const*";
130        "typeinfo name for unsigned int const*";
131        "typeinfo name for float const*";
132        "typeinfo name for bool const*";
133        "typeinfo name for wchar_t const*";
134        "typeinfo name for int const*";
135        "typeinfo name for unsigned long const*";
136        "typeinfo name for void const*";
137        "typeinfo name for long double const*";
138        "typeinfo name for signed char const*";
139        "typeinfo name for wchar_t";
140        "typeinfo name for short";
141        "typeinfo name for char";
142        "typeinfo name for float";
143        "typeinfo name for void";
144        "typeinfo name for unsigned int";
145        "typeinfo name for bool";
146        "typeinfo name for signed char";
147        "typeinfo name for long double";
148        "typeinfo name for int";
149        "typeinfo name for unsigned long long";
150        "typeinfo name for unsigned long";
151        "typeinfo name for unsigned char";
152        "typeinfo name for long";
153        "typeinfo name for long long";
154        "typeinfo name for unsigned short";
155        "typeinfo name for double";
156
157        "typeinfo name for bool*";
158        "typeinfo name for wchar_t*";
159        "typeinfo name for short*";
160        "typeinfo name for char*";
161        "typeinfo name for unsigned char*";
162        "typeinfo name for long long*";
163        "typeinfo name for unsigned short*";
164        "typeinfo name for long*";
165        "typeinfo name for double*";
166        "typeinfo name for unsigned long*";
167        "typeinfo name for unsigned long long*";
168        "typeinfo name for int*";
169        "typeinfo name for long double*";
170        "typeinfo name for signed char*";
171        "typeinfo name for void*";
172        "typeinfo name for unsigned int*";
173        "typeinfo name for float*";
174
175        "typeinfo name for __cxxabiv1::__array_type_info";
176        "typeinfo name for __cxxabiv1::__class_type_info";
177        "typeinfo name for __cxxabiv1::__enum_type_info";
178        "typeinfo name for __cxxabiv1::__function_type_info";
179        "typeinfo name for __cxxabiv1::__fundamental_type_info";
180        "typeinfo name for __cxxabiv1::__pbase_type_info";
181        "typeinfo name for __cxxabiv1::__pointer_to_member_type_info";
182        "typeinfo name for __cxxabiv1::__pointer_type_info";
183        "typeinfo name for __cxxabiv1::__si_class_type_info";
184        "typeinfo name for __cxxabiv1::__vmi_class_type_info";
185
186        "std::type_info::type_info(std::type_info const&)";
187        "std::type_info::operator=(std::type_info const&)";
188
189
190        # Extensions
191        "pathscale::set_terminate(void (*)())";
192        "pathscale::set_unexpected(void (*)())";
193        "pathscale::set_use_thread_local_handlers(bool)";
194    };
195
196    # C++11 typeinfo not understood by ld.bfd 2.17.50
197    # std::nullptr_t
198    _ZTIDn;_ZTIPDn;_ZTIPKDn;
199    # char16_t
200    _ZTIDi;_ZTIPDi;_ZTIPKDi;
201    # char32_t
202    _ZTIDs;_ZTIPDs;_ZTIPKDs;
203    # IEEE 754r half-precision floating point
204    _ZTIDh;_ZTIPDh;_ZTIPKDh;
205
206    # C++11 typeinfo name not understood by ld.bfd 2.17.50
207    # std::nullptr_t
208    _ZTSDn;_ZTSPDn;_ZTSPKDn;
209    # char16_t
210    _ZTSDi;_ZTSPDi;_ZTSPKDi;
211    # char32_t
212    _ZTSDs;_ZTSPDs;_ZTSPKDs;
213    # IEEE 754r half-precision floating point
214    _ZTSDh;_ZTSPDh;_ZTSPKDh;
215
216  local:
217    *;
218};
219
220CXXABI_1.3.1 {
221    __cxa_get_exception_ptr;
222} CXXABI_1.3;
223
224CXXABI_1.3.5 {
225    extern "C++" {
226        "typeinfo for __int128 const*";
227        "typeinfo for __int128";
228        "typeinfo for __int128*";
229        "typeinfo for unsigned __int128 const*";
230        "typeinfo for unsigned __int128";
231        "typeinfo for unsigned __int128*";
232    };
233} CXXABI_1.3.1;
234
235CXXABI_1.3.6 {
236    __cxa_deleted_virtual;
237} CXXABI_1.3.5;
238
239CXXABI_1.3.9 {
240    extern "C++" {
241        "typeinfo name for __int128 const*";
242        "typeinfo name for __int128";
243        "typeinfo name for __int128*";
244        "typeinfo name for unsigned __int128 const*";
245        "typeinfo name for unsigned __int128";
246        "typeinfo name for unsigned __int128*";
247        "operator delete[](void*, unsigned %%NEW_DELETE_TYPE%%)";
248        "operator delete(void*, unsigned %%NEW_DELETE_TYPE%%)";
249    };
250} CXXABI_1.3.6;
251
252CXXABI_1.3.11 {
253    __cxa_init_primary_exception;
254} CXXABI_1.3.9;
255
256CXXRT_1.0 {
257
258    extern "C++" {
259        "std::type_info::name() const";
260        "std::type_info::before(std::type_info const&) const";
261        "std::type_info::operator==(std::type_info const&) const";
262        "std::type_info::operator!=(std::type_info const&) const";
263        "std::bad_cast::bad_cast(std::bad_cast const&)";
264        "std::bad_cast::bad_cast()";
265        "std::bad_cast::operator=(std::bad_cast const&)";
266        "std::bad_typeid::bad_typeid(std::bad_typeid const&)";
267        "std::bad_typeid::bad_typeid()";
268        "std::bad_typeid::operator=(std::bad_typeid const&)";
269        "std::exception::exception(std::exception const&)";
270        "std::exception::exception()";
271        "std::exception::operator=(std::exception const&)";
272        "std::bad_alloc::bad_alloc(std::bad_alloc const&)";
273        "std::bad_alloc::bad_alloc()";
274        "std::bad_alloc::operator=(std::bad_alloc const&)";
275        "std::bad_array_new_length::bad_array_new_length(std::bad_array_new_length const&)";
276        "std::bad_array_new_length::bad_array_new_length()";
277        "std::bad_array_new_length::operator=(std::bad_array_new_length const&)";
278
279    };
280    __cxa_allocate_dependent_exception;
281    __cxa_current_primary_exception;
282    __cxa_decrement_exception_refcount;
283    __cxa_free_dependent_exception;
284    __cxa_increment_exception_refcount;
285    __cxa_rethrow_primary_exception;
286
287} CXXABI_1.3.6;
288
289
290GLIBCXX_3.4 {
291    extern "C++" {
292        "operator delete[](void*)";
293        "operator delete(void*)";
294        "operator new[](unsigned %%NEW_DELETE_TYPE%%)";
295        "operator new(unsigned %%NEW_DELETE_TYPE%%)";
296        "operator new(unsigned %%NEW_DELETE_TYPE%%, std::nothrow_t const&)";
297
298        "std::unexpected()";
299        "std::get_terminate()";
300        "std::get_unexpected()";
301        "std::uncaught_exception()";
302        "std::terminate()";
303
304        "std::type_info::~type_info()";
305        "std::bad_cast::~bad_cast()";
306        "std::bad_typeid::~bad_typeid()";
307        "std::exception::~exception()";
308        "std::bad_alloc::~bad_alloc()";
309        "std::bad_array_new_length::~bad_array_new_length()";
310
311        "std::exception::what() const";
312
313        std::set_new_handler*;
314        std::set_terminate*;
315        std::set_unexpected*;
316        std::type_info::__*;
317
318        "vtable for std::bad_alloc";
319        "vtable for std::bad_cast";
320        "vtable for std::bad_typeid";
321        "vtable for std::exception";
322        "vtable for std::type_info";
323        "vtable for std::bad_array_new_length";
324
325        "typeinfo for std::bad_alloc";
326        "typeinfo for std::bad_typeid";
327        "typeinfo for std::bad_cast";
328        "typeinfo for std::exception";
329        "typeinfo for std::type_info";
330        "typeinfo for std::bad_array_new_length";
331        "typeinfo name for std::bad_alloc";
332        "typeinfo name for std::bad_typeid";
333        "typeinfo name for std::bad_cast";
334        "typeinfo name for std::exception";
335        "typeinfo name for std::type_info";
336        "typeinfo name for std::bad_array_new_length";
337
338    };
339};
340
341GLIBCXX_3.4.9 {
342    extern "C++" {
343        "std::bad_typeid::what() const";
344        "std::bad_cast::what() const";
345        "std::bad_alloc::what() const";
346        "std::bad_array_new_length::what() const";
347    };
348} GLIBCXX_3.4;
349
350GLIBCXX_3.4.20 {
351    extern "C++" {
352        "std::get_new_handler()";
353    };
354} GLIBCXX_3.4.9;
355
356GLIBCXX_3.4.22 {
357    extern "C++" {
358        "std::uncaught_exceptions()";
359    };
360} GLIBCXX_3.4.20;
361
362