275 lines
7.4 KiB
C
275 lines
7.4 KiB
C
|
/***
|
||
|
*excpt.h - defines exception values, types and routines
|
||
|
*
|
||
|
* Copyright (c) 1990-2001, Microsoft Corporation. All rights reserved.
|
||
|
*
|
||
|
*Purpose:
|
||
|
* This file contains the definitions and prototypes for the compiler-
|
||
|
* dependent intrinsics, support functions and keywords which implement
|
||
|
* the structured exception handling extensions.
|
||
|
*
|
||
|
* [Public]
|
||
|
*
|
||
|
*Revision History:
|
||
|
* 11-01-91 GJF Module created. Basically a synthesis of except.h
|
||
|
* and excpt.h and intended as a replacement for
|
||
|
* both.
|
||
|
* 12-13-91 GJF Fixed build for Win32.
|
||
|
* 05-05-92 SRW C8 wants C6 style names for now.
|
||
|
* 07-20-92 SRW Moved from winxcpt.h to excpt.h
|
||
|
* 08-06-92 GJF Function calling type and variable type macros. Also
|
||
|
* revised compiler/target processor macro usage.
|
||
|
* 11-09-92 GJF Fixed preprocessing conditionals for MIPS. Also,
|
||
|
* fixed some compiler warning (fix from/for RichardS).
|
||
|
* 01-03-93 SRW Fold in ALPHA changes
|
||
|
* 01-04-93 SRW Add leave keyword for x86
|
||
|
* 01-09-93 SRW Remove usage of MIPS and ALPHA to conform to ANSI
|
||
|
* Use _MIPS_ and _ALPHA_ instead.
|
||
|
* 01-21-93 GJF Removed support for C6-386's _cdecl.
|
||
|
* 02-18-93 GJF Changed _try to __try, etc.
|
||
|
* 03-31-93 CFW Removed #define try, except, leave, finally for x86.
|
||
|
* 04-06-93 SKS Replace _CRTAPI1/2 with __cdecl, _CRTVAR1 with nothing
|
||
|
* 07-29-93 GJF Added declarations for _First_FPE_Indx and _Num_FPE.
|
||
|
* 09-01-93 GJF Merged Cuda and NT SDK versions.
|
||
|
* 10-04-93 SRW Fix ifdefs for MIPS and ALPHA to only check for _M_??????
|
||
|
* defines
|
||
|
* 10-12-93 GJF Merged again.
|
||
|
* 10-19-93 GJF MS/MIPS compiler gets most of the same SEH defs and
|
||
|
* decls as the MS compiler for the X86.
|
||
|
* 10-29-93 GJF Don't #define try, et al, when compiling C++ app!
|
||
|
* 12-09-93 GJF Alpha compiler now has MS front-end and implements
|
||
|
* the same SEH names.
|
||
|
* 11-03-94 GJF Ensure 8 byte alignment.
|
||
|
* 02-11-95 CFW Add _CRTBLD to avoid users getting wrong headers.
|
||
|
* 02-14-95 CFW Clean up Mac merge.
|
||
|
* 12-14-95 JWM Add "#pragma once".
|
||
|
* 02-21-97 GJF Cleaned out obsolete support for _CRTAPI* and _NTSDK.
|
||
|
* Also, detab-ed.
|
||
|
* 09-30-97 JWM Restored not-so-obsolete _CRTAPI1 support.
|
||
|
* 10-07-97 RDL Added IA64.
|
||
|
* 11-12-97 RDL __C_specific_handler() prototype change from SC.
|
||
|
* 05-13-99 PML Remove _CRTAPI1
|
||
|
* 05-17-99 PML Remove all Macintosh support.
|
||
|
*
|
||
|
****/
|
||
|
|
||
|
#if _MSC_VER > 1000 /*IFSTRIP=IGN*/
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#ifndef _INC_EXCPT
|
||
|
#define _INC_EXCPT
|
||
|
|
||
|
#if !defined(_WIN32)
|
||
|
#error ERROR: Only Win32 target supported!
|
||
|
#endif
|
||
|
|
||
|
#ifndef _CRTBLD
|
||
|
/* This version of the header files is NOT for user programs.
|
||
|
* It is intended for use when building the C runtimes ONLY.
|
||
|
* The version intended for public use will not have this message.
|
||
|
*/
|
||
|
#error ERROR: Use of C runtime library internal header file.
|
||
|
#endif /* _CRTBLD */
|
||
|
|
||
|
#ifdef _MSC_VER
|
||
|
/*
|
||
|
* Currently, all MS C compilers for Win32 platforms default to 8 byte
|
||
|
* alignment.
|
||
|
*/
|
||
|
#pragma pack(push,8)
|
||
|
#endif /* _MSC_VER */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#ifndef _INTERNAL_IFSTRIP_
|
||
|
#include <cruntime.h>
|
||
|
#endif /* _INTERNAL_IFSTRIP_ */
|
||
|
|
||
|
|
||
|
/* Define _CRTIMP */
|
||
|
|
||
|
#ifndef _CRTIMP
|
||
|
#ifdef CRTDLL
|
||
|
#define _CRTIMP __declspec(dllexport)
|
||
|
#else /* ndef CRTDLL */
|
||
|
#ifdef _DLL
|
||
|
#define _CRTIMP __declspec(dllimport)
|
||
|
#else /* ndef _DLL */
|
||
|
#define _CRTIMP
|
||
|
#endif /* _DLL */
|
||
|
#endif /* CRTDLL */
|
||
|
#endif /* _CRTIMP */
|
||
|
|
||
|
|
||
|
/* Define __cdecl for non-Microsoft compilers */
|
||
|
|
||
|
#if ( !defined(_MSC_VER) && !defined(__cdecl) )
|
||
|
#define __cdecl
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Exception disposition return values.
|
||
|
*/
|
||
|
typedef enum _EXCEPTION_DISPOSITION {
|
||
|
ExceptionContinueExecution,
|
||
|
ExceptionContinueSearch,
|
||
|
ExceptionNestedException,
|
||
|
ExceptionCollidedUnwind
|
||
|
} EXCEPTION_DISPOSITION;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Prototype for SEH support function.
|
||
|
*/
|
||
|
|
||
|
#ifdef _M_IX86
|
||
|
|
||
|
/*
|
||
|
* Declarations to keep MS C 8 (386/486) compiler happy
|
||
|
*/
|
||
|
struct _EXCEPTION_RECORD;
|
||
|
struct _CONTEXT;
|
||
|
|
||
|
EXCEPTION_DISPOSITION __cdecl _except_handler (
|
||
|
struct _EXCEPTION_RECORD *ExceptionRecord,
|
||
|
void * EstablisherFrame,
|
||
|
struct _CONTEXT *ContextRecord,
|
||
|
void * DispatcherContext
|
||
|
);
|
||
|
|
||
|
#elif defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64)
|
||
|
|
||
|
/*
|
||
|
* Declarations to keep MIPS, ALPHA, and PPC compiler happy
|
||
|
*/
|
||
|
typedef struct _EXCEPTION_POINTERS *Exception_info_ptr;
|
||
|
struct _EXCEPTION_RECORD;
|
||
|
struct _CONTEXT;
|
||
|
struct _DISPATCHER_CONTEXT;
|
||
|
|
||
|
|
||
|
#if defined(_M_IA64)
|
||
|
_CRTIMP EXCEPTION_DISPOSITION __C_specific_handler (
|
||
|
struct _EXCEPTION_RECORD *ExceptionRecord,
|
||
|
unsigned __int64 MemoryStackFp,
|
||
|
unsigned __int64 BackingStoreFp,
|
||
|
struct _CONTEXT *ContextRecord,
|
||
|
struct _DISPATCHER_CONTEXT *DispatcherContext,
|
||
|
unsigned __int64 GlobalPointer
|
||
|
);
|
||
|
#else
|
||
|
_CRTIMP EXCEPTION_DISPOSITION __C_specific_handler (
|
||
|
struct _EXCEPTION_RECORD *ExceptionRecord,
|
||
|
void *EstablisherFrame,
|
||
|
struct _CONTEXT *ContextRecord,
|
||
|
struct _DISPATCHER_CONTEXT *DispatcherContext
|
||
|
);
|
||
|
#endif // defined(_M_IA64)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Keywords and intrinsics for SEH
|
||
|
*/
|
||
|
|
||
|
#ifdef _MSC_VER
|
||
|
|
||
|
#define GetExceptionCode _exception_code
|
||
|
#define exception_code _exception_code
|
||
|
#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info
|
||
|
#define exception_info (struct _EXCEPTION_POINTERS *)_exception_info
|
||
|
#define AbnormalTermination _abnormal_termination
|
||
|
#define abnormal_termination _abnormal_termination
|
||
|
|
||
|
unsigned long __cdecl _exception_code(void);
|
||
|
void * __cdecl _exception_info(void);
|
||
|
int __cdecl _abnormal_termination(void);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Legal values for expression in except().
|
||
|
*/
|
||
|
|
||
|
#define EXCEPTION_EXECUTE_HANDLER 1
|
||
|
#define EXCEPTION_CONTINUE_SEARCH 0
|
||
|
#define EXCEPTION_CONTINUE_EXECUTION -1
|
||
|
|
||
|
|
||
|
#ifndef _INTERNAL_IFSTRIP_
|
||
|
/*
|
||
|
* for convenience, define a type name for a pointer to signal-handler
|
||
|
*/
|
||
|
|
||
|
typedef void (__cdecl * _PHNDLR)(int);
|
||
|
|
||
|
/*
|
||
|
* Exception-action table used by the C runtime to identify and dispose of
|
||
|
* exceptions corresponding to C runtime errors or C signals.
|
||
|
*/
|
||
|
struct _XCPT_ACTION {
|
||
|
|
||
|
/*
|
||
|
* exception code or number. defined by the host OS.
|
||
|
*/
|
||
|
unsigned long XcptNum;
|
||
|
|
||
|
/*
|
||
|
* signal code or number. defined by the C runtime.
|
||
|
*/
|
||
|
int SigNum;
|
||
|
|
||
|
/*
|
||
|
* exception action code. either a special code or the address of
|
||
|
* a handler function. always determines how the exception filter
|
||
|
* should dispose of the exception.
|
||
|
*/
|
||
|
_PHNDLR XcptAction;
|
||
|
};
|
||
|
|
||
|
extern struct _XCPT_ACTION _XcptActTab[];
|
||
|
|
||
|
/*
|
||
|
* number of entries in the exception-action table
|
||
|
*/
|
||
|
extern int _XcptActTabCount;
|
||
|
|
||
|
/*
|
||
|
* size of exception-action table (in bytes)
|
||
|
*/
|
||
|
extern int _XcptActTabSize;
|
||
|
|
||
|
/*
|
||
|
* index of the first floating point exception entry
|
||
|
*/
|
||
|
extern int _First_FPE_Indx;
|
||
|
|
||
|
/*
|
||
|
* number of FPE entries
|
||
|
*/
|
||
|
extern int _Num_FPE;
|
||
|
|
||
|
/*
|
||
|
* return values and prototype for the exception filter function used in the
|
||
|
* C startup
|
||
|
*/
|
||
|
int __cdecl _XcptFilter(unsigned long, struct _EXCEPTION_POINTERS *);
|
||
|
|
||
|
#endif /* _INTERNAL_IFSTRIP_ */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef _MSC_VER
|
||
|
#pragma pack(pop)
|
||
|
#endif /* _MSC_VER */
|
||
|
|
||
|
#endif /* _INC_EXCPT */
|