Commit f89446f6 authored by Adam Reichold's avatar Adam Reichold Committed by Albert Astals Cid

Remove generic heap debugging from gmem since external tools and compiler...

Remove generic heap debugging from gmem since external tools and compiler instrumentation achieve the same effect.
parent 38b67245
......@@ -30,78 +30,7 @@
#include <limits.h>
#include "gmem.h"
#ifdef DEBUG_MEM
typedef struct _GMemHdr {
unsigned int magic;
int size;
int index;
struct _GMemHdr *next, *prev;
} GMemHdr;
#define gMemHdrSize ((sizeof(GMemHdr) + 7) & ~7)
#define gMemTrlSize (sizeof(long))
#define gMemMagic 0xabcd9999
#if gmemTrlSize==8
#define gMemDeadVal 0xdeadbeefdeadbeefUL
#else
#define gMemDeadVal 0xdeadbeefUL
#endif
/* round data size so trailer will be aligned */
#define gMemDataSize(size) \
((((size) + gMemTrlSize - 1) / gMemTrlSize) * gMemTrlSize)
static GMemHdr *gMemHead = NULL;
static GMemHdr *gMemTail = NULL;
static int gMemIndex = 0;
static int gMemAlloc = 0;
static int gMemInUse = 0;
#endif /* DEBUG_MEM */
inline static void *gmalloc(size_t size, bool checkoverflow) {
#ifdef DEBUG_MEM
int size1;
char *mem;
GMemHdr *hdr;
void *data;
unsigned long *trl, *p;
if (size == 0) {
return NULL;
}
size1 = gMemDataSize(size);
if (!(mem = (char *)malloc(size1 + gMemHdrSize + gMemTrlSize))) {
fprintf(stderr, "Out of memory\n");
if (checkoverflow) return NULL;
else exit(1);
}
hdr = (GMemHdr *)mem;
data = (void *)(mem + gMemHdrSize);
trl = (unsigned long *)(mem + gMemHdrSize + size1);
hdr->magic = gMemMagic;
hdr->size = size;
hdr->index = gMemIndex++;
if (gMemTail) {
gMemTail->next = hdr;
hdr->prev = gMemTail;
gMemTail = hdr;
} else {
hdr->prev = NULL;
gMemHead = gMemTail = hdr;
}
hdr->next = NULL;
++gMemAlloc;
gMemInUse += size;
for (p = (unsigned long *)data; p <= trl; ++p) {
*p = gMemDeadVal;
}
return data;
#else
void *p;
if (size == 0) {
......@@ -113,7 +42,6 @@ inline static void *gmalloc(size_t size, bool checkoverflow) {
else exit(1);
}
return p;
#endif
}
void *gmalloc(size_t size) {
......@@ -125,28 +53,6 @@ void *gmalloc_checkoverflow(size_t size) {
}
inline static void *grealloc(void *p, size_t size, bool checkoverflow) {
#ifdef DEBUG_MEM
GMemHdr *hdr;
void *q;
int oldSize;
if (size == 0) {
if (p) {
gfree(p);
}
return NULL;
}
if (p) {
hdr = (GMemHdr *)((char *)p - gMemHdrSize);
oldSize = hdr->size;
q = gmalloc(size, checkoverflow);
memcpy(q, p, size < oldSize ? size : oldSize);
gfree(p);
} else {
q = gmalloc(size, checkoverflow);
}
return q;
#else
void *q;
if (size == 0) {
......@@ -166,7 +72,6 @@ inline static void *grealloc(void *p, size_t size, bool checkoverflow) {
else exit(1);
}
return q;
#endif
}
void *grealloc(void *p, size_t size) {
......@@ -245,66 +150,10 @@ void *greallocn_checkoverflow(void *p, int nObjs, int objSize) {
}
void gfree(void *p) {
#ifdef DEBUG_MEM
int size;
GMemHdr *hdr;
unsigned long *trl, *clr;
if (p) {
hdr = (GMemHdr *)((char *)p - gMemHdrSize);
if (hdr->magic == gMemMagic &&
((hdr->prev == NULL) == (hdr == gMemHead)) &&
((hdr->next == NULL) == (hdr == gMemTail))) {
if (hdr->prev) {
hdr->prev->next = hdr->next;
} else {
gMemHead = hdr->next;
}
if (hdr->next) {
hdr->next->prev = hdr->prev;
} else {
gMemTail = hdr->prev;
}
--gMemAlloc;
gMemInUse -= hdr->size;
size = gMemDataSize(hdr->size);
trl = (unsigned long *)((char *)hdr + gMemHdrSize + size);
if (*trl != gMemDeadVal) {
fprintf(stderr, "Overwrite past end of block %d at address %p\n",
hdr->index, p);
}
for (clr = (unsigned long *)hdr; clr <= trl; ++clr) {
*clr = gMemDeadVal;
}
free(hdr);
} else {
fprintf(stderr, "Attempted to free bad address %p\n", p);
}
}
#else
if (p) {
free(p);
}
#endif
}
#ifdef DEBUG_MEM
void gMemReport(FILE *f) {
GMemHdr *p;
fprintf(f, "%d memory allocations in all\n", gMemIndex);
if (gMemAlloc > 0) {
fprintf(f, "%d memory blocks left allocated:\n", gMemAlloc);
fprintf(f, " index size\n");
fprintf(f, "-------- --------\n");
for (p = gMemHead; p; p = p->next) {
fprintf(f, "%8d %8d\n", p->index, p->size);
}
} else {
fprintf(f, "No memory blocks left allocated\n");
}
}
#endif
char *copyString(const char *s) {
char *s1;
......
......@@ -66,15 +66,6 @@ extern void *greallocn_checkoverflow(void *p, int nObjs, int objSize);
*/
extern void gfree(void *p);
#ifdef DEBUG_MEM
/*
* Report on unfreed memory.
*/
extern void gMemReport(FILE *f);
#else
#define gMemReport(f)
#endif
/*
* Allocate memory and copy a string into it.
*/
......
......@@ -316,7 +316,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return exitCode;
}
......@@ -225,7 +225,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return exitCode;
}
......
......@@ -231,7 +231,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return exitCode;
}
......@@ -754,7 +754,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return exitCode;
}
......@@ -1286,7 +1286,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return 0;
}
......@@ -454,7 +454,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return exit_status;
}
......
......@@ -653,7 +653,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return exitCode;
}
......@@ -444,7 +444,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return exitCode;
}
......@@ -433,7 +433,6 @@ int main(int argc, char *argv[]) {
// check for memory leaks
Object::memCheck(stderr);
gMemReport(stderr);
return exitCode;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment