140 lines
3.8 KiB
C
140 lines
3.8 KiB
C
/***
|
|
*except.h - defines exception values, types and routines
|
|
*
|
|
* Copyright (c) 1990-1994, Microsoft Corporation. All rights reserved.
|
|
*
|
|
*Purpose:
|
|
* This file defines the exception values, types and declares the
|
|
* associated functions.
|
|
*
|
|
****/
|
|
|
|
#ifndef _INC_EXCEPT
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#if (_MSC_VER <= 600)
|
|
#define __cdecl _cdecl
|
|
#endif
|
|
|
|
/*
|
|
* exception codes defined by the host OS
|
|
*
|
|
* NOTE: THE UNDERSCORE PREFIX IN THE FOLLOWING NAMES WAS ADDED TO CONFORM
|
|
* WITH ANSI NAMESPACE REQUIREMENTS.
|
|
*/
|
|
|
|
#define _XCPT_GUARD_PAGE_VIOLATION 0x80000001
|
|
#define _XCPT_UNABLE_TO_GROW_STACK 0x80010001
|
|
#define _XCPT_DATATYPE_MISALIGNMENT 0xC000009E
|
|
#define _XCPT_BREAKPOINT 0xC000009F
|
|
#define _XCPT_SINGLESTEP 0xC00000A0
|
|
#define _XCPT_ACCESS_VIOLATION 0xC0000005
|
|
#define _XCPT_ILLEGAL_INSTRUCTION 0xC000001C
|
|
#define _XCPT_FLOATING_DENORMAL_OPERAND 0xC0000094
|
|
#define _XCPT_FLOATING_DIVIDE_BY_ZERO 0xC0000095
|
|
#define _XCPT_FLOATING_INEXACT_RESULT 0xC0000096
|
|
#define _XCPT_FLOATING_INVALID_OPERATION 0xC0000097
|
|
#define _XCPT_FLOATING_OVERFLOW 0xC0000098
|
|
#define _XCPT_FLOATING_STACK_CHECK 0xC0000099
|
|
#define _XCPT_FLOATING_UNDERFLOW 0xC000009A
|
|
#define _XCPT_INTEGER_DIVIDE_BY_ZERO 0xC000009B
|
|
#define _XCPT_INTEGER_OVERFLOW 0xC000009C
|
|
#define _XCPT_PRIVILEGED_INSTRUCTION 0xC000009D
|
|
#define _XCPT_IN_PAGE_ERROR 0xC0000006
|
|
#define _XCPT_PROCESS_TERMINATE 0xC0010001
|
|
#define _XCPT_ASYNC_PROCESS_TERMINATE 0xC0010002
|
|
#define _XCPT_NONCONTINUABLE_EXCEPTION 0xC0000024
|
|
#define _XCPT_INVALID_DISPOSITION 0xC0000025
|
|
#define _XCPT_INVALID_LOCK_SEQUENCE 0xC000001D
|
|
#define _XCPT_ARRAY_BOUNDS_EXCEEDED 0xC0000093
|
|
#define _XCPT_B1NPX_ERRATA_02 0xC0010004
|
|
#define _XCPT_UNWIND 0xC0000026
|
|
#define _XCPT_BAD_STACK 0xC0000027
|
|
#define _XCPT_INVALID_UNWIND_TARGET 0xC0000028
|
|
#define _XCPT_SIGNAL 0xC0010003
|
|
|
|
|
|
/*
|
|
* exception codes defined by the C runtime
|
|
*/
|
|
|
|
#define _XCPT_SIGABRT 0x20000001
|
|
#define _XCPT_SIGUSR1 0x20000002
|
|
#define _XCPT_SIGUSR2 0x20000003
|
|
#define _XCPT_SIGUSR3 0x20000004
|
|
#define _XCPT_FLOATING_EXPLICITGEN 0x20000005
|
|
|
|
|
|
/*
|
|
* constants, structs and types used in exception handling at the OS level
|
|
*
|
|
* NOTE: MANY OF IDENTIFIERS DEFINED BELOW ARE FROM DCR 1024. HOWEVER, THEY
|
|
* HAVE BEEN CHANGED TO CONFORM WITH ANSI NAMESPACE RESTRICTIONS.
|
|
*/
|
|
|
|
#define _EXCEPTION_MAXIMUM_PARAMETERS 4
|
|
|
|
struct __EXCEPTIONREPORTRECORD {
|
|
unsigned long ExceptionNum;
|
|
unsigned long fHandlerFlags;
|
|
struct __EXCEPTIONREPORTRECORD * NestedExceptionReportRecord;
|
|
void * ExceptionAddress;
|
|
unsigned long cParameters;
|
|
unsigned long ExceptionInfo[_EXCEPTION_MAXIMUM_PARAMETERS];
|
|
};
|
|
|
|
typedef struct __EXCEPTIONREPORTRECORD _EXCEPTIONREPORTRECORD;
|
|
typedef struct __EXCEPTIONREPORTRECORD * _PEXCEPTIONREPORTRECORD;
|
|
|
|
/*
|
|
* values of ExceptionInfo[0] for _XCPT_SIGNAL.
|
|
*/
|
|
|
|
#define _XCPT_SIGNAL_INTR 1 /* corresponds to SIGINT */
|
|
#define _XCPT_SIGNAL_KILLPROC 3 /* corresponds to SIGTERM */
|
|
#define _XCPT_SIGNAL_BREAK 4 /* corresponds to SIGBREAK */
|
|
|
|
/*
|
|
* NOTE: THE FOLLOWING DEFINITION FOR _PCONTEXTRECORD IS INCORRECT, BUT I
|
|
* DON'T ACTUALLY USE IT FOR ANYTHING AND REAL DEFINITION WOULD TAKE A GOOD
|
|
* TWO PAGES. SEE PAGES 16 AND 17 OF VOL1.TXT FOR THE CORRECT DEFINITION.
|
|
*/
|
|
|
|
typedef void * _PCONTEXTRECORD;
|
|
|
|
/*
|
|
* structure used by SEH support function and intrinsics. the information
|
|
* passed by the exception dispatcher is repackaged in this form by the
|
|
* runtime (_except_handler()).
|
|
*/
|
|
|
|
struct __EXCEPTION_INFO_PTRS {
|
|
_PEXCEPTIONREPORTRECORD preport;
|
|
_PCONTEXTRECORD pcontext;
|
|
};
|
|
|
|
typedef struct __EXCEPTION_INFO_PTRS * _PEXCEPTION_INFO_PTRS;
|
|
|
|
|
|
#ifndef _MAC_
|
|
/*
|
|
* prototypes for intrinsic SEH functions
|
|
*/
|
|
|
|
unsigned long __cdecl _exception_code(void);
|
|
void * __cdecl _exception_info(void);
|
|
int __cdecl _abnormal_termination(void);
|
|
#endif /* ndef _MAC_ */
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#define _INC_EXCEPT
|
|
#endif /* _INC_EXCEPT */
|