1// runtime library definitions 2if objtype=="mips2" then objtype="mips"; 3 4include("/sys/src/alef/lib/"+objtype+"/acid"); 5 6defn 7pchan(addr) 8{ 9 local l, n; 10 11 complex Chan addr; 12 13 if addr.sva then 14 print("Sender waiting: buffer ", addr.sva, "\n"); 15 else 16 print("No sender\n"); 17 18 if addr.rva then 19 print("Receiver waiting: buffer ", addr.rva, "\n"); 20 else 21 print("No receiver\n"); 22 23 if addr.async then { 24 n = 0; 25 l = addr.qh; 26 while l do { 27 n = n+1; 28 l = l.next; 29 } 30 print("Async channel\n\t", n\D, " messsages queued\n\t"); 31 l = addr.free; 32 while l do { 33 n = n+1; 34 l = l.next; 35 } 36 print(n\D, " free buffers\n"); 37 } 38 39 if addr.selt then { 40 l = "send"; 41 if addr.selt then 42 l = "receive"; 43 print("In select ", l, ": task ", addr.selt\X, "\n"); 44 labstk(addr.selt); 45 } 46} 47 48defn 49tdb() 50{ 51 local ta, tq; 52 53 // Private proc tdb pointer 54 ta = *{ 0x7fffe000, 55 0x0ffdf000, 56 0xbfff5000 }[match(objtype, {"mips", "sparc", "386"})]; 57 58 complex Tdb ta; 59 60 print("tdb ", ta.ntask, " tasks:"); 61 if *ta then 62 print("locked\n"); 63 else 64 print("unlocked\n"); 65 66 if ta.ctask then { 67 print("current task ", ta.ctask, "\n"); 68 Task(ta.ctask); 69 } 70 else 71 print("proc is idle\n"); 72 73 tq = (Task)ta.runhd; 74 if tq == 0 then 75 return {}; 76 77 print("Tasks ready to run:\n"); 78 while tq != 0 do { 79 print("Task(", tq, ")\n"); 80 tq = tq.link; 81 } 82} 83 84defn 85lselect(addr) 86{ 87 local c; 88 89 complex Task addr; 90 complex Chan c; 91 92 c = addr.slist; 93 if c == 0 then { 94 print("No select pending\n"); 95 return {}; 96 } 97 while c do { 98 print("pchan(", c\X, ")\n"); 99 c = c.sellink; 100 } 101} 102 103defn 104pqlock(addr) 105{ 106 local t; 107 108 complex QLock addr; 109 110 if *addr then 111 print("QLock is under modification\n"); 112 if addr.used == 0 then 113 return {}; 114 115 print("QLock is held\n"); 116 t = addr.queue; 117 complex Task t; 118 if t == 0 then { 119 print("No tasks waiting\n"); 120 return {}; 121 } 122 print("Tasks waiting:\n"); 123 while t do { 124 print("Task(", t, ")\n"); 125 tq = tq.qlink; 126 } 127} 128 129srcpath = { 130 "./", 131 "/sys/src/alef/lib/port/", 132 "/sys/src/alef/lib/p9/", 133 "/sys/src/alef/lib/"+objtype+"/" 134}; 135 136defn labstk(l) 137{ 138 if objtype == "386" then 139 _stk(ALEF_switch, *l, linkreg(0), 0); 140 else 141 _stk(*(l+4), *l, linkreg(0), 0); 142} 143 144print("/sys/lib/acid/alef"); 145 146include("/sys/src/alef/lib/port/acid."+objtype); 147include("/sys/src/alef/lib/p9/acid."+objtype); 148