1#! /usr/bin/awk -f
2#
3# xleaktrace - print unfreed memory using input generated by compact malloc
4#	       tracing (malloc_set_trace(1))
5#
6# NOTE: we ignore `realloc' tags because they're just extra information
7#
8# Copyright (c) 2001 Chester Ramey
9# Permission is hereby granted to deal in this Software without restriction.
10# THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
11#
12# Chet Ramey
13# chet@po.cwru.edu
14#
15BEGIN {
16	FS=":";
17}
18
19$1 == "alloc"	{
20			alloc[$2] = 1;
21
22			size[$2] = $3;
23			file[$2] = $4;
24			line[$2] = $5;
25
26#			printf "allocated: %s %d %d %s %d\n", $2, alloc[$2], size[$2], file[$2], line[$2];
27		}
28
29$1 == "free"	{
30			if ($2 in alloc) {
31				alloc[$2] = 0;
32#				printf "freed: %s %d\n", $2, alloc[$2];
33			} else
34				printf "freeing unallocated pointer: %s\n", $2;
35				
36		}
37
38END {
39	printf "unfreed memory\n";
40	for (ptr in alloc) {
41		if (alloc[ptr] == 1) {
42			printf "%s (%d) from %s:%d\n", ptr, size[ptr], file[ptr], line[ptr];
43		}
44	}
45}
46	
47	
48