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 329MaxFragSize = 9216; 330sizeofVtLog = 40; 331aggr VtLog 332{ 333 'A' VtLog 0 next; 334 'X' 4 name; 335 'X' 8 chunk; 336 'U' 12 nchunk; 337 'X' 16 w; 338 QLock 20 lk; 339 'D' 36 ref; 340}; 341 342defn 343VtLog(addr) { 344 complex VtLog addr; 345 print(" next ", addr.next\X, "\n"); 346 print(" name ", addr.name\X, "\n"); 347 print(" chunk ", addr.chunk\X, "\n"); 348 print(" nchunk ", addr.nchunk, "\n"); 349 print(" w ", addr.w\X, "\n"); 350 print("QLock lk {\n"); 351 QLock(addr.lk); 352 print("}\n"); 353 print(" ref ", addr.ref, "\n"); 354}; 355 356sizeofVtLogChunk = 12; 357aggr VtLogChunk 358{ 359 'X' 0 p; 360 'X' 4 ep; 361 'X' 8 wp; 362}; 363 364defn 365VtLogChunk(addr) { 366 complex VtLogChunk addr; 367 print(" p ", addr.p\X, "\n"); 368 print(" ep ", addr.ep\X, "\n"); 369 print(" wp ", addr.wp\X, "\n"); 370}; 371 372VtScoreSize = 20; 373VtMaxStringSize = 1024; 374VtMaxLumpSize = 57344; 375VtPointerDepth = 7; 376VtDataType = 0; 377VtDirType = 8; 378VtRootType = 16; 379VtMaxType = 17; 380VtCorruptType = 255; 381VtTypeDepthMask = 7; 382VtTypeBaseMask = -8; 383VtEntryActive = 1; 384_VtEntryDir = 2; 385_VtEntryDepthShift = 2; 386_VtEntryDepthMask = 28; 387VtEntryLocal = 32; 388VtEntrySize = 40; 389sizeofVtEntry = 40; 390aggr VtEntry 391{ 392 'U' 0 gen; 393 'u' 4 psize; 394 'u' 6 dsize; 395 'b' 8 type; 396 'b' 9 flags; 397 'W' 12 size; 398 'a' 20 score; 399}; 400 401defn 402VtEntry(addr) { 403 complex VtEntry addr; 404 print(" gen ", addr.gen, "\n"); 405 print(" psize ", addr.psize, "\n"); 406 print(" dsize ", addr.dsize, "\n"); 407 print(" type ", addr.type, "\n"); 408 print(" flags ", addr.flags, "\n"); 409 print(" size ", addr.size, "\n"); 410 print(" score ", addr.score, "\n"); 411}; 412 413sizeofVtRoot = 300; 414aggr VtRoot 415{ 416 'a' 0 name; 417 'a' 128 type; 418 'a' 256 score; 419 'u' 276 blocksize; 420 'a' 278 prev; 421}; 422 423defn 424VtRoot(addr) { 425 complex VtRoot addr; 426 print(" name ", addr.name, "\n"); 427 print(" type ", addr.type, "\n"); 428 print(" score ", addr.score, "\n"); 429 print(" blocksize ", addr.blocksize, "\n"); 430 print(" prev ", addr.prev, "\n"); 431}; 432 433VtRootSize = 300; 434VtRootVersion = 2; 435VtCryptoStrengthNone = 0; 436VtCryptoStrengthAuth = 1; 437VtCryptoStrengthWeak = 2; 438VtCryptoStrengthStrong = 3; 439VtCryptoNone = 0; 440VtCryptoSSL3 = 1; 441VtCryptoTLS1 = 2; 442VtCryptoMax = 3; 443VtCodecNone = 0; 444VtCodecDeflate = 1; 445VtCodecThwack = 2; 446VtCodecMax = 3; 447VtRerror = 1; 448VtTping = 2; 449VtRping = 3; 450VtThello = 4; 451VtRhello = 5; 452VtTgoodbye = 6; 453VtRgoodbye = 7; 454VtTauth0 = 8; 455VtRauth0 = 9; 456VtTauth1 = 10; 457VtRauth1 = 11; 458VtTread = 12; 459VtRread = 13; 460VtTwrite = 14; 461VtRwrite = 15; 462VtTsync = 16; 463VtRsync = 17; 464VtTmax = 18; 465sizeofVtFcall = 80; 466aggr VtFcall 467{ 468 'b' 0 msgtype; 469 'b' 1 tag; 470 'X' 4 error; 471 'X' 8 version; 472 'X' 12 uid; 473 'b' 16 strength; 474 'X' 20 crypto; 475 'U' 24 ncrypto; 476 'X' 28 codec; 477 'U' 32 ncodec; 478 'X' 36 sid; 479 'b' 40 rcrypto; 480 'b' 41 rcodec; 481 'X' 44 auth; 482 'U' 48 nauth; 483 'a' 52 score; 484 'b' 72 blocktype; 485 'u' 74 count; 486 'X' 76 data; 487}; 488 489defn 490VtFcall(addr) { 491 complex VtFcall addr; 492 print(" msgtype ", addr.msgtype, "\n"); 493 print(" tag ", addr.tag, "\n"); 494 print(" error ", addr.error\X, "\n"); 495 print(" version ", addr.version\X, "\n"); 496 print(" uid ", addr.uid\X, "\n"); 497 print(" strength ", addr.strength, "\n"); 498 print(" crypto ", addr.crypto\X, "\n"); 499 print(" ncrypto ", addr.ncrypto, "\n"); 500 print(" codec ", addr.codec\X, "\n"); 501 print(" ncodec ", addr.ncodec, "\n"); 502 print(" sid ", addr.sid\X, "\n"); 503 print(" rcrypto ", addr.rcrypto, "\n"); 504 print(" rcodec ", addr.rcodec, "\n"); 505 print(" auth ", addr.auth\X, "\n"); 506 print(" nauth ", addr.nauth, "\n"); 507 print(" score ", addr.score, "\n"); 508 print(" blocktype ", addr.blocktype, "\n"); 509 print(" count ", addr.count, "\n"); 510 print(" data ", addr.data\X, "\n"); 511}; 512 513VtStateAlloc = 0; 514VtStateConnected = 1; 515VtStateClosed = 2; 516sizeofVtConn = 1404; 517aggr VtConn 518{ 519 QLock 0 lk; 520 QLock 16 inlk; 521 QLock 32 outlk; 522 'D' 48 debug; 523 'D' 52 infd; 524 'D' 56 outfd; 525 'D' 60 muxer; 526 'X' 64 writeq; 527 'X' 68 readq; 528 'D' 72 state; 529 'a' 76 wait; 530 'U' 1100 ntag; 531 'U' 1104 nsleep; 532 'X' 1108 part; 533 Rendez 1112 tagrend; 534 Rendez 1124 rpcfork; 535 'X' 1136 version; 536 'X' 1140 uid; 537 'X' 1144 sid; 538 'a' 1148 addr; 539}; 540 541defn 542VtConn(addr) { 543 complex VtConn addr; 544 print("QLock lk {\n"); 545 QLock(addr.lk); 546 print("}\n"); 547 print("QLock inlk {\n"); 548 QLock(addr.inlk); 549 print("}\n"); 550 print("QLock outlk {\n"); 551 QLock(addr.outlk); 552 print("}\n"); 553 print(" debug ", addr.debug, "\n"); 554 print(" infd ", addr.infd, "\n"); 555 print(" outfd ", addr.outfd, "\n"); 556 print(" muxer ", addr.muxer, "\n"); 557 print(" writeq ", addr.writeq\X, "\n"); 558 print(" readq ", addr.readq\X, "\n"); 559 print(" state ", addr.state, "\n"); 560 print(" wait ", addr.wait, "\n"); 561 print(" ntag ", addr.ntag, "\n"); 562 print(" nsleep ", addr.nsleep, "\n"); 563 print(" part ", addr.part\X, "\n"); 564 print("Rendez tagrend {\n"); 565 Rendez(addr.tagrend); 566 print("}\n"); 567 print("Rendez rpcfork {\n"); 568 Rendez(addr.rpcfork); 569 print("}\n"); 570 print(" version ", addr.version\X, "\n"); 571 print(" uid ", addr.uid\X, "\n"); 572 print(" sid ", addr.sid\X, "\n"); 573 print(" addr ", addr.addr, "\n"); 574}; 575 576sizeofVtReq = 168; 577aggr VtReq 578{ 579 VtFcall 0 tx; 580 VtFcall 80 rx; 581 'X' 160 srv; 582 'X' 164 sc; 583}; 584 585defn 586VtReq(addr) { 587 complex VtReq addr; 588 print("VtFcall tx {\n"); 589 VtFcall(addr.tx); 590 print("}\n"); 591 print("VtFcall rx {\n"); 592 VtFcall(addr.rx); 593 print("}\n"); 594 print(" srv ", addr.srv\X, "\n"); 595 print(" sc ", addr.sc\X, "\n"); 596}; 597 598NilBlock = -1; 599sizeofVtBlock = 84; 600aggr VtBlock 601{ 602 'X' 0 c; 603 QLock 4 lk; 604 'X' 20 data; 605 'a' 24 score; 606 'b' 44 type; 607 'D' 48 nlock; 608 'D' 52 iostate; 609 'D' 56 ref; 610 'U' 60 heap; 611 'A' VtBlock 64 next; 612 'A' VtBlock 68 prev; 613 'U' 72 used; 614 'U' 76 used2; 615 'U' 80 addr; 616}; 617 618defn 619VtBlock(addr) { 620 complex VtBlock addr; 621 print(" c ", addr.c\X, "\n"); 622 print("QLock lk {\n"); 623 QLock(addr.lk); 624 print("}\n"); 625 print(" data ", addr.data\X, "\n"); 626 print(" score ", addr.score, "\n"); 627 print(" type ", addr.type, "\n"); 628 print(" nlock ", addr.nlock, "\n"); 629 print(" iostate ", addr.iostate, "\n"); 630 print(" ref ", addr.ref, "\n"); 631 print(" heap ", addr.heap, "\n"); 632 print(" next ", addr.next\X, "\n"); 633 print(" prev ", addr.prev\X, "\n"); 634 print(" used ", addr.used, "\n"); 635 print(" used2 ", addr.used2, "\n"); 636 print(" addr ", addr.addr, "\n"); 637}; 638 639sizeofVtFile = 84; 640aggr VtFile 641{ 642 QLock 0 lk; 643 'D' 16 ref; 644 'D' 20 $local; 645 'A' VtBlock 24 b; 646 'a' 28 score; 647 'X' 48 c; 648 'D' 52 mode; 649 'U' 56 gen; 650 'D' 60 dsize; 651 'D' 64 psize; 652 'D' 68 dir; 653 'A' VtFile 72 parent; 654 'D' 76 epb; 655 'U' 80 offset; 656}; 657 658defn 659VtFile(addr) { 660 complex VtFile addr; 661 print("QLock lk {\n"); 662 QLock(addr.lk); 663 print("}\n"); 664 print(" ref ", addr.ref, "\n"); 665 print(" $local ", addr.$local, "\n"); 666 print(" b ", addr.b\X, "\n"); 667 print(" score ", addr.score, "\n"); 668 print(" c ", addr.c\X, "\n"); 669 print(" mode ", addr.mode, "\n"); 670 print(" gen ", addr.gen, "\n"); 671 print(" dsize ", addr.dsize, "\n"); 672 print(" psize ", addr.psize, "\n"); 673 print(" dir ", addr.dir, "\n"); 674 print(" parent ", addr.parent\X, "\n"); 675 print(" epb ", addr.epb, "\n"); 676 print(" offset ", addr.offset, "\n"); 677}; 678 679VtOREAD = 0; 680VtOWRITE = 1; 681VtORDWR = 2; 682AESbsize = 16; 683AESmaxkey = 32; 684AESmaxrounds = 14; 685sizeofAESstate = 540; 686aggr AESstate 687{ 688 'U' 0 setup; 689 'D' 4 rounds; 690 'D' 8 keybytes; 691 'a' 12 key; 692 'a' 44 ekey; 693 'a' 284 dkey; 694 'a' 524 ivec; 695}; 696 697defn 698AESstate(addr) { 699 complex AESstate addr; 700 print(" setup ", addr.setup, "\n"); 701 print(" rounds ", addr.rounds, "\n"); 702 print(" keybytes ", addr.keybytes, "\n"); 703 print(" key ", addr.key, "\n"); 704 print(" ekey ", addr.ekey, "\n"); 705 print(" dkey ", addr.dkey, "\n"); 706 print(" ivec ", addr.ivec, "\n"); 707}; 708 709BFbsize = 8; 710BFrounds = 16; 711sizeofBFstate = 4236; 712aggr BFstate 713{ 714 'U' 0 setup; 715 'a' 4 key; 716 'a' 60 ivec; 717 'a' 68 pbox; 718 'a' 140 sbox; 719}; 720 721defn 722BFstate(addr) { 723 complex BFstate addr; 724 print(" setup ", addr.setup, "\n"); 725 print(" key ", addr.key, "\n"); 726 print(" ivec ", addr.ivec, "\n"); 727 print(" pbox ", addr.pbox, "\n"); 728 print(" sbox ", addr.sbox, "\n"); 729}; 730 731DESbsize = 8; 732sizeofDESstate = 148; 733aggr DESstate 734{ 735 'U' 0 setup; 736 'a' 4 key; 737 'a' 12 expanded; 738 'a' 140 ivec; 739}; 740 741defn 742DESstate(addr) { 743 complex DESstate addr; 744 print(" setup ", addr.setup, "\n"); 745 print(" key ", addr.key, "\n"); 746 print(" expanded ", addr.expanded, "\n"); 747 print(" ivec ", addr.ivec, "\n"); 748}; 749 750DES3E = 0; 751DES3D = 1; 752DES3EEE = 0; 753DES3EDE = 2; 754DES3DED = 5; 755DES3DDD = 7; 756sizeofDES3state = 420; 757aggr DES3state 758{ 759 'U' 0 setup; 760 'a' 4 key; 761 'a' 28 expanded; 762 'a' 412 ivec; 763}; 764 765defn 766DES3state(addr) { 767 complex DES3state addr; 768 print(" setup ", addr.setup, "\n"); 769 print(" key ", addr.key, "\n"); 770 print(" expanded ", addr.expanded, "\n"); 771 print(" ivec ", addr.ivec, "\n"); 772}; 773 774SHA1dlen = 20; 775MD4dlen = 16; 776MD5dlen = 16; 777sizeofDigestState = 164; 778aggr DigestState 779{ 780 'W' 0 len; 781 'a' 8 state; 782 'a' 28 buf; 783 'D' 156 blen; 784 'C' 160 malloced; 785 'C' 161 seeded; 786}; 787 788defn 789DigestState(addr) { 790 complex DigestState addr; 791 print(" len ", addr.len, "\n"); 792 print(" state ", addr.state, "\n"); 793 print(" buf ", addr.buf, "\n"); 794 print(" blen ", addr.blen, "\n"); 795 print(" malloced ", addr.malloced, "\n"); 796 print(" seeded ", addr.seeded, "\n"); 797}; 798 799sizeofRC4state = 260; 800aggr RC4state 801{ 802 'a' 0 state; 803 'b' 256 x; 804 'b' 257 y; 805}; 806 807defn 808RC4state(addr) { 809 complex RC4state addr; 810 print(" state ", addr.state, "\n"); 811 print(" x ", addr.x, "\n"); 812 print(" y ", addr.y, "\n"); 813}; 814 815sizeofRSApub = 8; 816aggr RSApub 817{ 818 'X' 0 n; 819 'X' 4 ek; 820}; 821 822defn 823RSApub(addr) { 824 complex RSApub addr; 825 print(" n ", addr.n\X, "\n"); 826 print(" ek ", addr.ek\X, "\n"); 827}; 828 829sizeofRSApriv = 32; 830aggr RSApriv 831{ 832 RSApub 0 pub; 833 'X' 8 dk; 834 'X' 12 p; 835 'X' 16 q; 836 'X' 20 kp; 837 'X' 24 kq; 838 'X' 28 c2; 839}; 840 841defn 842RSApriv(addr) { 843 complex RSApriv addr; 844 print("RSApub pub {\n"); 845 RSApub(addr.pub); 846 print("}\n"); 847 print(" dk ", addr.dk\X, "\n"); 848 print(" p ", addr.p\X, "\n"); 849 print(" q ", addr.q\X, "\n"); 850 print(" kp ", addr.kp\X, "\n"); 851 print(" kq ", addr.kq\X, "\n"); 852 print(" c2 ", addr.c2\X, "\n"); 853}; 854 855sizeofPEMChain = 12; 856aggr PEMChain 857{ 858 'A' PEMChain 0 next; 859 'X' 4 pem; 860 'D' 8 pemlen; 861}; 862 863defn 864PEMChain(addr) { 865 complex PEMChain addr; 866 print(" next ", addr.next\X, "\n"); 867 print(" pem ", addr.pem\X, "\n"); 868 print(" pemlen ", addr.pemlen, "\n"); 869}; 870 871sizeofEGpub = 12; 872aggr EGpub 873{ 874 'X' 0 p; 875 'X' 4 alpha; 876 'X' 8 key; 877}; 878 879defn 880EGpub(addr) { 881 complex EGpub addr; 882 print(" p ", addr.p\X, "\n"); 883 print(" alpha ", addr.alpha\X, "\n"); 884 print(" key ", addr.key\X, "\n"); 885}; 886 887sizeofEGpriv = 16; 888aggr EGpriv 889{ 890 EGpub 0 pub; 891 'X' 12 secret; 892}; 893 894defn 895EGpriv(addr) { 896 complex EGpriv addr; 897 print("EGpub pub {\n"); 898 EGpub(addr.pub); 899 print("}\n"); 900 print(" secret ", addr.secret\X, "\n"); 901}; 902 903sizeofEGsig = 8; 904aggr EGsig 905{ 906 'X' 0 r; 907 'X' 4 s; 908}; 909 910defn 911EGsig(addr) { 912 complex EGsig addr; 913 print(" r ", addr.r\X, "\n"); 914 print(" s ", addr.s\X, "\n"); 915}; 916 917sizeofDSApub = 16; 918aggr DSApub 919{ 920 'X' 0 p; 921 'X' 4 q; 922 'X' 8 alpha; 923 'X' 12 key; 924}; 925 926defn 927DSApub(addr) { 928 complex DSApub addr; 929 print(" p ", addr.p\X, "\n"); 930 print(" q ", addr.q\X, "\n"); 931 print(" alpha ", addr.alpha\X, "\n"); 932 print(" key ", addr.key\X, "\n"); 933}; 934 935sizeofDSApriv = 20; 936aggr DSApriv 937{ 938 DSApub 0 pub; 939 'X' 16 secret; 940}; 941 942defn 943DSApriv(addr) { 944 complex DSApriv addr; 945 print("DSApub pub {\n"); 946 DSApub(addr.pub); 947 print("}\n"); 948 print(" secret ", addr.secret\X, "\n"); 949}; 950 951sizeofDSAsig = 8; 952aggr DSAsig 953{ 954 'X' 0 r; 955 'X' 4 s; 956}; 957 958defn 959DSAsig(addr) { 960 complex DSAsig addr; 961 print(" r ", addr.r\X, "\n"); 962 print(" s ", addr.s\X, "\n"); 963}; 964 965sizeofThumbprint = 24; 966aggr Thumbprint 967{ 968 'A' Thumbprint 0 next; 969 'a' 4 sha1; 970}; 971 972defn 973Thumbprint(addr) { 974 complex Thumbprint addr; 975 print(" next ", addr.next\X, "\n"); 976 print(" sha1 ", addr.sha1, "\n"); 977}; 978 979sizeofTLSconn = 80; 980aggr TLSconn 981{ 982 'a' 0 dir; 983 'X' 40 cert; 984 'X' 44 sessionID; 985 'D' 48 certlen; 986 'D' 52 sessionIDlen; 987 'X' 56 trace; 988 'A' PEMChain 60 chain; 989 'X' 64 sessionType; 990 'X' 68 sessionKey; 991 'D' 72 sessionKeylen; 992 'X' 76 sessionConst; 993}; 994 995defn 996TLSconn(addr) { 997 complex TLSconn addr; 998 print(" dir ", addr.dir, "\n"); 999 print(" cert ", addr.cert\X, "\n"); 1000 print(" sessionID ", addr.sessionID\X, "\n"); 1001 print(" certlen ", addr.certlen, "\n"); 1002 print(" sessionIDlen ", addr.sessionIDlen, "\n"); 1003 print(" trace ", addr.trace\X, "\n"); 1004 print(" chain ", addr.chain\X, "\n"); 1005 print(" sessionType ", addr.sessionType\X, "\n"); 1006 print(" sessionKey ", addr.sessionKey\X, "\n"); 1007 print(" sessionKeylen ", addr.sessionKeylen, "\n"); 1008 print(" sessionConst ", addr.sessionConst\X, "\n"); 1009}; 1010 1011BigMemSize = 9216; 1012SmallMemSize = 1152; 1013NLocalFrag = 2; 1014PFront = 0; 1015PMiddle = 1; 1016PEnd = 2; 1017sizeofMem = 28; 1018aggr Mem 1019{ 1020 Lock 0 lk; 1021 'D' 4 ref; 1022 'X' 8 bp; 1023 'X' 12 ep; 1024 'X' 16 rp; 1025 'X' 20 wp; 1026 'A' Mem 24 next; 1027}; 1028 1029defn 1030Mem(addr) { 1031 complex Mem addr; 1032 print("Lock lk {\n"); 1033 Lock(addr.lk); 1034 print("}\n"); 1035 print(" ref ", addr.ref, "\n"); 1036 print(" bp ", addr.bp\X, "\n"); 1037 print(" ep ", addr.ep\X, "\n"); 1038 print(" rp ", addr.rp\X, "\n"); 1039 print(" wp ", addr.wp\X, "\n"); 1040 print(" next ", addr.next\X, "\n"); 1041}; 1042 1043FragLocalFree = 0; 1044FragLocalAlloc = 1; 1045FragGlobal = 2; 1046sizeofFrag = 32; 1047aggr Frag 1048{ 1049 'D' 0 state; 1050 'A' Mem 4 mem; 1051 'X' 8 rp; 1052 'X' 12 wp; 1053 'A' Frag 16 next; 1054 'X' 20 free; 1055 'X' 24 a; 1056 'X' 28 p; 1057}; 1058 1059defn 1060Frag(addr) { 1061 complex Frag addr; 1062 print(" state ", addr.state, "\n"); 1063 print(" mem ", addr.mem\X, "\n"); 1064 print(" rp ", addr.rp\X, "\n"); 1065 print(" wp ", addr.wp\X, "\n"); 1066 print(" next ", addr.next\X, "\n"); 1067 print(" free ", addr.free\X, "\n"); 1068 print(" a ", addr.a\X, "\n"); 1069 print(" p ", addr.p\X, "\n"); 1070}; 1071 1072sizeofPacket = 88; 1073aggr Packet 1074{ 1075 'D' 0 size; 1076 'D' 4 asize; 1077 'U' 8 pc; 1078 'A' Packet 12 next; 1079 'A' Frag 16 first; 1080 'A' Frag 20 last; 1081 'a' 24 $local; 1082}; 1083 1084defn 1085Packet(addr) { 1086 complex Packet addr; 1087 print(" size ", addr.size, "\n"); 1088 print(" asize ", addr.asize, "\n"); 1089 print(" pc ", addr.pc, "\n"); 1090 print(" next ", addr.next\X, "\n"); 1091 print(" first ", addr.first\X, "\n"); 1092 print(" last ", addr.last\X, "\n"); 1093 print(" $local ", addr.$local, "\n"); 1094}; 1095 1096sizeof_2_ = 36; 1097aggr _2_ 1098{ 1099 Lock 0 lk; 1100 'A' Packet 4 packet; 1101 'D' 8 npacket; 1102 'A' Frag 12 frag; 1103 'D' 16 nfrag; 1104 'A' Mem 20 bigmem; 1105 'D' 24 nbigmem; 1106 'A' Mem 28 smallmem; 1107 'D' 32 nsmallmem; 1108}; 1109 1110defn 1111_2_(addr) { 1112 complex _2_ addr; 1113 print("Lock lk {\n"); 1114 Lock(addr.lk); 1115 print("}\n"); 1116 print(" packet ", addr.packet\X, "\n"); 1117 print(" npacket ", addr.npacket, "\n"); 1118 print(" frag ", addr.frag\X, "\n"); 1119 print(" nfrag ", addr.nfrag, "\n"); 1120 print(" bigmem ", addr.bigmem\X, "\n"); 1121 print(" nbigmem ", addr.nbigmem, "\n"); 1122 print(" smallmem ", addr.smallmem\X, "\n"); 1123 print(" nsmallmem ", addr.nsmallmem, "\n"); 1124}; 1125 1126complex _2_ freelist; 1127complex Packet packetalloc:p; 1128complex Packet packetfree:p; 1129complex Frag packetfree:f; 1130complex Frag packetfree:ff; 1131complex Packet packetdup:p; 1132complex Frag packetdup:f; 1133complex Frag packetdup:ff; 1134complex Packet packetdup:pp; 1135complex Packet packetsplit:p; 1136complex Packet packetsplit:pp; 1137complex Frag packetsplit:f; 1138complex Frag packetsplit:ff; 1139complex Packet packetconsume:p; 1140complex Packet packettrim:p; 1141complex Frag packettrim:f; 1142complex Frag packettrim:ff; 1143complex Packet packetheader:p; 1144complex Frag packetheader:f; 1145complex Mem packetheader:m; 1146complex Packet packettrailer:p; 1147complex Mem packettrailer:m; 1148complex Frag packettrailer:f; 1149complex Packet packetprefix:p; 1150complex Frag packetprefix:f; 1151complex Mem packetprefix:m; 1152complex Packet packetappend:p; 1153complex Frag packetappend:f; 1154complex Mem packetappend:m; 1155complex Packet packetconcat:p; 1156complex Packet packetconcat:pp; 1157complex Frag packetconcat:f; 1158complex Packet packetpeek:p; 1159complex Frag packetpeek:f; 1160complex Packet packetcopy:p; 1161complex Packet packetfragments:p; 1162complex IOchunk packetfragments:io; 1163complex Frag packetfragments:f; 1164complex IOchunk packetfragments:eio; 1165complex Packet packetstats:p; 1166complex Frag packetstats:f; 1167complex Mem packetstats:m; 1168complex Packet packetsize:p; 1169complex Frag packetsize:f; 1170complex Packet packetasize:p; 1171complex Frag packetasize:f; 1172complex Packet packetsha1:p; 1173complex DigestState packetsha1:ds; 1174complex Frag packetsha1:f; 1175complex Packet packetcmp:pkt0; 1176complex Packet packetcmp:pkt1; 1177complex Frag packetcmp:f0; 1178complex Frag packetcmp:f1; 1179complex Packet fragalloc:p; 1180complex Frag fragalloc:next; 1181complex Frag fragalloc:f; 1182complex Frag fragalloc:ef; 1183complex Mem fragalloc:m; 1184complex Packet packetforeign:p; 1185complex Frag packetforeign:f; 1186complex Packet fragdup:p; 1187complex Frag fragdup:f; 1188complex Frag fragdup:ff; 1189complex Mem fragdup:m; 1190complex Frag fragfree:f; 1191complex Mem memalloc:m; 1192complex Mem memfree:m; 1193complex Mem memhead:m; 1194complex Mem memtail:m; 1195