Temporary code for debugging purposes

svn path=/trunk/; revision=2962
This commit is contained in:
KJK::Hyperion 2002-05-17 02:04:39 +00:00
parent d24e468cb0
commit 69ca37d697

View file

@ -1,4 +1,4 @@
/* $Id: main.c,v 1.3 2002/03/11 20:48:25 hyperion Exp $ /* $Id: main.c,v 1.4 2002/05/17 02:04:39 hyperion Exp $
*/ */
/* /*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
@ -10,30 +10,139 @@
* 27/12/2001: Created * 27/12/2001: Created
*/ */
#include <ddk/ntddk.h>
#include <string.h>
#include <psx/debug.h> #include <psx/debug.h>
#include <psx/fdtable.h>
#include <psx/pdata.h> #include <psx/pdata.h>
#include <psx/stdlib.h>
#include <psx/tls.h>
#define DLL_PROCESS_ATTACH 1 #define DLL_PROCESS_ATTACH 1
#define DLL_THREAD_ATTACH 2 #define DLL_THREAD_ATTACH 2
#define DLL_THREAD_DETACH 3 #define DLL_THREAD_DETACH 3
#define DLL_PROCESS_DETACH 0 #define DLL_PROCESS_DETACH 0
int __stdcall DllMain(void *pDllInstance, unsigned long int nReason, void *pUnknown) /* WARNING: PRELIMINARY CODE FOR DEBUGGING PURPOSES ONLY - DO NOT CHANGE */
static __PDX_PDATA __PdxPdata;
static WCHAR __tempPathBuf[32768];
static char * __tempSelf = "-sh";
static char * __tempArgv[2] = {0, 0};
VOID __PdxSetProcessData(__PPDX_PDATA NewPdata)
{ {
#if 0 memcpy(&__PdxPdata, NewPdata, sizeof(__PdxPdata));
if(nReason == DLL_PROCESS_ATTACH) }
{
__PPDX_PDATA ppdProcessData = __PdxGetProcessData();
if(ppdProcessData == 0) __PPDX_PDATA __PdxGetProcessData(VOID)
WARN("this process doesn't have a process data block\n"); {
else if(ppdProcessData->Spawned) return &__PdxPdata;
}
BOOL STDCALL DllMain(PVOID pDllInstance, DWORD nReason, PVOID pUnknown)
{
ULONG nJunk;
switch(nReason)
{
/* process created, first thread created */
case DLL_PROCESS_ATTACH:
{ {
INFO("the process has been spawned\n"); __PPDX_TDATA ThreadData;
int i;
INFO("new process and new thread created");
__PdxPdata.Spawned = 1;
__PdxPdata.ArgCount = 1;
__tempArgv[0] = __tempSelf;
__PdxPdata.ArgVect = __tempArgv;
__PdxPdata.NativePathBuffer.Length = 0;
__PdxPdata.NativePathBuffer.MaximumLength = sizeof(__tempPathBuf);
__PdxPdata.NativePathBuffer.Buffer = __tempPathBuf;
INFO("about to initialize process data lock");
RtlInitializeCriticalSection(&__PdxPdata.Lock);
INFO("about to allocate TLS slot");
__PdxPdata.TlsIndex = RtlFindClearBitsAndSet(NtCurrentPeb()->TlsBitmap, 1, 0);
if(__PdxPdata.TlsIndex == -1)
{
DbgBreakPoint();
NtRaiseHardError(STATUS_NO_MEMORY, 0, 0, 0, 1, (ULONG)&nJunk);
return (FALSE);
}
INFO("allocated TLS slot %d", __PdxPdata.TlsIndex);
INFO("about to allocate thread data");
ThreadData = __malloc(sizeof(*ThreadData));
if(ThreadData == 0)
{
DbgBreakPoint();
NtRaiseHardError(STATUS_NO_MEMORY, 0, 0, 0, 1, (ULONG)&nJunk);
return (FALSE);
}
NtCurrentTeb()->TlsSlots[__PdxPdata.TlsIndex] = ThreadData;
INFO("about to initialize file descriptors table");
__fdtable_init(&__PdxPdata.FdTable);
INFO("end of initialization");
return (TRUE);
}
/* process about to exit */
case DLL_PROCESS_DETACH:
{
INFO("process about to exit");
INFO("about to deallocate thread data");
__free(NtCurrentTeb()->TlsSlots[__PdxPdata.TlsIndex]);
return (TRUE);
}
/* thread created */
case DLL_THREAD_ATTACH:
{
__PPDX_TDATA ThreadData;
INFO("new thread created");
INFO("about to allocate thread data");
ThreadData = __malloc(sizeof(*ThreadData));
if(ThreadData == 0)
{
DbgBreakPoint();
NtRaiseHardError(STATUS_NO_MEMORY, 0, 0, 0, 1, (ULONG)&nJunk);
return (FALSE);
}
NtCurrentTeb()->TlsSlots[__PdxPdata.TlsIndex] = ThreadData;
return (TRUE);
}
/* thread exited */
case DLL_THREAD_DETACH:
{
INFO("thread about to exit");
INFO("about to deallocate thread data");
__free(NtCurrentTeb()->TlsSlots[__PdxPdata.TlsIndex]);
return (TRUE);
} }
} }
#endif
return (1); return (FALSE);
} }
/* EOF */ /* EOF */