1# 2# Awk program to analyze mtrace.c output. 3# 4{ 5 if ($1 == "@") { 6 where = " (" $2 ")" 7 n = 3 8 } else { 9 where = "" 10 n = 1 11 } 12 if ($n == "+") { 13 if (allocated[$(n+1)] != "") 14 print "+", $(n+1), "Alloc", NR, "duplicate:", allocated[$(n+1)], wherewas[$(n+1)], where; 15 else { 16 wherewas[$(n+1)] = where; 17 allocated[$(n+1)] = $(n+2); 18 } 19 } else if ($n == "-") { 20 if (allocated[$(n+1)] != "") { 21 wherewas[$(n+1)] = ""; 22 allocated[$(n+1)] = ""; 23 if (allocated[$(n+1)] != "") 24 print "DELETE FAILED", $(n+1), allocated[$(n+1)]; 25 } else 26 print "-", $(n+1), "Free", NR, "was never alloc'd", where; 27 } else if ($n == "<") { 28 if (allocated[$(n+1)] != "") { 29 wherewas[$(n+1)] = ""; 30 allocated[$(n+1)] = ""; 31 } else 32 print "-", $(n+1), "Realloc", NR, "was never alloc'd", where; 33 } else if ($n == ">") { 34 if (allocated[$(n+1)] != "") 35 print "+", $(n+1), "Realloc", NR, "duplicate:", allocated[$(n+1)], where; 36 else { 37 wherewas[$(n+1)] = $(n+2); 38 allocated[$(n+1)] = $(n+2); 39 } 40 } else if ($n == "=") { 41 # Ignore "= Start" 42 } else if ($n == "!") { 43 # Ignore failed realloc attempts for now 44 } 45} 46END { 47 for (x in allocated) 48 if (allocated[x] != "") 49 print "+", x, allocated[x], wherewas[x]; 50} 51