sizeof_1_ = 8; aggr _1_ { 'U' 0 lo; 'U' 4 hi; }; defn _1_(addr) { complex _1_ addr; print(" lo ", addr.lo, "\n"); print(" hi ", addr.hi, "\n"); }; sizeofFPdbleword = 8; aggr FPdbleword { 'F' 0 x; { 'U' 0 lo; 'U' 4 hi; }; }; defn FPdbleword(addr) { complex FPdbleword addr; print(" x ", addr.x, "\n"); print("_1_ {\n"); _1_(addr+0); print("}\n"); }; UTFmax = 4; Runesync = 128; Runeself = 128; Runeerror = 65533; Runemax = 1114111; Runemask = 2097151; sizeofFmt = 80; aggr Fmt { 'b' 0 runes; 'Y' 8 start; 'Y' 16 to; 'Y' 24 stop; 'Y' 32 flush; 'Y' 40 farg; 'D' 48 nfmt; 'Y' 56 args; 'D' 64 r; 'D' 68 width; 'D' 72 prec; 'U' 76 flags; }; defn Fmt(addr) { complex Fmt addr; print(" runes ", addr.runes, "\n"); print(" start ", addr.start\Y, "\n"); print(" to ", addr.to\Y, "\n"); print(" stop ", addr.stop\Y, "\n"); print(" flush ", addr.flush\Y, "\n"); print(" farg ", addr.farg\Y, "\n"); print(" nfmt ", addr.nfmt, "\n"); print(" args ", addr.args\Y, "\n"); print(" r ", addr.r, "\n"); print(" width ", addr.width, "\n"); print(" prec ", addr.prec, "\n"); print(" flags ", addr.flags, "\n"); }; FmtWidth = 1; FmtLeft = 2; FmtPrec = 4; FmtSharp = 8; FmtSpace = 16; FmtSign = 32; FmtZero = 64; FmtUnsigned = 128; FmtShort = 256; FmtLong = 512; FmtVLong = 1024; FmtComma = 2048; FmtByte = 4096; FmtFlag = 8192; sizeofTm = 40; 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; 'D' 36 tzoff; }; 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"); print(" tzoff ", addr.tzoff, "\n"); }; PNPROC = 1; PNGROUP = 2; Profoff = 0; Profuser = 1; Profkernel = 2; Proftime = 3; Profsample = 4; sizeofLock = 8; aggr Lock { 'D' 0 val; }; defn Lock(addr) { complex Lock addr; print(" val ", addr.val, "\n"); }; sizeofQLp = 24; aggr QLp { 'D' 0 inuse; 'A' QLp 8 next; 'C' 16 state; }; defn QLp(addr) { complex QLp addr; print(" inuse ", addr.inuse, "\n"); print(" next ", addr.next\Y, "\n"); print(" state ", addr.state, "\n"); }; sizeofQLock = 32; aggr QLock { Lock 0 lock; 'D' 8 locked; 'A' QLp 16 $head; 'A' QLp 24 $tail; }; defn QLock(addr) { complex QLock addr; print("Lock lock {\n"); Lock(addr.lock); print("}\n"); print(" locked ", addr.locked, "\n"); print(" $head ", addr.$head\Y, "\n"); print(" $tail ", addr.$tail\Y, "\n"); }; sizeofRWLock = 32; aggr RWLock { Lock 0 lock; 'D' 8 readers; 'D' 12 writer; 'A' QLp 16 $head; 'A' QLp 24 $tail; }; defn RWLock(addr) { complex RWLock addr; print("Lock lock {\n"); Lock(addr.lock); print("}\n"); print(" readers ", addr.readers, "\n"); print(" writer ", addr.writer, "\n"); print(" $head ", addr.$head\Y, "\n"); print(" $tail ", addr.$tail\Y, "\n"); }; sizeofRendez = 24; aggr Rendez { 'A' QLock 0 l; 'A' QLp 8 $head; 'A' QLp 16 $tail; }; defn Rendez(addr) { complex Rendez addr; print(" l ", addr.l\Y, "\n"); print(" $head ", addr.$head\Y, "\n"); print(" $tail ", addr.$tail\Y, "\n"); }; sizeofNetConnInfo = 72; aggr NetConnInfo { 'Y' 0 dir; 'Y' 8 root; 'Y' 16 spec; 'Y' 24 lsys; 'Y' 32 lserv; 'Y' 40 rsys; 'Y' 48 rserv; 'Y' 56 laddr; 'Y' 64 raddr; }; defn NetConnInfo(addr) { complex NetConnInfo addr; print(" dir ", addr.dir\Y, "\n"); print(" root ", addr.root\Y, "\n"); print(" spec ", addr.spec\Y, "\n"); print(" lsys ", addr.lsys\Y, "\n"); print(" lserv ", addr.lserv\Y, "\n"); print(" rsys ", addr.rsys\Y, "\n"); print(" rserv ", addr.rserv\Y, "\n"); print(" laddr ", addr.laddr\Y, "\n"); print(" raddr ", addr.raddr\Y, "\n"); }; RFNAMEG = 1; RFENVG = 2; RFFDG = 4; RFNOTEG = 8; RFPROC = 16; RFMEM = 32; RFNOWAIT = 64; RFCNAMEG = 1024; RFCENVG = 2048; RFCFDG = 4096; RFREND = 8192; RFNOMNT = 16384; sizeofQid = 16; aggr Qid { 'W' 0 path; 'U' 8 vers; 'b' 12 type; }; defn Qid(addr) { complex Qid addr; print(" path ", addr.path, "\n"); print(" vers ", addr.vers, "\n"); print(" type ", addr.type, "\n"); }; sizeofDir = 80; aggr Dir { 'u' 0 type; 'U' 4 dev; Qid 8 qid; 'U' 24 mode; 'U' 28 atime; 'U' 32 mtime; 'V' 40 length; 'Y' 48 name; 'Y' 56 uid; 'Y' 64 gid; 'Y' 72 muid; }; defn Dir(addr) { complex Dir addr; print(" type ", addr.type, "\n"); print(" dev ", addr.dev, "\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 ", addr.length, "\n"); print(" name ", addr.name\Y, "\n"); print(" uid ", addr.uid\Y, "\n"); print(" gid ", addr.gid\Y, "\n"); print(" muid ", addr.muid\Y, "\n"); }; sizeofWaitmsg = 24; aggr Waitmsg { 'D' 0 pid; 'a' 4 time; 'Y' 16 msg; }; defn Waitmsg(addr) { complex Waitmsg addr; print(" pid ", addr.pid, "\n"); print(" time ", addr.time, "\n"); print(" msg ", addr.msg\Y, "\n"); }; sizeofIOchunk = 16; aggr IOchunk { 'Y' 0 addr; 'U' 8 len; }; defn IOchunk(addr) { complex IOchunk addr; print(" addr ", addr.addr\Y, "\n"); print(" len ", addr.len, "\n"); }; Nqwds = 2; Nqshift = 5; Nqmask = -1; Nqbits = 64; sizeofChannel = 48; aggr Channel { 'D' 0 s; 'U' 4 f; 'U' 8 n; 'D' 12 e; 'D' 16 freed; 'Y' 24 qentry; 'D' 32 nentry; 'D' 36 closed; 'a' 40 v; }; defn Channel(addr) { complex Channel addr; print(" s ", addr.s, "\n"); print(" f ", addr.f, "\n"); print(" n ", addr.n, "\n"); print(" e ", addr.e, "\n"); print(" freed ", addr.freed, "\n"); print(" qentry ", addr.qentry\Y, "\n"); print(" nentry ", addr.nentry, "\n"); print(" closed ", addr.closed, "\n"); print(" v ", addr.v, "\n"); }; CHANEND = 0; CHANSND = 1; CHANRCV = 2; CHANNOP = 3; CHANNOBLK = 4; sizeofAlt = 48; aggr Alt { 'A' Channel 0 c; 'Y' 8 v; 'D' 16 op; 'Y' 24 err; 'A' Channel 32 tag; 'D' 40 entryno; }; defn Alt(addr) { complex Alt addr; print(" c ", addr.c\Y, "\n"); print(" v ", addr.v\Y, "\n"); print(" op ", addr.op, "\n"); print(" err ", addr.err\Y, "\n"); print(" tag ", addr.tag\Y, "\n"); print(" entryno ", addr.entryno, "\n"); }; sizeofRef = 8; aggr Ref { 'D' 0 ref; }; defn Ref(addr) { complex Ref addr; print(" ref ", addr.ref, "\n"); }; Qstarve = 1; Qmsg = 2; Qclosed = 4; Qflow = 8; Qcoalesce = 16; Qkick = 32; BINTR = 1; BFREE = 2; Bipck = 4; Budpck = 8; Btcpck = 16; Bpktck = 32; sizeofBlock = 64; aggr Block { 'A' Block 0 next; 'A' Block 8 list; 'Y' 16 rp; 'Y' 24 wp; 'Y' 32 lim; 'Y' 40 base; 'Y' 48 free; 'u' 56 flag; 'u' 58 checksum; }; defn Block(addr) { complex Block addr; print(" next ", addr.next\Y, "\n"); print(" list ", addr.list\Y, "\n"); print(" rp ", addr.rp\Y, "\n"); print(" wp ", addr.wp\Y, "\n"); print(" lim ", addr.lim\Y, "\n"); print(" base ", addr.base\Y, "\n"); print(" free ", addr.free\Y, "\n"); print(" flag ", addr.flag, "\n"); print(" checksum ", addr.checksum, "\n"); }; Hdrspc = 64; Bdead = 1363758914; complex Block allocb:b; complex Block freeb:b; sizeofQueue = 344; aggr Queue { { Lock 0 lock; 'D' 8 locked; 'A' QLp 16 $head; 'A' QLp 24 $tail; }; 'A' Block 32 bfirst; 'A' Block 40 blast; 'D' 48 len; 'D' 52 dlen; 'D' 56 limit; 'D' 60 inilim; 'D' 64 state; 'D' 68 noblock; 'D' 72 eof; 'Y' 80 kick; 'Y' 88 bypass; 'Y' 96 arg; QLock 104 rlock; Rendez 136 rr; QLock 160 wlock; Rendez 192 wr; 'a' 216 err; }; defn Queue(addr) { complex Queue addr; print("QLock {\n"); QLock(addr+0); print("}\n"); print(" bfirst ", addr.bfirst\Y, "\n"); print(" blast ", addr.blast\Y, "\n"); print(" len ", addr.len, "\n"); print(" dlen ", addr.dlen, "\n"); print(" limit ", addr.limit, "\n"); print(" inilim ", addr.inilim, "\n"); print(" state ", addr.state, "\n"); print(" noblock ", addr.noblock, "\n"); print(" eof ", addr.eof, "\n"); print(" kick ", addr.kick\Y, "\n"); print(" bypass ", addr.bypass\Y, "\n"); print(" arg ", addr.arg\Y, "\n"); print("QLock rlock {\n"); QLock(addr.rlock); print("}\n"); print("Rendez rr {\n"); Rendez(addr.rr); print("}\n"); print("QLock wlock {\n"); QLock(addr.wlock); print("}\n"); print("Rendez wr {\n"); Rendez(addr.wr); print("}\n"); print(" err ", addr.err, "\n"); }; Maxatomic = 65536; complex Queue qopen:q; complex Queue notempty:q; complex Queue qwait:q; complex Queue qremove:q; complex Block qremove:b; complex Block bl2mem:b; complex Block bl2mem:next; complex Queue qputback:q; complex Block qputback:b; complex Queue qwakeup_iunlock:q; complex Queue qread:q; complex Block qread:b; complex Block qread:first; complex Block qread:l; complex Queue qnotfull:q; complex Queue qflow:q; complex Queue qbwrite:q; complex Block qbwrite:b; complex Queue qwrite:q; complex Block qwrite:b;