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