xref: /reactos/sdk/lib/rtl/amd64/stubs.c (revision 9393fc32)
1 /*
2  * COPYRIGHT:         See COPYING in the top level directory
3  * PROJECT:           ReactOS Run-Time Library
4  * PURPOSE:           AMD64 stubs
5  * FILE:              lib/rtl/amd64/stubs.c
6  * PROGRAMMERS:        Stefan Ginsberg (stefan.ginsberg@reactos.org)
7  */
8 
9 /* INCLUDES *****************************************************************/
10 
11 #include <rtl.h>
12 #define NDEBUG
13 #include <debug.h>
14 #include "amd64/ketypes.h"
15 
16 /* PUBLIC FUNCTIONS **********************************************************/
17 
18 /*
19  * @unimplemented
20  */
21 VOID
22 NTAPI
23 RtlInitializeContext(
24     _Reserved_ HANDLE ProcessHandle,
25     _Out_ PCONTEXT ThreadContext,
26     _In_ PVOID ThreadStartParam  OPTIONAL,
27     _In_ PTHREAD_START_ROUTINE ThreadStartAddress,
28     _In_ PINITIAL_TEB StackBase)
29 {
30     /* Initialize everything to 0 */
31     RtlZeroMemory(ThreadContext, sizeof(*ThreadContext));
32 
33     /* Initialize StartAddress and Stack */
34     ThreadContext->Rip = (ULONG64)ThreadStartAddress;
35     ThreadContext->Rsp = (ULONG64)StackBase - 6 * sizeof(PVOID);
36 
37     /* Align stack by 16 and substract 8 (unaligned on function entry) */
38     ThreadContext->Rsp &= ~15;
39     ThreadContext->Rsp -= 8;
40 
41     /* Enable Interrupts */
42     ThreadContext->EFlags = EFLAGS_INTERRUPT_MASK;
43 
44     /* Set start parameter */
45     ThreadContext->Rcx = (ULONG64)ThreadStartParam;
46 
47     /* Set the Selectors */
48     if ((LONG64)ThreadStartAddress < 0)
49     {
50         /* Initialize kernel mode segments */
51         ThreadContext->SegCs = KGDT64_R0_CODE;
52         ThreadContext->SegDs = KGDT64_R3_DATA;
53         ThreadContext->SegEs = KGDT64_R3_DATA;
54         ThreadContext->SegFs = KGDT64_R3_CMTEB;
55         ThreadContext->SegGs = KGDT64_R3_DATA;
56         ThreadContext->SegSs = KGDT64_R0_DATA;
57     }
58     else
59     {
60         /* Initialize user mode segments */
61         ThreadContext->SegCs = KGDT64_R3_CODE |  RPL_MASK;
62         ThreadContext->SegDs = KGDT64_R3_DATA |  RPL_MASK;
63         ThreadContext->SegEs = KGDT64_R3_DATA |  RPL_MASK;
64         ThreadContext->SegFs = KGDT64_R3_CMTEB |  RPL_MASK;
65         ThreadContext->SegGs = KGDT64_R3_DATA |  RPL_MASK;
66         ThreadContext->SegSs = KGDT64_R3_DATA |  RPL_MASK;
67     }
68 
69     /* Only the basic Context is initialized */
70     ThreadContext->ContextFlags = CONTEXT_CONTROL |
71                                   CONTEXT_INTEGER |
72                                   CONTEXT_SEGMENTS;
73 
74     return;
75 }
76 
77 NTSTATUS
78 NTAPI
79 RtlQueueApcWow64Thread(
80     _In_ HANDLE ThreadHandle,
81     _In_ PKNORMAL_ROUTINE ApcRoutine,
82     _In_opt_ PVOID NormalContext,
83     _In_opt_ PVOID SystemArgument1,
84     _In_opt_ PVOID SystemArgument2)
85 {
86     UNIMPLEMENTED;
87     return STATUS_NOT_IMPLEMENTED;
88 }
89 
90