author | Mike Kinghan <mikek@symbian.org> |
Mon, 26 Jul 2010 18:22:55 +0100 | |
branch | GCC_SURGE |
changeset 235 | cbd07013118c |
parent 0 | a41df078684a |
child 236 | 7dc50dc94301 |
permissions | -rw-r--r-- |
0 | 1 |
/* Copyright (c) Edison Design Group, 2002-2004. */ |
2 |
/* |
|
3 |
cxxabi.h -- Include file for IA-64 ABI entry points. |
|
4 |
*/ |
|
5 |
||
6 |
#ifndef __CXXABI_H |
|
7 |
#define __CXXABI_H |
|
8 |
||
9 |
#ifndef __STDDEF_H |
|
10 |
#include <stddef.h> |
|
11 |
#endif /* ifndef __STDDEF_H */ |
|
12 |
||
13 |
namespace std |
|
14 |
{ |
|
15 |
#ifdef __EDG__ |
|
16 |
#pragma define_type_info |
|
17 |
#endif |
|
18 |
||
19 |
class type_info |
|
20 |
{ |
|
21 |
public: |
|
22 |
IMPORT_C virtual ~type_info(); |
|
23 |
IMPORT_C bool operator==(const type_info&) const; |
|
24 |
IMPORT_C bool operator!=(const type_info&) const; |
|
25 |
IMPORT_C bool before(const type_info&) const; |
|
26 |
IMPORT_C const char* name() const; |
|
27 |
private: |
|
28 |
type_info(const type_info&); |
|
29 |
type_info& operator=(const type_info&); |
|
30 |
private: |
|
31 |
const char *__type_name; |
|
32 |
}; |
|
33 |
||
34 |
class exception |
|
35 |
{ |
|
36 |
public: |
|
37 |
IMPORT_C exception() throw (); |
|
38 |
IMPORT_C exception(const exception&) throw (); |
|
39 |
IMPORT_C exception& operator=(const exception&) throw (); |
|
40 |
IMPORT_C virtual ~exception() throw (); |
|
41 |
IMPORT_C virtual const char* what() const throw (); |
|
42 |
}; |
|
43 |
||
44 |
class bad_exception : public exception |
|
45 |
{ |
|
46 |
public: |
|
47 |
bad_exception() throw (); |
|
48 |
bad_exception(const bad_exception&) throw (); |
|
49 |
bad_exception& operator=(const bad_exception&) throw (); |
|
50 |
||
51 |
virtual ~bad_exception() throw (); |
|
52 |
||
53 |
virtual const char* what() const throw (); |
|
54 |
}; |
|
55 |
||
56 |
class bad_cast : public exception |
|
57 |
{ |
|
58 |
public: |
|
59 |
IMPORT_C bad_cast() throw (); |
|
60 |
IMPORT_C bad_cast(const bad_cast&) throw (); |
|
61 |
IMPORT_C bad_cast& operator=(const bad_cast&) throw (); |
|
62 |
IMPORT_C virtual ~bad_cast() throw (); |
|
63 |
IMPORT_C virtual const char* what() const throw (); |
|
64 |
}; |
|
65 |
||
66 |
class bad_typeid : public exception |
|
67 |
{ |
|
68 |
public: |
|
69 |
IMPORT_C bad_typeid() throw (); |
|
70 |
IMPORT_C bad_typeid(const bad_typeid&) throw (); |
|
71 |
IMPORT_C bad_typeid& operator=(const bad_typeid&) throw (); |
|
72 |
IMPORT_C virtual ~bad_typeid() throw (); |
|
73 |
IMPORT_C virtual const char* what() const throw (); |
|
74 |
}; |
|
75 |
} |
|
76 |
||
77 |
||
78 |
||
79 |
#ifdef __EDG_RUNTIME_USES_NAMESPACES |
|
80 |
namespace __cxxabiv1 { |
|
81 |
#endif /* ifdef __EDG_RUNTIME_USES_NAMESPACES */ |
|
82 |
||
83 |
/* type_info implementation classes */ |
|
84 |
||
85 |
#pragma define_type_info |
|
235
cbd07013118c
1) Fix for bug 3392 - [GCCE] GCC definition for FORCEINLINE required for e32test build.
Mike Kinghan <mikek@symbian.org>
parents:
0
diff
changeset
|
86 |
class __fundamental_type_info : public std::type_info { |
0 | 87 |
public: |
88 |
virtual ~__fundamental_type_info(); |
|
89 |
}; |
|
90 |
||
91 |
#pragma define_type_info |
|
235
cbd07013118c
1) Fix for bug 3392 - [GCCE] GCC definition for FORCEINLINE required for e32test build.
Mike Kinghan <mikek@symbian.org>
parents:
0
diff
changeset
|
92 |
class __array_type_info : public std::type_info { |
0 | 93 |
public: |
94 |
virtual ~__array_type_info(); |
|
95 |
}; |
|
96 |
||
97 |
#pragma define_type_info |
|
235
cbd07013118c
1) Fix for bug 3392 - [GCCE] GCC definition for FORCEINLINE required for e32test build.
Mike Kinghan <mikek@symbian.org>
parents:
0
diff
changeset
|
98 |
class __function_type_info : public std::type_info { |
0 | 99 |
public: |
100 |
virtual ~__function_type_info(); |
|
101 |
}; |
|
102 |
||
103 |
#pragma define_type_info |
|
235
cbd07013118c
1) Fix for bug 3392 - [GCCE] GCC definition for FORCEINLINE required for e32test build.
Mike Kinghan <mikek@symbian.org>
parents:
0
diff
changeset
|
104 |
class __enum_type_info : public std::type_info { |
0 | 105 |
public: |
106 |
virtual ~__enum_type_info(); |
|
107 |
}; |
|
108 |
||
109 |
#pragma define_type_info |
|
235
cbd07013118c
1) Fix for bug 3392 - [GCCE] GCC definition for FORCEINLINE required for e32test build.
Mike Kinghan <mikek@symbian.org>
parents:
0
diff
changeset
|
110 |
class __class_type_info : public std::type_info { |
0 | 111 |
public: |
112 |
virtual ~__class_type_info(); |
|
113 |
}; |
|
114 |
||
115 |
#pragma define_type_info |
|
116 |
class __si_class_type_info : public __class_type_info { |
|
117 |
public: |
|
118 |
virtual ~__si_class_type_info(); |
|
119 |
const __class_type_info *__base_type; |
|
120 |
}; |
|
121 |
||
122 |
struct __base_class_type_info { |
|
123 |
const __class_type_info *__base_type; |
|
124 |
long __offset_flags; |
|
125 |
||
126 |
enum __offset_flags_masks { |
|
127 |
__virtual_mask = 0x1, |
|
128 |
__public_mask = 0x2, |
|
129 |
__offset_shift = 8 |
|
130 |
}; |
|
131 |
}; |
|
132 |
||
133 |
#pragma define_type_info |
|
134 |
class __vmi_class_type_info : public __class_type_info { |
|
135 |
public: |
|
136 |
virtual ~__vmi_class_type_info(); |
|
137 |
unsigned int __flags; |
|
138 |
unsigned int __base_count; |
|
139 |
__base_class_type_info __base_info[1]; |
|
140 |
||
141 |
enum __flags_masks { |
|
142 |
__non_diamond_repeat_mask = 0x1, |
|
143 |
__diamond_shaped_mask = 0x2 |
|
144 |
}; |
|
145 |
}; |
|
146 |
||
147 |
#pragma define_type_info |
|
235
cbd07013118c
1) Fix for bug 3392 - [GCCE] GCC definition for FORCEINLINE required for e32test build.
Mike Kinghan <mikek@symbian.org>
parents:
0
diff
changeset
|
148 |
class __pbase_type_info : public std::type_info { |
0 | 149 |
public: |
150 |
virtual ~__pbase_type_info(); |
|
151 |
unsigned int __flags; |
|
152 |
const type_info *__pointee; |
|
153 |
||
154 |
enum __masks { |
|
155 |
__const_mask = 0x1, |
|
156 |
__volatile_mask = 0x2, |
|
157 |
__restrict_mask = 0x4, |
|
158 |
__incomplete_mask = 0x8, |
|
159 |
__incomplete_class_mask = 0x10 |
|
160 |
}; |
|
161 |
}; |
|
162 |
||
163 |
#pragma define_type_info |
|
164 |
class __pointer_type_info : public __pbase_type_info { |
|
165 |
virtual ~__pointer_type_info(); |
|
166 |
}; |
|
167 |
||
168 |
#pragma define_type_info |
|
169 |
class __pointer_to_member_type_info : public __pbase_type_info { |
|
170 |
virtual ~__pointer_to_member_type_info(); |
|
171 |
const __class_type_info *__context; |
|
172 |
}; |
|
173 |
||
174 |
extern "C" { |
|
175 |
/* Pure virtual function calls. */ |
|
176 |
void __cxa_pure_virtual(); |
|
177 |
||
178 |
/* Constructors return void in the IA-64 ABI. But in the ARM EABI |
|
179 |
variant, they return void*. */ |
|
180 |
#ifdef __EDG_IA64_ABI_VARIANT_CTORS_AND_DTORS_RETURN_THIS |
|
181 |
typedef void* __ctor_dtor_return_type; |
|
182 |
#else /* ifndef __EDG_IA64_ABI_VARIANT_CTORS_AND_DTORS_RETURN_THIS */ |
|
183 |
typedef void __ctor_dtor_return_type; |
|
184 |
#endif /* ifdef __EDG_IA64_ABI_VARIANT_CTORS_AND_DTORS_RETURN_THIS */ |
|
185 |
||
186 |
/* Guard variables are 64 bits in the IA-64 ABI but only 32 bits in |
|
187 |
the ARM EABI. */ |
|
188 |
#ifdef __EDG_IA64_ABI_USE_INT_STATIC_INIT_GUARD |
|
189 |
typedef int __guard_variable_type; |
|
190 |
#else /* ifndef __EDG_IA64_ABI_USE_INT_STATIC_INIT_GUARD */ |
|
191 |
typedef unsigned long long __guard_variable_type; |
|
192 |
#endif /* ifdef __EDG_IA64_ABI_USE_INT_STATIC_INIT_GUARD */ |
|
193 |
||
194 |
/* Guard variables for the initialization of variables with static storage |
|
195 |
duration. */ |
|
196 |
int __cxa_guard_acquire(__guard_variable_type *); |
|
197 |
void __cxa_guard_release(__guard_variable_type *); |
|
198 |
void __cxa_guard_abort(__guard_variable_type *); |
|
199 |
||
200 |
/* Construction and destruction of arrays. */ |
|
201 |
void *__cxa_vec_new(size_t, size_t, size_t, |
|
202 |
__ctor_dtor_return_type (*)(void *), |
|
203 |
__ctor_dtor_return_type (*)(void *)); |
|
204 |
void *__cxa_vec_new2(size_t, size_t, size_t, |
|
205 |
__ctor_dtor_return_type (*)(void *), |
|
206 |
__ctor_dtor_return_type (*)(void *), |
|
207 |
void *(*)(size_t), |
|
208 |
void (*)(void *)); |
|
209 |
void *__cxa_vec_new3(size_t, size_t, size_t, |
|
210 |
__ctor_dtor_return_type (*)(void *), |
|
211 |
__ctor_dtor_return_type (*)(void *), |
|
212 |
void *(*)(size_t), |
|
213 |
void (*)(void *, size_t)); |
|
214 |
#ifndef CXXABI_VEC_CTOR_RETURNS_VOID |
|
215 |
/* The C++ ABI says this returns 'void' but we actually return |
|
216 |
'void *' to remain compatible with RVCT 2.0 objects. But the |
|
217 |
compiler no longer assumes it. */ |
|
218 |
void * |
|
219 |
#else /* def CXXABI_VEC_CTOR_RETURNS_VOID */ |
|
220 |
void |
|
221 |
#endif /* def CXXABI_VEC_CTOR_RETURNS_VOID */ |
|
222 |
__cxa_vec_ctor(void *, size_t, size_t, |
|
223 |
__ctor_dtor_return_type (*)(void *), |
|
224 |
__ctor_dtor_return_type (*)(void *)); |
|
225 |
void __cxa_vec_dtor(void *, size_t, size_t, |
|
226 |
__ctor_dtor_return_type (*)(void *)); |
|
227 |
void __cxa_vec_cleanup(void *, size_t, size_t, |
|
228 |
__ctor_dtor_return_type (*)(void *)); |
|
229 |
void __cxa_vec_delete(void *, size_t, size_t, |
|
230 |
__ctor_dtor_return_type (*)(void *)); |
|
231 |
void __cxa_vec_delete2(void *, size_t, size_t, |
|
232 |
__ctor_dtor_return_type (*)(void *), |
|
233 |
void (*)(void *)); |
|
234 |
void __cxa_vec_delete3(void *, size_t, size_t, |
|
235 |
__ctor_dtor_return_type (*)(void *), |
|
236 |
void (*)(void *, size_t)); |
|
237 |
#ifndef CXXABI_VEC_CTOR_RETURNS_VOID |
|
238 |
/* The C++ ABI says this returns 'void' but we actually return |
|
239 |
'void *' to remain compatible with RVCT 2.0 objects. But the |
|
240 |
compiler no longer assumes it. */ |
|
241 |
void * |
|
242 |
#else /* def CXXABI_VEC_CTOR_RETURNS_VOID */ |
|
243 |
void |
|
244 |
#endif /* def CXXABI_VEC_CTOR_RETURNS_VOID */ |
|
245 |
__cxa_vec_cctor(void *, void *, size_t, size_t, |
|
246 |
__ctor_dtor_return_type (*)(void *, void *), |
|
247 |
__ctor_dtor_return_type (*)(void *)); |
|
248 |
||
249 |
/* Finalization. */ |
|
250 |
int __cxa_atexit(void (*)(void *), void *, void *); |
|
251 |
void __cxa_finalize(void *); |
|
252 |
||
253 |
/* Exception-handling support. */ |
|
254 |
void __cxa_bad_cast(); |
|
255 |
void __cxa_bad_typeid(); |
|
256 |
||
257 |
/* Demangling interface. */ |
|
258 |
char *__cxa_demangle(const char* __mangled_name, |
|
259 |
char *__buf, |
|
260 |
size_t *__n, |
|
261 |
int *__status); |
|
262 |
||
263 |
} /* extern "C" */ |
|
264 |
#ifdef __EDG_RUNTIME_USES_NAMESPACES |
|
265 |
} /* namespace __cxxabiv1 */ |
|
266 |
||
267 |
/* Create the "abi" namespace alias. */ |
|
268 |
namespace abi = __cxxabiv1; |
|
269 |
#endif /* ifdef __EDG_RUNTIME_USES_NAMESPACES */ |
|
270 |
||
271 |
#endif /* ifndef __CXXABI_H */ |