add debugging info to system_malloc
This commit is contained in:
parent
ccca051c48
commit
78b3213d5a
60
C/alloc.c
60
C/alloc.c
@ -122,16 +122,11 @@ static char * my_realloc(char *ptr, UInt sz, UInt osz, int safe)
|
|||||||
long long unsigned int mallocs, reallocs, frees;
|
long long unsigned int mallocs, reallocs, frees;
|
||||||
long long unsigned int tmalloc;
|
long long unsigned int tmalloc;
|
||||||
|
|
||||||
#if INSTRUMENT_MALLOC
|
#if DEBUG
|
||||||
static void
|
#define INSTRUMENT_MALLOC 1
|
||||||
minfo(char mtype)
|
|
||||||
{
|
|
||||||
struct mallinfo minfo = mallinfo();
|
|
||||||
|
|
||||||
fprintf(stderr,"%c %lld (%lld), %lld, %lld %d/%d/%d\n", mtype, mallocs, tmalloc, reallocs, frees,minfo.arena,minfo.ordblks,minfo.fordblks);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static inline char *
|
static inline char *
|
||||||
call_malloc(unsigned long int size)
|
call_malloc(unsigned long int size)
|
||||||
{
|
{
|
||||||
@ -140,13 +135,16 @@ call_malloc(unsigned long int size)
|
|||||||
LOCK(DLMallocLock);
|
LOCK(DLMallocLock);
|
||||||
#endif
|
#endif
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
if (mallocs % 1024*4 == 0)
|
|
||||||
minfo('A');
|
|
||||||
mallocs++;
|
mallocs++;
|
||||||
tmalloc += size;
|
tmalloc += size;
|
||||||
|
size += sizeof(CELL);
|
||||||
#endif
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
out = (char *) my_malloc(size);
|
out = (char *) my_malloc(size);
|
||||||
|
#if INSTRUMENT_MALLOC
|
||||||
|
*(CELL*)out = size-sizeof(CELL);
|
||||||
|
out += sizeof(CELL);
|
||||||
|
#endif
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
UNLOCK(DLMallocLock);
|
UNLOCK(DLMallocLock);
|
||||||
@ -168,13 +166,18 @@ call_realloc(char *p, unsigned long int size)
|
|||||||
LOCK(DLMallocLock);
|
LOCK(DLMallocLock);
|
||||||
#endif
|
#endif
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
if (mallocs % 1024*4 == 0)
|
reallocs++;
|
||||||
minfo('A');
|
|
||||||
mallocs++;
|
|
||||||
tmalloc += size;
|
tmalloc += size;
|
||||||
|
size += sizeof(CELL);
|
||||||
|
p -= sizeof(CELL);
|
||||||
|
tmalloc -= *(CELL*)p;
|
||||||
#endif
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
out = (char *) my_realloc0(p, size);
|
out = (char *) my_realloc0(p, size);
|
||||||
|
#if INSTRUMENT_MALLOC
|
||||||
|
*(CELL*)out = size-sizeof(CELL);
|
||||||
|
out += sizeof(CELL);
|
||||||
|
#endif
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
UNLOCK(DLMallocLock);
|
UNLOCK(DLMallocLock);
|
||||||
@ -195,10 +198,9 @@ Yap_FreeCodeSpace(char *p)
|
|||||||
LOCK(DLMallocLock);
|
LOCK(DLMallocLock);
|
||||||
#endif
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
|
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
if (frees % 1024*4 == 0)
|
p -= sizeof(CELL);
|
||||||
minfo('F');
|
tmalloc -= *(CELL*)p;
|
||||||
frees++;
|
frees++;
|
||||||
#endif
|
#endif
|
||||||
my_free (p);
|
my_free (p);
|
||||||
@ -222,8 +224,8 @@ Yap_FreeAtomSpace(char *p)
|
|||||||
#endif
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
if (frees % 1024*4 == 0)
|
p -= sizeof(CELL);
|
||||||
minfo('F');
|
tmalloc -= *(CELL*)p;
|
||||||
frees++;
|
frees++;
|
||||||
#endif
|
#endif
|
||||||
my_free (p);
|
my_free (p);
|
||||||
@ -247,6 +249,11 @@ Yap_InitPreAllocCodeSpace(void)
|
|||||||
LOCK(DLMallocLock);
|
LOCK(DLMallocLock);
|
||||||
#endif
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
|
#if INSTRUMENT_MALLOC
|
||||||
|
mallocs++;
|
||||||
|
tmalloc += sz;
|
||||||
|
sz += sizeof(CELL);
|
||||||
|
#endif
|
||||||
while (!(ptr = my_malloc(sz))) {
|
while (!(ptr = my_malloc(sz))) {
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
@ -256,6 +263,12 @@ Yap_InitPreAllocCodeSpace(void)
|
|||||||
Yap_Error(OUT_OF_HEAP_ERROR, TermNil, Yap_ErrorMessage);
|
Yap_Error(OUT_OF_HEAP_ERROR, TermNil, Yap_ErrorMessage);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
#if INSTRUMENT_MALLOC
|
||||||
|
fprintf(stderr,"vsc ptr=%p\n",ptr);
|
||||||
|
sz -= sizeof(CELL);
|
||||||
|
*(CELL*)ptr = sz;
|
||||||
|
ptr += sizeof(CELL);
|
||||||
|
#endif
|
||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
LOCK(DLMallocLock);
|
LOCK(DLMallocLock);
|
||||||
#endif
|
#endif
|
||||||
@ -289,13 +302,14 @@ Yap_ExpandPreAllocCodeSpace(UInt sz0, void *cip, int safe)
|
|||||||
|
|
||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
LOCK(DLMallocLock);
|
LOCK(DLMallocLock);
|
||||||
#endif
|
|
||||||
#if INSTRUMENT_MALLOC
|
|
||||||
if (reallocs % 1024*4 == 0)
|
|
||||||
minfo('R');
|
|
||||||
reallocs++;
|
|
||||||
#endif
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
|
#if INSTRUMENT_MALLOC
|
||||||
|
reallocs++;
|
||||||
|
tmalloc -= ScratchPad.sz;
|
||||||
|
tmalloc += sz;
|
||||||
|
fprintf(stderr,"vsc ptr=%p\n",ScratchPad.ptr);
|
||||||
|
#endif
|
||||||
if (!(ptr = my_realloc(ScratchPad.ptr, sz, ScratchPad.sz, safe))) {
|
if (!(ptr = my_realloc(ScratchPad.ptr, sz, ScratchPad.sz, safe))) {
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
|
Reference in New Issue
Block a user