ReactOS
0.4.16-dev-1946-g52006dd
longjmp.c
Go to the documentation of this file.
1
/*
2
* PROJECT: ReactOS vcruntime library
3
* LICENSE: MIT (https://spdx.org/licenses/MIT)
4
* PURPOSE: Implementation of longjmp for x64.
5
* COPYRIGHT: Copyright 2025 Timo Kreuzer <timo.kreuzer@reactos.org>
6
*/
7
8
#include <setjmp.h>
9
#include <
windef.h
>
10
11
__declspec
(noreturn)
12
void
__longjmp_noframe(
const
_JUMP_BUFFER* _Buf,
int
_Value
);
13
14
__declspec
(noreturn)
15
void
__cdecl
longjmp(
16
_In_reads_
(_JBLEN)
jmp_buf
_Buf,
17
_In_
int
_Value
)
18
{
19
const
_JUMP_BUFFER* jumpBuffer = (_JUMP_BUFFER*)_Buf;
20
21
/* Ensure _Value is non-zero */
22
_Value
= (
_Value
== 0) ? 1 :
_Value
;
23
24
if
(jumpBuffer->Frame != 0)
25
{
26
EXCEPTION_RECORD
exceptionRecord = { 0 };
27
exceptionRecord.
ExceptionCode
=
STATUS_LONGJUMP
;
28
exceptionRecord.
NumberParameters
= 1;
29
exceptionRecord.
ExceptionInformation
[0] = (
ULONG_PTR
)jumpBuffer;
30
31
RtlUnwind
((
PVOID
)jumpBuffer->Frame,
32
(
PVOID
)jumpBuffer->Rip,
33
&exceptionRecord,
34
(
PVOID
)(
ULONG_PTR
)
_Value
);
35
}
36
37
__longjmp_noframe(jumpBuffer,
_Value
);
38
}
__cdecl
#define __cdecl
Definition:
accygwin.h:79
RtlUnwind
#define RtlUnwind
Definition:
longjmp.c:9
_Value
_In_ _Value
Definition:
corecrt_wstring.h:346
ULONG_PTR
#define ULONG_PTR
Definition:
config.h:101
__declspec
void __declspec(noinline) __cdecl _free_base(void *const block)
Definition:
free_base.cpp:98
void
Definition:
nsiface.idl:2307
_In_reads_
#define _In_reads_(s)
Definition:
no_sal2.h:168
_In_
#define _In_
Definition:
no_sal2.h:158
STATUS_LONGJUMP
#define STATUS_LONGJUMP
Definition:
ntstatus.h:297
_EXCEPTION_RECORD
Definition:
compat.h:207
_EXCEPTION_RECORD::ExceptionCode
DWORD ExceptionCode
Definition:
compat.h:208
_EXCEPTION_RECORD::NumberParameters
DWORD NumberParameters
Definition:
compat.h:212
_EXCEPTION_RECORD::ExceptionInformation
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
Definition:
compat.h:213
ULONG_PTR
uint32_t ULONG_PTR
Definition:
typedefs.h:65
jmp_buf
_JBTYPE jmp_buf[_JBLEN]
Definition:
setjmp.h:188
windef.h
sdk
lib
vcruntime
amd64
longjmp.c
Generated on Thu Dec 4 2025 06:16:28 for ReactOS by
1.9.6