supermario/base/SuperMarioProj.1994-02-09/OS/MemoryMgr/FigmentSources/MemMgrDebug.h
2019-06-29 23:17:50 +08:00

162 lines
5.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
File: MemMgrDebug.h
Contains: Memory Manager Debug Interfaces
Written by: Jeff Crawford
Copyright: © 1992-1993 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<38> 8/5/93 BT <BT, JC> We came, we saw, we initialed...
<37> 7/27/93 BT Change "#if hasInternalFigmentDebugging == TRUE" to "#if
hasFigmentInternalDebugging". The xlc compiler seems to find
that TRUE != TRUE. We'll see who wins...
<36> 7/20/93 JC Spiffed up the client debug routines for Developer's CD version
of Figment.
<35> 7/19/93 BT Radar #1100608. If hasFigmentInternalDebugging == TRUE then
define internal_debugging. This allows us to do
internal_debugging from FeatureSet with minimum of changes as
per JCM request.
<34> 6/30/93 JC #1089109: Removed fHeapIsDirty bit.
<33> 5/24/93 JC Changed XXX to DbgXXX for all debug routines.
<32> 5/21/93 BT Add __TYPES__ wrapper to PowerPC code too.
<31> 5/21/93 BT Change 'applec' to 'mac68k'. 'applec' is defined in the Power
compiler also.
<30> 5/19/93 JC Began changes as requested by the code review. Removed options
parameter from AllocateMoreMasters.
<29> 5/5/93 BT Change macros with dangling else statements to macros enclosed
in braces ({}). A little more compiler friendly.
<28> 5/2/93 JC Fixed heap debugging bits. From now on, kUseOddMPs field in no
longer needed.
<27> 4/19/93 JC Changed CheckSize & CheckAlignment to be debug routines instead
of macros.
<26> 4/18/93 JC Changed #defines to more acurate descriptions. Changed
small_block_headers to small_freeBlock_headers and linkedIn to
linked_thinkc_app. •• Brian & Sam take note.••
<1> 6/10/92 JC New Today
*/
#ifndef memMgrDebugIncludes
#define memMgrDebugIncludes
#if hasFigmentInternalDebugging
#define internal_debugging 1
#endif
#ifdef internal_debugging
#define debugging /* load debugging code */
#endif
#ifdef client_debugging
#define debugging /* load debugging code */
#define clientCheckHeapEnabled /* check heap that clients pass to MM routines */
#endif
#ifdef debugging
#ifndef privateMemMgrIncludes
#include "MemMgr.h"
#endif
#ifndef define_debugger_and_debugstr
#define define_debugger_and_debugstr
#ifndef __TYPES__
#if defined(THINK_C) || defined(mac68k)
typedef unsigned char debugChar;
pascal void DebugStr(const debugChar *) = 0xABFF;
pascal void Debugger(void) = 0xA9FF;
#else
typedef char debugChar;
void DebugStr(const debugChar *);
void Debugger(void);
#endif
#endif
#endif
typedef enum {
checkHeapIn = 0x01, /* check heap on entry */
checkHeap = 0x02, /* check heap on exit */
useOddUnusedMPs = 0x04, /* make unused master pointers odd */
fillFreeBlocks = 0x08, /* fill free blocks with garbage */
checkBlocks = 0x10, /* check blocks when they are passed to the memory manager */
scrambleBlocks = 0x20, /* not implemented -- perform heap scramble when allowed */
checkSubHeaps = 0x40 /* not implemented -- check all sub heaps */
} memoryValidationFlags;
long GetHeapValidation(stdHeap *source);
void SetHeapValidation(stdHeap *target, long flags);
void ValidateHeap(stdHeap* target, long flags);
void ValidatePtr(void* block, stdHeap* curHeap);
void ValidateHandle(void* block, stdHeap* curHeap);
void ValidateMasterPointer(void* masterPointer, stdHeap* curHeap);
void DbgValidateTrapWord(ushort trapWord);
#define IfDbgMsg(a, b, c) { if (a) DbgMessage(b, (long)c); }
void DbgMessage(const char *msg, long data);
void _PtrBlockCheck(void* block, stdHeap* curHeap);
void _HandleBlockCheck(void* block, stdHeap* curHeap);
void _MasterPtrCheck(void* block, stdHeap* curHeap);
void _CheckHeap(stdHeap* curHeap);
void _AlertClientRelocateBlock(Ptr oldLocation, Ptr newLocation, stdHeap* curHeap);
/* jeff, might want to check to see that the heap contains debugging info before checking validation flags */
#define DbgCode(code) code
#define DbgPtrBlockCheck(block,h) if ((h)->validationFlags & checkBlocks) _PtrBlockCheck(block, h)
#define DbgHandleBlockCheck(block, h) if ((h)->validationFlags & checkBlocks) _HandleBlockCheck(block, h)
#define DbgMasterPtrCheck(block,h) if ((h)->validationFlags & checkBlocks) _MasterPtrCheck(block, h)
#define DbgCheckHeap(h) if ((h)->validationFlags & checkHeap) _CheckHeap(h)
#define DbgAlertClientRelocateBlock(o,n,h) if ((h)->validationFlags & checkHeap) _AlertClientRelocateBlock(o,n,h)
#ifdef clientCheckHeapEnabled
#define DbgClientCheckHeap(h) if( (h)->validationFlags & checkHeapIn ) _CheckHeap(h)
#else
#define DbgClientCheckHeap(h)
#endif
void DbgCheckSize(ulong theSize);
void DbgCheckAlignment(void* thePtr);
#define garbageData 0x50FF50FF /* Greg Mariotts "new" (as of 4/29/93) offical number */
#define DbgGarbageFill(h ,a, b) if ((h)->validationFlags & fillFreeBlocks) FillBytes(a, b, garbageData)
#else
#define DbgCode(code)
#define IfDbgMsg(a, b, c)
#define DbgMessage(a, b)
#define DbgPtrBlockCheck(block,heap)
#define DbgHandleBlockCheck(block,heap)
#define DbgMasterPtrCheck(block,heap)
#define DbgCheckHeap(h)
#define DbgAlertClientRelocateBlock(o,n,z)
#define DbgClientCheckHeap(h)
#define DbgCheckSize(x)
#define DbgCheckAlignment(x)
#define DbgValidateTrapWord(tw)
#define DbgGarbageFill(h, a, b)
#endif /* debugging */
#ifdef internal_debugging
#define IfIntDebugMsg(a, b, c) { if (a) DbgMessage(b, (long)c); }
#else
#define IfIntDebugMsg(a, b, c)
#endif
#ifdef client_debugging
#define IfClientDebugMsg(a, b, c) { if (a) DbgMessage((b), (long)(c)); }
#define ClientDebugMsg(b, c) DbgMessage((b), (long)(c))
#else
#define IfClientDebugMsg(a, b, c)
#define ClientDebugMsg(b, c)
#endif
#endif /* memMgrDebugIncludes */