code: 9ferno

Download patch

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;