sizeofArg = 16; aggr Arg { 'X' 0 arg0; 'D' 4 ac; 'X' 8 av; 'X' 12 p; }; defn Arg(addr) { complex Arg addr; print(" arg0 ", addr.arg0\X, "\n"); print(" ac ", addr.ac, "\n"); print(" av ", addr.av\X, "\n"); print(" p ", addr.p\X, "\n"); }; sizeofPrintspec = 28; aggr Printspec { 'X' 0 o; 'D' 4 f1; 'D' 8 f2; 'D' 12 f3; 'D' 16 chr; 'X' 20 out; 'X' 24 eout; }; defn Printspec(addr) { complex Printspec addr; print(" o ", addr.o\X, "\n"); print(" f1 ", addr.f1, "\n"); print(" f2 ", addr.f2, "\n"); print(" f3 ", addr.f3, "\n"); print(" chr ", addr.chr, "\n"); print(" out ", addr.out\X, "\n"); print(" eout ", addr.eout\X, "\n"); }; sizeofLock = 4; adt Lock { 'D' 0 val; }; defn Lock(addr) { complex Lock addr; print(" val ", addr.val, "\n"); }; sizeofQLock = 12; adt QLock { Lock 0 use; 'D' 4 used; 'X' 8 queue; }; defn QLock(addr) { complex QLock addr; print("Lock use {\n"); Lock(addr.use); print("}\n"); print(" used ", addr.used, "\n"); print(" queue ", addr.queue\X, "\n"); }; sizeofRWlock = 32; adt RWlock { { 'D' 0 val; }; QLock 4 x; QLock 16 k; 'D' 28 readers; }; defn RWlock(addr) { complex RWlock addr; print("Lock {\n"); Lock(addr+0); print("}\n"); print("QLock x {\n"); QLock(addr.x); print("}\n"); print("QLock k {\n"); QLock(addr.k); print("}\n"); print(" readers ", addr.readers, "\n"); }; sizeofRef = 8; adt Ref { Lock 0 l; 'D' 4 cnt; }; defn Ref(addr) { complex Ref addr; print("Lock l {\n"); Lock(addr.l); print("}\n"); print(" cnt ", addr.cnt, "\n"); }; sizeofNotemsg = 64; aggr Notemsg { 'a' 0 note; }; defn Notemsg(addr) { complex Notemsg addr; print(" note ", addr.note, "\n"); }; sizeofLength = 8; union Length { 'a' 0 clength; { 'D' 0 hlength; 'D' 4 length; }; }; defn Length(addr) { complex Length addr; print(" clength ", addr.clength, "\n"); }; sizeofQid = 8; aggr Qid { 'U' 0 path; 'U' 4 vers; }; defn Qid(addr) { complex Qid addr; print(" path ", addr.path, "\n"); print(" vers ", addr.vers, "\n"); }; sizeofDir = 116; aggr Dir { 'a' 0 name; 'a' 28 uid; 'a' 56 gid; Qid 84 qid; 'U' 92 mode; 'D' 96 atime; 'D' 100 mtime; { 'a' 104 clength; { 'D' 104 hlength; 'D' 108 length; }; }; 'u' 112 type; 'u' 114 dev; }; defn Dir(addr) { complex Dir addr; print(" name ", addr.name, "\n"); print(" uid ", addr.uid, "\n"); print(" gid ", addr.gid, "\n"); print("Qid qid {\n"); Qid(addr.qid); print("}\n"); print(" mode ", addr.mode, "\n"); print(" atime ", addr.atime, "\n"); print(" mtime ", addr.mtime, "\n"); print("Length {\n"); Length(addr+104); print("}\n"); print(" type ", addr.type, "\n"); print(" dev ", addr.dev, "\n"); }; sizeofWaitmsg = 112; aggr Waitmsg { 'a' 0 pid; 'a' 12 time; 'a' 48 msg; }; defn Waitmsg(addr) { complex Waitmsg addr; print(" pid ", addr.pid, "\n"); print(" time ", addr.time, "\n"); print(" msg ", addr.msg, "\n"); }; sizeofTm = 36; aggr Tm { 'D' 0 sec; 'D' 4 min; 'D' 8 hour; 'D' 12 mday; 'D' 16 mon; 'D' 20 year; 'D' 24 wday; 'D' 28 yday; 'a' 32 zone; }; defn Tm(addr) { complex Tm addr; print(" sec ", addr.sec, "\n"); print(" min ", addr.min, "\n"); print(" hour ", addr.hour, "\n"); print(" mday ", addr.mday, "\n"); print(" mon ", addr.mon, "\n"); print(" year ", addr.year, "\n"); print(" wday ", addr.wday, "\n"); print(" yday ", addr.yday, "\n"); print(" zone ", addr.zone, "\n"); }; sizeofRendez = 8; adt Rendez { { 'D' 0 val; }; 'A' Task 4 t; }; defn Rendez(addr) { complex Rendez addr; print("Lock {\n"); Lock(addr+0); print("}\n"); print(" t ", addr.t\X, "\n"); }; sizeofMsgbuf = 16; aggr Msgbuf { 'A' Msgbuf 0 next; 'U' 4 signature; { 'a' 8 data; 'D' 8 i; 'd' 8 s; 'F' 8 f; }; }; defn Msgbuf(addr) { complex Msgbuf addr; print(" next ", addr.next\X, "\n"); print(" signature ", addr.signature, "\n"); }; sizeofChan = 96; aggr Chan { { 'D' 0 val; }; 'D' 4 async; 'U' 8 signature; 'A' Msgbuf 12 free; 'A' Msgbuf 16 qh; 'A' Msgbuf 20 qt; Rendez 24 br; 'A' Chan 32 sellink; 'A' Task 36 selt; 'D' 40 selp; 'D' 44 seltst; Rendez 48 sndr; 'X' 56 sva; QLock 60 snd; Rendez 72 rcvr; 'X' 80 rva; QLock 84 rcv; }; defn Chan(addr) { complex Chan addr; print("Lock {\n"); Lock(addr+0); print("}\n"); print(" async ", addr.async, "\n"); print(" signature ", addr.signature, "\n"); print(" free ", addr.free\X, "\n"); print(" qh ", addr.qh\X, "\n"); print(" qt ", addr.qt\X, "\n"); print("Rendez br {\n"); Rendez(addr.br); print("}\n"); print(" sellink ", addr.sellink\X, "\n"); print(" selt ", addr.selt\X, "\n"); print(" selp ", addr.selp, "\n"); print(" seltst ", addr.seltst, "\n"); print("Rendez sndr {\n"); Rendez(addr.sndr); print("}\n"); print(" sva ", addr.sva\X, "\n"); print("QLock snd {\n"); QLock(addr.snd); print("}\n"); print("Rendez rcvr {\n"); Rendez(addr.rcvr); print("}\n"); print(" rva ", addr.rva\X, "\n"); print("QLock rcv {\n"); QLock(addr.rcv); print("}\n"); }; sizeofTask = 40; aggr Task { 'U' 0 sp; 'U' 4 pc; 'A' Tdb 8 tdb; 'A' Task 12 link; 'A' Task 16 qlink; 'A' Chan 20 slist; 'A' Chan 24 stail; { { 'D' 28 val; }; 'A' Task 32 t; }; 'X' 36 stack; }; defn Task(addr) { complex Task addr; print(" sp ", addr.sp, "\n"); print(" pc ", addr.pc, "\n"); print(" tdb ", addr.tdb\X, "\n"); print(" link ", addr.link\X, "\n"); print(" qlink ", addr.qlink\X, "\n"); print(" slist ", addr.slist\X, "\n"); print(" stail ", addr.stail\X, "\n"); print("Rendez {\n"); Rendez(addr+28); print("}\n"); print(" stack ", addr.stack\X, "\n"); }; sizeofTdb = 24; aggr Tdb { { 'D' 0 val; }; 'D' 4 ntask; 'A' Task 8 ctask; 'A' Task 12 runhd; 'A' Task 16 runtl; 'D' 20 sleeper; }; defn Tdb(addr) { complex Tdb addr; print("Lock {\n"); Lock(addr+0); print("}\n"); print(" ntask ", addr.ntask, "\n"); print(" ctask ", addr.ctask\X, "\n"); print(" runhd ", addr.runhd\X, "\n"); print(" runtl ", addr.runtl\X, "\n"); print(" sleeper ", addr.sleeper, "\n"); }; sizeofProc = 4; aggr Proc { 'A' Tdb 0 tdb; }; defn Proc(addr) { complex Proc addr; print(" tdb ", addr.tdb\X, "\n"); }; sizeofFcall = 156; aggr Fcall { 'C' 0 type; 'd' 2 fid; 'u' 4 tag; { { 'u' 8 oldtag; Qid 12 qid; 'a' 20 rauth; }; { 'a' 8 uname; 'a' 36 aname; 'a' 64 ticket; 'a' 136 auth; }; { 'a' 8 ename; 'a' 72 authid; 'a' 100 authdom; 'a' 148 chal; }; { 'U' 8 perm; 'd' 12 newfid; 'a' 14 name; 'C' 42 mode; }; { 'D' 8 offset; 'D' 12 count; 'X' 16 data; }; { 'a' 8 stat; }; }; }; defn Fcall(addr) { complex Fcall addr; print(" type ", addr.type, "\n"); print(" fid ", addr.fid, "\n"); print(" tag ", addr.tag, "\n"); };