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