147 lines
2.2 KiB
Text
147 lines
2.2 KiB
Text
// 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);
|