diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /common/quicktime_win32/MachineExceptions.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'common/quicktime_win32/MachineExceptions.h')
| -rw-r--r-- | common/quicktime_win32/MachineExceptions.h | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/common/quicktime_win32/MachineExceptions.h b/common/quicktime_win32/MachineExceptions.h new file mode 100644 index 0000000..a2aee6b --- /dev/null +++ b/common/quicktime_win32/MachineExceptions.h @@ -0,0 +1,325 @@ +/* + File: MachineExceptions.h + + Contains: Processor Exception Handling Interfaces. + + Version: QuickTime 7.3 + + Copyright: (c) 2007 (c) 1993-2001 by Apple Computer, Inc., all rights reserved. + + Bugs?: For bug reports, consult the following page on + the World Wide Web: + + http://developer.apple.com/bugreporter/ + +*/ +#ifndef __MACHINEEXCEPTIONS__ +#define __MACHINEEXCEPTIONS__ + +#ifndef __MACTYPES__ +#include <MacTypes.h> +#endif + +#ifndef __MIXEDMODE__ +#include <MixedMode.h> +#endif + + + + +#if PRAGMA_ONCE +#pragma once +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if PRAGMA_IMPORT +#pragma import on +#endif + +#if PRAGMA_STRUCT_ALIGN + #pragma options align=power +#elif PRAGMA_STRUCT_PACKPUSH + #pragma pack(push, 2) +#elif PRAGMA_STRUCT_PACK + #pragma pack(2) +#endif + +/* Some basic declarations used throughout the kernel */ +typedef struct OpaqueAreaID* AreaID; +#if TARGET_OS_MAC +/* Machine Dependent types for PowerPC: */ +struct MachineInformationPowerPC { + UnsignedWide CTR; + UnsignedWide LR; + UnsignedWide PC; + unsigned long CR; + unsigned long XER; + unsigned long MSR; + unsigned long MQ; + unsigned long ExceptKind; + unsigned long DSISR; + UnsignedWide DAR; + UnsignedWide Reserved; +}; +typedef struct MachineInformationPowerPC MachineInformationPowerPC; +struct RegisterInformationPowerPC { + UnsignedWide R0; + UnsignedWide R1; + UnsignedWide R2; + UnsignedWide R3; + UnsignedWide R4; + UnsignedWide R5; + UnsignedWide R6; + UnsignedWide R7; + UnsignedWide R8; + UnsignedWide R9; + UnsignedWide R10; + UnsignedWide R11; + UnsignedWide R12; + UnsignedWide R13; + UnsignedWide R14; + UnsignedWide R15; + UnsignedWide R16; + UnsignedWide R17; + UnsignedWide R18; + UnsignedWide R19; + UnsignedWide R20; + UnsignedWide R21; + UnsignedWide R22; + UnsignedWide R23; + UnsignedWide R24; + UnsignedWide R25; + UnsignedWide R26; + UnsignedWide R27; + UnsignedWide R28; + UnsignedWide R29; + UnsignedWide R30; + UnsignedWide R31; +}; +typedef struct RegisterInformationPowerPC RegisterInformationPowerPC; +struct FPUInformationPowerPC { + UnsignedWide Registers[32]; + unsigned long FPSCR; + unsigned long Reserved; +}; +typedef struct FPUInformationPowerPC FPUInformationPowerPC; +union Vector128 { +#ifdef __VEC__ + vector unsigned int v; +#endif + unsigned long l[4]; + unsigned short s[8]; + unsigned char c[16]; +}; +typedef union Vector128 Vector128; +struct VectorInformationPowerPC { + Vector128 Registers[32]; + Vector128 VSCR; + UInt32 VRsave; +}; +typedef struct VectorInformationPowerPC VectorInformationPowerPC; +/* Exception related declarations */ +enum { + kWriteReference = 0, + kReadReference = 1, + kFetchReference = 2, + writeReference = kWriteReference, /* Obsolete name*/ + readReference = kReadReference, /* Obsolete name*/ + fetchReference = kFetchReference /* Obsolete name*/ +}; + + +typedef unsigned long MemoryReferenceKind; +struct MemoryExceptionInformation { + AreaID theArea; /* The area related to the execption, same as MPAreaID.*/ + LogicalAddress theAddress; /* The 32-bit address of the exception.*/ + OSStatus theError; /* See enum below.*/ + MemoryReferenceKind theReference; /* read, write, instruction fetch.*/ +}; +typedef struct MemoryExceptionInformation MemoryExceptionInformation; +enum { + kUnknownException = 0, + kIllegalInstructionException = 1, + kTrapException = 2, + kAccessException = 3, + kUnmappedMemoryException = 4, + kExcludedMemoryException = 5, + kReadOnlyMemoryException = 6, + kUnresolvablePageFaultException = 7, + kPrivilegeViolationException = 8, + kTraceException = 9, + kInstructionBreakpointException = 10, /* Optional*/ + kDataBreakpointException = 11, /* Optional*/ + kIntegerException = 12, + kFloatingPointException = 13, + kStackOverflowException = 14, /* Optional, may be implemented as kAccessException on some systems.*/ + kTaskTerminationException = 15, /* Obsolete*/ + kTaskCreationException = 16, /* Obsolete*/ + kDataAlignmentException = 17 /* May occur when a task is in little endian mode or created with kMPTaskTakesAllExceptions.*/ +}; + +#if OLDROUTINENAMES +enum { + unknownException = kUnknownException, /* Obsolete name*/ + illegalInstructionException = kIllegalInstructionException, /* Obsolete name*/ + trapException = kTrapException, /* Obsolete name*/ + accessException = kAccessException, /* Obsolete name*/ + unmappedMemoryException = kUnmappedMemoryException, /* Obsolete name*/ + excludedMemoryException = kExcludedMemoryException, /* Obsolete name*/ + readOnlyMemoryException = kReadOnlyMemoryException, /* Obsolete name*/ + unresolvablePageFaultException = kUnresolvablePageFaultException, /* Obsolete name*/ + privilegeViolationException = kPrivilegeViolationException, /* Obsolete name*/ + traceException = kTraceException, /* Obsolete name*/ + instructionBreakpointException = kInstructionBreakpointException, /* Obsolete name*/ + dataBreakpointException = kDataBreakpointException, /* Obsolete name*/ + integerException = kIntegerException, /* Obsolete name*/ + floatingPointException = kFloatingPointException, /* Obsolete name*/ + stackOverflowException = kStackOverflowException, /* Obsolete name*/ + terminationException = kTaskTerminationException, /* Obsolete name*/ + kTerminationException = kTaskTerminationException /* Obsolete name*/ +}; + +#endif /* OLDROUTINENAMES */ + + +typedef unsigned long ExceptionKind; +union ExceptionInfo { + MemoryExceptionInformation * memoryInfo; +}; +typedef union ExceptionInfo ExceptionInfo; +struct ExceptionInformationPowerPC { + ExceptionKind theKind; + MachineInformationPowerPC * machineState; + RegisterInformationPowerPC * registerImage; + FPUInformationPowerPC * FPUImage; + ExceptionInfo info; + VectorInformationPowerPC * vectorImage; +}; +typedef struct ExceptionInformationPowerPC ExceptionInformationPowerPC; +#if TARGET_CPU_PPC || TARGET_CPU_68K +typedef ExceptionInformationPowerPC ExceptionInformation; +typedef MachineInformationPowerPC MachineInformation; +typedef RegisterInformationPowerPC RegisterInformation; +typedef FPUInformationPowerPC FPUInformation; +typedef VectorInformationPowerPC VectorInformation; +#endif /* TARGET_CPU_PPC || TARGET_CPU_68K */ + +/* + Note: An ExceptionHandler is NOT a UniversalProcPtr, except in Carbon. + It must be a PowerPC function pointer with NO routine descriptor, + except on Carbon, where it must be a UniversalProcPtr (TPP actually) + to allow the interface to work from both CFM and Mach-O. +*/ +typedef CALLBACK_API_C( OSStatus , ExceptionHandlerProcPtr )(ExceptionInformation * theException); +typedef TVECTOR_UPP_TYPE(ExceptionHandlerProcPtr) ExceptionHandlerUPP; +/* + * NewExceptionHandlerUPP() + * + * Availability: + * Non-Carbon CFM: available as macro/inline + * CarbonLib: in CarbonLib 1.1 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( ExceptionHandlerUPP ) +NewExceptionHandlerUPP(ExceptionHandlerProcPtr userRoutine); +#if !OPAQUE_UPP_TYPES + enum { uppExceptionHandlerProcInfo = 0x000000F1 }; /* 4_bytes Func(4_bytes) */ + #ifdef __cplusplus + inline DEFINE_API_C(ExceptionHandlerUPP) NewExceptionHandlerUPP(ExceptionHandlerProcPtr userRoutine) { return userRoutine; } + #else + #define NewExceptionHandlerUPP(userRoutine) (userRoutine) + #endif +#endif + +/* + * DisposeExceptionHandlerUPP() + * + * Availability: + * Non-Carbon CFM: available as macro/inline + * CarbonLib: in CarbonLib 1.1 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +DisposeExceptionHandlerUPP(ExceptionHandlerUPP userUPP); +#if !OPAQUE_UPP_TYPES + #ifdef __cplusplus + inline DEFINE_API_C(void) DisposeExceptionHandlerUPP(ExceptionHandlerUPP) {} + #else + #define DisposeExceptionHandlerUPP(userUPP) + #endif +#endif + +/* + * InvokeExceptionHandlerUPP() + * + * Availability: + * Non-Carbon CFM: available as macro/inline + * CarbonLib: in CarbonLib 1.1 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +InvokeExceptionHandlerUPP( + ExceptionInformation * theException, + ExceptionHandlerUPP userUPP); +#if !OPAQUE_UPP_TYPES + #ifdef __cplusplus + inline DEFINE_API_C(OSStatus) InvokeExceptionHandlerUPP(ExceptionInformation * theException, ExceptionHandlerUPP userUPP) { return (*userUPP)(theException); } + #else + #define InvokeExceptionHandlerUPP(theException, userUPP) (*userUPP)(theException) + #endif +#endif + +/* + ExceptionHandler function pointers (TPP): + on classic PowerPC, use raw function pointers + on classic PowerPC with OPAQUE_UPP_TYPES=1, use UPP's + on Carbon, use UPP's +*/ +#if TARGET_OS_MAC && !OPAQUE_UPP_TYPES +/* use raw function pointers*/ +typedef ExceptionHandlerProcPtr ExceptionHandlerTPP; +#else +/* use UPP's*/ +typedef ExceptionHandlerUPP ExceptionHandlerTPP; +#endif /* TARGET_OS_MAC && !OPAQUE_UPP_TYPES */ + +typedef ExceptionHandlerTPP ExceptionHandler; +/* Routine for installing per-process exception handlers */ +/* + * InstallExceptionHandler() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.1 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API( ExceptionHandlerTPP ) InstallExceptionHandler(ExceptionHandlerTPP theHandler); + + +#endif /* TARGET_OS_MAC */ + + + +#if PRAGMA_STRUCT_ALIGN + #pragma options align=reset +#elif PRAGMA_STRUCT_PACKPUSH + #pragma pack(pop) +#elif PRAGMA_STRUCT_PACK + #pragma pack() +#endif + +#ifdef PRAGMA_IMPORT_OFF +#pragma import off +#elif PRAGMA_IMPORT +#pragma import reset +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __MACHINEEXCEPTIONS__ */ + |