34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
-
+
|
#endif
#ifdef __SEH__
# include <windows.h>
#endif
#if defined(__SEH__)
# define PERSONALITY gnu_objc_personality
# define PERSONALITY gnu_objc_personality
#elif defined(__USING_SJLJ_EXCEPTIONS__)
# define PERSONALITY __gnu_objc_personality_sj0
# define CXX_PERSONALITY_STR "__gxx_personality_sj0"
# define _Unwind_RaiseException _Unwind_SjLj_RaiseException
# define __builtin_eh_return_data_regno(i) (i)
#else
# define PERSONALITY __gnu_objc_personality_v0
|
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
|
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
|
-
+
|
_Unwind_SetIP(struct _Unwind_Context *ctx, uintptr_t value)
{
uintptr_t thumb = _Unwind_GetGR(ctx, 15) & 1;
_Unwind_SetGR(ctx, 15, (value | thumb));
}
#endif
#ifdef CXX_PERSONALITY
#if defined(CXX_PERSONALITY_STR) && !defined(OF_AMIGAOS_M68K)
static PERSONALITY_FUNC(cxx_personality) OF_WEAK_REF(CXX_PERSONALITY_STR);
#endif
#ifdef __SEH__
extern EXCEPTION_DISPOSITION _GCC_specific_handler(PEXCEPTION_RECORD, void *,
PCONTEXT, PDISPATCHER_CONTEXT, _Unwind_Reason_Code (*)(int, int, uint64_t,
struct _Unwind_Exception *, struct _Unwind_Context *));
|
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
|
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
|
-
+
|
struct LSDA LSDA;
uintptr_t landingpad = 0;
uint8_t found = 0;
intptr_t filter = 0;
if (foreign) {
switch (exClass) {
#ifdef CXX_PERSONALITY
#if defined(CXX_PERSONALITY_STR) && !defined(OF_AMIGAOS_M68K)
case GNUCCXX0_EXCEPTION_CLASS:
case CLNGCXX0_EXCEPTION_CLASS:
if (cxx_personality != NULL)
return CALL_PERSONALITY(cxx_personality);
break;
#endif
}
|