sizeof_1_ = 8; aggr _1_ { 'D' 0 lo; 'D' 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; { 'D' 0 lo; 'D' 4 hi; }; }; defn FPdbleword(addr) { complex FPdbleword addr; print(" x ", addr.x, "\n"); print("_1_ {\n"); _1_(addr+0); print("}\n"); }; UTFmax = 3; Runesync = 128; Runeself = 128; Runeerror = 128; sizeofFconv = 24; aggr Fconv { 'X' 0 out; 'X' 4 eout; 'D' 8 f1; 'D' 12 f2; 'D' 16 f3; 'D' 20 chr; }; defn Fconv(addr) { complex Fconv addr; print(" out ", addr.out\X, "\n"); print(" eout ", addr.eout\X, "\n"); print(" f1 ", addr.f1, "\n"); print(" f2 ", addr.f2, "\n"); print(" f3 ", addr.f3, "\n"); print(" chr ", addr.chr, "\n"); }; 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; sizeofLock = 4; aggr Lock { 'D' 0 val; }; defn Lock(addr) { complex Lock addr; print(" val ", addr.val, "\n"); }; sizeofQLp = 12; aggr QLp { 'D' 0 inuse; 'A' QLp 4 next; 'C' 8 state; }; defn QLp(addr) { complex QLp addr; print(" inuse ", addr.inuse, "\n"); print(" next ", addr.next\X, "\n"); print(" state ", addr.state, "\n"); }; sizeofQLock = 16; aggr QLock { Lock 0 lock; 'D' 4 locked; 'A' QLp 8 $head; 'A' QLp 12 $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\X, "\n"); print(" $tail ", addr.$tail\X, "\n"); }; sizeofRWLock = 20; aggr RWLock { Lock 0 lock; 'D' 4 readers; 'D' 8 writer; 'A' QLp 12 $head; 'A' QLp 16 $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\X, "\n"); print(" $tail ", addr.$tail\X, "\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 = 60; aggr Dir { 'u' 0 type; 'U' 4 dev; Qid 8 qid; 'U' 24 mode; 'U' 28 atime; 'U' 32 mtime; 'V' 36 length; 'X' 44 name; 'X' 48 uid; 'X' 52 gid; 'X' 56 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\X, "\n"); print(" uid ", addr.uid\X, "\n"); print(" gid ", addr.gid\X, "\n"); print(" muid ", addr.muid\X, "\n"); }; sizeofWaitmsg = 20; aggr Waitmsg { 'D' 0 pid; 'a' 4 time; 'X' 16 msg; }; defn Waitmsg(addr) { complex Waitmsg addr; print(" pid ", addr.pid, "\n"); print(" time ", addr.time, "\n"); print(" msg ", addr.msg\X, "\n"); }; sizeofIOchunk = 8; aggr IOchunk { 'X' 0 addr; 'U' 4 len; }; defn IOchunk(addr) { complex IOchunk addr; print(" addr ", addr.addr\X, "\n"); print(" len ", addr.len, "\n"); }; PmDebugExit = 1; PmDebugNote = 2; PmDebugExec = 4; PmDebugFd = 8; PmDebugWait = 16; PmDebugNs = 32; PM_UTFmax = 3; PM_Runesync = 128; PM_Runeself = 128; PM_Runeerror = 128; sizeofPmFconv = 24; aggr PmFconv { 'X' 0 out; 'X' 4 eout; 'D' 8 f1; 'D' 12 f2; 'D' 16 f3; 'D' 20 chr; }; defn PmFconv(addr) { complex PmFconv addr; print(" out ", addr.out\X, "\n"); print(" eout ", addr.eout\X, "\n"); print(" f1 ", addr.f1, "\n"); print(" f2 ", addr.f2, "\n"); print(" f3 ", addr.f3, "\n"); print(" chr ", addr.chr, "\n"); }; sizeofPmTm = 40; aggr PmTm { '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 PmTm(addr) { complex PmTm 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"); }; PM_PNPROC = 1; PM_PNGROUP = 2; sizeofPmLock = 4; aggr PmLock { 'D' 0 val; }; defn PmLock(addr) { complex PmLock addr; print(" val ", addr.val, "\n"); }; sizeofPmQLp = 12; aggr PmQLp { 'D' 0 inuse; 'A' PmQLp 4 next; 'C' 8 state; }; defn PmQLp(addr) { complex PmQLp addr; print(" inuse ", addr.inuse, "\n"); print(" next ", addr.next\X, "\n"); print(" state ", addr.state, "\n"); }; sizeofPmQLock = 16; aggr PmQLock { PmLock 0 lk; 'D' 4 locked; 'A' PmQLp 8 $head; 'A' PmQLp 12 $tail; }; defn PmQLock(addr) { complex PmQLock addr; print("PmLock lk {\n"); PmLock(addr.lk); print("}\n"); print(" locked ", addr.locked, "\n"); print(" $head ", addr.$head\X, "\n"); print(" $tail ", addr.$tail\X, "\n"); }; sizeofPmRWLock = 20; aggr PmRWLock { PmLock 0 lk; 'D' 4 readers; 'D' 8 writer; 'A' PmQLp 12 $head; 'A' PmQLp 16 $tail; }; defn PmRWLock(addr) { complex PmRWLock addr; print("PmLock lk {\n"); PmLock(addr.lk); print("}\n"); print(" readers ", addr.readers, "\n"); print(" writer ", addr.writer, "\n"); print(" $head ", addr.$head\X, "\n"); print(" $tail ", addr.$tail\X, "\n"); }; sizeofRef = 8; aggr Ref { 'D' 0 ref; PmLock 4 lk; }; defn Ref(addr) { complex Ref addr; print(" ref ", addr.ref, "\n"); print("PmLock lk {\n"); PmLock(addr.lk); print("}\n"); }; PM_RFFDG = 4; PM_RFNOTEG = 8; PM_RFCFDG = 4096; sizeofPmQid = 16; aggr PmQid { 'W' 0 path; 'U' 8 vers; 'b' 12 type; }; defn PmQid(addr) { complex PmQid addr; print(" path ", addr.path, "\n"); print(" vers ", addr.vers, "\n"); print(" type ", addr.type, "\n"); }; sizeofPmDir = 60; aggr PmDir { 'u' 0 type; 'U' 4 dev; PmQid 8 qid; 'U' 24 mode; 'U' 28 atime; 'U' 32 mtime; 'V' 36 length; 'X' 44 name; 'X' 48 uid; 'X' 52 gid; 'X' 56 muid; }; defn PmDir(addr) { complex PmDir addr; print(" type ", addr.type, "\n"); print(" dev ", addr.dev, "\n"); print("PmQid qid {\n"); PmQid(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\X, "\n"); print(" uid ", addr.uid\X, "\n"); print(" gid ", addr.gid\X, "\n"); print(" muid ", addr.muid\X, "\n"); }; sizeofPmWaitmsg = 20; aggr PmWaitmsg { 'D' 0 pid; 'a' 4 tm; 'X' 16 msg; }; defn PmWaitmsg(addr) { complex PmWaitmsg addr; print(" pid ", addr.pid, "\n"); print(" tm ", addr.tm, "\n"); print(" msg ", addr.msg\X, "\n"); }; sizeofPmIOchunk = 8; aggr PmIOchunk { 'X' 0 addr; 'U' 4 len; }; defn PmIOchunk(addr) { complex PmIOchunk addr; print(" addr ", addr.addr\X, "\n"); print(" len ", addr.len, "\n"); }; sizeofPmConf = 20; aggr PmConf { 'C' 0 pathsep; 'X' 4 osname; 'D' 8 ostype; 'X' 12 eve; 'X' 16 rootdir; }; defn PmConf(addr) { complex PmConf addr; print(" pathsep ", addr.pathsep, "\n"); print(" osname ", addr.osname\X, "\n"); print(" ostype ", addr.ostype, "\n"); print(" eve ", addr.eve\X, "\n"); print(" rootdir ", addr.rootdir\X, "\n"); }; PmOsPlan9 = 0; PmOsWindows = 1; PmOsUnix = 2; complex PmConf pm_conf; Aaccess = 0; Abind = 1; Atodir = 2; Aopen = 3; Amount = 4; Acreate = 5; Aremove = 6; COPEN = 1; CMSG = 2; CCEXEC = 8; CFREE = 16; CRCLOSE = 32; CCACHE = 128; KNAMELEN = 28; MAXPATH = 512; BINTR = 1; BFREE = 2; sizeofBlock = 32; aggr Block { 'A' Block 0 next; 'A' Block 4 list; 'X' 8 rp; 'X' 12 wp; 'X' 16 lim; 'X' 20 base; 'X' 24 free; 'U' 28 flag; }; defn Block(addr) { complex Block addr; print(" next ", addr.next\X, "\n"); print(" list ", addr.list\X, "\n"); print(" rp ", addr.rp\X, "\n"); print(" wp ", addr.wp\X, "\n"); print(" lim ", addr.lim\X, "\n"); print(" base ", addr.base\X, "\n"); print(" free ", addr.free\X, "\n"); print(" flag ", addr.flag, "\n"); }; sizeofChan = 152; aggr Chan { Ref 0 ref; Lock 8 lk; 'A' Chan 12 next; 'A' Chan 16 link; 'V' 20 offset; 'u' 28 type; 'U' 32 dev; 'u' 36 mode; 'u' 38 flag; Qid 40 qid; 'D' 56 fid; 'U' 60 iounit; 'X' 64 umh; 'A' Chan 68 umc; QLock 72 umqlock; 'D' 88 uri; 'D' 92 dri; 'U' 96 mountid; 'X' 100 mux; 'X' 104 aux; Qid 108 pgrpid; 'U' 124 mid; 'A' Chan 128 mchan; Qid 132 mqid; 'X' 148 name; }; defn Chan(addr) { complex Chan addr; print("Ref ref {\n"); Ref(addr.ref); print("}\n"); print("Lock lk {\n"); Lock(addr.lk); print("}\n"); print(" next ", addr.next\X, "\n"); print(" link ", addr.link\X, "\n"); print(" offset ", addr.offset, "\n"); print(" type ", addr.type, "\n"); print(" dev ", addr.dev, "\n"); print(" mode ", addr.mode, "\n"); print(" flag ", addr.flag, "\n"); print("Qid qid {\n"); Qid(addr.qid); print("}\n"); print(" fid ", addr.fid, "\n"); print(" iounit ", addr.iounit, "\n"); print(" umh ", addr.umh\X, "\n"); print(" umc ", addr.umc\X, "\n"); print("QLock umqlock {\n"); QLock(addr.umqlock); print("}\n"); print(" uri ", addr.uri, "\n"); print(" dri ", addr.dri, "\n"); print(" mountid ", addr.mountid, "\n"); print(" mux ", addr.mux\X, "\n"); print(" aux ", addr.aux\X, "\n"); print("Qid pgrpid {\n"); Qid(addr.pgrpid); print("}\n"); print(" mid ", addr.mid, "\n"); print(" mchan ", addr.mchan\X, "\n"); print("Qid mqid {\n"); Qid(addr.mqid); print("}\n"); print(" name ", addr.name\X, "\n"); }; sizeofCname = 20; aggr Cname { Ref 0 ref; 'D' 8 alen; 'D' 12 len; 'X' 16 s; }; defn Cname(addr) { complex Cname addr; print("Ref ref {\n"); Ref(addr.ref); print("}\n"); print(" alen ", addr.alen, "\n"); print(" len ", addr.len, "\n"); print(" s ", addr.s\X, "\n"); }; sizeofDev = 64; aggr Dev { 'D' 0 dc; 'X' 4 name; 'X' 8 reset; 'X' 12 attach; 'X' 16 _walk; 'X' 20 _stat; 'X' 24 _open; 'X' 28 _create; 'X' 32 _close; 'X' 36 _read; 'X' 40 bread; 'X' 44 _write; 'X' 48 bwrite; 'X' 52 _remove; 'X' 56 _wstat; 'X' 60 _chdir; }; defn Dev(addr) { complex Dev addr; print(" dc ", addr.dc, "\n"); print(" name ", addr.name\X, "\n"); print(" reset ", addr.reset\X, "\n"); print(" attach ", addr.attach\X, "\n"); print(" _walk ", addr._walk\X, "\n"); print(" _stat ", addr._stat\X, "\n"); print(" _open ", addr._open\X, "\n"); print(" _create ", addr._create\X, "\n"); print(" _close ", addr._close\X, "\n"); print(" _read ", addr._read\X, "\n"); print(" bread ", addr.bread\X, "\n"); print(" _write ", addr._write\X, "\n"); print(" bwrite ", addr.bwrite\X, "\n"); print(" _remove ", addr._remove\X, "\n"); print(" _wstat ", addr._wstat\X, "\n"); print(" _chdir ", addr._chdir\X, "\n"); }; sizeofDirtab = 56; aggr Dirtab { 'a' 0 name; Qid 28 qid; 'V' 44 length; 'D' 52 perm; }; defn Dirtab(addr) { complex Dirtab addr; print(" name ", addr.name, "\n"); print("Qid qid {\n"); Qid(addr.qid); print("}\n"); print(" length ", addr.length, "\n"); print(" perm ", addr.perm, "\n"); }; sizeofEgrp = 36; aggr Egrp { Ref 0 ref; QLock 8 lk; 'X' 24 entries; 'U' 28 path; 'U' 32 vers; }; defn Egrp(addr) { complex Egrp addr; print("Ref ref {\n"); Ref(addr.ref); print("}\n"); print("QLock lk {\n"); QLock(addr.lk); print("}\n"); print(" entries ", addr.entries\X, "\n"); print(" path ", addr.path, "\n"); print(" vers ", addr.vers, "\n"); }; sizeofEvalue = 32; aggr Evalue { 'X' 0 name; 'X' 4 value; 'D' 8 len; 'A' Evalue 12 link; PmQid 16 qid; }; defn Evalue(addr) { complex Evalue addr; print(" name ", addr.name\X, "\n"); print(" value ", addr.value\X, "\n"); print(" len ", addr.len, "\n"); print(" link ", addr.link\X, "\n"); print("PmQid qid {\n"); PmQid(addr.qid); print("}\n"); }; sizeofFgrp = 24; aggr Fgrp { Lock 0 lk; Ref 4 ref; 'A' Chan 12 fd; 'D' 16 nfd; 'D' 20 maxfd; }; defn Fgrp(addr) { complex Fgrp addr; print("Lock lk {\n"); Lock(addr.lk); print("}\n"); print("Ref ref {\n"); Ref(addr.ref); print("}\n"); print(" fd ", addr.fd\X, "\n"); print(" nfd ", addr.nfd, "\n"); print(" maxfd ", addr.maxfd, "\n"); }; NSMAX = 1000; NSLOG = 7; NSCACHE = 128; sizeofMntwalk = 16; aggr Mntwalk { 'D' 0 cddone; 'U' 4 id; 'X' 8 mh; 'X' 12 cm; }; defn Mntwalk(addr) { complex Mntwalk addr; print(" cddone ", addr.cddone, "\n"); print(" id ", addr.id, "\n"); print(" mh ", addr.mh\X, "\n"); print(" cm ", addr.cm\X, "\n"); }; sizeofMount = 32; aggr Mount { 'U' 0 mountid; 'A' Mount 4 next; 'X' 8 $head; 'A' Mount 12 copy; 'A' Mount 16 order; 'A' Chan 20 to; 'D' 24 mflag; 'X' 28 spec; }; defn Mount(addr) { complex Mount addr; print(" mountid ", addr.mountid, "\n"); print(" next ", addr.next\X, "\n"); print(" $head ", addr.$head\X, "\n"); print(" copy ", addr.copy\X, "\n"); print(" order ", addr.order\X, "\n"); print(" to ", addr.to\X, "\n"); print(" mflag ", addr.mflag, "\n"); print(" spec ", addr.spec\X, "\n"); }; sizeofMhead = 40; aggr Mhead { Ref 0 ref; RWLock 8 lk; 'A' Chan 28 from; 'A' Mount 32 mount; 'A' Mhead 36 hash; }; defn Mhead(addr) { complex Mhead addr; print("Ref ref {\n"); Ref(addr.ref); print("}\n"); print("RWLock lk {\n"); RWLock(addr.lk); print("}\n"); print(" from ", addr.from\X, "\n"); print(" mount ", addr.mount\X, "\n"); print(" hash ", addr.hash\X, "\n"); }; sizeofMnt = 40; aggr Mnt { Lock 0 lk; 'A' Chan 4 c; 'X' 8 rip; 'X' 12 queue; 'U' 16 id; 'A' Mnt 20 list; 'D' 24 flags; 'D' 28 msize; 'X' 32 version; 'X' 36 q; }; defn Mnt(addr) { complex Mnt addr; print("Lock lk {\n"); Lock(addr.lk); print("}\n"); print(" c ", addr.c\X, "\n"); print(" rip ", addr.rip\X, "\n"); print(" queue ", addr.queue\X, "\n"); print(" id ", addr.id, "\n"); print(" list ", addr.list\X, "\n"); print(" flags ", addr.flags, "\n"); print(" msize ", addr.msize, "\n"); print(" version ", addr.version\X, "\n"); print(" q ", addr.q\X, "\n"); }; sizeofProc = 692; aggr Proc { PmLock 0 lk; 'X' 4 err; 'a' 8 errbuf0; 'a' 136 errbuf1; 'X' 264 wd; 'D' 268 pid; 'D' 272 sigres; 'a' 276 sigbuf; 'a' 284 errjmp; 'D' 412 nerrjmp; 'a' 416 sigerrjmp; 'D' 544 nsigerrjmp; 'A' Fgrp 548 fgrp; 'X' 552 pgrp; 'a' 556 genbuf; 'A' Chan 684 slash; 'A' Chan 688 dot; }; defn Proc(addr) { complex Proc addr; print("PmLock lk {\n"); PmLock(addr.lk); print("}\n"); print(" err ", addr.err\X, "\n"); print(" errbuf0 ", addr.errbuf0, "\n"); print(" errbuf1 ", addr.errbuf1, "\n"); print(" wd ", addr.wd\X, "\n"); print(" pid ", addr.pid, "\n"); print(" sigres ", addr.sigres, "\n"); print(" sigbuf ", addr.sigbuf, "\n"); print(" errjmp ", addr.errjmp, "\n"); print(" nerrjmp ", addr.nerrjmp, "\n"); print(" sigerrjmp ", addr.sigerrjmp, "\n"); print(" nsigerrjmp ", addr.nsigerrjmp, "\n"); print(" fgrp ", addr.fgrp\X, "\n"); print(" pgrp ", addr.pgrp\X, "\n"); print(" genbuf ", addr.genbuf, "\n"); print(" slash ", addr.slash\X, "\n"); print(" dot ", addr.dot\X, "\n"); }; sizeofRendez = 8; aggr Rendez { Lock 0 lk; 'A' Proc 4 p; }; defn Rendez(addr) { complex Rendez addr; print("Lock lk {\n"); Lock(addr.lk); print("}\n"); print(" p ", addr.p\X, "\n"); }; RENDLOG = 5; RENDHASH = 32; MNTLOG = 5; MNTHASH = 32; NFD = 100; PGHLOG = 9; PGHSIZE = 512; DELTAFD = 20; sizeofPgrp = 196; aggr Pgrp { Ref 0 ref; 'D' 8 noattach; 'U' 12 pgrpid; QLock 16 debug; RWLock 32 ns; QLock 52 nsh; 'a' 68 mnthash; }; defn Pgrp(addr) { complex Pgrp addr; print("Ref ref {\n"); Ref(addr.ref); print("}\n"); print(" noattach ", addr.noattach, "\n"); print(" pgrpid ", addr.pgrpid, "\n"); print("QLock debug {\n"); QLock(addr.debug); print("}\n"); print("RWLock ns {\n"); RWLock(addr.ns); print("}\n"); print("QLock nsh {\n"); QLock(addr.nsh); print("}\n"); print(" mnthash ", addr.mnthash, "\n"); }; sizeofWalkqid = 24; aggr Walkqid { 'A' Chan 0 clone; 'D' 4 nqid; 'a' 8 qid; }; defn Walkqid(addr) { complex Walkqid addr; print(" clone ", addr.clone\X, "\n"); print(" nqid ", addr.nqid, "\n"); print(" qid ", addr.qid, "\n"); }; complex Dev devfs; complex Dev devdup; complex Dev devroot; Nqwds = 2; Nqshift = 5; Nqmask = -1; Nqbits = 64; sizeofChannel = 32; aggr Channel { 'D' 0 s; 'U' 4 f; 'U' 8 n; 'D' 12 e; 'D' 16 freed; 'X' 20 qentry; 'D' 24 nentry; 'a' 28 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\X, "\n"); print(" nentry ", addr.nentry, "\n"); print(" v ", addr.v, "\n"); }; CHANEND = 0; CHANSND = 1; CHANRCV = 2; CHANNOP = 3; CHANNOBLK = 4; sizeofAlt = 20; aggr Alt { 'A' Channel 0 c; 'X' 4 v; 'D' 8 op; 'A' Channel 12 tag; 'D' 16 entryno; }; defn Alt(addr) { complex Alt addr; print(" c ", addr.c\X, "\n"); print(" v ", addr.v\X, "\n"); print(" op ", addr.op, "\n"); print(" tag ", addr.tag\X, "\n"); print(" entryno ", addr.entryno, "\n"); }; Nascent = 0; Running = 1; Runnable = 2; Rendezvous = 3; Callnil = 0; Callalt = 1; Callsnd = 2; Callrcv = 3; DOEXEC = 1; DOEXIT = 2; DOPROC = 3; sizeofTqueue = 12; aggr Tqueue { Lock 0 lk; 'X' 4 $head; 'X' 8 $tail; }; defn Tqueue(addr) { complex Tqueue addr; print("Lock lk {\n"); Lock(addr.lk); print("}\n"); print(" $head ", addr.$head\X, "\n"); print(" $tail ", addr.$tail\X, "\n"); }; sizeofThread = 76; aggr Thread { Lock 0 lk; 'D' 4 id; 'D' 8 grp; 'D' 12 state; 'D' 16 exiting; 'D' 20 call; 'X' 24 cmdname; 'A' Thread 28 next; 'A' Thread 32 nextt; 'X' 36 proc; 'U' 40 tag; 'A' Alt 44 alt; 'U' 48 value; 'A' Thread 52 garbage; 'a' 56 env; 'X' 64 stk; 'U' 68 stksize; 'U' 72 udata; }; defn Thread(addr) { complex Thread addr; print("Lock lk {\n"); Lock(addr.lk); print("}\n"); print(" id ", addr.id, "\n"); print(" grp ", addr.grp, "\n"); print(" state ", addr.state, "\n"); print(" exiting ", addr.exiting, "\n"); print(" call ", addr.call, "\n"); print(" cmdname ", addr.cmdname\X, "\n"); print(" next ", addr.next\X, "\n"); print(" nextt ", addr.nextt\X, "\n"); print(" proc ", addr.proc\X, "\n"); print(" tag ", addr.tag, "\n"); print(" alt ", addr.alt\X, "\n"); print(" value ", addr.value, "\n"); print(" garbage ", addr.garbage\X, "\n"); print(" env ", addr.env, "\n"); print(" stk ", addr.stk\X, "\n"); print(" stksize ", addr.stksize, "\n"); print(" udata ", addr.udata, "\n"); }; sizeofExecproc = 4104; aggr Execproc { 'X' 0 file; 'X' 4 arg; 'a' 8 data; }; defn Execproc(addr) { complex Execproc addr; print(" file ", addr.file\X, "\n"); print(" arg ", addr.arg\X, "\n"); print(" data ", addr.data, "\n"); }; sizeofTproc = 5000; aggr Tproc { Proc 0 sysproc; 'D' 692 nowait; 'D' 696 pid; 'D' 700 rforkflag; 'a' 704 oldenv; 'D' 712 nthreads; Lock 716 threadlk; Tqueue 720 threads; Tqueue 732 runnable; 'A' Thread 744 curthread; 'D' 748 blocked; 'U' 752 nextID; 'A' Tproc 756 next; 'X' 760 arg; 'a' 764 exitstr; 'U' 892 udata; Execproc 896 execproc; }; defn Tproc(addr) { complex Tproc addr; print("Proc sysproc {\n"); Proc(addr.sysproc); print("}\n"); print(" nowait ", addr.nowait, "\n"); print(" pid ", addr.pid, "\n"); print(" rforkflag ", addr.rforkflag, "\n"); print(" oldenv ", addr.oldenv, "\n"); print(" nthreads ", addr.nthreads, "\n"); print("Lock threadlk {\n"); Lock(addr.threadlk); print("}\n"); print("Tqueue threads {\n"); Tqueue(addr.threads); print("}\n"); print("Tqueue runnable {\n"); Tqueue(addr.runnable); print("}\n"); print(" curthread ", addr.curthread\X, "\n"); print(" blocked ", addr.blocked, "\n"); print(" nextID ", addr.nextID, "\n"); print(" next ", addr.next\X, "\n"); print(" arg ", addr.arg\X, "\n"); print(" exitstr ", addr.exitstr, "\n"); print(" udata ", addr.udata, "\n"); print("Execproc execproc {\n"); Execproc(addr.execproc); print("}\n"); }; sizeofPqueue = 12; aggr Pqueue { Lock 0 lk; 'A' Tproc 4 $head; 'A' Tproc 8 $tail; }; defn Pqueue(addr) { complex Pqueue addr; print("Lock lk {\n"); Lock(addr.lk); print("}\n"); print(" $head ", addr.$head\X, "\n"); print(" $tail ", addr.$tail\X, "\n"); }; complex Tqueue _threndez; complex Lock _threndezlock; complex Pqueue _threadpq; complex Channel _threadwaitchan; complex Tproc procp; complex Proc thesysproc; sizeofMainarg = 8; aggr Mainarg { 'D' 0 argc; 'X' 4 argv; }; defn Mainarg(addr) { complex Mainarg addr; print(" argc ", addr.argc, "\n"); print(" argv ", addr.argv\X, "\n"); }; complex Mainarg mainlauncher:a; complex Mainarg pm_main:a; complex Tproc pm_main:p; complex Tproc pm_main:mainprocp; complex Tproc forkpasser:tp; sizeofUchan = 8; aggr Uchan { 'D' 0 sysfd; 'A' Cname 4 syspath; }; defn Uchan(addr) { complex Uchan addr; print(" sysfd ", addr.sysfd, "\n"); print(" syspath ", addr.syspath\X, "\n"); }; complex Tproc procsched:self; complex Chan procsched:c; complex Uchan procsched:u; complex Fgrp procsched:f; complex Execproc procsched:e; complex Tproc procsched:p; complex Proc pm_wake:p; complex Channel _procexecwait:c; complex Waitmsg _procexecwait:w; complex Waitmsg _procexecwait:nw; complex Tproc _threaddebug:p; complex Tproc _threadassert:p;