commit 7284df18a883c64721720276dac4f4540440e74c from: rsc date: Mon Apr 19 18:52:34 2004 UTC bring them up-to-speed for current system. commit - d9c2aa3a3366b60d5054c575801692579162a47f commit + 7284df18a883c64721720276dac4f4540440e74c blob - 252ece8ee490a83e07c847baba33db18201c6482 blob + bc04560173d90d4e72d0e419d39fec332064b8bd --- acid/386 +++ acid/386 @@ -173,7 +173,7 @@ linkdebug() } defn -acidmap() +dynamicmap() { if systype == "linux" then { local r, m, n; @@ -192,19 +192,13 @@ acidmap() } } } +} - local syms; - local l; - - l = textfile(); - if l != {} then { - syms = "acidtypes"; - while l != {} do { - syms = syms + " " + ((head l)[0]); - l = tail l; - } - includepipe(syms); - } +defn +acidmap() +{ + dynamicmap(); + acidtypes(); } print(acidfile); blob - d0d9107d0e6892b5f58f51bcfc4f1d5505c942cf blob + 1e49453034933cbf91e788d0b7a0f39eccfe77c9 --- acid/port +++ acid/port @@ -33,10 +33,10 @@ notelstk(addr) _stk({"PC", pc, "SP", sp, linkreg(addr)}, 1); } -defn labstk(l) // trace from a label -{ - _stk({"PC", *(l+4), "SP", *l, linkreg(0)}, 0); -} +// defn labstk(l) // trace from a label +// { +// _stk({"PC", *(l+4), "SP", *l, linkreg(0)}, 0); +// } defn params(param) { @@ -64,8 +64,11 @@ defn locals(l) } } -defn _stkign(file) +defn _stkign(frame) { + local file; + + file = pcfile(frame[0]); s = stkignore; while s do { if regexp(head s, file) then @@ -85,7 +88,7 @@ defn _stk(regs, dolocals) stk = strace(regs); if stkignore then { - while stk && tail stk && _stkign((head tail stk)[1]) do + while stk && tail stk && _stkign(head tail stk) do stk = tail stk; } @@ -595,5 +598,21 @@ defn spsrch(len) } } +defn acidtypes() +{ + local syms; + local l; + + l = textfile(); + if l != {} then { + syms = "acidtypes"; + while l != {} do { + syms = syms + " " + ((head l)[0]); + l = tail l; + } + includepipe(syms); + } +} + progargs=""; print(acidfile); blob - ac4cce8a9b3d3d9f20332de40c98eed5e2f058c5 blob + 1bc723caa6421abb755abeeb7bf6faf46686f19a --- acid/thread +++ acid/thread @@ -1,24 +1,29 @@ defn labpc(l) { - if objtype == "386" then - return longjmp; - return *(l+4); + complex Label l; + + return l.pc; } -defn labsp(l) +defn label(l) { - return *l; + complex Label l; + + if objtype == "386" then + return {"PC", l.pc, "BX", l.bx, "SP", l.sp, "BP", l.bp, "SI", l.si, "DI", l.di}; + return {}; } + defn labstk(l) { - _stk(labpc(l), labsp(l), 0, 0); + _stk(label(l), 0); } defn lablstk(l) { - _stk(labpc(l), labsp(l), 0, 1); + _stk(label(l), 1); } defn altfmt(A){ @@ -57,8 +62,8 @@ defn alt(A){ } threadignsrc = { - "^/sys/src/libc", - "^/sys/src/libthread", + "plan9/src/libc", + "plan9/src/libthread", }; defn fnname(a){ @@ -81,32 +86,24 @@ defn stkignore(s){ } defn threadstkline(T){ - local stk, frame, pc, pc0, file, lastpc0, s, sym, i, stop; + local stk, frame, pc, pc0, file, s, sym, i, stop; - if T.state == Running then{ - pc = *PC; - stk = strace(*PC, *SP, linkreg(0)); - }else{ - pc = labpc(T.sched); - stk = strace(labpc(T.sched), labsp(T.sched), 0); - } - lastpc0 = 0; - pc0 = 0; + if T.state == Running then + stk = strace({}); + else + stk = strace(label(T.sched)); + stop = 0; while stk && !stop do { + frame = head stk; + stk = tail stk; + pc = frame[2]; + pc0 = frame[0]; file = pcfile(pc); - if !regexp("^/sys/src/libc/", file) - && !regexp("^/sys/src/libthread/", file) + if !regexp("plan9/src/libc/", file) + && !regexp("plan9/src/libthread/", file) && match(file, stkignore)==-1 then stop = 1; - else{ - lastpc0 = pc0; - frame = head stk; - stk = tail stk; - nextframe = head stk; - pc = frame[1]; - pc0 = nextframe[0]; - } } file = pcfile(pc); s = file+":"+itoa(pcline(pc), "%d"); @@ -165,7 +162,7 @@ defn pthreads(P){ while T != 0 do{ print("\t"); thread(T); - T = T.nextt; + T = (Thread)T.nextt; } setproc(mainpid); } @@ -173,6 +170,7 @@ defn pthreads(P){ defn threads(){ local P; + complex Pqueue _threadpq; P = (Proc)_threadpq.$head; while P != 0 do{ if P != (Proc)_threadpq.$head then print("\n"); @@ -184,6 +182,7 @@ defn threads(){ defn stacks(){ local P, mainpid; + stkprefix = ""; mainpid = pid; P = (Proc)_threadpq.$head; while P != 0 do{ @@ -195,7 +194,7 @@ defn stacks(){ // } // print("threadstks(", P\X, ")\n"); threadstks(P); - P = P.next; + P = (Proc)P.next; print("\n"); } setproc(mainpid); @@ -219,7 +218,7 @@ defn stacksizes(){ } sp = *(T.sched); print(top-sp\D, "\n"); - T = T.nextt; + T = (Thread)T.nextt; } P = P.next; } @@ -240,8 +239,8 @@ defn threadstks(P){ stkprefix = pref+"\t\t"; ign = stkignore; stkignore = { - "^/sys/src/libthread/", - "^/sys/src/libc/(386|arm|alpha|sparc|power|mips)/" + "plan9/src/libthread/", + "plan9/src/libc/(386|arm|alpha|sparc|power|mips)/" }; setproc(P.pid); Tq = (Tqueue)P.threads; @@ -252,7 +251,7 @@ defn threadstks(P){ print("\t"); thread(T); threadstk(T); - T = T.nextt; + T = (Thread)T.nextt; print("\n"); } setproc(mainpid);