// runtime library definitions if objtype=="mips2" then objtype="mips"; include("/sys/src/alef/lib/"+objtype+"/acid"); defn pchan(addr) { local l, n; complex Chan addr; if addr.sva then print("Sender waiting: buffer ", addr.sva, "\n"); else print("No sender\n"); if addr.rva then print("Receiver waiting: buffer ", addr.rva, "\n"); else print("No receiver\n"); if addr.async then { n = 0; l = addr.qh; while l do { n = n+1; l = l.next; } print("Async channel\n\t", n\D, " messsages queued\n\t"); l = addr.free; while l do { n = n+1; l = l.next; } print(n\D, " free buffers\n"); } if addr.selt then { l = "send"; if addr.selt then l = "receive"; print("In select ", l, ": task ", addr.selt\X, "\n"); labstk(addr.selt); } } defn tdb() { local ta, tq; // Private proc tdb pointer ta = *{ 0x7fffe000, 0x0ffdf000, 0xbfff5000 }[match(objtype, {"mips", "sparc", "386"})]; complex Tdb ta; print("tdb ", ta.ntask, " tasks:"); if *ta then print("locked\n"); else print("unlocked\n"); if ta.ctask then { print("current task ", ta.ctask, "\n"); Task(ta.ctask); } else print("proc is idle\n"); tq = (Task)ta.runhd; if tq == 0 then return {}; print("Tasks ready to run:\n"); while tq != 0 do { print("Task(", tq, ")\n"); tq = tq.link; } } defn lselect(addr) { local c; complex Task addr; complex Chan c; c = addr.slist; if c == 0 then { print("No select pending\n"); return {}; } while c do { print("pchan(", c\X, ")\n"); c = c.sellink; } } defn pqlock(addr) { local t; complex QLock addr; if *addr then print("QLock is under modification\n"); if addr.used == 0 then return {}; print("QLock is held\n"); t = addr.queue; complex Task t; if t == 0 then { print("No tasks waiting\n"); return {}; } print("Tasks waiting:\n"); while t do { print("Task(", t, ")\n"); tq = tq.qlink; } } srcpath = { "./", "/sys/src/alef/lib/port/", "/sys/src/alef/lib/p9/", "/sys/src/alef/lib/"+objtype+"/" }; defn labstk(l) { if objtype == "386" then _stk(ALEF_switch, *l, linkreg(0), 0); else _stk(*(l+4), *l, linkreg(0), 0); } print(acidfile); include("/sys/src/alef/lib/port/acid."+objtype); include("/sys/src/alef/lib/p9/acid."+objtype);