484 lines
7.5 KiB
C
484 lines
7.5 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1998 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
cpumain.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Main entrypoints for IA64 ia64bt.dll. This code is really a dummy
|
||
|
and a user can put in a real dll at a later date. As long as the
|
||
|
entry points exist, we are fine. It is delay loaded by
|
||
|
wow64cpu depending on whether the binary translation code is
|
||
|
enabled.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
22-August-2000 v-cspira (Charles Spirakis)
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define _WOW64BTAPI_
|
||
|
|
||
|
#include <nt.h>
|
||
|
#include <ntrtl.h>
|
||
|
#include <nturtl.h>
|
||
|
#include <ntosp.h>
|
||
|
#include <kxia64.h>
|
||
|
#include "wow64.h"
|
||
|
#include "wow64cpu.h"
|
||
|
#include "ia64cpu.h"
|
||
|
#include "bintrans.h"
|
||
|
|
||
|
ASSERTNAME;
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
NTSTATUS
|
||
|
BTCpuProcessInit(
|
||
|
PWSTR pImageName,
|
||
|
PSIZE_T pCpuThreadSize
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Per-process initialization code
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pImageName - IN the name of the image. The memory for this
|
||
|
is freed after the call, so if the callee wants
|
||
|
to keep the name around, they need to allocate space
|
||
|
and copy it. DON'T SAVE THE POINTER!
|
||
|
|
||
|
pCpuThreadSize - OUT ptr to number of bytes of memory the CPU
|
||
|
wants allocated for each thread.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
NTSTATUS.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return STATUS_NOT_IMPLEMENTED;
|
||
|
}
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
NTSTATUS
|
||
|
BTCpuProcessTerm(
|
||
|
HANDLE ProcessHandle
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Per-process termination code. Note that this routine may not be called,
|
||
|
especially if the process is terminated by another process.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
NTSTATUS.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return STATUS_NOT_IMPLEMENTED;
|
||
|
}
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
NTSTATUS
|
||
|
BTCpuThreadInit(
|
||
|
PVOID pPerThreadData
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Per-thread termination code.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pPerThreadData - Pointer to zero-filled per-thread data with the
|
||
|
size returned from CpuProcessInit.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
NTSTATUS.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return STATUS_NOT_IMPLEMENTED;
|
||
|
}
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
NTSTATUS
|
||
|
BTCpuThreadTerm(
|
||
|
VOID
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Per-thread termination code. Note that this routine may not be called,
|
||
|
especially if the thread is terminated abnormally.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
NTSTATUS.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return STATUS_NOT_IMPLEMENTED;
|
||
|
}
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
VOID
|
||
|
BTCpuSimulate(
|
||
|
VOID
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Call 32-bit code. The CONTEXT32 has already been set up to go.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None. Never returns.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
WOW64BTAPI
|
||
|
VOID
|
||
|
BTCpuResetFloatingPoint(
|
||
|
VOID
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Modifies the floating point state to reset it to a non-error state
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
WOW64BTAPI
|
||
|
VOID
|
||
|
BTCpuResetToConsistentState(
|
||
|
PEXCEPTION_POINTERS pExceptionPointers
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
After an exception occurs, WOW64 calls this routine to give the CPU
|
||
|
a chance to clean itself up and recover the CONTEXT32 at the time of
|
||
|
the fault.
|
||
|
|
||
|
CpuResetToConsistantState() needs to:
|
||
|
|
||
|
0) Check if the exception was from ia32 or ia64
|
||
|
|
||
|
If exception was ia64, do nothing and return
|
||
|
If exception was ia32, needs to:
|
||
|
1) Needs to copy CONTEXT eip to the TLS (WOW64_TLS_EXCEPTIONADDR)
|
||
|
2) reset the CONTEXT struction to be a valid ia64 state for unwinding
|
||
|
this includes:
|
||
|
2a) reset CONTEXT ip to a valid ia64 ip (usually
|
||
|
the destination of the jmpe)
|
||
|
2b) reset CONTEXT sp to a valid ia64 sp (TLS
|
||
|
entry WOW64_TLS_STACKPTR64)
|
||
|
2c) reset CONTEXT gp to a valid ia64 gp
|
||
|
2d) reset CONTEXT teb to a valid ia64 teb
|
||
|
2e) reset CONTEXT psr.is (so exception handler runs as ia64 code)
|
||
|
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pExceptionPointers - 64-bit exception information
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
ULONG
|
||
|
BTCpuGetStackPointer(
|
||
|
VOID
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Returns the current 32-bit stack pointer value.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
Value of 32-bit stack pointer.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
VOID
|
||
|
BTCpuSetStackPointer(
|
||
|
ULONG Value
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Modifies the current 32-bit stack pointer value.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Value - new value to use for 32-bit stack pointer.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
VOID
|
||
|
BTCpuSetInstructionPointer(
|
||
|
ULONG Value
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Modifies the current 32-bit instruction pointer value.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Value - new value to use for 32-bit instruction pointer.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
WOW64BTAPI
|
||
|
VOID
|
||
|
BTCpuNotifyDllLoad(
|
||
|
LPWSTR DllName,
|
||
|
PVOID DllBase,
|
||
|
ULONG DllSize
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine get notified when application successfully load a dll.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
DllName - Name of the Dll the application has loaded.
|
||
|
DllBase - BaseAddress of the dll.
|
||
|
DllSize - size of the Dll.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
WOW64BTAPI
|
||
|
VOID
|
||
|
BTCpuNotifyDllUnload(
|
||
|
PVOID DllBase
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine get notified when application unload a dll.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
DllBase - BaseAddress of the dll.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
WOW64BTAPI
|
||
|
VOID
|
||
|
BTCpuFlushInstructionCache (
|
||
|
PVOID BaseAddress,
|
||
|
ULONG Length
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
The CPU needs to flush its cache around the specified address, since
|
||
|
some external code has altered the specified range of addresses.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
BaseAddress - start of range to flush
|
||
|
Length - number of bytes to flush
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
WOW64BTAPI
|
||
|
NTSTATUS
|
||
|
BTCpuGetContext(
|
||
|
IN HANDLE ThreadHandle,
|
||
|
IN HANDLE ProcessHandle,
|
||
|
IN PTEB Teb,
|
||
|
OUT PCONTEXT32 Context)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Extracts the cpu context of the specified thread.
|
||
|
When entered, it is guaranteed that the target thread is suspended at
|
||
|
a proper CPU state.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
ThreadHandle - Target thread handle to retreive the context for
|
||
|
ProcessHandle - Open handle to the process that the thread runs in
|
||
|
Teb - Pointer to the target's thread TEB
|
||
|
Context - Context record to fill
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
NTSTATUS.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return STATUS_NOT_IMPLEMENTED;
|
||
|
}
|
||
|
|
||
|
WOW64BTAPI
|
||
|
NTSTATUS
|
||
|
BTCpuSetContext(
|
||
|
IN HANDLE ThreadHandle,
|
||
|
IN HANDLE ProcessHandle,
|
||
|
IN PTEB Teb,
|
||
|
PCONTEXT32 Context)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Sets the cpu context for the specified thread.
|
||
|
When entered, if the target thread isn't the currently executing thread, the
|
||
|
n it is
|
||
|
guaranteed that the target thread is suspended at a proper CPU state.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
ThreadHandle - Target thread handle to retreive the context for
|
||
|
ProcessHandle - Open handle to the process that the thread runs in
|
||
|
Teb - Pointer to the target's thread TEB
|
||
|
Context - Context record to set
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
NTSTATUS.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return STATUS_NOT_IMPLEMENTED;
|
||
|
}
|
||
|
|
||
|
WOW64BTAPI
|
||
|
NTSTATUS
|
||
|
BTCpuSuspendThread(
|
||
|
IN HANDLE ThreadHandle,
|
||
|
IN HANDLE ProcessHandle,
|
||
|
IN PTEB Teb,
|
||
|
OUT PULONG PreviousSuspendCount OPTIONAL)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine is entered while the target thread is actually suspended, howev
|
||
|
er, it's
|
||
|
not known if the target thread is in a consistent state relative to
|
||
|
the CPU.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
ThreadHandle - Handle of target thread to suspend
|
||
|
ProcessHandle - Handle of target thread's process
|
||
|
Teb - Address of the target thread's TEB
|
||
|
PreviousSuspendCount - Previous suspend count
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
NTSTATUS.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return STATUS_NOT_IMPLEMENTED;
|
||
|
}
|
||
|
|