head     1.1;
branch   ;
access   ;
symbols  ;
locks    ;
comment  @# @;


1.1
date     90.10.13.03.24.44;  author lee;  state Exp;
branches ;
next     ;


desc
@process output of -DMALLTRACE
@



1.1
log
@Initial revision
@
text
@#! /bin/sh

# $Id$

# process the output of -DMALLOCTRACE

nawk '
/^malloc/ {
    if ($4 in Sizes) {
	Oops("Malloc Address " $4 " in use (" File[$4] ", " Line[$4] "): " $0)
    }
    Sizes[$4] = $2
    if (!($5 in FilesSeen)) {
	++NFiles
	FilesSeen[$5] = NFiles;
	FileNames[NFiles] = $5
    }
    File[$4] = FilesSeen[$5]
    Line[$4] = $6
}

/^free/ {
    if (!($2 in Sizes)) {
	Oops("free " $2 " not previously in use")
    }
    delete Sizes[$2]
    delete File[$2]
    delete Line[$2]
}

/^realloc/ {
    if (!($2 in Sizes)) {
	Oops("Realloc address not in use: " $0)
    }
    delete Sizes[$2]
    delete File[$2]
    delete Line[$2]
    Sizes[$5] = $3
    if (!($6 in FilesSeen)) {
	++NFiles
	FilesSeen[$6] = NFiles;
	FileNames[NFiles] = $6
    }
    File[$5] = FilesSeen[$6]
    Line[$5] = $7
}

END {
    for (i in Sizes) {
	printf "%s %d\t%s %d bytes\n", FileNames[File[i]], Line[i], i, Sizes[i]
    }
}

function Oops(s)
{
    print s | "cat 1>&2"
    exit 1
}

# $Log$
#
@
