Author: hpoussin
Date: Wed Jan 10 22:39:01 2007
New Revision: 25415
URL:
http://svn.reactos.org/svn/reactos?rev=25415&view=rev
Log:
Move x86 specific part to i386/ directory.
Fix a few warnings
Added:
trunk/reactos/lib/rtl/i386/thread.c
- copied, changed from r25414, trunk/reactos/lib/rtl/thread.c
Modified:
trunk/reactos/lib/rtl/austin/udict.h
trunk/reactos/lib/rtl/nls.c
trunk/reactos/lib/rtl/rtl.rbuild
trunk/reactos/lib/rtl/thread.c
Modified: trunk/reactos/lib/rtl/austin/udict.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/austin/udict.h?rev…
==============================================================================
--- trunk/reactos/lib/rtl/austin/udict.h (original)
+++ trunk/reactos/lib/rtl/austin/udict.h Wed Jan 10 22:39:01 2007
@@ -57,8 +57,8 @@
typedef enum {
udict_balanced = 0,
- udict_leftheavy = -1,
- udict_rightheavy = 1
+ udict_leftheavy = 1,
+ udict_rightheavy = 2
} udict_avl_balance_t;
typedef union {
Copied: trunk/reactos/lib/rtl/i386/thread.c (from r25414, trunk/reactos/lib/rtl/thread.c)
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/thread.c?p2=t…
==============================================================================
--- trunk/reactos/lib/rtl/thread.c (original)
+++ trunk/reactos/lib/rtl/i386/thread.c Wed Jan 10 22:39:01 2007
@@ -19,209 +19,9 @@
/* PRIVATE FUNCTIONS *******************************************************/
-NTSTATUS
-NTAPI
-RtlpCreateUserStack(IN HANDLE hProcess,
- IN SIZE_T StackReserve OPTIONAL,
- IN SIZE_T StackCommit OPTIONAL,
- IN ULONG StackZeroBits OPTIONAL,
- OUT PINITIAL_TEB InitialTeb)
-{
- NTSTATUS Status;
- SYSTEM_BASIC_INFORMATION SystemBasicInfo;
- PIMAGE_NT_HEADERS Headers;
- ULONG_PTR Stack = 0;
- BOOLEAN UseGuard = FALSE;
- ULONG Dummy, GuardPageSize;
-
- /* Get some memory information */
- Status = ZwQuerySystemInformation(SystemBasicInformation,
- &SystemBasicInfo,
- sizeof(SYSTEM_BASIC_INFORMATION),
- NULL);
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Use the Image Settings if we are dealing with the current Process */
- if (hProcess == NtCurrentProcess())
- {
- /* Get the Image Headers */
- Headers = RtlImageNtHeader(NtCurrentPeb()->ImageBaseAddress);
-
- /* If we didn't get the parameters, find them ourselves */
- if (!StackReserve) StackReserve = Headers->OptionalHeader.
- SizeOfStackReserve;
- if (!StackCommit) StackCommit = Headers->OptionalHeader.
- SizeOfStackCommit;
- }
- else
- {
- /* Use the System Settings if needed */
- if (!StackReserve) StackReserve = SystemBasicInfo.AllocationGranularity;
- if (!StackCommit) StackCommit = SystemBasicInfo.PageSize;
- }
-
- /* Align everything to Page Size */
- StackReserve = ROUND_UP(StackReserve, SystemBasicInfo.AllocationGranularity);
- StackCommit = ROUND_UP(StackCommit, SystemBasicInfo.PageSize);
-
- // FIXME: Remove once Guard Page support is here
- #if 1
- StackCommit = StackReserve;
- #endif
-
- /* Reserve memory for the stack */
- Status = ZwAllocateVirtualMemory(hProcess,
- (PVOID*)&Stack,
- StackZeroBits,
- &StackReserve,
- MEM_RESERVE,
- PAGE_READWRITE);
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Now set up some basic Initial TEB Parameters */
- InitialTeb->PreviousStackBase = NULL;
- InitialTeb->PreviousStackLimit = NULL;
- InitialTeb->AllocatedStackBase = (PVOID)Stack;
- InitialTeb->StackBase = (PVOID)(Stack + StackReserve);
-
- /* Update the Stack Position */
- Stack += StackReserve - StackCommit;
-
- /* Check if we will need a guard page */
- if (StackReserve > StackCommit)
- {
- /* Remove a page to set as guard page */
- Stack -= SystemBasicInfo.PageSize;
- StackCommit += SystemBasicInfo.PageSize;
- UseGuard = TRUE;
- }
-
- /* Allocate memory for the stack */
- Status = ZwAllocateVirtualMemory(hProcess,
- (PVOID*)&Stack,
- 0,
- &StackCommit,
- MEM_COMMIT,
- PAGE_READWRITE);
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Now set the current Stack Limit */
- InitialTeb->StackLimit = (PVOID)Stack;
-
- /* Create a guard page */
- if (UseGuard)
- {
- /* Attempt maximum space possible */
- GuardPageSize = SystemBasicInfo.PageSize;
- Status = ZwProtectVirtualMemory(hProcess,
- (PVOID*)&Stack,
- &GuardPageSize,
- PAGE_GUARD | PAGE_READWRITE,
- &Dummy);
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Update the Stack Limit keeping in mind the Guard Page */
- InitialTeb->StackLimit = (PVOID)((ULONG_PTR)InitialTeb->StackLimit -
- GuardPageSize);
- }
-
- /* We are done! */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-NTAPI
-RtlpFreeUserStack(IN HANDLE Process,
- IN PINITIAL_TEB InitialTeb)
-{
- ULONG Dummy = 0;
- NTSTATUS Status;
-
- /* Free the Stack */
- Status = ZwFreeVirtualMemory(Process,
- &InitialTeb->AllocatedStackBase,
- &Dummy,
- MEM_RELEASE);
-
- /* Clear the initial TEB */
- RtlZeroMemory(InitialTeb, sizeof(INITIAL_TEB));
- return Status;
-}
-
-/* FUNCTIONS ***************************************************************/
-
/*
- @implemented
-*/
-NTSTATUS
-NTAPI
-RtlCreateUserThread(IN HANDLE ProcessHandle,
- IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
- IN BOOLEAN CreateSuspended,
- IN ULONG StackZeroBits OPTIONAL,
- IN SIZE_T StackReserve OPTIONAL,
- IN SIZE_T StackCommit OPTIONAL,
- IN PTHREAD_START_ROUTINE StartAddress,
- IN PVOID Parameter OPTIONAL,
- OUT PHANDLE ThreadHandle OPTIONAL,
- OUT PCLIENT_ID ClientId OPTIONAL)
-{
- NTSTATUS Status;
- HANDLE Handle;
- CLIENT_ID ThreadCid;
- INITIAL_TEB InitialTeb;
- OBJECT_ATTRIBUTES ObjectAttributes;
- CONTEXT Context;
-
- /* First, we'll create the Stack */
- Status = RtlpCreateUserStack(ProcessHandle,
- StackReserve,
- StackCommit,
- StackZeroBits,
- &InitialTeb);
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Next, we'll set up the Initial Context */
- RtlInitializeContext(ProcessHandle,
- &Context,
- Parameter,
- StartAddress,
- InitialTeb.StackBase);
-
- /* We are now ready to create the Kernel Thread Object */
- InitializeObjectAttributes(&ObjectAttributes,
- NULL,
- 0,
- NULL,
- SecurityDescriptor);
- Status = ZwCreateThread(&Handle,
- THREAD_ALL_ACCESS,
- &ObjectAttributes,
- ProcessHandle,
- &ThreadCid,
- &Context,
- &InitialTeb,
- CreateSuspended);
- if (!NT_SUCCESS(Status))
- {
- /* Free the stack */
- RtlpFreeUserStack(ProcessHandle, &InitialTeb);
- }
- else
- {
- /* Return thread data */
- if (ThreadHandle) *ThreadHandle = Handle;
- if (ClientId) *ClientId = ThreadCid;
- }
-
- /* Return success or the previous failure */
- return Status;
-}
-
-/*
- * FIXME: Should go in /i386
- @implemented
-*/
+ * @implemented
+ */
VOID
NTAPI
RtlInitializeContext(IN HANDLE ProcessHandle,
@@ -230,6 +30,9 @@
IN PTHREAD_START_ROUTINE ThreadStartAddress,
IN PINITIAL_TEB InitialTeb)
{
+ DPRINT("RtlInitializeContext: (hProcess: %p, ThreadContext: %p, Teb:
%p\n",
+ ProcessHandle, ThreadContext, InitialTeb);
+
/*
* Set the Initial Registers
* This is based on NT's default values -- crazy apps might expect this...
@@ -274,61 +77,4 @@
ThreadContext->Esp -= sizeof(PVOID);
}
-/*
- * @implemented
- */
-VOID
-NTAPI
-RtlExitUserThread(NTSTATUS Status)
-{
- /* Call the Loader and tell him to notify the DLLs */
- LdrShutdownThread();
-
- /* Shut us down */
- NtCurrentTeb()->FreeStackOnTermination = TRUE;
- NtTerminateThread(NtCurrentThread(), Status);
-}
-
-/*
- @implemented
-*/
-VOID
-NTAPI
-RtlFreeUserThreadStack(HANDLE ProcessHandle,
- HANDLE ThreadHandle)
-{
- NTSTATUS Status;
- THREAD_BASIC_INFORMATION ThreadBasicInfo;
- ULONG Dummy, Size = 0;
- PVOID StackLocation;
-
- /* Query the Basic Info */
- Status = NtQueryInformationThread(ThreadHandle,
- ThreadBasicInformation,
- &ThreadBasicInfo,
- sizeof(THREAD_BASIC_INFORMATION),
- NULL);
- if (!NT_SUCCESS(Status) || !ThreadBasicInfo.TebBaseAddress) return;
-
- /* Get the deallocation stack */
- Status = NtReadVirtualMemory(ProcessHandle,
- &((PTEB)ThreadBasicInfo.TebBaseAddress)->
- DeallocationStack,
- &StackLocation,
- sizeof(PVOID),
- &Dummy);
- if (!NT_SUCCESS(Status) || !StackLocation) return;
-
- /* Free it */
- NtFreeVirtualMemory(ProcessHandle, &StackLocation, &Size, MEM_RELEASE);
-}
-
-PTEB
-NTAPI
-_NtCurrentTeb(VOID)
-{
- /* Return the TEB */
- return NtCurrentTeb();
-}
-
/* EOF */
Modified: trunk/reactos/lib/rtl/nls.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/nls.c?rev=25415&am…
==============================================================================
--- trunk/reactos/lib/rtl/nls.c (original)
+++ trunk/reactos/lib/rtl/nls.c Wed Jan 10 22:39:01 2007
@@ -359,7 +359,7 @@
DPRINT("RtlResetRtlTranslations() called\n");
/* Set ANSI data */
- NlsAnsiToUnicodeTable = NlsTable->AnsiTableInfo.MultiByteTable;
+ NlsAnsiToUnicodeTable = (PWCHAR)NlsTable->AnsiTableInfo.MultiByteTable; /* Real
type is PUSHORT */
NlsUnicodeToAnsiTable = NlsTable->AnsiTableInfo.WideCharTable;
NlsDbcsUnicodeToAnsiTable = (PWCHAR)NlsTable->AnsiTableInfo.WideCharTable;
NlsMbCodePageTag = (NlsTable->AnsiTableInfo.DBCSCodePage != 0);
@@ -368,7 +368,7 @@
DPRINT("Ansi codepage %hu\n", NlsAnsiCodePage);
/* Set OEM data */
- NlsOemToUnicodeTable = NlsTable->OemTableInfo.MultiByteTable;
+ NlsOemToUnicodeTable = (PWCHAR)NlsTable->OemTableInfo.MultiByteTable; /* Real type
is PUSHORT */
NlsUnicodeToOemTable = NlsTable->OemTableInfo.WideCharTable;
NlsDbcsUnicodeToOemTable = (PWCHAR)NlsTable->OemTableInfo.WideCharTable;
NlsMbOemCodePageTag = (NlsTable->OemTableInfo.DBCSCodePage != 0);
Modified: trunk/reactos/lib/rtl/rtl.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/rtl.rbuild?rev=254…
==============================================================================
--- trunk/reactos/lib/rtl/rtl.rbuild (original)
+++ trunk/reactos/lib/rtl/rtl.rbuild Wed Jan 10 22:39:01 2007
@@ -39,6 +39,7 @@
<file>sin_asm.s</file>
<file>sqrt_asm.s</file>
<file>tan_asm.s</file>
+ <file>thread.c</file>
</directory>
</if>
<directory name="austin">
Modified: trunk/reactos/lib/rtl/thread.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/thread.c?rev=25415…
==============================================================================
--- trunk/reactos/lib/rtl/thread.c (original)
+++ trunk/reactos/lib/rtl/thread.c Wed Jan 10 22:39:01 2007
@@ -12,7 +12,6 @@
/* INCLUDES *****************************************************************/
#include <rtl.h>
-#include "i386/ketypes.h"
#define NDEBUG
#include <debug.h>
@@ -219,62 +218,6 @@
}
/*
- * FIXME: Should go in /i386
- @implemented
-*/
-VOID
-NTAPI
-RtlInitializeContext(IN HANDLE ProcessHandle,
- OUT PCONTEXT ThreadContext,
- IN PVOID ThreadStartParam OPTIONAL,
- IN PTHREAD_START_ROUTINE ThreadStartAddress,
- IN PINITIAL_TEB InitialTeb)
-{
- /*
- * Set the Initial Registers
- * This is based on NT's default values -- crazy apps might expect this...
- */
- ThreadContext->Ebp = 0;
- ThreadContext->Eax = 0;
- ThreadContext->Ebx = 1;
- ThreadContext->Ecx = 2;
- ThreadContext->Edx = 3;
- ThreadContext->Esi = 4;
- ThreadContext->Edi = 5;
-
- /* Set the Selectors */
- ThreadContext->SegGs = 0;
- ThreadContext->SegFs = KGDT_R3_TEB;
- ThreadContext->SegEs = KGDT_R3_DATA;
- ThreadContext->SegDs = KGDT_R3_DATA;
- ThreadContext->SegSs = KGDT_R3_DATA;
- ThreadContext->SegCs = KGDT_R3_CODE;
-
- /* Enable Interrupts */
- ThreadContext->EFlags = EFLAGS_INTERRUPT_MASK;
-
- /* Settings passed */
- ThreadContext->Eip = (ULONG)ThreadStartAddress;
- ThreadContext->Esp = (ULONG)InitialTeb;
-
- /* Only the basic Context is initialized */
- ThreadContext->ContextFlags = CONTEXT_CONTROL |
- CONTEXT_INTEGER |
- CONTEXT_SEGMENTS;
-
- /* Set up ESP to the right value */
- ThreadContext->Esp -= sizeof(PVOID);
- ZwWriteVirtualMemory(ProcessHandle,
- (PVOID)ThreadContext->Esp,
- (PVOID)&ThreadStartParam,
- sizeof(PVOID),
- NULL);
-
- /* Push it down one more notch for RETEIP */
- ThreadContext->Esp -= sizeof(PVOID);
-}
-
-/*
* @implemented
*/
VOID