|
|
/*++ BUILD Version: 0015 // Increment this if a change has global effects
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
ntmips.h
Abstract:
User-mode visible Mips specific structures and constants
Author:
David N. Cutler (davec) 31-Mar-1990
Revision History:
--*/
#ifndef _NTMIPS_ #define _NTMIPS_ #if _MSC_VER > 1000 #pragma once #endif
#include "mipsinst.h"
#ifdef __cplusplus extern "C" { #endif
// begin_ntddk begin_wdm begin_nthal
#if defined(_MIPS_)
// // Define system time structure. //
typedef union _KSYSTEM_TIME { struct { ULONG LowPart; LONG High1Time; LONG High2Time; };
ULONGLONG Alignment; } KSYSTEM_TIME, *PKSYSTEM_TIME;
// // Define unsupported "keywords". //
#define _cdecl
#if defined(_MIPS_)
// end_ntddk end_wdm end_nthal
// // Define breakpoint codes. //
#define USER_BREAKPOINT 0 // user breakpoint #define KERNEL_BREAKPOINT 1 // kernel breakpoint #define BREAKIN_BREAKPOINT 2 // break into kernel debugger #define BRANCH_TAKEN_BREAKPOINT 3 // branch taken breakpoint #define BRANCH_NOT_TAKEN_BREAKPOINT 4 // branch not taken breakpoint #define SINGLE_STEP_BREAKPOINT 5 // single step breakpoint #define DIVIDE_OVERFLOW_BREAKPOINT 6 // divide overflow breakpoint #define DIVIDE_BY_ZERO_BREAKPOINT 7 // divide by zero breakpoint #define RANGE_CHECK_BREAKPOINT 8 // range check breakpoint #define STACK_OVERFLOW_BREAKPOINT 9 // MIPS code #define MULTIPLY_OVERFLOW_BREAKPOINT 10 // multiply overflow breakpoint
#define DEBUG_PRINT_BREAKPOINT 20 // debug print breakpoint #define DEBUG_PROMPT_BREAKPOINT 21 // debug prompt breakpoint #define DEBUG_STOP_BREAKPOINT 22 // debug stop breakpoint #define DEBUG_LOAD_SYMBOLS_BREAKPOINT 23 // load symbols breakpoint #define DEBUG_UNLOAD_SYMBOLS_BREAKPOINT 24 // unload symbols breakpoint #define DEBUG_COMMAND_STRING_BREAKPOINT 25 // command string breakpoint
// begin_ntddk begin_nthal // // Define size of kernel mode stack. //
#define KERNEL_STACK_SIZE 12288
// // Define size of large kernel mode stack for callbacks. //
#define KERNEL_LARGE_STACK_SIZE 61440
// // Define number of pages to initialize in a large kernel stack. //
#define KERNEL_LARGE_STACK_COMMIT 12288
// begin_wdm // // Define length of exception code dispatch vector. //
#define XCODE_VECTOR_LENGTH 32
// // Define length of interrupt vector table. //
#define MAXIMUM_VECTOR 256
// // Define bus error routine type. //
struct _EXCEPTION_RECORD; struct _KEXCEPTION_FRAME; struct _KTRAP_FRAME;
typedef BOOLEAN (*PKBUS_ERROR_ROUTINE) ( IN struct _EXCEPTION_RECORD *ExceptionRecord, IN struct _KEXCEPTION_FRAME *ExceptionFrame, IN struct _KTRAP_FRAME *TrapFrame, IN PVOID VirtualAddress, IN PHYSICAL_ADDRESS PhysicalAddress );
// // Define Processor Control Region Structure. //
#define PCR_MINOR_VERSION 1 #define PCR_MAJOR_VERSION 1
typedef struct _KPCR {
// // Major and minor version numbers of the PCR. //
USHORT MinorVersion; USHORT MajorVersion;
// // Start of the architecturally defined section of the PCR. This section // may be directly addressed by vendor/platform specific HAL code and will // not change from version to version of NT. // // Interrupt and error exception vectors. //
PKINTERRUPT_ROUTINE InterruptRoutine[MAXIMUM_VECTOR]; PVOID XcodeDispatch[XCODE_VECTOR_LENGTH];
// // First and second level cache parameters. //
ULONG FirstLevelDcacheSize; ULONG FirstLevelDcacheFillSize; ULONG FirstLevelIcacheSize; ULONG FirstLevelIcacheFillSize; ULONG SecondLevelDcacheSize; ULONG SecondLevelDcacheFillSize; ULONG SecondLevelIcacheSize; ULONG SecondLevelIcacheFillSize;
// // Pointer to processor control block. //
struct _KPRCB *Prcb;
// // Pointer to the thread environment block and the address of the TLS array. //
PVOID Teb; PVOID TlsArray;
// // Data fill size used for cache flushing and alignment. This field is set // to the larger of the first and second level data cache fill sizes. //
ULONG DcacheFillSize;
// // Instruction cache alignment and fill size used for cache flushing and // alignment. These fields are set to the larger of the first and second // level data cache fill sizes. //
ULONG IcacheAlignment; ULONG IcacheFillSize;
// // Processor identification from PrId register. //
ULONG ProcessorId;
// // Profiling data. //
ULONG ProfileInterval; ULONG ProfileCount;
// // Stall execution count and scale factor. //
ULONG StallExecutionCount; ULONG StallScaleFactor;
// // Processor number. //
CCHAR Number;
// // Spare cells. //
CCHAR Spareb1; CCHAR Spareb2; CCHAR Spareb3;
// // Pointers to bus error and parity error routines. //
PKBUS_ERROR_ROUTINE DataBusError; PKBUS_ERROR_ROUTINE InstructionBusError;
// // Cache policy, right justified, as read from the processor configuration // register at startup. //
ULONG CachePolicy;
// // IRQL mapping tables. //
UCHAR IrqlMask[32]; UCHAR IrqlTable[9];
// // Current IRQL. //
UCHAR CurrentIrql;
// // Processor affinity mask. //
KAFFINITY SetMember;
// // Reserved interrupt vector mask. //
ULONG ReservedVectors;
// // Current state parameters. //
struct _KTHREAD *CurrentThread;
// // Cache policy, PTE field aligned, as read from the processor configuration // register at startup. //
ULONG AlignedCachePolicy;
// // Complement of processor affinity mask. //
KAFFINITY NotMember;
// // Space reserved for the system. //
ULONG SystemReserved[15];
// // Data cache alignment used for cache flushing and alignment. This field is // set to the larger of the first and second level data cache fill sizes. //
ULONG DcacheAlignment;
// // Space reserved for the HAL //
ULONG HalReserved[16];
// // End of the architecturally defined section of the PCR. This section // may be directly addressed by vendor/platform specific HAL code and will // not change from version to version of NT. // // end_ntddk end_wdm end_nthal
// // Start of the operating system release dependent section of the PCR. // This section may change from release to release and should not be // addressed by vendor/platform specific HAL code. // // Function active flags. //
ULONG FirstLevelActive; ULONG DpcRoutineActive;
// // Current process id. //
ULONG CurrentPid;
// // On interrupt stack indicator, saved initial stack, and saved stack limit. //
ULONG OnInterruptStack; PVOID SavedInitialStack; PVOID SavedStackLimit;
// // System service dispatch start and end address used by get/set context. //
ULONG SystemServiceDispatchStart; ULONG SystemServiceDispatchEnd;
// // Interrupt stack. //
PVOID InterruptStack;
// // Panic stack. //
PVOID PanicStack;
// // Exception handler values. //
ULONG Sparel1; PVOID InitialStack; PVOID StackLimit; ULONG SavedEpc; ULONGLONG SavedT7; ULONGLONG SavedT8; ULONGLONG SavedT9; PVOID SystemGp;
// // Quantum end flag. //
ULONG QuantumEnd;
// // Bad virtual address and fault bad virtual address. //
ULONGLONG BadVaddr; ULONGLONG TmpVaddr; } KPCR, *PKPCR; // ntddk wdm nthal
// // Define Address of Processor Control Registers. //
#define USPCR 0x7ffff000 // user address of first PCR #define USPCR2 0x7fffe000 // user address of second PCR
// // Define Pointer to Processor Control Registers. //
#define USER_PCR ((KPCR * const)USPCR)
#if defined(NTOS_KERNEL_RUNTIME)
#define NtCurrentTeb() ((PTEB)(PCR->Teb))
#define USER_SHARED_DATA ((KUSER_SHARED_DATA * const)0xffffe000)
#else
#define NtCurrentTeb() ((PTEB)(USER_PCR->Teb))
#define USER_SHARED_DATA ((KUSER_SHARED_DATA * const)0x7fffe000)
#endif
// // Define get system time macro. // // N.B. This macro can be changed when the compiler generates real double // integer instructions. //
#define QUERY_SYSTEM_TIME(CurrentTime) \ *((DOUBLE *)(CurrentTime)) = *((DOUBLE *)(&USER_SHARED_DATA->SystemTime))
// begin_winnt
#if defined(_MIPS_)
// // Define functions to get the address of the current fiber and the // current fiber data. //
#define GetCurrentFiber() ((*(PNT_TIB *)0x7ffff4a8)->FiberData) #define GetFiberData() (*(PVOID *)(GetCurrentFiber()))
// begin_ntddk begin_nthal // // The following flags control the contents of the CONTEXT structure. //
#if !defined(RC_INVOKED)
#define CONTEXT_R4000 0x00010000 // r4000 context
#define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001) #define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002) #define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004) #define CONTEXT_EXTENDED_FLOAT (CONTEXT_FLOATING_POINT | 0x00000008) #define CONTEXT_EXTENDED_INTEGER (CONTEXT_INTEGER | 0x00000010)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | \ CONTEXT_INTEGER | CONTEXT_EXTENDED_INTEGER)
#endif
// // Context Frame // // N.B. This frame must be exactly a multiple of 16 bytes in length. // // This frame has a several purposes: 1) it is used as an argument to // NtContinue, 2) it is used to constuct a call frame for APC delivery, // 3) it is used to construct a call frame for exception dispatching // in user mode, and 4) it is used in the user level thread creation // routines. // // The layout of the record conforms to a standard call frame. //
typedef struct _CONTEXT {
// // This section is always present and is used as an argument build // area. // // N.B. Context records are 0 mod 8 aligned starting with NT 4.0. //
union { ULONG Argument[4]; ULONGLONG Alignment; };
// // The following union defines the 32-bit and 64-bit register context. //
union {
// // 32-bit context. //
struct {
// // This section is specified/returned if the ContextFlags contains // the flag CONTEXT_FLOATING_POINT. // // N.B. This section contains the 16 double floating registers f0, // f2, ..., f30. //
ULONG FltF0; ULONG FltF1; ULONG FltF2; ULONG FltF3; ULONG FltF4; ULONG FltF5; ULONG FltF6; ULONG FltF7; ULONG FltF8; ULONG FltF9; ULONG FltF10; ULONG FltF11; ULONG FltF12; ULONG FltF13; ULONG FltF14; ULONG FltF15; ULONG FltF16; ULONG FltF17; ULONG FltF18; ULONG FltF19; ULONG FltF20; ULONG FltF21; ULONG FltF22; ULONG FltF23; ULONG FltF24; ULONG FltF25; ULONG FltF26; ULONG FltF27; ULONG FltF28; ULONG FltF29; ULONG FltF30; ULONG FltF31;
// // This section is specified/returned if the ContextFlags contains // the flag CONTEXT_INTEGER. // // N.B. The registers gp, sp, and ra are defined in this section, // but are considered part of the control context rather than // part of the integer context. // // N.B. Register zero is not stored in the frame. //
ULONG IntZero; ULONG IntAt; ULONG IntV0; ULONG IntV1; ULONG IntA0; ULONG IntA1; ULONG IntA2; ULONG IntA3; ULONG IntT0; ULONG IntT1; ULONG IntT2; ULONG IntT3; ULONG IntT4; ULONG IntT5; ULONG IntT6; ULONG IntT7; ULONG IntS0; ULONG IntS1; ULONG IntS2; ULONG IntS3; ULONG IntS4; ULONG IntS5; ULONG IntS6; ULONG IntS7; ULONG IntT8; ULONG IntT9; ULONG IntK0; ULONG IntK1; ULONG IntGp; ULONG IntSp; ULONG IntS8; ULONG IntRa; ULONG IntLo; ULONG IntHi;
// // This section is specified/returned if the ContextFlags word contains // the flag CONTEXT_FLOATING_POINT. //
ULONG Fsr;
// // This section is specified/returned if the ContextFlags word contains // the flag CONTEXT_CONTROL. // // N.B. The registers gp, sp, and ra are defined in the integer section, // but are considered part of the control context rather than part of // the integer context. //
ULONG Fir; ULONG Psr;
// // The flags values within this flag control the contents of // a CONTEXT record. // // If the context record is used as an input parameter, then // for each portion of the context record controlled by a flag // whose value is set, it is assumed that that portion of the // context record contains valid context. If the context record // is being used to modify a thread's context, then only that // portion of the threads context will be modified. // // If the context record is used as an IN OUT parameter to capture // the context of a thread, then only those portions of the thread's // context corresponding to set flags will be returned. // // The context record is never used as an OUT only parameter. //
ULONG ContextFlags; };
// // 64-bit context. //
struct {
// // This section is specified/returned if the ContextFlags contains // the flag CONTEXT_EXTENDED_FLOAT. // // N.B. This section contains the 32 double floating registers f0, // f1, ..., f31. //
ULONGLONG XFltF0; ULONGLONG XFltF1; ULONGLONG XFltF2; ULONGLONG XFltF3; ULONGLONG XFltF4; ULONGLONG XFltF5; ULONGLONG XFltF6; ULONGLONG XFltF7; ULONGLONG XFltF8; ULONGLONG XFltF9; ULONGLONG XFltF10; ULONGLONG XFltF11; ULONGLONG XFltF12; ULONGLONG XFltF13; ULONGLONG XFltF14; ULONGLONG XFltF15; ULONGLONG XFltF16; ULONGLONG XFltF17; ULONGLONG XFltF18; ULONGLONG XFltF19; ULONGLONG XFltF20; ULONGLONG XFltF21; ULONGLONG XFltF22; ULONGLONG XFltF23; ULONGLONG XFltF24; ULONGLONG XFltF25; ULONGLONG XFltF26; ULONGLONG XFltF27; ULONGLONG XFltF28; ULONGLONG XFltF29; ULONGLONG XFltF30; ULONGLONG XFltF31;
// // The following sections must exactly overlay the 32-bit context. //
ULONG Fill1; ULONG Fill2;
// // This section is specified/returned if the ContextFlags contains // the flag CONTEXT_FLOATING_POINT. //
ULONG XFsr;
// // This section is specified/returned if the ContextFlags contains // the flag CONTEXT_CONTROL. // // N.B. The registers gp, sp, and ra are defined in the integer // section, but are considered part of the control context // rather than part of the integer context. //
ULONG XFir; ULONG XPsr;
// // The flags values within this flag control the contents of // a CONTEXT record. // // If the context record is used as an input parameter, then // for each portion of the context record controlled by a flag // whose value is set, it is assumed that that portion of the // context record contains valid context. If the context record // is being used to modify a thread's context, then only that // portion of the threads context will be modified. // // If the context record is used as an IN OUT parameter to capture // the context of a thread, then only those portions of the thread's // context corresponding to set flags will be returned. // // The context record is never used as an OUT only parameter. //
ULONG XContextFlags;
// // This section is specified/returned if the ContextFlags contains // the flag CONTEXT_EXTENDED_INTEGER. // // N.B. The registers gp, sp, and ra are defined in this section, // but are considered part of the control context rather than // part of the integer context. // // N.B. Register zero is not stored in the frame. //
ULONGLONG XIntZero; ULONGLONG XIntAt; ULONGLONG XIntV0; ULONGLONG XIntV1; ULONGLONG XIntA0; ULONGLONG XIntA1; ULONGLONG XIntA2; ULONGLONG XIntA3; ULONGLONG XIntT0; ULONGLONG XIntT1; ULONGLONG XIntT2; ULONGLONG XIntT3; ULONGLONG XIntT4; ULONGLONG XIntT5; ULONGLONG XIntT6; ULONGLONG XIntT7; ULONGLONG XIntS0; ULONGLONG XIntS1; ULONGLONG XIntS2; ULONGLONG XIntS3; ULONGLONG XIntS4; ULONGLONG XIntS5; ULONGLONG XIntS6; ULONGLONG XIntS7; ULONGLONG XIntT8; ULONGLONG XIntT9; ULONGLONG XIntK0; ULONGLONG XIntK1; ULONGLONG XIntGp; ULONGLONG XIntSp; ULONGLONG XIntS8; ULONGLONG XIntRa; ULONGLONG XIntLo; ULONGLONG XIntHi; }; }; } CONTEXT, *PCONTEXT;
// end_ntddk end_nthal
#define CONTEXT32_LENGTH 0x130 // The original 32-bit Context length (pre NT 4.0)
#endif // MIPS
// end_winnt
#define CONTEXT_TO_PROGRAM_COUNTER(Context) ((Context)->Fir)
#define CONTEXT_LENGTH (sizeof(CONTEXT)) #define CONTEXT_ALIGN (sizeof(double)) #define CONTEXT_ROUND (CONTEXT_ALIGN - 1)
// // Nonvolatile context pointer record. //
typedef struct _KNONVOLATILE_CONTEXT_POINTERS { PULONG FloatingContext[20]; PULONG FltF20; PULONG FltF21; PULONG FltF22; PULONG FltF23; PULONG FltF24; PULONG FltF25; PULONG FltF26; PULONG FltF27; PULONG FltF28; PULONG FltF29; PULONG FltF30; PULONG FltF31; PULONGLONG XIntegerContext[16]; PULONGLONG XIntS0; PULONGLONG XIntS1; PULONGLONG XIntS2; PULONGLONG XIntS3; PULONGLONG XIntS4; PULONGLONG XIntS5; PULONGLONG XIntS6; PULONGLONG XIntS7; PULONGLONG XIntT8; PULONGLONG XIntT9; PULONGLONG XIntK0; PULONGLONG XIntK1; PULONGLONG XIntGp; PULONGLONG XIntSp; PULONGLONG XIntS8; PULONGLONG XIntRa; } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
// begin_nthal // // Define R4000 system coprocessor registers. // // Define index register fields. //
typedef struct _INDEX { ULONG INDEX : 6; ULONG X1 : 25; ULONG P : 1; } INDEX;
// // Define random register fields. //
typedef struct _RANDOM { ULONG INDEX : 6; ULONG X1 : 26; } RANDOM;
// // Define TB entry low register fields. //
typedef struct _ENTRYLO { ULONG G : 1; ULONG V : 1; ULONG D : 1; ULONG C : 3; ULONG PFN : 24; ULONG X1 : 2; } ENTRYLO, *PENTRYLO;
// // Define R4000 PTE format for memory management. // // N.B. This must map exactly over the entrylo register. //
typedef struct _HARDWARE_PTE { ULONG Global : 1; ULONG Valid : 1; ULONG Dirty : 1; ULONG CachePolicy : 3; ULONG PageFrameNumber : 24; ULONG Write : 1; ULONG CopyOnWrite : 1; } HARDWARE_PTE, *PHARDWARE_PTE;
#define HARDWARE_PTE_DIRTY_MASK 0x4
// // Define R4000 macro to initialize page directory table base. //
#define INITIALIZE_DIRECTORY_TABLE_BASE(dirbase, pfn) \ ((HARDWARE_PTE *)(dirbase))->PageFrameNumber = pfn; \ ((HARDWARE_PTE *)(dirbase))->Global = 0; \ ((HARDWARE_PTE *)(dirbase))->Valid = 1; \ ((HARDWARE_PTE *)(dirbase))->Dirty = 1; \ ((HARDWARE_PTE *)(dirbase))->CachePolicy = PCR->CachePolicy
// // Define page mask register fields. //
typedef struct _PAGEMASK { ULONG X1 : 13; ULONG PAGEMASK : 12; ULONG X2 : 7; } PAGEMASK, *PPAGEMASK;
// // Define wired register fields. //
typedef struct _WIRED { ULONG NUMBER : 6; ULONG X1 : 26; } WIRED;
// // Define TB entry high register fields. //
typedef struct _ENTRYHI { ULONG PID : 8; ULONG X1 : 5; ULONG VPN2 : 19; } ENTRYHI, *PENTRYHI;
// // Define processor status register fields. //
typedef struct _PSR { ULONG IE : 1; ULONG EXL : 1; ULONG ERL : 1; ULONG KSU : 2; ULONG UX : 1; ULONG SX : 1; ULONG KX : 1; ULONG INTMASK : 8; ULONG DE : 1; ULONG CE : 1; ULONG CH : 1; ULONG X1 : 1; ULONG SR : 1; ULONG TS : 1; ULONG BEV : 1; ULONG X2 : 2; ULONG RE : 1; ULONG FR : 1; ULONG RP : 1; ULONG CU0 : 1; ULONG CU1 : 1; ULONG CU2 : 1; ULONG CU3 : 1; } PSR, *PPSR;
// // Define configuration register fields. //
typedef struct _CONFIGR { ULONG K0 : 3; ULONG CU : 1; ULONG DB : 1; ULONG IB : 1; ULONG DC : 3; ULONG IC : 3; ULONG X1 : 1; ULONG EB : 1; ULONG EM : 1; ULONG BE : 1; ULONG SM : 1; ULONG SC : 1; ULONG EW : 2; ULONG SW : 1; ULONG SS : 1; ULONG SB : 2; ULONG EP : 4; ULONG EC : 3; ULONG CM : 1; } CONFIGR;
// // Define ECC register fields. //
typedef struct _ECC { ULONG ECC : 8; ULONG X1 : 24; } ECC;
// // Define cache error register fields. //
typedef struct _CACHEERR { ULONG PIDX : 3; ULONG SIDX : 19; ULONG X1 : 2; ULONG EI : 1; ULONG EB : 1; ULONG EE : 1; ULONG ES : 1; ULONG ET : 1; ULONG ED : 1; ULONG EC : 1; ULONG ER : 1; } CACHEERR;
// // Define R4000 cause register fields. //
typedef struct _CAUSE { ULONG X1 : 2; ULONG XCODE : 5; ULONG X2 : 1; ULONG INTPEND : 8; ULONG X3 : 12; ULONG CE : 2; ULONG X4 : 1; ULONG BD : 1; } CAUSE;
// // Define R4000 processor id register fields. //
typedef struct _PRID { ULONG REV : 8; ULONG IMP : 8; ULONG X1 : 16; } PRID;
// end_nthal
// begin_nthal // // Define R4000 floating status register field definitions. //
typedef struct _FSR { ULONG RM : 2; ULONG SI : 1; ULONG SU : 1; ULONG SO : 1; ULONG SZ : 1; ULONG SV : 1; ULONG EI : 1; ULONG EU : 1; ULONG EO : 1; ULONG EZ : 1; ULONG EV : 1; ULONG XI : 1; ULONG XU : 1; ULONG XO : 1; ULONG XZ : 1; ULONG XV : 1; ULONG XE : 1; ULONG X1 : 5; ULONG CC : 1; ULONG FS : 1; ULONG X2 : 7; } FSR, *PFSR;
// end_nthal
// begin_nthal // // Define address space layout as defined by MIPS memory management. //
#define KUSEG_BASE 0x0 // base of user segment #define KSEG0_BASE 0x80000000 // 32-bit base of cached kernel physical #define KSEG0_BASE64 0xffffffff80000000 // 64-bit base of cached kernel physical #define KSEG1_BASE 0xa0000000 // 32-bit base of uncached kernel physical #define KSEG1_BASE64 0xffffffffa0000000 // 64-bit base of uncached kernel physical #define KSEG2_BASE 0xc0000000 // 32-bit base of cached kernel virtual #define KSEG2_BASE64 0xffffffffc0000000 // 64-bit base of cached kernel virtual // end_nthal
// // Define MIPS exception handling structures and function prototypes. // // Function table entry structure definition. //
typedef struct _RUNTIME_FUNCTION { ULONG BeginAddress; ULONG EndAddress; PEXCEPTION_ROUTINE ExceptionHandler; PVOID HandlerData; ULONG PrologEndAddress; } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
// // Scope table structure definition. //
typedef struct _SCOPE_TABLE { ULONG Count; struct { ULONG BeginAddress; ULONG EndAddress; ULONG HandlerAddress; ULONG JumpTarget; } ScopeRecord[1]; } SCOPE_TABLE, *PSCOPE_TABLE;
// // Runtime Library function prototypes. //
VOID RtlCaptureContext ( OUT PCONTEXT ContextRecord );
PRUNTIME_FUNCTION RtlLookupFunctionEntry ( IN ULONG ControlPc );
ULONG RtlVirtualUnwind ( IN ULONG ControlPc, IN PRUNTIME_FUNCTION FunctionEntry, IN OUT PCONTEXT ContextRecord, OUT PBOOLEAN InFunction, OUT PULONG EstablisherFrame, IN OUT PKNONVOLATILE_CONTEXT_POINTERS ContextPointers OPTIONAL );
// // Define C structured exception handing function prototypes. //
typedef struct _DISPATCHER_CONTEXT { ULONG ControlPc; PRUNTIME_FUNCTION FunctionEntry; ULONG EstablisherFrame; PCONTEXT ContextRecord; } DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
struct _EXCEPTION_POINTERS;
typedef LONG (*EXCEPTION_FILTER) ( struct _EXCEPTION_POINTERS *ExceptionPointers );
typedef VOID (*TERMINATION_HANDLER) ( BOOLEAN is_abnormal );
// begin_winnt
#if defined(_MIPS_)
VOID __jump_unwind ( PVOID Fp, PVOID TargetPc );
#endif // MIPS
// end_winnt
// begin_ntddk begin_wdm begin_nthal #endif // defined(_MIPS_) // end_ntddk end_wdm end_nthal
#ifdef __cplusplus } #endif
#endif // _NTMIPS_
|