|  | # | 
|  | #  Awk program to analyze mtrace.c output. | 
|  | # | 
|  | $1 == "+"	{ if (allocated[$2] != "") | 
|  | print "+", $2, "Alloc", NR, "duplicate:", allocated[$2]; | 
|  | else | 
|  | allocated[$2] = $3; | 
|  | } | 
|  | $1 == "-"	{ if (allocated[$2] != "") { | 
|  | allocated[$2] = ""; | 
|  | if (allocated[$2] != "") | 
|  | print "DELETE FAILED", $2, allocated[$2]; | 
|  | } else | 
|  | print "-", $2, "Free", NR, "was never alloc'd"; | 
|  | } | 
|  | $1 == "<"	{ if (allocated[$2] != "") | 
|  | allocated[$2] = ""; | 
|  | else | 
|  | print "-", $2, "Realloc", NR, "was never alloc'd"; | 
|  | } | 
|  | $1 == ">"	{ if (allocated[$2] != "") | 
|  | print "+", $2, "Realloc", NR, "duplicate:", allocated[$2]; | 
|  | else | 
|  | allocated[$2] = $3; | 
|  | } | 
|  |  | 
|  | # Ignore "= Start" | 
|  | $1 == "="	{ } | 
|  | # Ignore failed realloc attempts for now | 
|  | $1 == "!"	{ } | 
|  |  | 
|  |  | 
|  | END		{ for (x in allocated) | 
|  | if (allocated[x] != "") | 
|  | print "+", x, allocated[x]; | 
|  | } |