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