ReactOS 0.4.16-dev-527-gdad3a09
except_arm64.c
Go to the documentation of this file.
1/*
2 * msvcrt C++ exception handling
3 *
4 * Copyright 2011 Alexandre Julliard
5 * Copyright 2013 André Hentschel
6 * Copyright 2017 Martin Storsjo
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 */
22
23#ifdef __aarch64__
24
25#include <setjmp.h>
26#include <stdarg.h>
27#include <fpieee.h>
28
29#include "ntstatus.h"
30#define WIN32_NO_STATUS
31#include "windef.h"
32#include "winbase.h"
33#include "winternl.h"
34#include "msvcrt.h"
35#include "wine/exception.h"
36#include "excpt.h"
37#include "wine/debug.h"
38
39#include "cppexcept.h"
40
42
43
44/*********************************************************************
45 * __CxxExceptionFilter (MSVCRT.@)
46 */
47int CDECL __CxxExceptionFilter( PEXCEPTION_POINTERS ptrs,
48 const type_info *ti, int flags, void **copy )
49{
50 FIXME( "%p %p %x %p: not implemented\n", ptrs, ti, flags, copy );
52}
53
54/*********************************************************************
55 * __CxxFrameHandler (MSVCRT.@)
56 */
57EXCEPTION_DISPOSITION CDECL __CxxFrameHandler(EXCEPTION_RECORD *rec, DWORD frame, CONTEXT *context,
59{
60 FIXME("%p %x %p %p: not implemented\n", rec, frame, context, dispatch);
62}
63
64
65/*********************************************************************
66 * __CppXcptFilter (MSVCRT.@)
67 */
69{
70 /* only filter c++ exceptions */
72 return _XcptFilter(ex, ptr);
73}
74
75
76/*********************************************************************
77 * __CxxDetectRethrow (MSVCRT.@)
78 */
79BOOL CDECL __CxxDetectRethrow(PEXCEPTION_POINTERS ptrs)
80{
82
83 if (!ptrs)
84 return FALSE;
85
86 rec = ptrs->ExceptionRecord;
87
88 if (rec->ExceptionCode == CXX_EXCEPTION &&
89 rec->NumberParameters == 3 &&
92 {
93 ptrs->ExceptionRecord = msvcrt_get_thread_data()->exc_record;
94 return TRUE;
95 }
96 return (msvcrt_get_thread_data()->exc_record == rec);
97}
98
99
100/*********************************************************************
101 * __CxxQueryExceptionSize (MSVCRT.@)
102 */
103unsigned int CDECL __CxxQueryExceptionSize(void)
104{
105 return sizeof(cxx_exception_type);
106}
107
108
109/*******************************************************************
110 * _setjmp (MSVCRT.@)
111 */
112__ASM_GLOBAL_FUNC(MSVCRT__setjmp,
113 "b " __ASM_NAME("__wine_setjmpex"));
114
115/*******************************************************************
116 * longjmp (MSVCRT.@)
117 */
118void __cdecl MSVCRT_longjmp(_JUMP_BUFFER *jmp, int retval)
119{
121
122 if (!retval) retval = 1;
123 if (jmp->Frame)
124 {
126 rec.ExceptionFlags = 0;
127 rec.ExceptionRecord = NULL;
129 rec.NumberParameters = 1;
130 rec.ExceptionInformation[0] = (DWORD_PTR)jmp;
131 RtlUnwind((void *)jmp->Frame, (void *)jmp->Lr, &rec, IntToPtr(retval));
132 }
133 __wine_longjmp( (__wine_jmp_buf *)jmp, retval );
134}
135
136/*********************************************************************
137 * _fpieee_flt (MSVCRT.@)
138 */
141{
142 FIXME("(%lx %p %p)\n", exception_code, ep, handler);
144}
145
146#endif /* __aarch64__ */
#define __cdecl
Definition: accygwin.h:79
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
LONG NTSTATUS
Definition: precomp.h:26
void dispatch(HANDLE hStopEvent)
Definition: dispatch.c:70
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
#define FIXME(fmt,...)
Definition: precomp.h:53
#define IntToPtr(i)
Definition: basetsd.h:89
_CRTIMP int __cdecl _fpieee_flt(unsigned long _ExceptionCode, struct _EXCEPTION_POINTERS *_PtExceptionPtr, int(__cdecl *_Handler)(_FPIEEE_RECORD *))
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CDECL
Definition: compat.h:29
@ ExceptionContinueSearch
Definition: compat.h:91
enum _EXCEPTION_DISPOSITION EXCEPTION_DISPOSITION
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7512
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLbitfield flags
Definition: glext.h:7161
int CDECL _XcptFilter(NTSTATUS, PEXCEPTION_POINTERS)
Definition: except.c:278
#define CXX_EXCEPTION
Definition: cppexcept.h:27
#define CXX_FRAME_MAGIC_VC6
Definition: cppexcept.h:24
struct __cxx_exception_type cxx_exception_type
int CDECL __CppXcptFilter(NTSTATUS, PEXCEPTION_POINTERS)
#define exception_code
Definition: excpt.h:84
#define EXCEPTION_CONTINUE_SEARCH
Definition: excpt.h:91
static PVOID ptr
Definition: dispmode.c:27
thread_data_t * msvcrt_get_thread_data(void)
Definition: tls.c:31
#define __ASM_NAME(name)
Definition: config.h:934
#define __ASM_GLOBAL_FUNC(name, code)
Definition: port.h:201
NTSYSAPI VOID NTAPI RtlUnwind(_In_opt_ PVOID TargetFrame, _In_opt_ PVOID TargetIp, _In_opt_ PEXCEPTION_RECORD ExceptionRecord, _In_ PVOID ReturnValue)
Definition: unwind.c:918
#define STATUS_LONGJUMP
Definition: ntstatus.h:217
PEXCEPTION_RECORD ExceptionRecord
Definition: rtltypes.h:200
struct _EXCEPTION_RECORD * ExceptionRecord
Definition: compat.h:210
DWORD ExceptionCode
Definition: compat.h:208
DWORD NumberParameters
Definition: compat.h:212
DWORD ExceptionFlags
Definition: compat.h:209
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
Definition: compat.h:213
PVOID ExceptionAddress
Definition: compat.h:211
Definition: http.c:7252
Definition: comerr.c:44
#define DWORD_PTR
Definition: treelist.c:76
int retval
Definition: wcstombs.cpp:91