147 lines · 2.2 KB · Text
RawDownload
// runtime library definitionsif objtype=="mips2" then objtype="mips"; include("/sys/src/alef/lib/"+objtype+"/acid"); defnpchan(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);	}} defntdb(){	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;			}} defnlselect(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;	}} defnpqlock(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);