mirror of
https://github.com/elliotnunn/boot3.git
synced 2025-08-14 14:25:19 +00:00
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
162 lines
5.9 KiB
C
162 lines
5.9 KiB
C
/*
|
|
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 MariottÕs "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 */
|