source: git/omalloc/omDebug.h @ 341696

spielwiese
Last change on this file since 341696 was 341696, checked in by Hans Schönemann <hannes@…>, 14 years ago
Adding Id property to all files git-svn-id: file:///usr/local/Singular/svn/trunk@12231 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$
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,value) ((void)0)
73#define omGetCustomOfAddr(addr) ((void*)0)
74#define omSetCustomOfTrackAddr(addr,value) ((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)     ((long)(page->used_blocks & ~(((unsigned long) 1) << (BIT_SIZEOF_LONG -1))))
92#endif
93
94#ifndef OM_NDEBUG
95extern void* om_KeptAddr;
96extern void* om_LastKeptAddr;
97extern unsigned long om_MaxAddr;
98extern unsigned long om_MinAddr;
99extern void* om_AlwaysKeptAddrs;
100
101void omFreeKeptAddrFromBin(omBin bin);
102/***********************************************************************
103 *
104 * omDebugCheck.c
105 *
106 **********************************************************************/
107omError_t omCheckPtr(const 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,
115                            void* bin_size, omTrackFlags_t flags,
116                            OM_FLR_DECL, const char* fmt, ...);
117omError_t omDoCheckBin(omBin bin, int normal_bin, char level,
118                       omError_t report, OM_FLR_DECL);
119void omIterateTroughAddrs(int normal, int track, void (*CallBackUsed)(void*), void (*CallBackFree)(void*));
120void omIterateTroughBinAddrs(omBin bin, void (*CallBackUsed)(void*), void (*CallBackFree)(void*));
121omError_t omDoCheckAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level,
122                        omError_t report, OM_FLR_DECL);
123int omIsInKeptAddrList(void* addr);
124
125/***********************************************************************
126 *
127 * omDebugTrack.c
128 *
129 **********************************************************************/
130#ifdef OM_HAVE_TRACK
131extern omBin_t om_StaticTrackBin[];
132extern omBin om_Size2TrackBin[];
133#define omSmallSize2TrackBin(size)      om_Size2TrackBin[((size) -1)>>LOG_SIZEOF_OM_ALIGNMENT]
134extern omBinPage om_JustFreedPage;
135extern void omFreeTrackAddr(void* addr);
136extern size_t omOutSizeOfTrackAddr(void* addr);
137extern omSpecBin om_SpecTrackBin;
138
139void* omAllocTrackAddr(void* bin_size, omTrackFlags_t flags, char track, OM_FLR_DECL);
140void* omMarkAsFreeTrackAddr(void* addr, int keep, omTrackFlags_t *flags, OM_FLR_DECL);
141omError_t omCheckTrackAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level,
142                           omError_t report_error, OM_FLR_DECL);
143void omPrintTrackAddrInfo(FILE* fd, void* addr, int max_frames);
144omBin omGetOrigSpecBinOfTrackAddr(void* addr);
145size_t omOutSizeOfTrackAddr(void* addr);
146extern int omIsStaticTrackAddr(void* addr);
147#define omSetTrackOfUsedBlocks(ub)      (ub |= (((unsigned long) 1) << (BIT_SIZEOF_LONG -1)))
148#define omUnsetTrackOfUsedBlocks(ub)    (ub &= ~(((unsigned long) 1) << (BIT_SIZEOF_LONG -1)))
149#define omIsSetTrackOfUsedBlocks(ub)    (ub & (((unsigned long) 1) << (BIT_SIZEOF_LONG -1)))
150#else
151#define omIsStaticTrackAddr(addr)   0
152#endif
153void* omAddr_2_OutAddr(void* addr);
154
155/***********************************************************************
156 *
157 * omBinPage.c
158 *
159 **********************************************************************/
160int omIsKnownMemoryRegion(omBinPageRegion region);
161omError_t omCheckBinPageRegion(omBinPageRegion region, int level, omError_t report, OM_FLR_DECL);
162omError_t omCheckBinPageRegions(int level, omError_t report, OM_FLR_DECL);
163omBinPageRegion omFindRegionOfAddr(void* addr);
164int omIsAddrOnFreeBinPage(void* addr);
165
166/***********************************************************************
167 *
168 * Some Handy Macros
169 *
170 **********************************************************************/
171#define omCheckReturn(cond) \
172  do {omError_t _status = cond; if (_status) return _status;} while (0)
173#define omCheckReturnError(cond, error) \
174  do {if (cond) return omReportError(error, report, OM_FLR_VAL, "");} while (0)
175#define omCheckReturnCorrupted(cond) \
176  omCheckReturnError(cond, omError_MemoryCorrupted)
177#define omAddrCheckReturn(cond)                                               \
178do                                                                            \
179{                                                                             \
180  omError_t _status = cond;                                                   \
181  if (_status && (_status != omError_MaxError))                               \
182  {                                                                           \
183    _omPrintAddrInfo(stderr, _status, addr, bin_size, flags, 10, "  occured for"); \
184    return _status;                                                           \
185  }                                                                           \
186} while (0)
187#define omAddrCheckReturnError(cond, error) \
188  do {if (cond) return omReportAddrError(error, report, addr, bin_size, flags, OM_FLR_VAL, "");} while (0)
189#define omAddrCheckReturnCorrupted(cond) \
190  omAddrCheckReturnError(cond, omError_MemoryCorrupted)
191
192#else
193#define omFreeKeptAddrFromBin(bin) ((void)0)
194#endif /* ! OM_NDEBUG */
195/*ENDPRIVATE*/
196
197#endif /* OM_DEBUG_H */
Note: See TracBrowser for help on using the repository browser.