2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Run-Time Library
5 * FILE: lib/rtl/amd64/stubs.c
6 * PROGRAMMERS: Stefan Ginsberg (stefan.ginsberg@reactos.org)
9 /* INCLUDES *****************************************************************/
14 #include "amd64/ketypes.h"
16 /* PUBLIC FUNCTIONS **********************************************************/
23 RtlInitializeContext(IN HANDLE ProcessHandle
,
24 OUT PCONTEXT ThreadContext
,
25 IN PVOID ThreadStartParam OPTIONAL
,
26 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
27 IN PINITIAL_TEB StackBase
)
30 ThreadContext
->Rax
= 0;
31 ThreadContext
->Rbx
= 0;
32 ThreadContext
->Rcx
= (ULONG64
)ThreadStartParam
;
33 ThreadContext
->Rdx
= 0;
34 ThreadContext
->Rsi
= 0;
35 ThreadContext
->Rdi
= 0;
36 ThreadContext
->Rbp
= 0;
37 ThreadContext
->R8
= 0;
38 ThreadContext
->R9
= 0;
39 ThreadContext
->R10
= 0;
40 ThreadContext
->R11
= 0;
41 ThreadContext
->R12
= 0;
43 /* Set the Selectors */
44 if ((LONG64
)ThreadStartAddress
< 0)
46 /* Initialize kernel mode segments */
47 ThreadContext
->SegCs
= KGDT64_R0_CODE
;
48 ThreadContext
->SegDs
= KGDT64_R3_DATA
;
49 ThreadContext
->SegEs
= KGDT64_R3_DATA
;
50 ThreadContext
->SegFs
= KGDT64_R3_CMTEB
;
51 ThreadContext
->SegGs
= KGDT64_R3_DATA
;
52 ThreadContext
->SegSs
= KGDT64_R0_DATA
;
56 /* Initialize user mode segments */
57 ThreadContext
->SegCs
= KGDT64_R3_CODE
| RPL_MASK
;
58 ThreadContext
->SegDs
= KGDT64_R3_DATA
| RPL_MASK
;
59 ThreadContext
->SegEs
= KGDT64_R3_DATA
| RPL_MASK
;
60 ThreadContext
->SegFs
= KGDT64_R3_CMTEB
| RPL_MASK
;
61 ThreadContext
->SegGs
= KGDT64_R3_DATA
| RPL_MASK
;
62 ThreadContext
->SegSs
= KGDT64_R3_DATA
| RPL_MASK
;
65 /* Enable Interrupts */
66 ThreadContext
->EFlags
= EFLAGS_INTERRUPT_MASK
;
69 ThreadContext
->Rip
= (ULONG64
)ThreadStartAddress
;
70 ThreadContext
->Rsp
= (ULONG64
)StackBase
- 6 * sizeof(PVOID
);
72 /* Align stack by 16 and substract 8 (unaligned on function entry) */
73 ThreadContext
->Rsp
&= ~15;
74 ThreadContext
->Rsp
-= 8;
76 /* Only the basic Context is initialized */
77 ThreadContext
->ContextFlags
= CONTEXT_CONTROL
|
89 RtlpGetExceptionAddress(VOID
)
100 RtlDispatchException(IN PEXCEPTION_RECORD ExceptionRecord
,
110 PCONTEXT ContextRecord
,
111 PEXCEPTION_RECORD ExceptionRecord
)