File: omtTest.h

package info (click to toggle)
singular 1%3A4.0.3-p3%2Bds-5
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 33,040 kB
  • ctags: 19,347
  • sloc: cpp: 271,589; ansic: 13,500; lisp: 4,242; yacc: 1,656; lex: 1,377; makefile: 1,264; perl: 632; sh: 467; python: 233; xml: 182
file content (127 lines) | stat: -rw-r--r-- 4,420 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <time.h>
#include <string.h>
#include <mylimits.h>

#define TRACK_LEVEL   1
#define CHECK_LEVEL   1
// keep every ith address: define to 0 if no keeping
#define KEEP_LEVEL    20
// #define KEEP_LEVEL    0

// #define MAX_CELLS  500000
// #define MAX_CELLS     100000
#define MAX_CELLS     100000
#define KEEP_ADDR     100
// #define KEEP_ADDR     0
#define END_CHECK_LEVEL 5

#ifdef OM_TEST_MALLOC
#define OM_EMULATE_OMALLOC
#endif


#include "omStructs.h"

struct omMemCell_s
{
  void* addr;
  omBin bin;
  unsigned long spec;
  omBin orig_bin;
};

typedef struct omMemCell_s omMemCell_t;
typedef omMemCell_t* omMemCell;

extern omMemCell_t cells[];
void TestAlloc(omMemCell cell, unsigned long spec);
void TestRealloc(omMemCell cell, unsigned long spec);
void TestFree(omMemCell cell);

#if CHECK_LEVEL > 2
#define myprintf(format, args...) \
  printf(format, ## args)
#define myfflush(what) fflush(what)
#else
#define myprintf(format, args...) do {} while (0)
#define myfflush(what)            do {} while (0)
#endif

#define IS_STICKY_BIN(spec) (spec & 1)
// #define IS_STICKY_BIN(spec) (0)
#define GET_SIZE(spec)      (spec & ((((unsigned long) 1) << 14) -1))
#define SET_SIZE(spec, size) spec = ((spec & ~((((unsigned long) 1) << 14) -1)) | (size))
#define IS_ALIGNED(spec)    (spec & (((unsigned long) 1) << 15))
#define IS_ZERO(spec)       (spec & (((unsigned long) 1) << 16))
#define IS_BIN(spec)        (spec & (((unsigned long) 1) << 17))
#define IS_SPEC_BIN(spec)   (spec & (((unsigned long) 1) << 18))
#define IS_INLINE(spec)     (spec & (((unsigned long) 1) << 19))
#define DO_FREE(spec)       (!(spec & (((unsigned long) 1) << 20))  && !(spec & (((unsigned long) 1) << 21)))
#define DO_REALLOC(spec)    ((spec & (((unsigned long) 1) << 20))  && (spec & (((unsigned long) 1) << 21)))
#define DO_DUP(spec)        ((spec & (((unsigned long) 1) << 20)) && ! (spec & (((unsigned long) 1) << 21)))
#if CHECK_LEVEL > 0
//#define DO_CHECK(spec)      1
#define DO_CHECK(spec)      (spec & (((unsigned long) 1) << 22))
#define DO_FREE_CHECK(spec) (spec & (((unsigned long) 1) << 23))
#else
#define DO_CHECK(spec)      0
#define DO_FREE_CHECK(spec) 0
#endif
#if CHECK_LEVEL > 0 && TRACK_LEVEL > 0
#define DO_TRACK(spec)      (spec & (((unsigned long) 1) << 24))
#define GET_TRACK(spec)     (((spec & ((((unsigned long) 1) << 27) | (((unsigned long) 1) << 26) | (((unsigned long) 1) << 25))) >> 25) % 5) + TRACK_LEVEL
// #define DO_TRACK(spec)      TRACK_LEVEL
// #define GET_TRACK(spec)     TRACK_LEVEL
#else
#define DO_TRACK(spec)      0
#define GET_TRACK(spec)     0
#endif
#if KEEP_LEVEL > 0
#define DO_KEEP(spec)           (DO_CHECK(spec) && (spec % KEEP_LEVEL == 0))
#define DO_FREE_KEEP(spec)      (DO_FREE_CHECK(spec) && (spec % KEEP_LEVEL == 0))
#else
#define DO_KEEP(spec)       0
#define DO_FREE_KEEP(spec)  0
#endif

#define IS_FREE_SIZE(spec)      (spec & (((unsigned long) 1) << 28))
#define IS_FREE_BIN(spec)       (spec & (((unsigned long) 1) << 29))
#define IS_SLOPPY(spec)         (spec & (((unsigned long) 1) << 30))
#define IS_FREE_BINADDR(spec)   (spec & (((unsigned long) 1) << 31))


#define SPEC_MAX   ULONG_MAX
#define SIZE_MAX  ((((unsigned long) 1) << 14) -1)
#define RANGE_MIN (((unsigned long) 1) << 6)
#define RANGE_MAX (((unsigned long) 1) << 14)

#define PAGES_PER_REGION 128

void omtTestAlloc(omMemCell cell, unsigned long spec);
void omtTestRealloc(omMemCell cell, unsigned long spec);
void omtTestDup(omMemCell cell, unsigned long spec);
void omtTestFree(omMemCell cell);

void omtTestAllocDebug(omMemCell cell, unsigned long spec);
void omtTestReallocDebug(omMemCell cell, unsigned long spec);
void omtTestDupDebug(omMemCell cell, unsigned long spec);
void omtTestFreeDebug(omMemCell cell);

void omtTestAllocKeep(omMemCell cell, unsigned long spec);
void omtTestReallocKeep(omMemCell cell, unsigned long spec);
void omtTestDupKeep(omMemCell cell, unsigned long spec);
void omtTestFreeKeep(omMemCell cell);

void InitCellAddrContent(omMemCell cell);
int omtTestErrors();
omBin omtGetStickyBin(omBin bin);

#if CHECK_LEVEL > 0
void omtTestDebug(omMemCell cell);
void TestAddrContent(void* addr, unsigned long value, size_t size);
void TestAddrContentEqual(void* s1, void* s2, size_t size);
#else
#define omtTestDebug(cell)               do {} while (0)
#define TestAddrContent(a,v,s)          do {} while (0)
#define TestAddrContentEqual(s1, s2, s) do {} while (0)
#endif