ref: 600bbfe4aaa9ad0f73d8d73eef1b7670e5f7d3a3
parent: 2d7cc7c32299e2b49e3be6d3f9c21f43c3ce7415
author: joe9 <joe9mail@gmail.com>
date: Mon Jul 5 08:07:16 EDT 2021
9front acid definitions
--- /dev/null
+++ b/emu/9front/emu.acid
@@ -1,0 +1,2080 @@
+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 = 64;
+aggr Tm
+{
+ 'D' 0 nsec;
+ 'D' 4 sec;
+ 'D' 8 min;
+ 'D' 12 hour;
+ 'D' 16 mday;
+ 'D' 20 mon;
+ 'D' 24 year;
+ 'D' 28 wday;
+ 'D' 32 yday;
+ 'a' 36 zone;
+ 'D' 52 tzoff;
+ 'Y' 56 tz;
+};
+
+defn
+Tm(addr) {
+ complex Tm addr;
+ print(" nsec ", addr.nsec, "\n");
+ 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");
+ print(" tz ", addr.tz\Y, "\n");
+};
+
+sizeofTmfmt = 16;
+aggr Tmfmt
+{
+ 'Y' 0 fmt;
+ 'A' Tm 8 tm;
+};
+
+defn
+Tmfmt(addr) {
+ complex Tmfmt addr;
+ print(" fmt ", addr.fmt\Y, "\n");
+ print(" tm ", addr.tm\Y, "\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 = 16;
+aggr QLp
+{
+ 'D' 0 inuse;
+ 'D' 4 state;
+ 'A' QLp 8 next;
+};
+
+defn
+QLp(addr) {
+ complex QLp addr;
+ print(" inuse ", addr.inuse, "\n");
+ print(" state ", addr.state, "\n");
+ print(" next ", addr.next\Y, "\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");
+};
+
+sizeofxRendez = 24;
+aggr xRendez
+{
+ 'A' QLock 0 l;
+ 'A' QLp 8 $head;
+ 'A' QLp 16 $tail;
+};
+
+defn
+xRendez(addr) {
+ complex xRendez 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");
+};
+
+sizeofFPU = 32;
+aggr FPU
+{
+ 'a' 0 env;
+};
+
+defn
+FPU(addr) {
+ complex FPU addr;
+ print(" env ", addr.env, "\n");
+};
+
+sizeofFcall = 568;
+aggr Fcall
+{
+ 'b' 0 type;
+ 'U' 4 fid;
+ 'u' 8 tag;
+ 'U' 12 msize;
+ 'Y' 16 version;
+ 'u' 24 oldtag;
+ 'Y' 32 ename;
+ Qid 40 qid;
+ 'U' 56 iounit;
+ Qid 64 aqid;
+ 'U' 80 afid;
+ 'Y' 88 uname;
+ 'Y' 96 aname;
+ 'U' 104 perm;
+ 'Y' 112 name;
+ 'b' 120 mode;
+ 'U' 124 newfid;
+ 'u' 128 nwname;
+ 'a' 136 wname;
+ 'u' 264 nwqid;
+ 'a' 272 wqid;
+ 'V' 528 offset;
+ 'U' 536 count;
+ 'Y' 544 data;
+ 'u' 552 nstat;
+ 'Y' 560 stat;
+};
+
+defn
+Fcall(addr) {
+ complex Fcall addr;
+ print(" type ", addr.type, "\n");
+ print(" fid ", addr.fid, "\n");
+ print(" tag ", addr.tag, "\n");
+ print(" msize ", addr.msize, "\n");
+ print(" version ", addr.version\Y, "\n");
+ print(" oldtag ", addr.oldtag, "\n");
+ print(" ename ", addr.ename\Y, "\n");
+ print("Qid qid {\n");
+ Qid(addr.qid);
+ print("}\n");
+ print(" iounit ", addr.iounit, "\n");
+ print("Qid aqid {\n");
+ Qid(addr.aqid);
+ print("}\n");
+ print(" afid ", addr.afid, "\n");
+ print(" uname ", addr.uname\Y, "\n");
+ print(" aname ", addr.aname\Y, "\n");
+ print(" perm ", addr.perm, "\n");
+ print(" name ", addr.name\Y, "\n");
+ print(" mode ", addr.mode, "\n");
+ print(" newfid ", addr.newfid, "\n");
+ print(" nwname ", addr.nwname, "\n");
+ print(" wname ", addr.wname, "\n");
+ print(" nwqid ", addr.nwqid, "\n");
+ print(" wqid ", addr.wqid, "\n");
+ print(" offset ", addr.offset, "\n");
+ print(" count ", addr.count, "\n");
+ print(" data ", addr.data\Y, "\n");
+ print(" nstat ", addr.nstat, "\n");
+ print(" stat ", addr.stat\Y, "\n");
+};
+
+Tversion = 100;
+Rversion = 101;
+Tauth = 102;
+Rauth = 103;
+Tattach = 104;
+Rattach = 105;
+Terror = 106;
+Rerror = 107;
+Tflush = 108;
+Rflush = 109;
+Twalk = 110;
+Rwalk = 111;
+Topen = 112;
+Ropen = 113;
+Tcreate = 114;
+Rcreate = 115;
+Tread = 116;
+Rread = 117;
+Twrite = 118;
+Rwrite = 119;
+Tclunk = 120;
+Rclunk = 121;
+Tremove = 122;
+Rremove = 123;
+Tstat = 124;
+Rstat = 125;
+Twstat = 126;
+Rwstat = 127;
+Tmax = 128;
+MAGIC_A = 659724;
+MAGIC_F = 3134983178;
+MAGIC_E = 3735927486;
+MAGIC_I = 43962;
+sizeof_2_ = 40;
+aggr _2_
+{
+ 'Y' 0 bhl;
+ 'Y' 8 bhr;
+ 'Y' 16 bhp;
+ 'Y' 24 bhv;
+ 'Y' 32 bhf;
+};
+
+defn
+_2_(addr) {
+ complex _2_ addr;
+ print(" bhl ", addr.bhl\Y, "\n");
+ print(" bhr ", addr.bhr\Y, "\n");
+ print(" bhp ", addr.bhp\Y, "\n");
+ print(" bhv ", addr.bhv\Y, "\n");
+ print(" bhf ", addr.bhf\Y, "\n");
+};
+
+sizeof_3_ = 16;
+aggr _3_
+{
+ 'Y' 0 link;
+ 'D' 8 size;
+};
+
+defn
+_3_(addr) {
+ complex _3_ addr;
+ print(" link ", addr.link\Y, "\n");
+ print(" size ", addr.size, "\n");
+};
+
+sizeof_4_ = 40;
+aggr _4_
+{
+ 'a' 0 data;
+ _2_ 0 s;
+ _3_ 0 l;
+};
+
+defn
+_4_(addr) {
+ complex _4_ addr;
+ print(" data ", addr.data, "\n");
+ print("_2_ s {\n");
+ _2_(addr.s);
+ print("}\n");
+ print("_3_ l {\n");
+ _3_(addr.l);
+ print("}\n");
+};
+
+sizeofBhdr = 48;
+aggr Bhdr
+{
+ 'U' 0 magic;
+ 'U' 4 size;
+ _4_ 8 u;
+};
+
+defn
+Bhdr(addr) {
+ complex Bhdr addr;
+ print(" magic ", addr.magic, "\n");
+ print(" size ", addr.size, "\n");
+ print("_4_ u {\n");
+ _4_(addr.u);
+ print("}\n");
+};
+
+sizeofBtail = 8;
+aggr Btail
+{
+ 'A' Bhdr 0 hdr;
+};
+
+defn
+Btail(addr) {
+ complex Btail addr;
+ print(" hdr ", addr.hdr\Y, "\n");
+};
+
+NERR = 32;
+KNAMELEN = 28;
+MAXROOT = 140;
+NUMSIZE = 11;
+PRINTSIZE = 256;
+READSTR = 1000;
+sizeofRef = 16;
+aggr Ref
+{
+ Lock 0 lk;
+ 'D' 8 ref;
+};
+
+defn
+Ref(addr) {
+ complex Ref addr;
+ print("Lock lk {\n");
+ Lock(addr.lk);
+ print("}\n");
+ print(" ref ", addr.ref, "\n");
+};
+
+sizeofRendez = 16;
+aggr Rendez
+{
+ Lock 0 l;
+ 'Y' 8 p;
+};
+
+defn
+Rendez(addr) {
+ complex Rendez addr;
+ print("Lock l {\n");
+ Lock(addr.l);
+ print("}\n");
+ print(" p ", addr.p\Y, "\n");
+};
+
+sizeofRept = 64;
+aggr Rept
+{
+ Lock 0 l;
+ Rendez 8 r;
+ 'Y' 24 o;
+ 'D' 32 t;
+ 'Y' 40 active;
+ 'Y' 48 ck;
+ 'Y' 56 f;
+};
+
+defn
+Rept(addr) {
+ complex Rept addr;
+ print("Lock l {\n");
+ Lock(addr.l);
+ print("}\n");
+ print("Rendez r {\n");
+ Rendez(addr.r);
+ print("}\n");
+ print(" o ", addr.o\Y, "\n");
+ print(" t ", addr.t, "\n");
+ print(" active ", addr.active\Y, "\n");
+ print(" ck ", addr.ck\Y, "\n");
+ print(" f ", addr.f\Y, "\n");
+};
+
+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;
+sizeofChan = 208;
+aggr Chan
+{
+ Lock 0 l;
+ Ref 8 r;
+ 'A' Chan 24 next;
+ 'A' Chan 32 link;
+ 'V' 40 offset;
+ 'u' 48 type;
+ 'U' 52 dev;
+ 'u' 56 mode;
+ 'u' 58 flag;
+ Qid 64 qid;
+ 'D' 80 fid;
+ 'U' 84 iounit;
+ 'Y' 88 umh;
+ 'A' Chan 96 umc;
+ QLock 104 umqlock;
+ 'D' 136 uri;
+ 'D' 140 dri;
+ 'U' 144 mountid;
+ 'Y' 152 mcp;
+ 'Y' 160 mux;
+ 'Y' 168 aux;
+ 'A' Chan 176 mchan;
+ Qid 184 mqid;
+ 'Y' 200 name;
+};
+
+defn
+Chan(addr) {
+ complex Chan addr;
+ print("Lock l {\n");
+ Lock(addr.l);
+ print("}\n");
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print(" next ", addr.next\Y, "\n");
+ print(" link ", addr.link\Y, "\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\Y, "\n");
+ print(" umc ", addr.umc\Y, "\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(" mcp ", addr.mcp\Y, "\n");
+ print(" mux ", addr.mux\Y, "\n");
+ print(" aux ", addr.aux\Y, "\n");
+ print(" mchan ", addr.mchan\Y, "\n");
+ print("Qid mqid {\n");
+ Qid(addr.mqid);
+ print("}\n");
+ print(" name ", addr.name\Y, "\n");
+};
+
+sizeofCname = 32;
+aggr Cname
+{
+ Ref 0 r;
+ 'D' 16 alen;
+ 'D' 20 len;
+ 'Y' 24 s;
+};
+
+defn
+Cname(addr) {
+ complex Cname addr;
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print(" alen ", addr.alen, "\n");
+ print(" len ", addr.len, "\n");
+ print(" s ", addr.s\Y, "\n");
+};
+
+sizeofDev = 120;
+aggr Dev
+{
+ 'D' 0 dc;
+ 'Y' 8 name;
+ 'Y' 16 init;
+ 'Y' 24 attach;
+ 'Y' 32 walk;
+ 'Y' 40 stat;
+ 'Y' 48 open;
+ 'Y' 56 create;
+ 'Y' 64 close;
+ 'Y' 72 read;
+ 'Y' 80 bread;
+ 'Y' 88 write;
+ 'Y' 96 bwrite;
+ 'Y' 104 remove;
+ 'Y' 112 wstat;
+};
+
+defn
+Dev(addr) {
+ complex Dev addr;
+ print(" dc ", addr.dc, "\n");
+ print(" name ", addr.name\Y, "\n");
+ print(" init ", addr.init\Y, "\n");
+ print(" attach ", addr.attach\Y, "\n");
+ print(" walk ", addr.walk\Y, "\n");
+ print(" stat ", addr.stat\Y, "\n");
+ print(" open ", addr.open\Y, "\n");
+ print(" create ", addr.create\Y, "\n");
+ print(" close ", addr.close\Y, "\n");
+ print(" read ", addr.read\Y, "\n");
+ print(" bread ", addr.bread\Y, "\n");
+ print(" write ", addr.write\Y, "\n");
+ print(" bwrite ", addr.bwrite\Y, "\n");
+ print(" remove ", addr.remove\Y, "\n");
+ print(" wstat ", addr.wstat\Y, "\n");
+};
+
+BINTR = 1;
+BFREE = 2;
+BMORE = 4;
+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;
+};
+
+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");
+};
+
+sizeofDirtab = 64;
+aggr Dirtab
+{
+ 'a' 0 name;
+ Qid 32 qid;
+ 'V' 48 length;
+ 'D' 56 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");
+};
+
+sizeofWalkqid = 32;
+aggr Walkqid
+{
+ 'A' Chan 0 clone;
+ 'D' 8 nqid;
+ 'a' 16 qid;
+};
+
+defn
+Walkqid(addr) {
+ complex Walkqid addr;
+ print(" clone ", addr.clone\Y, "\n");
+ print(" nqid ", addr.nqid, "\n");
+ print(" qid ", addr.qid, "\n");
+};
+
+NSMAX = 1000;
+NSLOG = 7;
+NSCACHE = 128;
+sizeofMntwalk = 24;
+aggr Mntwalk
+{
+ 'D' 0 cddone;
+ 'U' 4 id;
+ 'Y' 8 mh;
+ 'Y' 16 cm;
+};
+
+defn
+Mntwalk(addr) {
+ complex Mntwalk addr;
+ print(" cddone ", addr.cddone, "\n");
+ print(" id ", addr.id, "\n");
+ print(" mh ", addr.mh\Y, "\n");
+ print(" cm ", addr.cm\Y, "\n");
+};
+
+sizeofMount = 64;
+aggr Mount
+{
+ 'U' 0 mountid;
+ 'A' Mount 8 next;
+ 'Y' 16 $head;
+ 'A' Mount 24 copy;
+ 'A' Mount 32 order;
+ 'A' Chan 40 to;
+ 'D' 48 mflag;
+ 'Y' 56 spec;
+};
+
+defn
+Mount(addr) {
+ complex Mount addr;
+ print(" mountid ", addr.mountid, "\n");
+ print(" next ", addr.next\Y, "\n");
+ print(" $head ", addr.$head\Y, "\n");
+ print(" copy ", addr.copy\Y, "\n");
+ print(" order ", addr.order\Y, "\n");
+ print(" to ", addr.to\Y, "\n");
+ print(" mflag ", addr.mflag, "\n");
+ print(" spec ", addr.spec\Y, "\n");
+};
+
+sizeofMhead = 72;
+aggr Mhead
+{
+ Ref 0 r;
+ RWLock 16 lock;
+ 'A' Chan 48 from;
+ 'A' Mount 56 mount;
+ 'A' Mhead 64 hash;
+};
+
+defn
+Mhead(addr) {
+ complex Mhead addr;
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print("RWLock lock {\n");
+ RWLock(addr.lock);
+ print("}\n");
+ print(" from ", addr.from\Y, "\n");
+ print(" mount ", addr.mount\Y, "\n");
+ print(" hash ", addr.hash\Y, "\n");
+};
+
+sizeofMnt = 72;
+aggr Mnt
+{
+ Lock 0 l;
+ 'A' Chan 8 c;
+ 'Y' 16 rip;
+ 'Y' 24 queue;
+ 'U' 32 id;
+ 'A' Mnt 40 list;
+ 'D' 48 flags;
+ 'D' 52 msize;
+ 'Y' 56 version;
+ 'Y' 64 q;
+};
+
+defn
+Mnt(addr) {
+ complex Mnt addr;
+ print("Lock l {\n");
+ Lock(addr.l);
+ print("}\n");
+ print(" c ", addr.c\Y, "\n");
+ print(" rip ", addr.rip\Y, "\n");
+ print(" queue ", addr.queue\Y, "\n");
+ print(" id ", addr.id, "\n");
+ print(" list ", addr.list\Y, "\n");
+ print(" flags ", addr.flags, "\n");
+ print(" msize ", addr.msize, "\n");
+ print(" version ", addr.version\Y, "\n");
+ print(" q ", addr.q\Y, "\n");
+};
+
+MNTLOG = 5;
+MNTHASH = 32;
+DELTAFD = 20;
+MAXNFD = 4000;
+MAXKEY = 8;
+sizeofMntparam = 32;
+aggr Mntparam
+{
+ 'A' Chan 0 chan;
+ 'A' Chan 8 authchan;
+ 'Y' 16 spec;
+ 'D' 24 flags;
+};
+
+defn
+Mntparam(addr) {
+ complex Mntparam addr;
+ print(" chan ", addr.chan\Y, "\n");
+ print(" authchan ", addr.authchan\Y, "\n");
+ print(" spec ", addr.spec\Y, "\n");
+ print(" flags ", addr.flags, "\n");
+};
+
+sizeofPgrp = 376;
+aggr Pgrp
+{
+ Ref 0 r;
+ 'U' 16 pgrpid;
+ RWLock 24 ns;
+ QLock 56 nsh;
+ 'a' 88 mnthash;
+ 'D' 344 progmode;
+ 'A' Chan 352 dot;
+ 'A' Chan 360 slash;
+ 'D' 368 nodevs;
+ 'D' 372 pin;
+};
+
+defn
+Pgrp(addr) {
+ complex Pgrp addr;
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print(" pgrpid ", addr.pgrpid, "\n");
+ print("RWLock ns {\n");
+ RWLock(addr.ns);
+ print("}\n");
+ print("QLock nsh {\n");
+ QLock(addr.nsh);
+ print("}\n");
+ print(" mnthash ", addr.mnthash, "\n");
+ print(" progmode ", addr.progmode, "\n");
+ print(" dot ", addr.dot\Y, "\n");
+ print(" slash ", addr.slash\Y, "\n");
+ print(" nodevs ", addr.nodevs, "\n");
+ print(" pin ", addr.pin, "\n");
+};
+
+Nopin = -1;
+sizeofFgrp = 48;
+aggr Fgrp
+{
+ Lock 0 l;
+ Ref 8 r;
+ 'A' Chan 24 fd;
+ 'D' 32 nfd;
+ 'D' 36 maxfd;
+ 'D' 40 minfd;
+};
+
+defn
+Fgrp(addr) {
+ complex Fgrp addr;
+ print("Lock l {\n");
+ Lock(addr.l);
+ print("}\n");
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print(" fd ", addr.fd\Y, "\n");
+ print(" nfd ", addr.nfd, "\n");
+ print(" maxfd ", addr.maxfd, "\n");
+ print(" minfd ", addr.minfd, "\n");
+};
+
+sizeofEvalue = 48;
+aggr Evalue
+{
+ 'Y' 0 var;
+ 'Y' 8 val;
+ 'D' 16 len;
+ Qid 24 qid;
+ 'A' Evalue 40 next;
+};
+
+defn
+Evalue(addr) {
+ complex Evalue addr;
+ print(" var ", addr.var\Y, "\n");
+ print(" val ", addr.val\Y, "\n");
+ print(" len ", addr.len, "\n");
+ print("Qid qid {\n");
+ Qid(addr.qid);
+ print("}\n");
+ print(" next ", addr.next\Y, "\n");
+};
+
+sizeofEgrp = 64;
+aggr Egrp
+{
+ Ref 0 r;
+ QLock 16 l;
+ 'U' 48 path;
+ 'U' 52 vers;
+ 'A' Evalue 56 entries;
+};
+
+defn
+Egrp(addr) {
+ complex Egrp addr;
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print("QLock l {\n");
+ QLock(addr.l);
+ print("}\n");
+ print(" path ", addr.path, "\n");
+ print(" vers ", addr.vers, "\n");
+ print(" entries ", addr.entries\Y, "\n");
+};
+
+sizeofSignerkey = 56;
+aggr Signerkey
+{
+ Ref 0 r;
+ 'Y' 16 owner;
+ 'u' 24 footprint;
+ 'U' 28 expires;
+ 'Y' 32 alg;
+ 'Y' 40 pk;
+ 'Y' 48 pkfree;
+};
+
+defn
+Signerkey(addr) {
+ complex Signerkey addr;
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print(" owner ", addr.owner\Y, "\n");
+ print(" footprint ", addr.footprint, "\n");
+ print(" expires ", addr.expires, "\n");
+ print(" alg ", addr.alg\Y, "\n");
+ print(" pk ", addr.pk\Y, "\n");
+ print(" pkfree ", addr.pkfree\Y, "\n");
+};
+
+sizeofSkeyset = 136;
+aggr Skeyset
+{
+ Ref 0 r;
+ QLock 16 l;
+ 'U' 48 flags;
+ 'Y' 56 devs;
+ 'D' 64 nkey;
+ 'a' 72 keys;
+};
+
+defn
+Skeyset(addr) {
+ complex Skeyset addr;
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print("QLock l {\n");
+ QLock(addr.l);
+ print("}\n");
+ print(" flags ", addr.flags, "\n");
+ print(" devs ", addr.devs\Y, "\n");
+ print(" nkey ", addr.nkey, "\n");
+ print(" keys ", addr.keys, "\n");
+};
+
+sizeofUqid = 48;
+aggr Uqid
+{
+ Ref 0 r;
+ 'D' 16 type;
+ 'D' 20 dev;
+ 'V' 24 oldpath;
+ 'V' 32 newpath;
+ 'A' Uqid 40 next;
+};
+
+defn
+Uqid(addr) {
+ complex Uqid addr;
+ print("Ref r {\n");
+ Ref(addr.r);
+ print("}\n");
+ print(" type ", addr.type, "\n");
+ print(" dev ", addr.dev, "\n");
+ print(" oldpath ", addr.oldpath, "\n");
+ print(" newpath ", addr.newpath, "\n");
+ print(" next ", addr.next\Y, "\n");
+};
+
+Nqidhash = 32;
+sizeofUqidtab = 296;
+aggr Uqidtab
+{
+ QLock 0 l;
+ 'a' 32 qids;
+ 'U' 288 pathgen;
+};
+
+defn
+Uqidtab(addr) {
+ complex Uqidtab addr;
+ print("QLock l {\n");
+ QLock(addr.l);
+ print("}\n");
+ print(" qids ", addr.qids, "\n");
+ print(" pathgen ", addr.pathgen, "\n");
+};
+
+sizeofOsenv = 392;
+aggr Osenv
+{
+ 'Y' 0 syserrstr;
+ 'Y' 8 errstr;
+ 'a' 16 errbuf0;
+ 'a' 144 errbuf1;
+ 'A' Pgrp 272 pgrp;
+ 'A' Fgrp 280 fgrp;
+ 'A' Egrp 288 egrp;
+ 'A' Skeyset 296 sigs;
+ 'A' Rendez 304 rend;
+ 'Y' 312 waitq;
+ 'Y' 320 childq;
+ 'Y' 328 debug;
+ 'Y' 336 user;
+ FPU 344 fpu;
+ 'D' 376 uid;
+ 'D' 380 gid;
+ 'Y' 384 ui;
+};
+
+defn
+Osenv(addr) {
+ complex Osenv addr;
+ print(" syserrstr ", addr.syserrstr\Y, "\n");
+ print(" errstr ", addr.errstr\Y, "\n");
+ print(" errbuf0 ", addr.errbuf0, "\n");
+ print(" errbuf1 ", addr.errbuf1, "\n");
+ print(" pgrp ", addr.pgrp\Y, "\n");
+ print(" fgrp ", addr.fgrp\Y, "\n");
+ print(" egrp ", addr.egrp\Y, "\n");
+ print(" sigs ", addr.sigs\Y, "\n");
+ print(" rend ", addr.rend\Y, "\n");
+ print(" waitq ", addr.waitq\Y, "\n");
+ print(" childq ", addr.childq\Y, "\n");
+ print(" debug ", addr.debug\Y, "\n");
+ print(" user ", addr.user\Y, "\n");
+ print("FPU fpu {\n");
+ FPU(addr.fpu);
+ print("}\n");
+ print(" uid ", addr.uid, "\n");
+ print(" gid ", addr.gid, "\n");
+ print(" ui ", addr.ui\Y, "\n");
+};
+
+Unknown = 3735927486;
+IdleGC = 22;
+Interp = 23;
+BusyGC = 24;
+Moribund = 25;
+sizeofProc = 1272;
+aggr Proc
+{
+ 'D' 0 type;
+ 'a' 4 text;
+ 'A' Proc 32 qnext;
+ 'U' 40 pid;
+ 'A' Proc 48 next;
+ 'A' Proc 56 prev;
+ Lock 64 rlock;
+ 'A' Rendez 72 r;
+ Rendez 80 sleep;
+ 'D' 96 killed;
+ 'D' 100 swipend;
+ 'D' 104 syscall;
+ 'D' 108 intwait;
+ 'D' 112 sigid;
+ Lock 120 sysio;
+ 'a' 128 genbuf;
+ 'D' 256 nerr;
+ 'a' 264 estack;
+ 'Y' 776 kstack;
+ 'Y' 784 func;
+ 'Y' 792 arg;
+ 'Y' 800 iprog;
+ 'Y' 808 prog;
+ 'A' Osenv 816 env;
+ Osenv 824 defenv;
+ 'a' 1216 privstack;
+ 'a' 1232 sharestack;
+ 'A' Proc 1248 kid;
+ 'Y' 1256 kidsp;
+ 'Y' 1264 os;
+};
+
+defn
+Proc(addr) {
+ complex Proc addr;
+ print(" type ", addr.type, "\n");
+ print(" text ", addr.text, "\n");
+ print(" qnext ", addr.qnext\Y, "\n");
+ print(" pid ", addr.pid, "\n");
+ print(" next ", addr.next\Y, "\n");
+ print(" prev ", addr.prev\Y, "\n");
+ print("Lock rlock {\n");
+ Lock(addr.rlock);
+ print("}\n");
+ print(" r ", addr.r\Y, "\n");
+ print("Rendez sleep {\n");
+ Rendez(addr.sleep);
+ print("}\n");
+ print(" killed ", addr.killed, "\n");
+ print(" swipend ", addr.swipend, "\n");
+ print(" syscall ", addr.syscall, "\n");
+ print(" intwait ", addr.intwait, "\n");
+ print(" sigid ", addr.sigid, "\n");
+ print("Lock sysio {\n");
+ Lock(addr.sysio);
+ print("}\n");
+ print(" genbuf ", addr.genbuf, "\n");
+ print(" nerr ", addr.nerr, "\n");
+ print(" estack ", addr.estack, "\n");
+ print(" kstack ", addr.kstack\Y, "\n");
+ print(" func ", addr.func\Y, "\n");
+ print(" arg ", addr.arg\Y, "\n");
+ print(" iprog ", addr.iprog\Y, "\n");
+ print(" prog ", addr.prog\Y, "\n");
+ print(" env ", addr.env\Y, "\n");
+ print("Osenv defenv {\n");
+ Osenv(addr.defenv);
+ print("}\n");
+ print(" privstack ", addr.privstack, "\n");
+ print(" sharestack ", addr.sharestack, "\n");
+ print(" kid ", addr.kid\Y, "\n");
+ print(" kidsp ", addr.kidsp\Y, "\n");
+ print(" os ", addr.os\Y, "\n");
+};
+
+KPDUPPG = 1;
+KPDUPFDG = 2;
+KPDUPENVG = 4;
+KPX11 = 256;
+KPDUP = 7;
+sizeofProcs = 24;
+aggr Procs
+{
+ Lock 0 l;
+ 'A' Proc 8 $head;
+ 'A' Proc 16 $tail;
+};
+
+defn
+Procs(addr) {
+ complex Procs addr;
+ print("Lock l {\n");
+ Lock(addr.l);
+ print("}\n");
+ print(" $head ", addr.$head\Y, "\n");
+ print(" $tail ", addr.$tail\Y, "\n");
+};
+
+sizeofRootdata = 32;
+aggr Rootdata
+{
+ 'D' 0 dotdot;
+ 'Y' 8 ptr;
+ 'D' 16 size;
+ 'Y' 24 sizep;
+};
+
+defn
+Rootdata(addr) {
+ complex Rootdata addr;
+ print(" dotdot ", addr.dotdot, "\n");
+ print(" ptr ", addr.ptr\Y, "\n");
+ print(" size ", addr.size, "\n");
+ print(" sizep ", addr.sizep\Y, "\n");
+};
+
+complex Procs procs;
+INVAL = 1;
+ZDIV = 2;
+OVFL = 4;
+UNFL = 8;
+INEX = 16;
+RND_NR = 0;
+RND_NINF = 256;
+RND_PINF = 512;
+RND_Z = 768;
+RND_MASK = 768;
+sizeofCmdbuf = 24;
+aggr Cmdbuf
+{
+ 'Y' 0 buf;
+ 'Y' 8 f;
+ 'D' 16 nf;
+};
+
+defn
+Cmdbuf(addr) {
+ complex Cmdbuf addr;
+ print(" buf ", addr.buf\Y, "\n");
+ print(" f ", addr.f\Y, "\n");
+ print(" nf ", addr.nf, "\n");
+};
+
+sizeofCmdtab = 24;
+aggr Cmdtab
+{
+ 'D' 0 index;
+ 'Y' 8 cmd;
+ 'D' 16 narg;
+};
+
+defn
+Cmdtab(addr) {
+ complex Cmdtab addr;
+ print(" index ", addr.index, "\n");
+ print(" cmd ", addr.cmd\Y, "\n");
+ print(" narg ", addr.narg, "\n");
+};
+
+Qstarve = 1;
+Qmsg = 2;
+Qclosed = 4;
+Qflow = 8;
+Qcoalesce = 16;
+Qkick = 32;
+Palt = 0;
+Psend = 1;
+Precv = 2;
+Pdebug = 3;
+Pready = 4;
+Prelease = 5;
+Pexiting = 6;
+Pbroken = 7;
+propagator = 3;
+PRNSIZE = 1024;
+BIHASH = 23;
+PQUANTA = 2048;
+STRUCTALIGN = 8;
+Ppropagate = 1;
+Pnotifyleader = 2;
+Prestrict = 4;
+Prestricted = 8;
+Pkilled = 16;
+Pprivatemem = 32;
+sizeofILock = 16;
+aggr ILock
+{
+ 'D' 0 lk;
+ 'D' 4 pid;
+ 'Y' 8 ql;
+};
+
+defn
+ILock(addr) {
+ complex ILock addr;
+ print(" lk ", addr.lk, "\n");
+ print(" pid ", addr.pid, "\n");
+ print(" ql ", addr.ql\Y, "\n");
+};
+
+sizeofFrame = 32;
+aggr Frame
+{
+ 'Y' 0 lr;
+ 'Y' 8 fp;
+ 'Y' 16 mr;
+ 'Y' 24 t;
+};
+
+defn
+Frame(addr) {
+ complex Frame addr;
+ print(" lr ", addr.lr\Y, "\n");
+ print(" fp ", addr.fp\Y, "\n");
+ print(" mr ", addr.mr\Y, "\n");
+ print(" t ", addr.t\Y, "\n");
+};
+
+sizeof_5_ = 32;
+aggr _5_
+{
+ 'a' 0 fu;
+ 'a' 0 fr;
+};
+
+defn
+_5_(addr) {
+ complex _5_ addr;
+ print(" fu ", addr.fu, "\n");
+ print(" fr ", addr.fr, "\n");
+};
+
+sizeof_6_ = 64;
+aggr _6_
+{
+ 'Y' 0 TR;
+ 'Y' 8 SP;
+ 'Y' 16 TS;
+ 'Y' 24 EX;
+ _5_ 32 tos;
+};
+
+defn
+_6_(addr) {
+ complex _6_ addr;
+ print(" TR ", addr.TR\Y, "\n");
+ print(" SP ", addr.SP\Y, "\n");
+ print(" TS ", addr.TS\Y, "\n");
+ print(" EX ", addr.EX\Y, "\n");
+ print("_5_ tos {\n");
+ _5_(addr.tos);
+ print("}\n");
+};
+
+sizeofStkext = 64;
+aggr Stkext
+{
+ 'a' 0 stack;
+ _6_ 0 reg;
+};
+
+defn
+Stkext(addr) {
+ complex Stkext addr;
+ print(" stack ", addr.stack, "\n");
+ print("_6_ reg {\n");
+ _6_(addr.reg);
+ print("}\n");
+};
+
+sizeofArray = 32;
+aggr Array
+{
+ 'V' 0 len;
+ 'Y' 8 t;
+ 'A' Array 16 root;
+ 'Y' 24 data;
+};
+
+defn
+Array(addr) {
+ complex Array addr;
+ print(" len ", addr.len, "\n");
+ print(" t ", addr.t\Y, "\n");
+ print(" root ", addr.root\Y, "\n");
+ print(" data ", addr.data\Y, "\n");
+};
+
+sizeofList = 24;
+aggr List
+{
+ 'A' List 0 $tail;
+ 'Y' 8 t;
+ 'a' 16 data;
+};
+
+defn
+List(addr) {
+ complex List addr;
+ print(" $tail ", addr.$tail\Y, "\n");
+ print(" t ", addr.t\Y, "\n");
+ print(" data ", addr.data, "\n");
+};
+
+sizeof_7_ = 8;
+aggr _7_
+{
+ 'V' 0 w;
+ 'Y' 0 t;
+};
+
+defn
+_7_(addr) {
+ complex _7_ addr;
+ print(" w ", addr.w, "\n");
+ print(" t ", addr.t\Y, "\n");
+};
+
+sizeofChannel = 56;
+aggr Channel
+{
+ 'A' Array 0 buf;
+ 'Y' 8 send;
+ 'Y' 16 recv;
+ 'Y' 24 aux;
+ 'Y' 32 mover;
+ _7_ 40 mid;
+ 'D' 48 front;
+ 'D' 52 size;
+};
+
+defn
+Channel(addr) {
+ complex Channel addr;
+ print(" buf ", addr.buf\Y, "\n");
+ print(" send ", addr.send\Y, "\n");
+ print(" recv ", addr.recv\Y, "\n");
+ print(" aux ", addr.aux\Y, "\n");
+ print(" mover ", addr.mover\Y, "\n");
+ print("_7_ mid {\n");
+ _7_(addr.mid);
+ print("}\n");
+ print(" front ", addr.front, "\n");
+ print(" size ", addr.size, "\n");
+};
+
+sizeofProgq = 16;
+aggr Progq
+{
+ 'Y' 0 prog;
+ 'A' Progq 8 next;
+};
+
+defn
+Progq(addr) {
+ complex Progq addr;
+ print(" prog ", addr.prog\Y, "\n");
+ print(" next ", addr.next\Y, "\n");
+};
+
+sizeof_8_ = 8;
+aggr _8_
+{
+ 'a' 0 ascii;
+ 'a' 0 runes;
+};
+
+defn
+_8_(addr) {
+ complex _8_ addr;
+ print(" ascii ", addr.ascii, "\n");
+ print(" runes ", addr.runes, "\n");
+};
+
+sizeofString = 24;
+aggr String
+{
+ 'D' 0 len;
+ 'D' 4 max;
+ 'Y' 8 tmp;
+ _8_ 16 data;
+};
+
+defn
+String(addr) {
+ complex String addr;
+ print(" len ", addr.len, "\n");
+ print(" max ", addr.max, "\n");
+ print(" tmp ", addr.tmp\Y, "\n");
+ print("_8_ data {\n");
+ _8_(addr.data);
+ print("}\n");
+};
+
+sizeofLinkpc = 8;
+aggr Linkpc
+{
+ 'Y' 0 runt;
+ 'Y' 0 pc;
+};
+
+defn
+Linkpc(addr) {
+ complex Linkpc addr;
+ print(" runt ", addr.runt\Y, "\n");
+ print(" pc ", addr.pc\Y, "\n");
+};
+
+sizeofLink = 32;
+aggr Link
+{
+ 'D' 0 sig;
+ 'Y' 8 frame;
+ Linkpc 16 u;
+ 'Y' 24 name;
+};
+
+defn
+Link(addr) {
+ complex Link addr;
+ print(" sig ", addr.sig, "\n");
+ print(" frame ", addr.frame\Y, "\n");
+ print("Linkpc u {\n");
+ Linkpc(addr.u);
+ print("}\n");
+ print(" name ", addr.name\Y, "\n");
+};
+
+sizeof_9_ = 8;
+aggr _9_
+{
+ 'u' 0 f;
+ 'u' 2 s;
+};
+
+defn
+_9_(addr) {
+ complex _9_ addr;
+ print(" f ", addr.f, "\n");
+ print(" s ", addr.s, "\n");
+};
+
+sizeofAdr = 8;
+aggr Adr
+{
+ 'V' 0 imm;
+ 'V' 0 ind;
+ 'Y' 0 ins;
+ _9_ 0 i;
+};
+
+defn
+Adr(addr) {
+ complex Adr addr;
+ print(" imm ", addr.imm, "\n");
+ print(" ind ", addr.ind, "\n");
+ print(" ins ", addr.ins\Y, "\n");
+ print("_9_ i {\n");
+ _9_(addr.i);
+ print("}\n");
+};
+
+sizeofInst = 24;
+aggr Inst
+{
+ 'b' 0 op;
+ 'b' 1 add;
+ 'u' 2 reg;
+ Adr 8 s;
+ Adr 16 d;
+};
+
+defn
+Inst(addr) {
+ complex Inst addr;
+ print(" op ", addr.op, "\n");
+ print(" add ", addr.add, "\n");
+ print(" reg ", addr.reg, "\n");
+ print("Adr s {\n");
+ Adr(addr.s);
+ print("}\n");
+ print("Adr d {\n");
+ Adr(addr.d);
+ print("}\n");
+};
+
+sizeofAltc = 16;
+aggr Altc
+{
+ 'A' Channel 0 c;
+ 'Y' 8 ptr;
+};
+
+defn
+Altc(addr) {
+ complex Altc addr;
+ print(" c ", addr.c\Y, "\n");
+ print(" ptr ", addr.ptr\Y, "\n");
+};
+
+sizeofAlt = 32;
+aggr Alt
+{
+ 'V' 0 nsend;
+ 'V' 8 nrecv;
+ 'a' 16 ac;
+};
+
+defn
+Alt(addr) {
+ complex Alt addr;
+ print(" nsend ", addr.nsend, "\n");
+ print(" nrecv ", addr.nrecv, "\n");
+ print(" ac ", addr.ac, "\n");
+};
+
+sizeofType = 56;
+aggr Type
+{
+ 'D' 0 ref;
+ 'Y' 8 free;
+ 'Y' 16 mark;
+ 'D' 24 size;
+ 'D' 28 np;
+ 'Y' 32 destroy;
+ 'Y' 40 initialize;
+ 'a' 48 map;
+};
+
+defn
+Type(addr) {
+ complex Type addr;
+ print(" ref ", addr.ref, "\n");
+ print(" free ", addr.free\Y, "\n");
+ print(" mark ", addr.mark\Y, "\n");
+ print(" size ", addr.size, "\n");
+ print(" np ", addr.np, "\n");
+ print(" destroy ", addr.destroy\Y, "\n");
+ print(" initialize ", addr.initialize\Y, "\n");
+ print(" map ", addr.map, "\n");
+};
+
+sizeofREG = 120;
+aggr REG
+{
+ 'A' Inst 0 PC;
+ 'Y' 8 MP;
+ 'Y' 16 FP;
+ 'Y' 24 SP;
+ 'Y' 32 TS;
+ 'Y' 40 EX;
+ 'Y' 48 M;
+ 'D' 56 IC;
+ 'A' Inst 64 xpc;
+ 'Y' 72 s;
+ 'Y' 80 d;
+ 'Y' 88 m;
+ 'V' 96 t;
+ 'V' 104 st;
+ 'V' 112 dt;
+};
+
+defn
+REG(addr) {
+ complex REG addr;
+ print(" PC ", addr.PC\Y, "\n");
+ print(" MP ", addr.MP\Y, "\n");
+ print(" FP ", addr.FP\Y, "\n");
+ print(" SP ", addr.SP\Y, "\n");
+ print(" TS ", addr.TS\Y, "\n");
+ print(" EX ", addr.EX\Y, "\n");
+ print(" M ", addr.M\Y, "\n");
+ print(" IC ", addr.IC, "\n");
+ print(" xpc ", addr.xpc\Y, "\n");
+ print(" s ", addr.s\Y, "\n");
+ print(" d ", addr.d\Y, "\n");
+ print(" m ", addr.m\Y, "\n");
+ print(" t ", addr.t, "\n");
+ print(" st ", addr.st, "\n");
+ print(" dt ", addr.dt, "\n");
+};
+
+sizeofProgs = 48;
+aggr Progs
+{
+ 'D' 0 id;
+ 'D' 4 flags;
+ 'A' Progs 8 parent;
+ 'A' Progs 16 child;
+ 'A' Progs 24 sib;
+ 'Y' 32 $head;
+ 'Y' 40 $tail;
+};
+
+defn
+Progs(addr) {
+ complex Progs addr;
+ print(" id ", addr.id, "\n");
+ print(" flags ", addr.flags, "\n");
+ print(" parent ", addr.parent\Y, "\n");
+ print(" child ", addr.child\Y, "\n");
+ print(" sib ", addr.sib\Y, "\n");
+ print(" $head ", addr.$head\Y, "\n");
+ print(" $tail ", addr.$tail\Y, "\n");
+};
+
+sizeofProg = 272;
+aggr Prog
+{
+ REG 0 R;
+ 'A' Prog 120 link;
+ 'A' Channel 128 chan;
+ 'Y' 136 ptr;
+ 'D' 144 state;
+ 'Y' 152 kill;
+ 'Y' 160 killstr;
+ 'D' 168 pid;
+ 'D' 172 quanta;
+ 'U' 176 ticks;
+ 'D' 180 flags;
+ 'A' Prog 184 prev;
+ 'A' Prog 192 next;
+ 'A' Prog 200 pidlink;
+ 'A' Progs 208 group;
+ 'A' Prog 216 grpprev;
+ 'A' Prog 224 grpnext;
+ 'Y' 232 exval;
+ 'Y' 240 exstr;
+ 'Y' 248 addrun;
+ 'Y' 256 xec;
+ 'Y' 264 osenv;
+};
+
+defn
+Prog(addr) {
+ complex Prog addr;
+ print("REG R {\n");
+ REG(addr.R);
+ print("}\n");
+ print(" link ", addr.link\Y, "\n");
+ print(" chan ", addr.chan\Y, "\n");
+ print(" ptr ", addr.ptr\Y, "\n");
+ print(" state ", addr.state, "\n");
+ print(" kill ", addr.kill\Y, "\n");
+ print(" killstr ", addr.killstr\Y, "\n");
+ print(" pid ", addr.pid, "\n");
+ print(" quanta ", addr.quanta, "\n");
+ print(" ticks ", addr.ticks, "\n");
+ print(" flags ", addr.flags, "\n");
+ print(" prev ", addr.prev\Y, "\n");
+ print(" next ", addr.next\Y, "\n");
+ print(" pidlink ", addr.pidlink\Y, "\n");
+ print(" group ", addr.group\Y, "\n");
+ print(" grpprev ", addr.grpprev\Y, "\n");
+ print(" grpnext ", addr.grpnext\Y, "\n");
+ print(" exval ", addr.exval\Y, "\n");
+ print(" exstr ", addr.exstr\Y, "\n");
+ print(" addrun ", addr.addrun\Y, "\n");
+ print(" xec ", addr.xec\Y, "\n");
+ print(" osenv ", addr.osenv\Y, "\n");
+};
+
+sizeofModule = 168;
+aggr Module
+{
+ 'D' 0 ref;
+ 'D' 4 compiled;
+ 'U' 8 ss;
+ 'U' 12 rt;
+ 'U' 16 mtime;
+ Qid 24 qid;
+ 'u' 40 dtype;
+ 'U' 44 dev;
+ 'D' 48 nprog;
+ 'A' Inst 56 prog;
+ 'Y' 64 origmp;
+ 'D' 72 ntype;
+ 'A' Type 80 type;
+ 'A' Inst 88 entry;
+ 'A' Type 96 entryt;
+ 'Y' 104 name;
+ 'Y' 112 path;
+ 'A' Module 120 link;
+ 'A' Link 128 ext;
+ 'Y' 136 ldt;
+ 'Y' 144 htab;
+ 'Y' 152 pctab;
+ 'Y' 160 dlm;
+};
+
+defn
+Module(addr) {
+ complex Module addr;
+ print(" ref ", addr.ref, "\n");
+ print(" compiled ", addr.compiled, "\n");
+ print(" ss ", addr.ss, "\n");
+ print(" rt ", addr.rt, "\n");
+ print(" mtime ", addr.mtime, "\n");
+ print("Qid qid {\n");
+ Qid(addr.qid);
+ print("}\n");
+ print(" dtype ", addr.dtype, "\n");
+ print(" dev ", addr.dev, "\n");
+ print(" nprog ", addr.nprog, "\n");
+ print(" prog ", addr.prog\Y, "\n");
+ print(" origmp ", addr.origmp\Y, "\n");
+ print(" ntype ", addr.ntype, "\n");
+ print(" type ", addr.type\Y, "\n");
+ print(" entry ", addr.entry\Y, "\n");
+ print(" entryt ", addr.entryt\Y, "\n");
+ print(" name ", addr.name\Y, "\n");
+ print(" path ", addr.path\Y, "\n");
+ print(" link ", addr.link\Y, "\n");
+ print(" ext ", addr.ext\Y, "\n");
+ print(" ldt ", addr.ldt\Y, "\n");
+ print(" htab ", addr.htab\Y, "\n");
+ print(" pctab ", addr.pctab\Y, "\n");
+ print(" dlm ", addr.dlm\Y, "\n");
+};
+
+sizeofModl = 24;
+aggr Modl
+{
+ Linkpc 0 u;
+ 'A' Type 8 frame;
+ 'Y' 16 name;
+};
+
+defn
+Modl(addr) {
+ complex Modl addr;
+ print("Linkpc u {\n");
+ Linkpc(addr.u);
+ print("}\n");
+ print(" frame ", addr.frame\Y, "\n");
+ print(" name ", addr.name\Y, "\n");
+};
+
+sizeofModlink = 80;
+aggr Modlink
+{
+ 'Y' 0 MP;
+ 'A' Module 8 m;
+ 'D' 16 compiled;
+ 'A' Inst 24 prog;
+ 'A' Type 32 type;
+ 'Y' 40 data;
+ 'D' 48 nlinks;
+ 'a' 56 links;
+};
+
+defn
+Modlink(addr) {
+ complex Modlink addr;
+ print(" MP ", addr.MP\Y, "\n");
+ print(" m ", addr.m\Y, "\n");
+ print(" compiled ", addr.compiled, "\n");
+ print(" prog ", addr.prog\Y, "\n");
+ print(" type ", addr.type\Y, "\n");
+ print(" data ", addr.data\Y, "\n");
+ print(" nlinks ", addr.nlinks, "\n");
+ print(" links ", addr.links, "\n");
+};
+
+sizeofHeap = 24;
+aggr Heap
+{
+ 'D' 0 color;
+ 'U' 4 ref;
+ 'A' Type 8 t;
+ 'U' 16 hprof;
+};
+
+defn
+Heap(addr) {
+ complex Heap addr;
+ print(" color ", addr.color, "\n");
+ print(" ref ", addr.ref, "\n");
+ print(" t ", addr.t\Y, "\n");
+ print(" hprof ", addr.hprof, "\n");
+};
+
+sizeofAtidle = 24;
+aggr Atidle
+{
+ 'Y' 0 fn;
+ 'Y' 8 arg;
+ 'A' Atidle 16 link;
+};
+
+defn
+Atidle(addr) {
+ complex Atidle addr;
+ print(" fn ", addr.fn\Y, "\n");
+ print(" arg ", addr.arg\Y, "\n");
+ print(" link ", addr.link\Y, "\n");
+};
+
+sizeofImport = 16;
+aggr Import
+{
+ 'D' 0 sig;
+ 'Y' 8 name;
+};
+
+defn
+Import(addr) {
+ complex Import addr;
+ print(" sig ", addr.sig, "\n");
+ print(" name ", addr.name\Y, "\n");
+};
+
+sizeofExcept = 16;
+aggr Except
+{
+ 'Y' 0 s;
+ 'W' 8 pc;
+};
+
+defn
+Except(addr) {
+ complex Except addr;
+ print(" s ", addr.s\Y, "\n");
+ print(" pc ", addr.pc, "\n");
+};
+
+sizeofHandler = 48;
+aggr Handler
+{
+ 'W' 0 pc1;
+ 'W' 8 pc2;
+ 'W' 16 eoff;
+ 'W' 24 ne;
+ 'A' Type 32 t;
+ 'A' Except 40 etab;
+};
+
+defn
+Handler(addr) {
+ complex Handler addr;
+ print(" pc1 ", addr.pc1, "\n");
+ print(" pc2 ", addr.pc2, "\n");
+ print(" eoff ", addr.eoff, "\n");
+ print(" ne ", addr.ne, "\n");
+ print(" t ", addr.t\Y, "\n");
+ print(" etab ", addr.etab\Y, "\n");
+};
+
+complex Type Tarray;
+complex Type Tstring;
+complex Type Tchannel;
+complex Type Tlist;
+complex Type Tmodlink;
+complex Type TImage;
+complex Type Tptr;
+complex Type Tbyte;
+complex Type Tword;
+complex Type Tlong;
+complex Type Treal;
+complex REG R;
+complex String snil;
+complex Module modules;
+complex Dev rootdevtab;
+complex Dev consdevtab;
+complex Dev envdevtab;
+complex Dev mntdevtab;
+complex Dev pipedevtab;
+complex Dev progdevtab;
+complex Dev profdevtab;
+complex Dev srvdevtab;
+complex Dev dupdevtab;
+complex Dev ssldevtab;
+complex Dev capdevtab;
+complex Dev fsdevtab;
+complex Dev cmddevtab;
+complex Dev indirdevtab;
+complex Dev drawdevtab;
+complex Dev pointerdevtab;
+complex Dev dynlddevtab;
+complex Dev memdevtab;
+complex Dev srv9devtab;