Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

// 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);