1 0a61c07d 2004-04-19 devnull // support for acme; acid must be run with /acme/acid/$cputype/Acid
4 0a61c07d 2004-04-19 devnull defn w(*code)
6 0a61c07d 2004-04-19 devnull local dir;
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)+")'");
12 0a61c07d 2004-04-19 devnull defn procstk(pid, name)
14 0a61c07d 2004-04-19 devnull local dir;
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)+")'");
20 0a61c07d 2004-04-19 devnull defn taskstk(tid, name)
22 0a61c07d 2004-04-19 devnull local dir;
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)+")'");
28 0a61c07d 2004-04-19 devnull defn _stk(pc, sp, link, dolocals)
30 0a61c07d 2004-04-19 devnull local stk;
32 0a61c07d 2004-04-19 devnull print("At pc:", pc, ":", fmt(pc, 'a'), " ");
35 0a61c07d 2004-04-19 devnull stk = strace(pc, sp, link);
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]);
50 0a61c07d 2004-04-19 devnull //defn _stk(pc, sp, dolocals)
52 0a61c07d 2004-04-19 devnull // w(__stk(pc, sp, dolocals));
56 0a61c07d 2004-04-19 devnull defn params(param, name)
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 (",");
67 0a61c07d 2004-04-19 devnull defn locals(l, name)
69 0a61c07d 2004-04-19 devnull local sym;
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;
78 0a61c07d 2004-04-19 devnull defn bptab() // print a table of breakpoints
80 0a61c07d 2004-04-19 devnull local lst, addr;
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;
90 0a61c07d 2004-04-19 devnull defn procs() // print status of processes
92 0a61c07d 2004-04-19 devnull local c, lst, cpid;
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;
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);
109 0a61c07d 2004-04-19 devnull defn allstacks() // print stacks of processes and threads
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;
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;
126 0a61c07d 2004-04-19 devnull P = P.next;
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);
133 0a61c07d 2004-04-19 devnull print(acidfile);