]> git.lizzy.rs Git - plan9front.git/blob - sys/lib/acid/coverage
devproc: fix mistake
[plan9front.git] / sys / lib / acid / coverage
1 // Coverage library
2
3 defn coverage()
4 {
5         local lmap, lp, e, pc, n, l;
6
7         new();
8
9         bblock = {};
10
11         // find the first location in the text
12         e = (map()[0][1])\i;
13
14         while e < etext-4 do {
15                 l = follow(e);
16                 if tail l != {} then {
17                         if match(l[0], bblock) < 0 then
18                                 bblock = append bblock, l[0];
19                         if match(l[1], bblock) < 0 then
20                                 bblock = append bblock, l[1];
21                 }
22                 e++;
23         }
24
25         l = bblock;
26         while l != {} do {
27                 *fmt(head l, bpfmt) = bpinst;
28                 l = tail l;
29         }
30
31         while 1 do {
32                 cont();
33                 pc = *PC;
34                 n = match(pc, bblock);
35                 if n >= 0 then {
36                         pc = fmt(pc, bpfmt);
37                         *pc = @pc;
38                         bblock = delete bblock, n;
39                 }
40                 else {
41                         pstop(pid);
42                         return {};
43                 }
44         }
45 }
46
47 defn eblock(addr)
48 {
49         addr = addr\i;
50
51         while addr < etext do {
52                 if (tail follow(addr)) != {} then
53                         return pcline(addr);
54                 addr++;
55         }
56         return 0;
57 }
58
59 defn basic(stsrc, ensrc, file)
60 {
61         local src, text;
62
63         if stsrc >= ensrc then
64                 return {};
65
66         print(file, ":", stsrc, ",", ensrc, "\n");
67         src = match(file, srcfiles);
68
69         if src >= 0 then
70                 src = srctext[src];
71         else
72                 src = findsrc(file);
73
74         if src == {} then
75                 print("no source for ", file, "\n");
76         else {
77                 while stsrc <= ensrc do {
78                         text = src[stsrc];
79                         if text != {} then
80                                 print("\t", stsrc, ":", text, "\n");
81                         stsrc = stsrc+1;
82                 }
83         }
84 }
85
86 defn analyse(fnaddr)
87 {
88         local addr, l, tfn;
89
90         new();
91
92         tfn = fnbound(fnaddr);
93
94         l = bblock;
95         while l do {
96                 addr = head l;
97
98                 if addr >= tfn[0] && addr < tfn[1] then
99                         basic(pcline(addr), eblock(addr), pcfile(addr));
100                 
101                 l = tail l;
102         }
103         kill(pid);
104 }
105
106 defn report()
107 {
108         local addr, l;
109
110         new();
111
112         l = bblock;
113         while l do {
114                 addr = head l;
115
116                 basic(pcline(addr), eblock(addr), pcfile(addr));
117                 
118                 l = tail l;
119         }
120         kill(pid);
121 }
122
123 defn stopped(pid)
124 {
125         return {};
126 }
127
128 print("/sys/lib/acid/coverage");