From f2f1a0251b7623b2f281e2844e0f4ef618e4ee41 Mon Sep 17 00:00:00 2001 From: Casper Hornstrup Date: Thu, 5 Jun 2003 11:51:13 +0000 Subject: [PATCH] 2003-06-05 Casper S. Hornstrup Changes for compiling with w32api * ntoskrnl/include/internal/i386/ps.h (KPCR_TSS): Redefine as 0x3C. (KPCR_TIB): New structure. (IKPCR): Ditto. (KPCR): Match w32api structure fieldnames. * ntoskrnl/ke/main.c (ExpInitializeExecutive): Adjust for changes to KPCR. * ntoskrnl/ke/i386/kernel.c: Ditto. * ntoskrnl/ps/thread.c: Ditto. svn path=/trunk/; revision=4842 --- reactos/ChangeLog | 12 +++ reactos/ntoskrnl/include/internal/i386/ps.h | 94 ++++++++++++++++----- reactos/ntoskrnl/ke/i386/kernel.c | 4 +- reactos/ntoskrnl/ke/main.c | 10 ++- reactos/ntoskrnl/ps/thread.c | 14 +-- 5 files changed, 98 insertions(+), 36 deletions(-) diff --git a/reactos/ChangeLog b/reactos/ChangeLog index 18c397f120a..adf5d408b46 100644 --- a/reactos/ChangeLog +++ b/reactos/ChangeLog @@ -1,3 +1,15 @@ +2003-06-05 Casper S. Hornstrup + + Changes for compiling with w32api + + * ntoskrnl/include/internal/i386/ps.h (KPCR_TSS): Redefine as 0x3C. + (KPCR_TIB): New structure. + (IKPCR): Ditto. + (KPCR): Match w32api structure fieldnames. + * ntoskrnl/ke/main.c (ExpInitializeExecutive): Adjust for changes to KPCR. + * ntoskrnl/ke/i386/kernel.c: Ditto. + * ntoskrnl/ps/thread.c: Ditto. + 2003-06-01 Casper S. Hornstrup Changes for compiling with w32api diff --git a/reactos/ntoskrnl/include/internal/i386/ps.h b/reactos/ntoskrnl/include/internal/i386/ps.h index d0487b4db30..71cc530a446 100644 --- a/reactos/ntoskrnl/include/internal/i386/ps.h +++ b/reactos/ntoskrnl/include/internal/i386/ps.h @@ -38,39 +38,87 @@ #define KPCR_EXCEPTION_LIST 0x0 #define KPCR_SELF 0x18 -#define KPCR_TSS 0x28 +#define KPCR_TSS 0x3C #define KPCR_CURRENT_THREAD 0x124 #ifndef __ASM__ -/* - * Processor Control Region - */ -typedef struct _KPCR -{ - PVOID ExceptionList; /* 00 */ - PVOID StackBase; /* 04 */ - PVOID StackLimit; /* 08 */ - PVOID SubSystemTib; /* 0C */ - PVOID Reserved1; /* 10 */ - PVOID ArbitraryUserPointer; /* 14 */ - struct _KPCR* Self; /* 18 */ - UCHAR ProcessorNumber; /* 1C */ - KIRQL Irql; /* 1D */ - UCHAR Reserved2[0x2]; /* 1E */ - PUSHORT IDT; /* 20 */ - PUSHORT GDT; /* 24 */ - KTSS* TSS; /* 28 */ - UCHAR Reserved3[0xF8]; /* 2C */ - struct _KTHREAD* CurrentThread; /* 124 */ -} __attribute__((packed)) KPCR; - #ifndef __USE_W32API +#pragma pack(push,4) + +/* + * Processor Control Region Thread Information Block + */ +typedef struct _KPCR_TIB { + PVOID ExceptionList; /* 00 */ + PVOID StackBase; /* 04 */ + PVOID StackLimit; /* 08 */ + PVOID SubSystemTib; /* 0C */ + union { + PVOID FiberData; /* 10 */ + DWORD Version; /* 10 */ + }; + PVOID ArbitraryUserPointer; /* 14 */ +} KPCR_TIB, *PKPCR_TIB; /* 18 */ + +typedef struct _KPCR { + KPCR_TIB Tib; /* 00 */ + struct _KPCR *Self; /* 18 */ + struct _KPRCB *PCRCB; /* 1C */ + KIRQL Irql; /* 20 */ + ULONG IRR; /* 24 */ + ULONG IrrActive; /* 28 */ + ULONG IDR; /* 2C */ + PVOID KdVersionBlock; /* 30 */ + PUSHORT IDT; /* 34 */ + PUSHORT GDT; /* 38 */ + struct _KTSS *TSS; /* 3C */ + USHORT MajorVersion; /* 40 */ + USHORT MinorVersion; /* 42 */ + KAFFINITY SetMember; /* 44 */ + ULONG StallScaleFactor; /* 48 */ + UCHAR DebugActive; /* 4C */ + UCHAR ProcessorNumber; /* 4D */ + UCHAR Reserved[2]; /* 4E */ +} KPCR; + +#pragma pack(pop) + typedef struct _KPCR *PKPCR; #endif /* __USE_W32API */ +#pragma pack(push,4) + +/* + * Processor Control Region + * The first part of this structure must match the KPCR structure in w32api + */ +typedef struct _IKPCR { + KPCR_TIB Tib; /* 00 */ + struct _KPCR *Self; /* 18 */ + struct _KPRCB *PCRCB; /* 1C */ + KIRQL Irql; /* 20 */ + ULONG IRR; /* 24 */ + ULONG IrrActive; /* 28 */ + ULONG IDR; /* 2C */ + PVOID KdVersionBlock; /* 30 */ + PUSHORT IDT; /* 34 */ + PUSHORT GDT; /* 38 */ + struct _KTSS *TSS; /* 3C */ + USHORT MajorVersion; /* 40 */ + USHORT MinorVersion; /* 42 */ + KAFFINITY SetMember; /* 44 */ + ULONG StallScaleFactor; /* 48 */ + UCHAR DebugActive; /* 4C */ + UCHAR ProcessorNumber; /* 4D */ + UCHAR Reserved[2]; /* 4E */ + UCHAR Reserved2[0xD4]; /* 50 */ + struct _KTHREAD* CurrentThread; /* 124 */ +} IKPCR, *PIKPCR; + +#pragma pack(pop) #ifndef __USE_W32API diff --git a/reactos/ntoskrnl/ke/i386/kernel.c b/reactos/ntoskrnl/ke/i386/kernel.c index 2ca1f3fef33..26ce718265d 100644 --- a/reactos/ntoskrnl/ke/i386/kernel.c +++ b/reactos/ntoskrnl/ke/i386/kernel.c @@ -71,7 +71,7 @@ KeApplicationProcessorInit(VOID) KPCR->Irql = HIGH_LEVEL; /* Mark the end of the exception handler list */ - KPCR->ExceptionList = (PVOID)-1; + KPCR->Tib.ExceptionList = (PVOID)-1; /* * Initialize the GDT @@ -127,7 +127,7 @@ KeInit1(VOID) PcrsAllocated++; /* Mark the end of the exception handler list */ - KPCR->ExceptionList = (PVOID)-1; + KPCR->Tib.ExceptionList = (PVOID)-1; Ki386InitializeLdt(); } diff --git a/reactos/ntoskrnl/ke/main.c b/reactos/ntoskrnl/ke/main.c index 9f39efe4a64..e97b7cc9303 100644 --- a/reactos/ntoskrnl/ke/main.c +++ b/reactos/ntoskrnl/ke/main.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: main.c,v 1.158 2003/05/20 14:37:05 ekohl Exp $ +/* $Id: main.c,v 1.159 2003/06/05 11:51:13 chorns Exp $ * * PROJECT: ReactOS kernel * FILE: ntoskrnl/ke/main.c @@ -330,10 +330,12 @@ ExpInitializeExecutive(VOID) assert(FIELD_OFFSET(KTRAP_FRAME, Reserved9) == KTRAP_FRAME_RESERVED9); assert(FIELD_OFFSET(KV86M_TRAP_FRAME, regs) == TF_REGS); assert(FIELD_OFFSET(KV86M_TRAP_FRAME, orig_ebp) == TF_ORIG_EBP); - - assert(FIELD_OFFSET(KPCR, ExceptionList) == KPCR_EXCEPTION_LIST); + + assert(FIELD_OFFSET(KPCR, Tib.ExceptionList) == KPCR_EXCEPTION_LIST); assert(FIELD_OFFSET(KPCR, Self) == KPCR_SELF); - assert(FIELD_OFFSET(KPCR, CurrentThread) == KPCR_CURRENT_THREAD); + assert(FIELD_OFFSET(IKPCR, Tib.ExceptionList) == KPCR_EXCEPTION_LIST); + assert(FIELD_OFFSET(IKPCR, Self) == KPCR_SELF); + assert(FIELD_OFFSET(IKPCR, CurrentThread) == KPCR_CURRENT_THREAD); LdrInit1(); diff --git a/reactos/ntoskrnl/ps/thread.c b/reactos/ntoskrnl/ps/thread.c index ea7e670aa41..eadb0e7f1b4 100644 --- a/reactos/ntoskrnl/ps/thread.c +++ b/reactos/ntoskrnl/ps/thread.c @@ -1,4 +1,4 @@ -/* $Id: thread.c,v 1.111 2003/05/01 22:00:31 gvg Exp $ +/* $Id: thread.c,v 1.112 2003/06/05 11:51:13 chorns Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -63,7 +63,7 @@ static GENERIC_MAPPING PiThreadMapping = {THREAD_READ, PKTHREAD STDCALL KeGetCurrentThread(VOID) { - return(KeGetCurrentKPCR()->CurrentThread); + return(((PIKPCR) KeGetCurrentKPCR())->CurrentThread); } HANDLE STDCALL PsGetCurrentThreadId(VOID) @@ -192,7 +192,7 @@ VOID PsDispatchThreadNoLock (ULONG NewThreadStatus) KPRIORITY CurrentPriority; PETHREAD Candidate; ULONG Affinity; - PKTHREAD KCurrentThread = KeGetCurrentKPCR()->CurrentThread; + PKTHREAD KCurrentThread = ((PIKPCR) KeGetCurrentKPCR())->CurrentThread; PETHREAD CurrentThread = CONTAINING_RECORD(KCurrentThread, ETHREAD, Tcb); DPRINT("PsDispatchThread() %d/%d\n", KeGetCurrentProcessorNumber(), @@ -259,7 +259,7 @@ PsDispatchThread(ULONG NewThreadStatus) /* * Save wait IRQL */ - KeGetCurrentKPCR()->CurrentThread->WaitIrql = oldIrql; + ((PIKPCR) KeGetCurrentKPCR())->CurrentThread->WaitIrql = oldIrql; PsDispatchThreadNoLock(NewThreadStatus); KeLowerIrql(oldIrql); } @@ -291,7 +291,7 @@ PsBlockThread(PNTSTATUS Status, UCHAR Alertable, ULONG WaitMode, BOOLEAN DispatcherLock, KIRQL WaitIrql, UCHAR WaitReason) { KIRQL oldIrql; - PKTHREAD KThread = KeGetCurrentKPCR()->CurrentThread; + PKTHREAD KThread = ((PIKPCR) KeGetCurrentKPCR())->CurrentThread; PETHREAD Thread = CONTAINING_RECORD (KThread, ETHREAD, Tcb); PKWAIT_BLOCK WaitBlock; @@ -370,7 +370,7 @@ PsFreezeAllThreads(PEPROCESS Process) VOID PsApplicationProcessorInit(VOID) { - KeGetCurrentKPCR()->CurrentThread = + ((PIKPCR) KeGetCurrentKPCR())->CurrentThread = (PVOID)IdleThreads[KeGetCurrentProcessorNumber()]; } @@ -443,7 +443,7 @@ PsInitThreadManagment(VOID) THREAD_ALL_ACCESS,NULL, TRUE); FirstThread->Tcb.State = THREAD_STATE_RUNNING; FirstThread->Tcb.FreezeCount = 0; - KeGetCurrentKPCR()->CurrentThread = (PVOID)FirstThread; + ((PIKPCR) KeGetCurrentKPCR())->CurrentThread = (PVOID)FirstThread; NtClose(FirstThreadHandle); DPRINT("FirstThread %x\n",FirstThread);