source: git/omalloc/omDebug.h @ 743f96

fieker-DuValspielwiese
Last change on this file since 743f96 was 384936, checked in by Olaf Bachmann <obachman@…>, 24 years ago
made 64 bit clean git-svn-id: file:///usr/local/Singular/svn/trunk@4680 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 8.8 KB
Line 
1/*******************************************************************
2 *  File:    omDebug.h
3 *  Purpose: declaration of common Debug/Check/Track stuff
4 *  Author:  obachman@mathematik.uni-kl.de (Olaf Bachmann)
5 *  Created: 7/00
6 *  Version: $Id: omDebug.h,v 1.12 2000-10-27 15:28:51 obachman Exp $
7 *******************************************************************/
8#ifndef OM_DEBUG_H
9#define OM_DEBUG_H
10
11
12#if defined(OM_NDEBUG) || ! defined(OM_HAVE_TRACK)
13#define omIsTrackAddr(addr)             0
14#define omIsTrackAddrPage(page)         0
15#define omIsNormalBinPageAddr(addr)     omIsBinPageAddr(addr)
16#define omIsBinAddrTrackAddr(addr)      0
17#else
18#define omIsTrackAddrBinPage(bin_page)  ((bin_page)->used_blocks < 0)
19#define omIsBinAddrTrackAddr(addr)      omIsTrackAddrBinPage(omGetBinPageOfAddr(addr))
20#define omIsTrackAddr(addr)             (omIsBinPageAddr(addr) && omIsBinAddrTrackAddr(addr))
21#define omIsNormalBinPageAddr(addr)     (omIsBinPageAddr(addr) && !omIsBinAddrTrackAddr(addr))
22#endif
23
24#if defined(OM_NDEBUG)
25#define omMarkAsStaticAddr(addr)    ((void)0)
26#define omMarkMemoryAsStatic()      ((void)0)
27#define omUnMarkAsStaticAddr()      ((void)0)
28#define omUnMarkMemoryAsStatic()    ((void)0)
29#define omFreeKeptAddr()            ((void)0)
30#define omPrintUsedAddrs(fd,m)      ((void)0)
31#define omPrintUsedTrackAddrs(fd,m) ((void)0)
32#else
33#define OM_FBIN     1           /* size_bin is bin */
34#define OM_FSIZE    2           /* size_bin is size */
35#define OM_FUSED    4           /* is in use, if set */
36#define OM_FKEPT    8           /* had been freed, if set */
37#define OM_FSTATIC  16          /* if set, considered to be static, i.e. never be freed */
38#define OM_FZERO    32          /* for Alloc0 */
39#define OM_FALIGN   64          /* for AllocAligned */
40#define OM_FSLOPPY  128         /* be sloppy about arguments */
41#define OM_FBINADDR 256         /* addr is bin addr */
42#define OM_FKEEP    512         /* addr is never really freed */
43/* maximal flag: OM_FBIN and OM_FSIZE can not be at the same time,
44   and so can't OM_USED and OM_KEPT. Hence 1024 - BIN - USED*/
45#define OM_FMAX     1024 - OM_FBIN - OM_FUSED
46typedef unsigned short omTrackFlags_t;
47
48void* _omDebugAlloc(void* size_bin, omTrackFlags_t flags, OM_CTFL_DECL);
49void* _omDebugRealloc(void* old_addr, void* old_size_bin, void* new_size_bin,
50                      omTrackFlags_t old_flags, omTrackFlags_t new_flags, OM_CTFL_DECL);
51void  _omDebugFree(void* addr, void* size_bin, omTrackFlags_t flags, OM_CFL_DECL);
52void* _omDebugMemDup(void* addr, omTrackFlags_t flags, OM_CTFL_DECL);
53char* _omDebugStrDup(const char* addr, OM_TFL_DECL);
54
55omError_t _omDebugBin(omBin bin, OM_CFL_DECL);
56omError_t _omDebugMemory(OM_CFL_DECL);
57omError_t _omDebugAddr(void* addr, void* bin_size, omTrackFlags_t flags, OM_CFL_DECL);
58
59void omFreeKeptAddr();
60void omPrintUsedAddrs(FILE* fd, int max_frames);
61void omPrintUsedTrackAddrs(FILE* fd, int max_frames);
62
63void omMarkAsStaticAddr(void* addr);
64void omMarkMemoryAsStatic();
65void omUnMarkAsStaticAddr(void* addr);
66void omUnMarkMemoryAsStatic();
67#endif /* ! OM_NDEBUG */
68
69
70#ifdef OM_TRACK_CUSTOM
71#ifdef OM_NDEBUG
72#define omSetCustomOfAddr(addr) ((void)0)
73#define omGetCustomOfAddr(addr) ((void*)0)
74#define omSetCustomOfTrackAddr(addr) ((void)0)
75#define omGetCustomOfTrackAddr(addr) ((void*)0)
76#else
77void omSetCustomOfTrackAddr(void* addr, void* value);
78void* omGetCustomOfTrackAddr(void* addr);
79#define omSetCustomOfAddr(addr,value) \
80  do{if (omIsTrackAddr(addr)) omSetCustomOfTrackAddr(addr,value);}while(0)
81#define omGetCustomOfAddr(addr) \
82  (omIsTrackAddr(addr) ? omGetCustomOfTrackAddr(addr) : NULL)
83#endif /* OM_NDEBUG */
84#endif /* OM_TRACK_CUSTOM */
85
86/*BEGINPRIVATE*/
87
88#if defined(OM_NDEBUG) || ! defined(OM_HAVE_TRACK)
89#define omGetUsedBlocksOfPage(page)     (page->used_blocks)
90#else
91#define omGetUsedBlocksOfPage(page)     (page->used_blocks & ~(((unsigned long) 1) << (BIT_SIZEOF_LONG -1)))
92#endif
93
94#ifndef OM_NDEBUG
95void* om_KeptAddr;
96void* om_LastKeptAddr;
97unsigned long om_MaxAddr;
98unsigned long om_MinAddr;
99void* om_AlwaysKeptAddrs;
100
101void omFreeKeptAddrFromBin(omBin bin);
102/***********************************************************************
103 *
104 * omDebugCheck.c
105 *
106 **********************************************************************/
107omError_t omCheckPtr(void* ptr, omError_t report, OM_FLR_DECL);
108omError_t _omCheckAddr(void* addr, void* size_bin, omTrackFlags_t flags, char check, 
109                       omError_t report, OM_FLR_DECL);
110omError_t omDoCheckBinAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level, 
111                           omError_t report, OM_FLR_DECL);
112omError_t _omCheckBin(omBin bin, int normal_bin, char check,  omError_t report, OM_FLR_DECL);
113omError_t _omCheckMemory(char check,  omError_t report, OM_FLR_DECL);
114omError_t omReportAddrError(omError_t error, omError_t report, void* addr, void* bin_size, omTrackFlags_t flags, 
115                            OM_FLR_DECL, const char* fmt, ...);
116omError_t omDoCheckBin(omBin bin, int normal_bin, char level, 
117                       omError_t report, OM_FLR_DECL);
118void omIterateTroughAddrs(int normal, int track, void (*CallBackUsed)(void*), void (*CallBackFree)(void*));
119void omIterateTroughBinAddrs(omBin bin, void (*CallBackUsed)(void*), void (*CallBackFree)(void*));
120omError_t omDoCheckAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level, 
121                        omError_t report, OM_FLR_DECL);
122int omIsInKeptAddrList(void* addr);
123
124/***********************************************************************
125 *
126 * omDebugTrack.c
127 *
128 **********************************************************************/
129#ifdef OM_HAVE_TRACK
130extern omBin_t om_StaticTrackBin[];
131extern omBin om_Size2TrackBin[];
132#define omSmallSize2TrackBin(size)      om_Size2TrackBin[((size) -1)>>LOG_SIZEOF_OM_ALIGNMENT]
133extern omBinPage om_JustFreedPage;
134extern void omFreeTrackAddr(void* addr);
135extern size_t omOutSizeOfTrackAddr(void* addr);
136extern omSpecBin om_SpecTrackBin;
137
138void* omAllocTrackAddr(void* bin_size, omTrackFlags_t flags, char track, OM_FLR_DECL);
139void* omMarkAsFreeTrackAddr(void* addr, int keep, omTrackFlags_t *flags, OM_FLR_DECL);
140omError_t omCheckTrackAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level, 
141                           omError_t report_error, OM_FLR_DECL);
142void omPrintTrackAddrInfo(FILE* fd, void* addr, int max_frames);
143omBin omGetOrigSpecBinOfTrackAddr(void* addr);
144size_t omOutSizeOfTrackAddr(void* addr);
145extern int omIsStaticTrackAddr(void* addr);
146#define omSetTrackOfUsedBlocks(ub)      (ub |= (((unsigned long) 1) << (BIT_SIZEOF_LONG -1)))
147#define omUnsetTrackOfUsedBlocks(ub)    (ub &= ~(((unsigned long) 1) << (BIT_SIZEOF_LONG -1)))
148#define omIsSetTrackOfUsedBlocks(ub)    (ub & (((unsigned long) 1) << (BIT_SIZEOF_LONG -1)))
149#else
150#define omIsStaticTrackAddr(addr)   0
151#endif
152void* omAddr_2_OutAddr(void* addr);
153
154/***********************************************************************
155 *
156 * omBinPage.c
157 *
158 **********************************************************************/
159int omIsKnownMemoryRegion(omBinPageRegion region);
160omError_t omCheckBinPageRegion(omBinPageRegion region, int level, omError_t report, OM_FLR_DECL);
161omError_t omCheckBinPageRegions(int level, omError_t report, OM_FLR_DECL);
162omBinPageRegion omFindRegionOfAddr(void* addr);
163int omIsAddrOnFreeBinPage(void* addr);
164
165/***********************************************************************
166 *
167 * Some Handy Macros
168 *
169 **********************************************************************/
170#define omCheckReturn(cond) \
171  do {omError_t _status = cond; if (_status) return _status;} while (0)
172#define omCheckReturnError(cond, error) \
173  do {if (cond) return omReportError(error, report, OM_FLR_VAL, "");} while (0)
174#define omCheckReturnCorrupted(cond) \
175  omCheckReturnError(cond, omError_MemoryCorrupted)
176#define omAddrCheckReturn(cond)                                               \
177do                                                                            \
178{                                                                             \
179  omError_t _status = cond;                                                   \
180  if (_status && _status != omError_MaxError)                                 \
181  {                                                                           \
182    _omPrintAddrInfo(stderr, _status, addr, bin_size, flags, 10, "  occured for"); \
183    return _status;                                                           \
184  }                                                                           \
185} while (0)
186#define omAddrCheckReturnError(cond, error) \
187  do {if (cond) return omReportAddrError(error, report, addr, bin_size, flags, OM_FLR_VAL, "");} while (0)
188#define omAddrCheckReturnCorrupted(cond) \
189  omAddrCheckReturnError(cond, omError_MemoryCorrupted)
190
191#else
192#define omFreeKeptAddrFromBin(bin) ((void)0)
193#endif /* ! OM_NDEBUG */
194/*ENDPRIVATE*/
195
196
197#endif /* OM_DEBUG_H */
Note: See TracBrowser for help on using the repository browser.