123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- // 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("/sys/lib/acid/alef");
- include("/sys/src/alef/lib/port/acid."+objtype);
- include("/sys/src/alef/lib/p9/acid."+objtype);
|