Blame


1 0a61c07d 2004-04-19 devnull // support for acme; acid must be run with /acme/acid/$cputype/Acid
2 0a61c07d 2004-04-19 devnull
3 0a61c07d 2004-04-19 devnull
4 0a61c07d 2004-04-19 devnull defn w(*code)
5 0a61c07d 2004-04-19 devnull {
6 0a61c07d 2004-04-19 devnull local dir;
7 0a61c07d 2004-04-19 devnull
8 0a61c07d 2004-04-19 devnull printto("/tmp/acme.acid", eval code);
9 0a61c07d 2004-04-19 devnull rc("cat /tmp/acme.acid | wnew -d "+"Acid/-stk'("+itoa(pid)+")'");
10 0a61c07d 2004-04-19 devnull }
11 0a61c07d 2004-04-19 devnull
12 0a61c07d 2004-04-19 devnull defn procstk(pid, name)
13 0a61c07d 2004-04-19 devnull {
14 0a61c07d 2004-04-19 devnull local dir;
15 0a61c07d 2004-04-19 devnull
16 0a61c07d 2004-04-19 devnull printto("/tmp/acme.acid", stk());
17 0a61c07d 2004-04-19 devnull rc("cat /tmp/acme.acid | wnew -d "+"Acid/-'"+name+"("+itoa(pid)+")'");
18 0a61c07d 2004-04-19 devnull }
19 0a61c07d 2004-04-19 devnull
20 0a61c07d 2004-04-19 devnull defn taskstk(tid, name)
21 0a61c07d 2004-04-19 devnull {
22 0a61c07d 2004-04-19 devnull local dir;
23 0a61c07d 2004-04-19 devnull
24 0a61c07d 2004-04-19 devnull printto("/tmp/acme.acid", threadstk(tid));
25 0a61c07d 2004-04-19 devnull rc("cat /tmp/acme.acid | wnew -d "+"Acid/-"+name+"'("+itoa(pid)+")'");
26 0a61c07d 2004-04-19 devnull }
27 0a61c07d 2004-04-19 devnull
28 0a61c07d 2004-04-19 devnull defn _stk(pc, sp, link, dolocals)
29 0a61c07d 2004-04-19 devnull {
30 0a61c07d 2004-04-19 devnull local stk;
31 0a61c07d 2004-04-19 devnull
32 0a61c07d 2004-04-19 devnull print("At pc:", pc, ":", fmt(pc, 'a'), " ");
33 0a61c07d 2004-04-19 devnull pfl(pc);
34 0a61c07d 2004-04-19 devnull
35 0a61c07d 2004-04-19 devnull stk = strace(pc, sp, link);
36 0a61c07d 2004-04-19 devnull
37 0a61c07d 2004-04-19 devnull while stk do {
38 0a61c07d 2004-04-19 devnull frame = head stk;
39 0a61c07d 2004-04-19 devnull print(fmt(frame[0], 'a'), "(");
40 0a61c07d 2004-04-19 devnull params(frame[2], frame[0]);
41 0a61c07d 2004-04-19 devnull print(") ");
42 0a61c07d 2004-04-19 devnull print("\n\tcalled from ", fmt(frame[1], 'a'), " ");
43 0a61c07d 2004-04-19 devnull pfl(frame[1]);
44 0a61c07d 2004-04-19 devnull stk = tail stk;
45 0a61c07d 2004-04-19 devnull if dolocals then
46 0a61c07d 2004-04-19 devnull locals(frame[3], frame[0]);
47 0a61c07d 2004-04-19 devnull }
48 0a61c07d 2004-04-19 devnull }
49 0a61c07d 2004-04-19 devnull
50 0a61c07d 2004-04-19 devnull //defn _stk(pc, sp, dolocals)
51 0a61c07d 2004-04-19 devnull //{
52 0a61c07d 2004-04-19 devnull // w(__stk(pc, sp, dolocals));
53 0a61c07d 2004-04-19 devnull //}
54 0a61c07d 2004-04-19 devnull
55 0a61c07d 2004-04-19 devnull
56 0a61c07d 2004-04-19 devnull defn params(param, name)
57 0a61c07d 2004-04-19 devnull {
58 0a61c07d 2004-04-19 devnull while param do {
59 0a61c07d 2004-04-19 devnull sym = head param;
60 0a61c07d 2004-04-19 devnull print("*", fmt(name, 'a'), ":", sym[0], "=", sym[1]);
61 0a61c07d 2004-04-19 devnull param = tail param;
62 0a61c07d 2004-04-19 devnull if param then
63 0a61c07d 2004-04-19 devnull print (",");
64 0a61c07d 2004-04-19 devnull }
65 0a61c07d 2004-04-19 devnull }
66 0a61c07d 2004-04-19 devnull
67 0a61c07d 2004-04-19 devnull defn locals(l, name)
68 0a61c07d 2004-04-19 devnull {
69 0a61c07d 2004-04-19 devnull local sym;
70 0a61c07d 2004-04-19 devnull
71 0a61c07d 2004-04-19 devnull while l do {
72 0a61c07d 2004-04-19 devnull sym = head l;
73 0a61c07d 2004-04-19 devnull print("\t*", fmt(name, 'a'), ":", sym[0], "=", sym[1], "\n");
74 0a61c07d 2004-04-19 devnull l = tail l;
75 0a61c07d 2004-04-19 devnull }
76 0a61c07d 2004-04-19 devnull }
77 0a61c07d 2004-04-19 devnull
78 0a61c07d 2004-04-19 devnull defn bptab() // print a table of breakpoints
79 0a61c07d 2004-04-19 devnull {
80 0a61c07d 2004-04-19 devnull local lst, addr;
81 0a61c07d 2004-04-19 devnull
82 0a61c07d 2004-04-19 devnull lst = bplist;
83 0a61c07d 2004-04-19 devnull while lst do {
84 0a61c07d 2004-04-19 devnull addr = head lst;
85 0a61c07d 2004-04-19 devnull print("\tbpdel(", fmt(addr, 'a'), ")\n");
86 0a61c07d 2004-04-19 devnull lst = tail lst;
87 0a61c07d 2004-04-19 devnull }
88 0a61c07d 2004-04-19 devnull }
89 0a61c07d 2004-04-19 devnull
90 0a61c07d 2004-04-19 devnull defn procs() // print status of processes
91 0a61c07d 2004-04-19 devnull {
92 0a61c07d 2004-04-19 devnull local c, lst, cpid;
93 0a61c07d 2004-04-19 devnull
94 0a61c07d 2004-04-19 devnull cpid = pid;
95 0a61c07d 2004-04-19 devnull lst = proclist;
96 0a61c07d 2004-04-19 devnull while lst do {
97 0a61c07d 2004-04-19 devnull np = head lst;
98 0a61c07d 2004-04-19 devnull setproc(np);
99 0a61c07d 2004-04-19 devnull if np == cpid then
100 0a61c07d 2004-04-19 devnull print(">");
101 0a61c07d 2004-04-19 devnull print("\t", "setproc(", np, ")\t", status(np), " at ", fmt(*PC, 'a'), "\n");
102 0a61c07d 2004-04-19 devnull lst = tail lst;
103 0a61c07d 2004-04-19 devnull }
104 0a61c07d 2004-04-19 devnull pid = cpid;
105 0a61c07d 2004-04-19 devnull if pid != 0 then
106 0a61c07d 2004-04-19 devnull setproc(pid);
107 0a61c07d 2004-04-19 devnull }
108 0a61c07d 2004-04-19 devnull
109 0a61c07d 2004-04-19 devnull defn allstacks() // print stacks of processes and threads
110 0a61c07d 2004-04-19 devnull {
111 0a61c07d 2004-04-19 devnull complex Proc P;
112 0a61c07d 2004-04-19 devnull local T, Tq;
113 0a61c07d 2004-04-19 devnull local c, lst, cpid;
114 0a61c07d 2004-04-19 devnull
115 0a61c07d 2004-04-19 devnull cpid = pid;
116 0a61c07d 2004-04-19 devnull P = (Proc)pq.$head;
117 0a61c07d 2004-04-19 devnull while P != 0 do{
118 0a61c07d 2004-04-19 devnull Tq = (Tqueue)P.threads;
119 0a61c07d 2004-04-19 devnull T = (Thread)Tq.$head;
120 0a61c07d 2004-04-19 devnull setproc(P.pid);
121 0a61c07d 2004-04-19 devnull while T != 0 do{
122 0a61c07d 2004-04-19 devnull if(T.cmdname == 0) then taskstk(T, "unknown");
123 0a61c07d 2004-04-19 devnull else taskstk(T, *(T.cmdname\s));
124 0a61c07d 2004-04-19 devnull T = T.nextt;
125 0a61c07d 2004-04-19 devnull }
126 0a61c07d 2004-04-19 devnull P = P.next;
127 0a61c07d 2004-04-19 devnull }
128 0a61c07d 2004-04-19 devnull pid = cpid;
129 0a61c07d 2004-04-19 devnull if pid != 0 then
130 0a61c07d 2004-04-19 devnull setproc(pid);
131 0a61c07d 2004-04-19 devnull }
132 0a61c07d 2004-04-19 devnull
133 0a61c07d 2004-04-19 devnull print(acidfile);