/*** *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