omDebug.h
Go to the documentation of this file.
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  *******************************************************************/
7 #ifndef OM_DEBUG_H
8 #define OM_DEBUG_H
9 
10 
11 #if defined(OM_NDEBUG) || ! defined(OM_HAVE_TRACK)
12 #define omIsTrackAddr(addr) 0
13 #define omIsTrackAddrPage(page) 0
14 #define omIsNormalBinPageAddr(addr) omIsBinPageAddr(addr)
15 #define omIsBinAddrTrackAddr(addr) 0
16 #else
17 #define omIsTrackAddrBinPage(bin_page) ((bin_page)->used_blocks < 0)
18 #define omIsBinAddrTrackAddr(addr) omIsTrackAddrBinPage(omGetBinPageOfAddr(addr))
19 #define omIsTrackAddr(addr) (omIsBinPageAddr(addr) && omIsBinAddrTrackAddr(addr))
20 #define omIsNormalBinPageAddr(addr) (omIsBinPageAddr(addr) && !omIsBinAddrTrackAddr(addr))
21 #endif
22 
23 #if defined(OM_NDEBUG)
24 #define omMarkAsStaticAddr(addr) do {} while (0)
25 #define omMarkMemoryAsStatic() do {} while (0)
26 #define omUnMarkAsStaticAddr() do {} while (0)
27 #define omUnMarkMemoryAsStatic() do {} while (0)
28 #define omFreeKeptAddr() do {} while (0)
29 #define omPrintUsedAddrs(fd,m) do {} while (0)
30 #define omPrintUsedTrackAddrs(fd,m) do {} while (0)
31 #else
32 #define OM_FBIN 1 /* size_bin is bin */
33 #define OM_FSIZE 2 /* size_bin is size */
34 #define OM_FUSED 4 /* is in use, if set */
35 #define OM_FKEPT 8 /* had been freed, if set */
36 #define OM_FSTATIC 16 /* if set, considered to be static, i.e. never be freed */
37 #define OM_FZERO 32 /* for Alloc0 */
38 #define OM_FALIGN 64 /* for AllocAligned */
39 #define OM_FSLOPPY 128 /* be sloppy about arguments */
40 #define OM_FBINADDR 256 /* addr is bin addr */
41 #define OM_FKEEP 512 /* addr is never really freed */
42 /* maximal flag: OM_FBIN and OM_FSIZE can not be at the same time,
43  and so can't OM_USED and OM_KEPT. Hence 1024 - BIN - USED*/
44 #define OM_FMAX 1024 - OM_FBIN - OM_FUSED
45 typedef unsigned short omTrackFlags_t;
46 
47 void* _omDebugAlloc(void* size_bin, omTrackFlags_t flags, OM_CTFL_DECL);
48 void* _omDebugRealloc(void* old_addr, void* old_size_bin, void* new_size_bin,
49  omTrackFlags_t old_flags, omTrackFlags_t new_flags, OM_CTFL_DECL);
50 void _omDebugFree(void* addr, void* size_bin, omTrackFlags_t flags, OM_CFL_DECL);
51 void* _omDebugMemDup(void* addr, omTrackFlags_t flags, OM_CTFL_DECL);
52 char* _omDebugStrDup(const char* addr, OM_TFL_DECL);
53 
54 omError_t _omDebugBin(omBin bin, OM_CFL_DECL);
55 omError_t _omDebugMemory(OM_CFL_DECL);
56 omError_t _omDebugAddr(void* addr, void* bin_size, omTrackFlags_t flags, OM_CFL_DECL);
57 
58 void omFreeKeptAddr();
59 void omPrintUsedAddrs(FILE* fd, int max_frames);
60 void omPrintUsedTrackAddrs(FILE* fd, int max_frames);
61 
62 void omMarkAsStaticAddr(void* addr);
64 void omUnMarkAsStaticAddr(void* addr);
66 #endif /* ! OM_NDEBUG */
67 
68 
69 #ifdef OM_TRACK_CUSTOM
70 #ifdef OM_NDEBUG
71 #define omSetCustomOfAddr(addr,value) do {} while (0)
72 #define omGetCustomOfAddr(addr) ((void*)0)
73 #define omSetCustomOfTrackAddr(addr,value) do {} while (0)
74 #define omGetCustomOfTrackAddr(addr) ((void*)0)
75 #else
76 void omSetCustomOfTrackAddr(void* addr, void* value);
77 void* omGetCustomOfTrackAddr(void* addr);
78 #define omSetCustomOfAddr(addr,value) \
79  do{if (omIsTrackAddr(addr)) omSetCustomOfTrackAddr(addr,value);}while(0)
80 #define omGetCustomOfAddr(addr) \
81  (omIsTrackAddr(addr) ? omGetCustomOfTrackAddr(addr) : NULL)
82 #endif /* OM_NDEBUG */
83 #endif /* OM_TRACK_CUSTOM */
84 
85 /*BEGINPRIVATE*/
86 
87 #if defined(OM_NDEBUG) || ! defined(OM_HAVE_TRACK)
88 #define omGetUsedBlocksOfPage(page) (page->used_blocks)
89 #else
90 #define omGetUsedBlocksOfPage(page) ((long)(page->used_blocks & ~(((unsigned long) 1) << (BIT_SIZEOF_LONG -1))))
91 #endif
92 
93 #ifndef OM_NDEBUG
94 extern void* om_KeptAddr;
95 extern void* om_LastKeptAddr;
96 extern unsigned long om_MaxAddr;
97 extern unsigned long om_MinAddr;
98 extern void* om_AlwaysKeptAddrs;
99 
100 void omFreeKeptAddrFromBin(omBin bin);
101 /***********************************************************************
102  *
103  * omDebugCheck.c
104  *
105  **********************************************************************/
106 omError_t omCheckPtr(const void* ptr, omError_t report, OM_FLR_DECL);
107 omError_t _omCheckAddr(void* addr, void* size_bin, omTrackFlags_t flags, char check,
108  omError_t report, OM_FLR_DECL);
109 omError_t omDoCheckBinAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level,
110  omError_t report, OM_FLR_DECL);
111 omError_t _omCheckBin(omBin bin, int normal_bin, char check, omError_t report, OM_FLR_DECL);
112 omError_t _omCheckMemory(char check, omError_t report, OM_FLR_DECL);
114  void* bin_size, omTrackFlags_t flags,
115  OM_FLR_DECL, const char* fmt, ...);
116 omError_t omDoCheckBin(omBin bin, int normal_bin, char level,
117  omError_t report, OM_FLR_DECL);
118 void omIterateTroughAddrs(int normal, int track, void (*CallBackUsed)(void*), void (*CallBackFree)(void*));
119 void omIterateTroughBinAddrs(omBin bin, void (*CallBackUsed)(void*), void (*CallBackFree)(void*));
120 omError_t omDoCheckAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level,
121  omError_t report, OM_FLR_DECL);
122 int omIsInKeptAddrList(void* addr);
123 
124 /***********************************************************************
125  *
126  * omDebugTrack.c
127  *
128  **********************************************************************/
129 #ifdef OM_HAVE_TRACK
130 extern omBin_t om_StaticTrackBin[];
131 extern omBin om_Size2TrackBin[];
132 #define omSmallSize2TrackBin(size) om_Size2TrackBin[((size) -1)>>LOG_SIZEOF_OM_ALIGNMENT]
133 extern omBinPage om_JustFreedPage;
134 extern void omFreeTrackAddr(void* addr);
135 extern size_t omOutSizeOfTrackAddr(void* addr);
136 extern omSpecBin om_SpecTrackBin;
137 
138 void* omAllocTrackAddr(void* bin_size, omTrackFlags_t flags, char track, OM_FLR_DECL);
139 void* omMarkAsFreeTrackAddr(void* addr, int keep, omTrackFlags_t *flags, OM_FLR_DECL);
140 omError_t omCheckTrackAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level,
141  omError_t report_error, OM_FLR_DECL);
142 void omPrintTrackAddrInfo(FILE* fd, void* addr, int max_frames);
143 omBin omGetOrigSpecBinOfTrackAddr(void* addr);
144 size_t omOutSizeOfTrackAddr(void* addr);
145 extern 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
152 void* omAddr_2_OutAddr(void* addr);
153 
154 /***********************************************************************
155  *
156  * omBinPage.c
157  *
158  **********************************************************************/
160 omError_t omCheckBinPageRegion(omBinPageRegion region, int level, omError_t report, OM_FLR_DECL);
161 omError_t omCheckBinPageRegions(int level, omError_t report, OM_FLR_DECL);
163 int 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) \
177 do \
178 { \
179  omError_t _status = cond; \
180  if (_status && (_status != omError_MaxError)) \
181  { \
182  _omPrintAddrInfo(stderr, _status, addr, bin_size, flags, 10, " occurred 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) do {} while (0)
193 #endif /* ! OM_NDEBUG */
194 /*ENDPRIVATE*/
195 
196 #endif /* OM_DEBUG_H */
int status int fd
Definition: si_signals.h:59
void _omDebugFree(void *addr, void *size_bin, omTrackFlags_t flags, OM_CFL_DECL)
Definition: omDebug.c:182
enum omError_e omError_t
Definition: omError.h:44
omError_t omDoCheckBinAddr(void *addr, void *bin_size, omTrackFlags_t flags, char level, omError_t report, OM_FLR_DECL)
Definition: omDebugCheck.c:198
int level(const CanonicalForm &f)
omBin_t * omBin
Definition: omStructs.h:12
omError_t omCheckBinPageRegion(omBinPageRegion region, int level, omError_t report, OM_FLR_DECL)
Definition: omBinPage.c:497
int check
Definition: libparse.cc:1104
void omFreeKeptAddr()
Definition: omDebug.c:609
void * _omDebugAlloc(void *size_bin, omTrackFlags_t flags, OM_CTFL_DECL)
Definition: omDebug.c:110
void omUnMarkAsStaticAddr(void *addr)
omBinPageRegion omFindRegionOfAddr(void *addr)
Definition: omBinPage.c:570
unsigned short omTrackFlags_t
Definition: omDebug.h:45
omError_t _omCheckAddr(void *addr, void *size_bin, omTrackFlags_t flags, char check, omError_t report, OM_FLR_DECL)
Definition: omDebugCheck.c:36
omError_t omDoCheckAddr(void *addr, void *bin_size, omTrackFlags_t flags, char level, omError_t report, OM_FLR_DECL)
Definition: omDebugCheck.c:146
void * om_AlwaysKeptAddrs
Definition: omDebug.c:31
void omIterateTroughBinAddrs(omBin bin, void(*CallBackUsed)(void *), void(*CallBackFree)(void *))
Definition: omDebugCheck.c:456
void * _omDebugRealloc(void *old_addr, void *old_size_bin, void *new_size_bin, omTrackFlags_t old_flags, omTrackFlags_t new_flags, OM_CTFL_DECL)
Definition: omDebug.c:147
omError_t _omDebugMemory(OM_CFL_DECL)
Definition: omDebug.c:286
#define omIsStaticTrackAddr(addr)
Definition: omDebug.h:150
int omIsAddrOnFreeBinPage(void *addr)
Definition: omBinPage.c:587
omError_t omDoCheckBin(omBin bin, int normal_bin, char level, omError_t report, OM_FLR_DECL)
Definition: omDebugCheck.c:253
omError_t _omDebugAddr(void *addr, void *bin_size, omTrackFlags_t flags, OM_CFL_DECL)
Definition: omDebug.c:278
omSpecBin_t * omSpecBin
Definition: omStructs.h:30
omError_t _omCheckBin(omBin bin, int normal_bin, char check, omError_t report, OM_FLR_DECL)
Definition: omDebugCheck.c:49
int omIsKnownMemoryRegion(omBinPageRegion region)
Definition: omBinPage.c:481
omError_t _omCheckMemory(char check, omError_t report, OM_FLR_DECL)
Definition: omDebugCheck.c:58
omError_t omCheckPtr(const void *ptr, omError_t report, OM_FLR_DECL)
Definition: omDebugCheck.c:136
omBinPage_t * omBinPage
Definition: omStructs.h:16
omBinPageRegion_t * omBinPageRegion
Definition: omStructs.h:20
void * _omDebugMemDup(void *addr, omTrackFlags_t flags, OM_CTFL_DECL)
Definition: omDebug.c:201
void * om_LastKeptAddr
Definition: omDebug.c:30
void * omAddr_2_OutAddr(void *addr)
#define error(a)
Definition: mpr_numeric.cc:979
char * _omDebugStrDup(const char *addr, OM_TFL_DECL)
Definition: omDebug.c:231
void omIterateTroughAddrs(int normal, int track, void(*CallBackUsed)(void *), void(*CallBackFree)(void *))
Definition: omDebugCheck.c:495
omError_t omCheckBinPageRegions(int level, omError_t report, OM_FLR_DECL)
Definition: omBinPage.c:523
void * om_KeptAddr
Definition: omDebug.c:28
void omUnMarkMemoryAsStatic()
void omMarkMemoryAsStatic()
omError_t omReportAddrError(omError_t error, omError_t report, void *addr, void *bin_size, omTrackFlags_t flags, OM_FLR_DECL, const char *fmt,...)
Definition: omDebugCheck.c:394
void omPrintUsedTrackAddrs(FILE *fd, int max_frames)
Definition: omDebugCheck.c:568
omError_t _omDebugBin(omBin bin, OM_CFL_DECL)
Definition: omDebug.c:293
void omMarkAsStaticAddr(void *addr)
void omPrintUsedAddrs(FILE *fd, int max_frames)
Definition: omDebugCheck.c:557
int omIsInKeptAddrList(void *addr)
Definition: omDebugTrack.c:737
unsigned long om_MinAddr
Definition: omDebugCheck.c:20
int status int void size_t count int const void size_t count const char int flags
Definition: si_signals.h:73
unsigned long om_MaxAddr
Definition: omDebugCheck.c:19
void omFreeKeptAddrFromBin(omBin bin)
Definition: omDebug.c:542