189 lines
6.3 KiB
C
189 lines
6.3 KiB
C
|
/***
|
||
|
*rtcapi.h - declarations and definitions for RTC use
|
||
|
*
|
||
|
* Copyright (c) 1985-2001, Microsoft Corporation. All rights reserved.
|
||
|
*
|
||
|
*Purpose:
|
||
|
* Contains the declarations and definitions for all RunTime Check
|
||
|
* support.
|
||
|
*
|
||
|
*Revision History:
|
||
|
* ??-??-?? KBF Created public header for RTC
|
||
|
* 05-11-99 KBF Wrap RTC support in #ifdef.
|
||
|
* 05-26-99 KBF Removed RTCl & RTCv, added _RTC_ADVMEM stuff
|
||
|
*
|
||
|
****/
|
||
|
|
||
|
#ifndef _INC_RTCAPI
|
||
|
#define _INC_RTCAPI
|
||
|
|
||
|
#ifdef _RTC
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
extern "C" {
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// General User API
|
||
|
|
||
|
typedef enum _RTC_ErrorNumber {
|
||
|
_RTC_CHKSTK = 0,
|
||
|
_RTC_CVRT_LOSS_INFO,
|
||
|
_RTC_CORRUPT_STACK,
|
||
|
_RTC_UNINIT_LOCAL_USE,
|
||
|
#ifdef _RTC_ADVMEM
|
||
|
_RTC_INVALID_MEM,
|
||
|
_RTC_DIFF_MEM_BLOCK,
|
||
|
#endif
|
||
|
_RTC_ILLEGAL
|
||
|
} _RTC_ErrorNumber;
|
||
|
|
||
|
# define _RTC_ERRTYPE_IGNORE -1
|
||
|
# define _RTC_ERRTYPE_ASK -2
|
||
|
|
||
|
typedef int (__cdecl *_RTC_error_fn)(int, const char *, int, const char *, const char *, ...);
|
||
|
|
||
|
// 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);
|
||
|
#ifdef _RTC_ADVMEM
|
||
|
void __cdecl _RTC_SetOutOfMemFunc(int (*func)(void));
|
||
|
#endif
|
||
|
|
||
|
// Power User/library API
|
||
|
|
||
|
#ifdef _RTC_ADVMEM
|
||
|
|
||
|
void __cdecl _RTC_Allocate(void *addr, unsigned size, short level);
|
||
|
void __cdecl _RTC_Free(void *mem, short level);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
/* 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 _CRT_RTC_INIT(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;
|
||
|
|
||
|
/* Shortening convert checks - name indicates src bytes to target bytes */
|
||
|
/* Signedness is NOT checked */
|
||
|
char __fastcall _RTC_Check_2_to_1(short src);
|
||
|
char __fastcall _RTC_Check_4_to_1(int src);
|
||
|
char __fastcall _RTC_Check_8_to_1(__int64 src);
|
||
|
short __fastcall _RTC_Check_4_to_2(int src);
|
||
|
short __fastcall _RTC_Check_8_to_2(__int64 src);
|
||
|
int __fastcall _RTC_Check_8_to_4(__int64 src);
|
||
|
|
||
|
#ifdef _RTC_ADVMEM
|
||
|
// A memptr is a user pointer
|
||
|
typedef signed int memptr;
|
||
|
// A memref refers to a user pointer (ptr to ptr)
|
||
|
typedef memptr *memref;
|
||
|
// memvals are the contents of a memptr
|
||
|
// thus, they have sizes
|
||
|
typedef char memval1;
|
||
|
typedef short memval2;
|
||
|
typedef int memval4;
|
||
|
typedef __int64 memval8;
|
||
|
#endif
|
||
|
|
||
|
/* Stack Checking Calls */
|
||
|
void __cdecl _RTC_CheckEsp();
|
||
|
void __fastcall _RTC_CheckStackVars(void *esp, _RTC_framedesc *fd);
|
||
|
#ifdef _RTC_ADVMEM
|
||
|
void __fastcall _RTC_MSAllocateFrame(memptr frame, _RTC_framedesc *v);
|
||
|
void __fastcall _RTC_MSFreeFrame(memptr frame, _RTC_framedesc *v);
|
||
|
#endif
|
||
|
|
||
|
/* Unintialized Local call */
|
||
|
void __cdecl _RTC_UninitUse(const char *varname);
|
||
|
|
||
|
#ifdef _RTC_ADVMEM
|
||
|
/* Memory checks */
|
||
|
void __fastcall _RTC_MSPtrAssignAdd(memref dst, memref base, int offset);
|
||
|
void __fastcall _RTC_MSAddrAssignAdd(memref dst, memptr base, int offset);
|
||
|
void __fastcall _RTC_MSPtrAssign(memref dst, memref src);
|
||
|
|
||
|
memptr __fastcall _RTC_MSPtrAssignR0(memref src);
|
||
|
memptr __fastcall _RTC_MSPtrAssignR0Add(memref src, int offset);
|
||
|
void __fastcall _RTC_MSR0AssignPtr(memref dst, memptr src);
|
||
|
void __fastcall _RTC_MSR0AssignPtrAdd(memref dst, memptr src, int offset);
|
||
|
|
||
|
memptr __fastcall _RTC_MSPtrPushAdd(memref dst, memref base, int offset);
|
||
|
memptr __fastcall _RTC_MSAddrPushAdd(memref dst, memptr base, int offset);
|
||
|
memptr __fastcall _RTC_MSPtrPush(memref dst, memref src);
|
||
|
|
||
|
memval1 __fastcall _RTC_MSPtrMemReadAdd1(memref base, int offset);
|
||
|
memval2 __fastcall _RTC_MSPtrMemReadAdd2(memref base, int offset);
|
||
|
memval4 __fastcall _RTC_MSPtrMemReadAdd4(memref base, int offset);
|
||
|
memval8 __fastcall _RTC_MSPtrMemReadAdd8(memref base, int offset);
|
||
|
|
||
|
memval1 __fastcall _RTC_MSMemReadAdd1(memptr base, int offset);
|
||
|
memval2 __fastcall _RTC_MSMemReadAdd2(memptr base, int offset);
|
||
|
memval4 __fastcall _RTC_MSMemReadAdd4(memptr base, int offset);
|
||
|
memval8 __fastcall _RTC_MSMemReadAdd8(memptr base, int offset);
|
||
|
|
||
|
memval1 __fastcall _RTC_MSPtrMemRead1(memref base);
|
||
|
memval2 __fastcall _RTC_MSPtrMemRead2(memref base);
|
||
|
memval4 __fastcall _RTC_MSPtrMemRead4(memref base);
|
||
|
memval8 __fastcall _RTC_MSPtrMemRead8(memref base);
|
||
|
|
||
|
memptr __fastcall _RTC_MSPtrMemCheckAdd1(memref base, int offset);
|
||
|
memptr __fastcall _RTC_MSPtrMemCheckAdd2(memref base, int offset);
|
||
|
memptr __fastcall _RTC_MSPtrMemCheckAdd4(memref base, int offset);
|
||
|
memptr __fastcall _RTC_MSPtrMemCheckAdd8(memref base, int offset);
|
||
|
memptr __fastcall _RTC_MSPtrMemCheckAddN(memref base, int offset, unsigned size);
|
||
|
|
||
|
memptr __fastcall _RTC_MSMemCheckAdd1(memptr base, int offset);
|
||
|
memptr __fastcall _RTC_MSMemCheckAdd2(memptr base, int offset);
|
||
|
memptr __fastcall _RTC_MSMemCheckAdd4(memptr base, int offset);
|
||
|
memptr __fastcall _RTC_MSMemCheckAdd8(memptr base, int offset);
|
||
|
memptr __fastcall _RTC_MSMemCheckAddN(memptr base, int offset, unsigned size);
|
||
|
|
||
|
memptr __fastcall _RTC_MSPtrMemCheck1(memref base);
|
||
|
memptr __fastcall _RTC_MSPtrMemCheck2(memref base);
|
||
|
memptr __fastcall _RTC_MSPtrMemCheck4(memref base);
|
||
|
memptr __fastcall _RTC_MSPtrMemCheck8(memref base);
|
||
|
memptr __fastcall _RTC_MSPtrMemCheckN(memref base, unsigned size);
|
||
|
#endif
|
||
|
|
||
|
/* Subsystem initialization stuff */
|
||
|
void __cdecl _RTC_Shutdown(void);
|
||
|
#ifdef _RTC_ADVMEM
|
||
|
void __cdecl _RTC_InitAdvMem(void);
|
||
|
#endif
|
||
|
void __cdecl _RTC_InitBase(void);
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
void* _ReturnAddress();
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#endif // _INC_RTCAPI
|