172 lines
5.7 KiB
C
172 lines
5.7 KiB
C
/***
|
|
*rtcapi.h - declarations and definitions for RTC use
|
|
*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
*
|
|
*Purpose:
|
|
* Contains the declarations and definitions for all RunTime Check
|
|
* support.
|
|
*
|
|
****/
|
|
|
|
#ifndef _INC_RTCAPI
|
|
#define _INC_RTCAPI
|
|
|
|
#if defined(_RTC) || !defined(_CRTBLD)
|
|
|
|
#include <crtdefs.h>
|
|
|
|
#pragma pack(push,_CRT_PACKING)
|
|
|
|
/*
|
|
Previous versions of this header included declarations of functions used by RTC but
|
|
not intended for use by end-users. These functions are now declared deprecated by default
|
|
and may be removed in a future version.
|
|
*/
|
|
#ifndef _CRT_ENABLE_RTC_INTERNALS
|
|
#define _RTCINTERNAL_DEPRECATED _CRT_DEPRECATE_TEXT("These internal RTC functions are obsolete and should not be used")
|
|
#else /* _CRT_ENABLE_RTC_INTERNALS */
|
|
#define _RTCINTERNAL_DEPRECATED
|
|
#endif /* _CRT_ENABLE_RTC_INTERNALS */
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
/* General User API */
|
|
|
|
typedef enum _RTC_ErrorNumber {
|
|
_RTC_CHKSTK = 0,
|
|
_RTC_CVRT_LOSS_INFO,
|
|
_RTC_CORRUPT_STACK,
|
|
_RTC_UNINIT_LOCAL_USE,
|
|
_RTC_CORRUPTED_ALLOCA,
|
|
_RTC_ILLEGAL
|
|
} _RTC_ErrorNumber;
|
|
|
|
# define _RTC_ERRTYPE_IGNORE -1
|
|
# define _RTC_ERRTYPE_ASK -2
|
|
|
|
#ifndef _WCHAR_T_DEFINED
|
|
typedef unsigned short wchar_t;
|
|
#define _WCHAR_T_DEFINED
|
|
#endif /* _WCHAR_T_DEFINED */
|
|
|
|
typedef int (__cdecl *_RTC_error_fn)(int, const char *, int, const char *, const char *, ...);
|
|
typedef int (__cdecl *_RTC_error_fnW)(int, const wchar_t *, int, const wchar_t *, const wchar_t *, ...);
|
|
|
|
/* User API */
|
|
int __cdecl _RTC_NumErrors(void);
|
|
const char * __cdecl _RTC_GetErrDesc(_RTC_ErrorNumber _Errnum);
|
|
int __cdecl _RTC_SetErrorType(_RTC_ErrorNumber _Errnum, int _ErrType);
|
|
_RTC_error_fn __cdecl _RTC_SetErrorFunc(_RTC_error_fn);
|
|
_RTC_error_fnW __cdecl _RTC_SetErrorFuncW(_RTC_error_fnW);
|
|
|
|
/* Power User/library API */
|
|
|
|
|
|
/* Init functions */
|
|
|
|
/* These functions all call _CRT_RTC_INIT */
|
|
void __cdecl _RTC_Initialize(void);
|
|
void __cdecl _RTC_Terminate(void);
|
|
|
|
/*
|
|
* If you're not using the CRT, you have to implement _CRT_RTC_INIT
|
|
* Just return either null, or your error reporting function
|
|
* *** Don't mess with res0/res1/res2/res3/res4 - YOU'VE BEEN WARNED! ***
|
|
*/
|
|
_RTC_error_fn __cdecl _CRT_RTC_INIT(void *_Res0, void **_Res1, int _Res2, int _Res3, int _Res4);
|
|
_RTC_error_fnW __cdecl _CRT_RTC_INITW(void *_Res0, void **_Res1, int _Res2, int _Res3, int _Res4);
|
|
|
|
/* Compiler generated calls (unlikely to be used, even by power users) */
|
|
/* Types */
|
|
typedef struct _RTC_vardesc {
|
|
int addr;
|
|
int size;
|
|
char *name;
|
|
} _RTC_vardesc;
|
|
|
|
typedef struct _RTC_framedesc {
|
|
int varCount;
|
|
_RTC_vardesc *variables;
|
|
} _RTC_framedesc;
|
|
|
|
/* NOTE:
|
|
Changing this structure requires a matching compiler backend
|
|
update, because the offsets are hardcoded inside there.
|
|
*/
|
|
#pragma pack(push, 1)
|
|
/* Structure padded under 32-bit x86, to get consistent
|
|
execution between 32/64 targets.
|
|
*/
|
|
typedef struct _RTC_ALLOCA_NODE {
|
|
__int32 guard1;
|
|
struct _RTC_ALLOCA_NODE *next;
|
|
#if defined (_M_IX86) || defined (_M_ARM)
|
|
__int32 dummypad;
|
|
#endif /* defined (_M_IX86) || defined (_M_ARM) */
|
|
size_t allocaSize;
|
|
#if defined (_M_IX86) || defined (_M_ARM)
|
|
__int32 dummypad2;
|
|
#endif /* defined (_M_IX86) || defined (_M_ARM) */
|
|
__int32 guard2[3];
|
|
} _RTC_ALLOCA_NODE;
|
|
#pragma pack(pop)
|
|
|
|
#if !defined (_M_CEE) && !defined (_M_CEE_PURE)
|
|
/* These unsupported functions are deprecated in native mode and not supported at all in /clr mode */
|
|
|
|
/* Shortening convert checks - name indicates src bytes to target bytes */
|
|
/* Signedness is NOT checked */
|
|
_RTCINTERNAL_DEPRECATED char __fastcall _RTC_Check_2_to_1(short _Src);
|
|
_RTCINTERNAL_DEPRECATED char __fastcall _RTC_Check_4_to_1(int _Src);
|
|
_RTCINTERNAL_DEPRECATED char __fastcall _RTC_Check_8_to_1(__int64 _Src);
|
|
_RTCINTERNAL_DEPRECATED short __fastcall _RTC_Check_4_to_2(int _Src);
|
|
_RTCINTERNAL_DEPRECATED short __fastcall _RTC_Check_8_to_2(__int64 _Src);
|
|
_RTCINTERNAL_DEPRECATED int __fastcall _RTC_Check_8_to_4(__int64 _Src);
|
|
#endif /* !defined (_M_CEE) && !defined (_M_CEE_PURE) */
|
|
|
|
|
|
/* Stack Checking Calls */
|
|
#if defined (_M_IX86)
|
|
void __cdecl _RTC_CheckEsp();
|
|
#endif /* defined (_M_IX86) */
|
|
|
|
#if !defined (_M_CEE) && !defined (_M_CEE_PURE)
|
|
/* These unsupported functions are deprecated in native mode and not supported at all in /clr mode */
|
|
|
|
_RTCINTERNAL_DEPRECATED void __fastcall _RTC_CheckStackVars(void *_Esp, _RTC_framedesc *_Fd);
|
|
_RTCINTERNAL_DEPRECATED void __fastcall _RTC_CheckStackVars2(void *_Esp, _RTC_framedesc *_Fd, _RTC_ALLOCA_NODE *_AllocaList);
|
|
_RTCINTERNAL_DEPRECATED void __fastcall _RTC_AllocaHelper(_RTC_ALLOCA_NODE *_PAllocaBase, size_t _CbSize, _RTC_ALLOCA_NODE **_PAllocaInfoList);
|
|
#endif /* !defined (_M_CEE) && !defined (_M_CEE_PURE) */
|
|
/* Unintialized Local call */
|
|
void __cdecl _RTC_UninitUse(const char *_Varname);
|
|
|
|
#if !defined (_M_CEE) && !defined (_M_CEE_PURE)
|
|
/* These unsupported functions are deprecated in native mode and not supported at all in /clr mode */
|
|
|
|
#endif /* !defined (_M_CEE) && !defined (_M_CEE_PURE) */
|
|
|
|
/* Subsystem initialization stuff */
|
|
void __cdecl _RTC_Shutdown(void);
|
|
void __cdecl _RTC_InitBase(void);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
void* _ReturnAddress();
|
|
}
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
#pragma pack(pop)
|
|
|
|
#endif /* defined(_RTC) || !defined(_CRTBLD) */
|
|
|
|
#endif /* _INC_RTCAPI */
|