1sizeof_1_ = 8; 2aggr _1_ 3{ 4 'U' 0 lo; 5 'U' 4 hi; 6}; 7 8defn 9_1_(addr) { 10 complex _1_ addr; 11 print(" lo ", addr.lo, "\n"); 12 print(" hi ", addr.hi, "\n"); 13}; 14 15sizeofFPdbleword = 8; 16aggr FPdbleword 17{ 18 'F' 0 x; 19 { 20 'U' 0 lo; 21 'U' 4 hi; 22 }; 23}; 24 25defn 26FPdbleword(addr) { 27 complex FPdbleword addr; 28 print(" x ", addr.x, "\n"); 29 print("_1_ {\n"); 30 _1_(addr+0); 31 print("}\n"); 32}; 33 34UTFmax = 3; 35Runesync = 128; 36Runeself = 128; 37Runeerror = 65533; 38sizeofFmt = 48; 39aggr Fmt 40{ 41 'b' 0 runes; 42 'X' 4 start; 43 'X' 8 to; 44 'X' 12 stop; 45 'X' 16 flush; 46 'X' 20 farg; 47 'D' 24 nfmt; 48 'X' 28 args; 49 'D' 32 r; 50 'D' 36 width; 51 'D' 40 prec; 52 'U' 44 flags; 53}; 54 55defn 56Fmt(addr) { 57 complex Fmt addr; 58 print(" runes ", addr.runes, "\n"); 59 print(" start ", addr.start\X, "\n"); 60 print(" to ", addr.to\X, "\n"); 61 print(" stop ", addr.stop\X, "\n"); 62 print(" flush ", addr.flush\X, "\n"); 63 print(" farg ", addr.farg\X, "\n"); 64 print(" nfmt ", addr.nfmt, "\n"); 65 print(" args ", addr.args\X, "\n"); 66 print(" r ", addr.r, "\n"); 67 print(" width ", addr.width, "\n"); 68 print(" prec ", addr.prec, "\n"); 69 print(" flags ", addr.flags, "\n"); 70}; 71 72FmtWidth = 1; 73FmtLeft = 2; 74FmtPrec = 4; 75FmtSharp = 8; 76FmtSpace = 16; 77FmtSign = 32; 78FmtZero = 64; 79FmtUnsigned = 128; 80FmtShort = 256; 81FmtLong = 512; 82FmtVLong = 1024; 83FmtComma = 2048; 84FmtByte = 4096; 85FmtFlag = 8192; 86sizeofTm = 40; 87aggr Tm 88{ 89 'D' 0 sec; 90 'D' 4 min; 91 'D' 8 hour; 92 'D' 12 mday; 93 'D' 16 mon; 94 'D' 20 year; 95 'D' 24 wday; 96 'D' 28 yday; 97 'a' 32 zone; 98 'D' 36 tzoff; 99}; 100 101defn 102Tm(addr) { 103 complex Tm addr; 104 print(" sec ", addr.sec, "\n"); 105 print(" min ", addr.min, "\n"); 106 print(" hour ", addr.hour, "\n"); 107 print(" mday ", addr.mday, "\n"); 108 print(" mon ", addr.mon, "\n"); 109 print(" year ", addr.year, "\n"); 110 print(" wday ", addr.wday, "\n"); 111 print(" yday ", addr.yday, "\n"); 112 print(" zone ", addr.zone, "\n"); 113 print(" tzoff ", addr.tzoff, "\n"); 114}; 115 116PNPROC = 1; 117PNGROUP = 2; 118Profoff = 0; 119Profuser = 1; 120Profkernel = 2; 121Proftime = 3; 122Profsample = 4; 123sizeofLock = 4; 124aggr Lock 125{ 126 'D' 0 val; 127}; 128 129defn 130Lock(addr) { 131 complex Lock addr; 132 print(" val ", addr.val, "\n"); 133}; 134 135sizeofQLp = 12; 136aggr QLp 137{ 138 'D' 0 inuse; 139 'A' QLp 4 next; 140 'C' 8 state; 141}; 142 143defn 144QLp(addr) { 145 complex QLp addr; 146 print(" inuse ", addr.inuse, "\n"); 147 print(" next ", addr.next\X, "\n"); 148 print(" state ", addr.state, "\n"); 149}; 150 151sizeofQLock = 16; 152aggr QLock 153{ 154 Lock 0 lock; 155 'D' 4 locked; 156 'A' QLp 8 $head; 157 'A' QLp 12 $tail; 158}; 159 160defn 161QLock(addr) { 162 complex QLock addr; 163 print("Lock lock {\n"); 164 Lock(addr.lock); 165 print("}\n"); 166 print(" locked ", addr.locked, "\n"); 167 print(" $head ", addr.$head\X, "\n"); 168 print(" $tail ", addr.$tail\X, "\n"); 169}; 170 171sizeofRWLock = 20; 172aggr RWLock 173{ 174 Lock 0 lock; 175 'D' 4 readers; 176 'D' 8 writer; 177 'A' QLp 12 $head; 178 'A' QLp 16 $tail; 179}; 180 181defn 182RWLock(addr) { 183 complex RWLock addr; 184 print("Lock lock {\n"); 185 Lock(addr.lock); 186 print("}\n"); 187 print(" readers ", addr.readers, "\n"); 188 print(" writer ", addr.writer, "\n"); 189 print(" $head ", addr.$head\X, "\n"); 190 print(" $tail ", addr.$tail\X, "\n"); 191}; 192 193sizeofRendez = 12; 194aggr Rendez 195{ 196 'A' QLock 0 l; 197 'A' QLp 4 $head; 198 'A' QLp 8 $tail; 199}; 200 201defn 202Rendez(addr) { 203 complex Rendez addr; 204 print(" l ", addr.l\X, "\n"); 205 print(" $head ", addr.$head\X, "\n"); 206 print(" $tail ", addr.$tail\X, "\n"); 207}; 208 209sizeofNetConnInfo = 36; 210aggr NetConnInfo 211{ 212 'X' 0 dir; 213 'X' 4 root; 214 'X' 8 spec; 215 'X' 12 lsys; 216 'X' 16 lserv; 217 'X' 20 rsys; 218 'X' 24 rserv; 219 'X' 28 laddr; 220 'X' 32 raddr; 221}; 222 223defn 224NetConnInfo(addr) { 225 complex NetConnInfo addr; 226 print(" dir ", addr.dir\X, "\n"); 227 print(" root ", addr.root\X, "\n"); 228 print(" spec ", addr.spec\X, "\n"); 229 print(" lsys ", addr.lsys\X, "\n"); 230 print(" lserv ", addr.lserv\X, "\n"); 231 print(" rsys ", addr.rsys\X, "\n"); 232 print(" rserv ", addr.rserv\X, "\n"); 233 print(" laddr ", addr.laddr\X, "\n"); 234 print(" raddr ", addr.raddr\X, "\n"); 235}; 236 237RFNAMEG = 1; 238RFENVG = 2; 239RFFDG = 4; 240RFNOTEG = 8; 241RFPROC = 16; 242RFMEM = 32; 243RFNOWAIT = 64; 244RFCNAMEG = 1024; 245RFCENVG = 2048; 246RFCFDG = 4096; 247RFREND = 8192; 248RFNOMNT = 16384; 249sizeofQid = 16; 250aggr Qid 251{ 252 'W' 0 path; 253 'U' 8 vers; 254 'b' 12 type; 255}; 256 257defn 258Qid(addr) { 259 complex Qid addr; 260 print(" path ", addr.path, "\n"); 261 print(" vers ", addr.vers, "\n"); 262 print(" type ", addr.type, "\n"); 263}; 264 265sizeofDir = 60; 266aggr Dir 267{ 268 'u' 0 type; 269 'U' 4 dev; 270 Qid 8 qid; 271 'U' 24 mode; 272 'U' 28 atime; 273 'U' 32 mtime; 274 'V' 36 length; 275 'X' 44 name; 276 'X' 48 uid; 277 'X' 52 gid; 278 'X' 56 muid; 279}; 280 281defn 282Dir(addr) { 283 complex Dir addr; 284 print(" type ", addr.type, "\n"); 285 print(" dev ", addr.dev, "\n"); 286 print("Qid qid {\n"); 287 Qid(addr.qid); 288 print("}\n"); 289 print(" mode ", addr.mode, "\n"); 290 print(" atime ", addr.atime, "\n"); 291 print(" mtime ", addr.mtime, "\n"); 292 print(" length ", addr.length, "\n"); 293 print(" name ", addr.name\X, "\n"); 294 print(" uid ", addr.uid\X, "\n"); 295 print(" gid ", addr.gid\X, "\n"); 296 print(" muid ", addr.muid\X, "\n"); 297}; 298 299sizeofWaitmsg = 20; 300aggr Waitmsg 301{ 302 'D' 0 pid; 303 'a' 4 time; 304 'X' 16 msg; 305}; 306 307defn 308Waitmsg(addr) { 309 complex Waitmsg addr; 310 print(" pid ", addr.pid, "\n"); 311 print(" time ", addr.time, "\n"); 312 print(" msg ", addr.msg\X, "\n"); 313}; 314 315sizeofIOchunk = 8; 316aggr IOchunk 317{ 318 'X' 0 addr; 319 'U' 4 len; 320}; 321 322defn 323IOchunk(addr) { 324 complex IOchunk addr; 325 print(" addr ", addr.addr\X, "\n"); 326 print(" len ", addr.len, "\n"); 327}; 328 329VtScoreSize = 20; 330VtMaxLumpSize = 57344; 331VtPointerDepth = 7; 332VtEntrySize = 40; 333VtRootSize = 300; 334VtMaxStringSize = 1000; 335VtAuthSize = 1024; 336MaxFragSize = 9216; 337VtMaxFileSize = 281474976710655; 338VtRootVersion = 2; 339VtCryptoStrengthNone = 0; 340VtCryptoStrengthAuth = 1; 341VtCryptoStrengthWeak = 2; 342VtCryptoStrengthStrong = 3; 343VtCryptoNone = 0; 344VtCryptoSSL3 = 1; 345VtCryptoTLS1 = 2; 346VtCryptoMax = 3; 347VtCodecNone = 0; 348VtCodecDeflate = 1; 349VtCodecThwack = 2; 350VtCodecMax = 3; 351VtErrType = 0; 352VtRootType = 1; 353VtDirType = 2; 354VtPointerType0 = 3; 355VtPointerType1 = 4; 356VtPointerType2 = 5; 357VtPointerType3 = 6; 358VtPointerType4 = 7; 359VtPointerType5 = 8; 360VtPointerType6 = 9; 361VtPointerType7 = 10; 362VtPointerType8 = 11; 363VtPointerType9 = 12; 364VtDataType = 13; 365VtMaxType = 14; 366VtEntryActive = 1; 367VtEntryDir = 2; 368VtEntryDepthShift = 2; 369VtEntryDepthMask = 28; 370VtEntryLocal = 32; 371VtEntryNoArchive = 64; 372sizeofVtRoot = 300; 373aggr VtRoot 374{ 375 'u' 0 version; 376 'a' 2 name; 377 'a' 130 type; 378 'a' 258 score; 379 'u' 278 blockSize; 380 'a' 280 prev; 381}; 382 383defn 384VtRoot(addr) { 385 complex VtRoot addr; 386 print(" version ", addr.version, "\n"); 387 print(" name ", addr.name, "\n"); 388 print(" type ", addr.type, "\n"); 389 print(" score ", addr.score, "\n"); 390 print(" blockSize ", addr.blockSize, "\n"); 391 print(" prev ", addr.prev, "\n"); 392}; 393 394sizeofVtEntry = 40; 395aggr VtEntry 396{ 397 'U' 0 gen; 398 'u' 4 psize; 399 'u' 6 dsize; 400 'b' 8 depth; 401 'b' 9 flags; 402 'W' 12 size; 403 'a' 20 score; 404}; 405 406defn 407VtEntry(addr) { 408 complex VtEntry addr; 409 print(" gen ", addr.gen, "\n"); 410 print(" psize ", addr.psize, "\n"); 411 print(" dsize ", addr.dsize, "\n"); 412 print(" depth ", addr.depth, "\n"); 413 print(" flags ", addr.flags, "\n"); 414 print(" size ", addr.size, "\n"); 415 print(" score ", addr.score, "\n"); 416}; 417 418sizeofVtServerVtbl = 16; 419aggr VtServerVtbl 420{ 421 'X' 0 read; 422 'X' 4 write; 423 'X' 8 closing; 424 'X' 12 sync; 425}; 426 427defn 428VtServerVtbl(addr) { 429 complex VtServerVtbl addr; 430 print(" read ", addr.read\X, "\n"); 431 print(" write ", addr.write\X, "\n"); 432 print(" closing ", addr.closing\X, "\n"); 433 print(" sync ", addr.sync\X, "\n"); 434}; 435 436VtVersion01 = 1; 437VtVersion02 = 2; 438QueuingW = 0; 439QueuingR = 1; 440sizeofThread = 20; 441aggr Thread 442{ 443 'D' 0 pid; 444 'D' 4 ref; 445 'X' 8 error; 446 'D' 12 state; 447 'A' Thread 16 next; 448}; 449 450defn 451Thread(addr) { 452 complex Thread addr; 453 print(" pid ", addr.pid, "\n"); 454 print(" ref ", addr.ref, "\n"); 455 print(" error ", addr.error\X, "\n"); 456 print(" state ", addr.state, "\n"); 457 print(" next ", addr.next\X, "\n"); 458}; 459 460sizeofVtLock = 20; 461aggr VtLock 462{ 463 Lock 0 lk; 464 'A' Thread 4 writer; 465 'D' 8 readers; 466 'A' Thread 12 qfirst; 467 'A' Thread 16 qlast; 468}; 469 470defn 471VtLock(addr) { 472 complex VtLock addr; 473 print("Lock lk {\n"); 474 Lock(addr.lk); 475 print("}\n"); 476 print(" writer ", addr.writer\X, "\n"); 477 print(" readers ", addr.readers, "\n"); 478 print(" qfirst ", addr.qfirst\X, "\n"); 479 print(" qlast ", addr.qlast\X, "\n"); 480}; 481 482sizeofVtRendez = 12; 483aggr VtRendez 484{ 485 'A' VtLock 0 lk; 486 'A' Thread 4 wfirst; 487 'A' Thread 8 wlast; 488}; 489 490defn 491VtRendez(addr) { 492 complex VtRendez addr; 493 print(" lk ", addr.lk\X, "\n"); 494 print(" wfirst ", addr.wfirst\X, "\n"); 495 print(" wlast ", addr.wlast\X, "\n"); 496}; 497 498ERROR = 0; 499complex Thread vtRock; 500complex Thread vtAttach:p; 501complex Lock lk$4; 502complex Thread vtDetach:p; 503complex Thread vtSetError:p; 504complex Lock lk$12; 505complex VtLock vtLockFree:p; 506complex VtLock vtRendezAlloc:p; 507complex VtRendez vtRendezAlloc:q; 508complex VtRendez vtRendezFree:q; 509complex VtLock vtCanLock:p; 510complex Thread vtCanLock:t; 511complex VtLock vtLock:p; 512complex Thread vtLock:t; 513complex VtLock vtCanRLock:p; 514complex VtLock vtRLock:p; 515complex Thread vtRLock:t; 516complex VtLock vtUnlock:p; 517complex Thread vtUnlock:t; 518complex Thread vtUnlock:tt; 519complex VtLock vtRUnlock:p; 520complex Thread vtRUnlock:t; 521complex VtRendez vtSleep:q; 522complex Thread vtSleep:s; 523complex Thread vtSleep:t; 524complex Thread vtSleep:tt; 525complex VtLock vtSleep:p; 526complex VtRendez vtWakeup:q; 527complex Thread vtWakeup:t; 528complex VtLock vtWakeup:p; 529complex VtRendez vtWakeupAll:q; 530complex Thread threadSleep:t; 531complex Thread threadWakeup:t; 532