acid files
This commit is contained in:
parent
c8af1ab17b
commit
0a61c07d59
23 changed files with 4251 additions and 0 deletions
133
acid/acme
Normal file
133
acid/acme
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
// support for acme; acid must be run with /acme/acid/$cputype/Acid
|
||||
|
||||
|
||||
defn w(*code)
|
||||
{
|
||||
local dir;
|
||||
|
||||
printto("/tmp/acme.acid", eval code);
|
||||
rc("cat /tmp/acme.acid | wnew -d "+"Acid/-stk'("+itoa(pid)+")'");
|
||||
}
|
||||
|
||||
defn procstk(pid, name)
|
||||
{
|
||||
local dir;
|
||||
|
||||
printto("/tmp/acme.acid", stk());
|
||||
rc("cat /tmp/acme.acid | wnew -d "+"Acid/-'"+name+"("+itoa(pid)+")'");
|
||||
}
|
||||
|
||||
defn taskstk(tid, name)
|
||||
{
|
||||
local dir;
|
||||
|
||||
printto("/tmp/acme.acid", threadstk(tid));
|
||||
rc("cat /tmp/acme.acid | wnew -d "+"Acid/-"+name+"'("+itoa(pid)+")'");
|
||||
}
|
||||
|
||||
defn _stk(pc, sp, link, dolocals)
|
||||
{
|
||||
local stk;
|
||||
|
||||
print("At pc:", pc, ":", fmt(pc, 'a'), " ");
|
||||
pfl(pc);
|
||||
|
||||
stk = strace(pc, sp, link);
|
||||
|
||||
while stk do {
|
||||
frame = head stk;
|
||||
print(fmt(frame[0], 'a'), "(");
|
||||
params(frame[2], frame[0]);
|
||||
print(") ");
|
||||
print("\n\tcalled from ", fmt(frame[1], 'a'), " ");
|
||||
pfl(frame[1]);
|
||||
stk = tail stk;
|
||||
if dolocals then
|
||||
locals(frame[3], frame[0]);
|
||||
}
|
||||
}
|
||||
|
||||
//defn _stk(pc, sp, dolocals)
|
||||
//{
|
||||
// w(__stk(pc, sp, dolocals));
|
||||
//}
|
||||
|
||||
|
||||
defn params(param, name)
|
||||
{
|
||||
while param do {
|
||||
sym = head param;
|
||||
print("*", fmt(name, 'a'), ":", sym[0], "=", sym[1]);
|
||||
param = tail param;
|
||||
if param then
|
||||
print (",");
|
||||
}
|
||||
}
|
||||
|
||||
defn locals(l, name)
|
||||
{
|
||||
local sym;
|
||||
|
||||
while l do {
|
||||
sym = head l;
|
||||
print("\t*", fmt(name, 'a'), ":", sym[0], "=", sym[1], "\n");
|
||||
l = tail l;
|
||||
}
|
||||
}
|
||||
|
||||
defn bptab() // print a table of breakpoints
|
||||
{
|
||||
local lst, addr;
|
||||
|
||||
lst = bplist;
|
||||
while lst do {
|
||||
addr = head lst;
|
||||
print("\tbpdel(", fmt(addr, 'a'), ")\n");
|
||||
lst = tail lst;
|
||||
}
|
||||
}
|
||||
|
||||
defn procs() // print status of processes
|
||||
{
|
||||
local c, lst, cpid;
|
||||
|
||||
cpid = pid;
|
||||
lst = proclist;
|
||||
while lst do {
|
||||
np = head lst;
|
||||
setproc(np);
|
||||
if np == cpid then
|
||||
print(">");
|
||||
print("\t", "setproc(", np, ")\t", status(np), " at ", fmt(*PC, 'a'), "\n");
|
||||
lst = tail lst;
|
||||
}
|
||||
pid = cpid;
|
||||
if pid != 0 then
|
||||
setproc(pid);
|
||||
}
|
||||
|
||||
defn allstacks() // print stacks of processes and threads
|
||||
{
|
||||
complex Proc P;
|
||||
local T, Tq;
|
||||
local c, lst, cpid;
|
||||
|
||||
cpid = pid;
|
||||
P = (Proc)pq.$head;
|
||||
while P != 0 do{
|
||||
Tq = (Tqueue)P.threads;
|
||||
T = (Thread)Tq.$head;
|
||||
setproc(P.pid);
|
||||
while T != 0 do{
|
||||
if(T.cmdname == 0) then taskstk(T, "unknown");
|
||||
else taskstk(T, *(T.cmdname\s));
|
||||
T = T.nextt;
|
||||
}
|
||||
P = P.next;
|
||||
}
|
||||
pid = cpid;
|
||||
if pid != 0 then
|
||||
setproc(pid);
|
||||
}
|
||||
|
||||
print(acidfile);
|
||||
Loading…
Add table
Add a link
Reference in a new issue