cache.acid 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. sizeof_1_ = 8;
  2. aggr _1_
  3. {
  4. 'U' 0 lo;
  5. 'U' 4 hi;
  6. };
  7. defn
  8. _1_(addr) {
  9. complex _1_ addr;
  10. print(" lo ", addr.lo, "\n");
  11. print(" hi ", addr.hi, "\n");
  12. };
  13. sizeofFPdbleword = 8;
  14. aggr FPdbleword
  15. {
  16. 'F' 0 x;
  17. {
  18. 'U' 0 lo;
  19. 'U' 4 hi;
  20. };
  21. };
  22. defn
  23. FPdbleword(addr) {
  24. complex FPdbleword addr;
  25. print(" x ", addr.x, "\n");
  26. print("_1_ {\n");
  27. _1_(addr+0);
  28. print("}\n");
  29. };
  30. UTFmax = 3;
  31. Runesync = 128;
  32. Runeself = 128;
  33. Runeerror = 128;
  34. sizeofFmt = 48;
  35. aggr Fmt
  36. {
  37. 'b' 0 runes;
  38. 'X' 4 start;
  39. 'X' 8 to;
  40. 'X' 12 stop;
  41. 'X' 16 flush;
  42. 'X' 20 farg;
  43. 'D' 24 nfmt;
  44. 'X' 28 args;
  45. 'D' 32 r;
  46. 'D' 36 width;
  47. 'D' 40 prec;
  48. 'U' 44 flags;
  49. };
  50. defn
  51. Fmt(addr) {
  52. complex Fmt addr;
  53. print(" runes ", addr.runes, "\n");
  54. print(" start ", addr.start\X, "\n");
  55. print(" to ", addr.to\X, "\n");
  56. print(" stop ", addr.stop\X, "\n");
  57. print(" flush ", addr.flush\X, "\n");
  58. print(" farg ", addr.farg\X, "\n");
  59. print(" nfmt ", addr.nfmt, "\n");
  60. print(" args ", addr.args\X, "\n");
  61. print(" r ", addr.r, "\n");
  62. print(" width ", addr.width, "\n");
  63. print(" prec ", addr.prec, "\n");
  64. print(" flags ", addr.flags, "\n");
  65. };
  66. FmtWidth = 1;
  67. FmtLeft = 2;
  68. FmtPrec = 4;
  69. FmtSharp = 8;
  70. FmtSpace = 16;
  71. FmtSign = 32;
  72. FmtZero = 64;
  73. FmtUnsigned = 128;
  74. FmtShort = 256;
  75. FmtLong = 512;
  76. FmtVLong = 1024;
  77. FmtComma = 2048;
  78. FmtByte = 4096;
  79. FmtFlag = 8192;
  80. sizeofTm = 40;
  81. aggr Tm
  82. {
  83. 'D' 0 sec;
  84. 'D' 4 min;
  85. 'D' 8 hour;
  86. 'D' 12 mday;
  87. 'D' 16 mon;
  88. 'D' 20 year;
  89. 'D' 24 wday;
  90. 'D' 28 yday;
  91. 'a' 32 zone;
  92. 'D' 36 tzoff;
  93. };
  94. defn
  95. Tm(addr) {
  96. complex Tm addr;
  97. print(" sec ", addr.sec, "\n");
  98. print(" min ", addr.min, "\n");
  99. print(" hour ", addr.hour, "\n");
  100. print(" mday ", addr.mday, "\n");
  101. print(" mon ", addr.mon, "\n");
  102. print(" year ", addr.year, "\n");
  103. print(" wday ", addr.wday, "\n");
  104. print(" yday ", addr.yday, "\n");
  105. print(" zone ", addr.zone, "\n");
  106. print(" tzoff ", addr.tzoff, "\n");
  107. };
  108. PNPROC = 1;
  109. PNGROUP = 2;
  110. sizeofLock = 4;
  111. aggr Lock
  112. {
  113. 'D' 0 val;
  114. };
  115. defn
  116. Lock(addr) {
  117. complex Lock addr;
  118. print(" val ", addr.val, "\n");
  119. };
  120. sizeofQLp = 12;
  121. aggr QLp
  122. {
  123. 'D' 0 inuse;
  124. 'A' QLp 4 next;
  125. 'C' 8 state;
  126. };
  127. defn
  128. QLp(addr) {
  129. complex QLp addr;
  130. print(" inuse ", addr.inuse, "\n");
  131. print(" next ", addr.next\X, "\n");
  132. print(" state ", addr.state, "\n");
  133. };
  134. sizeofQLock = 16;
  135. aggr QLock
  136. {
  137. Lock 0 lock;
  138. 'D' 4 locked;
  139. 'A' QLp 8 $head;
  140. 'A' QLp 12 $tail;
  141. };
  142. defn
  143. QLock(addr) {
  144. complex QLock addr;
  145. print("Lock lock {\n");
  146. Lock(addr.lock);
  147. print("}\n");
  148. print(" locked ", addr.locked, "\n");
  149. print(" $head ", addr.$head\X, "\n");
  150. print(" $tail ", addr.$tail\X, "\n");
  151. };
  152. sizeofRWLock = 20;
  153. aggr RWLock
  154. {
  155. Lock 0 lock;
  156. 'D' 4 readers;
  157. 'D' 8 writer;
  158. 'A' QLp 12 $head;
  159. 'A' QLp 16 $tail;
  160. };
  161. defn
  162. RWLock(addr) {
  163. complex RWLock addr;
  164. print("Lock lock {\n");
  165. Lock(addr.lock);
  166. print("}\n");
  167. print(" readers ", addr.readers, "\n");
  168. print(" writer ", addr.writer, "\n");
  169. print(" $head ", addr.$head\X, "\n");
  170. print(" $tail ", addr.$tail\X, "\n");
  171. };
  172. sizeofRendez = 12;
  173. aggr Rendez
  174. {
  175. 'A' QLock 0 l;
  176. 'A' QLp 4 $head;
  177. 'A' QLp 8 $tail;
  178. };
  179. defn
  180. Rendez(addr) {
  181. complex Rendez addr;
  182. print(" l ", addr.l\X, "\n");
  183. print(" $head ", addr.$head\X, "\n");
  184. print(" $tail ", addr.$tail\X, "\n");
  185. };
  186. sizeofNetConnInfo = 28;
  187. aggr NetConnInfo
  188. {
  189. 'X' 0 dir;
  190. 'X' 4 root;
  191. 'X' 8 spec;
  192. 'X' 12 lsys;
  193. 'X' 16 lserv;
  194. 'X' 20 rsys;
  195. 'X' 24 rserv;
  196. };
  197. defn
  198. NetConnInfo(addr) {
  199. complex NetConnInfo addr;
  200. print(" dir ", addr.dir\X, "\n");
  201. print(" root ", addr.root\X, "\n");
  202. print(" spec ", addr.spec\X, "\n");
  203. print(" lsys ", addr.lsys\X, "\n");
  204. print(" lserv ", addr.lserv\X, "\n");
  205. print(" rsys ", addr.rsys\X, "\n");
  206. print(" rserv ", addr.rserv\X, "\n");
  207. };
  208. RFNAMEG = 1;
  209. RFENVG = 2;
  210. RFFDG = 4;
  211. RFNOTEG = 8;
  212. RFPROC = 16;
  213. RFMEM = 32;
  214. RFNOWAIT = 64;
  215. RFCNAMEG = 1024;
  216. RFCENVG = 2048;
  217. RFCFDG = 4096;
  218. RFREND = 8192;
  219. RFNOMNT = 16384;
  220. sizeofQid = 16;
  221. aggr Qid
  222. {
  223. 'W' 0 path;
  224. 'U' 8 vers;
  225. 'b' 12 type;
  226. };
  227. defn
  228. Qid(addr) {
  229. complex Qid addr;
  230. print(" path ", addr.path, "\n");
  231. print(" vers ", addr.vers, "\n");
  232. print(" type ", addr.type, "\n");
  233. };
  234. sizeofDir = 60;
  235. aggr Dir
  236. {
  237. 'u' 0 type;
  238. 'U' 4 dev;
  239. Qid 8 qid;
  240. 'U' 24 mode;
  241. 'U' 28 atime;
  242. 'U' 32 mtime;
  243. 'V' 36 length;
  244. 'X' 44 name;
  245. 'X' 48 uid;
  246. 'X' 52 gid;
  247. 'X' 56 muid;
  248. };
  249. defn
  250. Dir(addr) {
  251. complex Dir addr;
  252. print(" type ", addr.type, "\n");
  253. print(" dev ", addr.dev, "\n");
  254. print("Qid qid {\n");
  255. Qid(addr.qid);
  256. print("}\n");
  257. print(" mode ", addr.mode, "\n");
  258. print(" atime ", addr.atime, "\n");
  259. print(" mtime ", addr.mtime, "\n");
  260. print(" length ", addr.length, "\n");
  261. print(" name ", addr.name\X, "\n");
  262. print(" uid ", addr.uid\X, "\n");
  263. print(" gid ", addr.gid\X, "\n");
  264. print(" muid ", addr.muid\X, "\n");
  265. };
  266. sizeofWaitmsg = 20;
  267. aggr Waitmsg
  268. {
  269. 'D' 0 pid;
  270. 'a' 4 time;
  271. 'X' 16 msg;
  272. };
  273. defn
  274. Waitmsg(addr) {
  275. complex Waitmsg addr;
  276. print(" pid ", addr.pid, "\n");
  277. print(" time ", addr.time, "\n");
  278. print(" msg ", addr.msg\X, "\n");
  279. };
  280. sizeofIOchunk = 8;
  281. aggr IOchunk
  282. {
  283. 'X' 0 addr;
  284. 'U' 4 len;
  285. };
  286. defn
  287. IOchunk(addr) {
  288. complex IOchunk addr;
  289. print(" addr ", addr.addr\X, "\n");
  290. print(" len ", addr.len, "\n");
  291. };
  292. MaxFragSize = 9216;
  293. VtScoreSize = 20;
  294. VtMaxStringSize = 1024;
  295. VtMaxFileSize = 281474976710655;
  296. VtMaxLumpSize = 57344;
  297. VtPointerDepth = 7;
  298. VtDataType = 0;
  299. VtDirType = 8;
  300. VtRootType = 16;
  301. VtMaxType = 17;
  302. VtTypeDepthMask = 7;
  303. VtEntryActive = 1;
  304. VtEntryDir = 2;
  305. VtEntryDepthShift = 2;
  306. VtEntryDepthMask = 28;
  307. VtEntryLocal = 32;
  308. VtEntrySize = 40;
  309. sizeofVtEntry = 40;
  310. aggr VtEntry
  311. {
  312. 'U' 0 gen;
  313. 'u' 4 psize;
  314. 'u' 6 dsize;
  315. 'b' 8 type;
  316. 'b' 9 flags;
  317. 'W' 12 size;
  318. 'a' 20 score;
  319. };
  320. defn
  321. VtEntry(addr) {
  322. complex VtEntry addr;
  323. print(" gen ", addr.gen, "\n");
  324. print(" psize ", addr.psize, "\n");
  325. print(" dsize ", addr.dsize, "\n");
  326. print(" type ", addr.type, "\n");
  327. print(" flags ", addr.flags, "\n");
  328. print(" size ", addr.size, "\n");
  329. print(" score ", addr.score, "\n");
  330. };
  331. sizeofVtRoot = 300;
  332. aggr VtRoot
  333. {
  334. 'a' 0 name;
  335. 'a' 128 type;
  336. 'a' 256 score;
  337. 'u' 276 blocksize;
  338. 'a' 278 prev;
  339. };
  340. defn
  341. VtRoot(addr) {
  342. complex VtRoot addr;
  343. print(" name ", addr.name, "\n");
  344. print(" type ", addr.type, "\n");
  345. print(" score ", addr.score, "\n");
  346. print(" blocksize ", addr.blocksize, "\n");
  347. print(" prev ", addr.prev, "\n");
  348. };
  349. VtRootSize = 300;
  350. VtRootVersion = 2;
  351. VtCryptoStrengthNone = 0;
  352. VtCryptoStrengthAuth = 1;
  353. VtCryptoStrengthWeak = 2;
  354. VtCryptoStrengthStrong = 3;
  355. VtCryptoNone = 0;
  356. VtCryptoSSL3 = 1;
  357. VtCryptoTLS1 = 2;
  358. VtCryptoMax = 3;
  359. VtCodecNone = 0;
  360. VtCodecDeflate = 1;
  361. VtCodecThwack = 2;
  362. VtCodecMax = 3;
  363. VtRerror = 1;
  364. VtTping = 2;
  365. VtRping = 3;
  366. VtThello = 4;
  367. VtRhello = 5;
  368. VtTgoodbye = 6;
  369. VtRgoodbye = 7;
  370. VtTauth0 = 8;
  371. VtRauth0 = 9;
  372. VtTauth1 = 10;
  373. VtRauth1 = 11;
  374. VtTread = 12;
  375. VtRread = 13;
  376. VtTwrite = 14;
  377. VtRwrite = 15;
  378. VtTsync = 16;
  379. VtRsync = 17;
  380. VtTmax = 18;
  381. sizeofVtFcall = 80;
  382. aggr VtFcall
  383. {
  384. 'b' 0 type;
  385. 'b' 1 tag;
  386. 'X' 4 error;
  387. 'X' 8 version;
  388. 'X' 12 uid;
  389. 'b' 16 strength;
  390. 'X' 20 crypto;
  391. 'U' 24 ncrypto;
  392. 'X' 28 codec;
  393. 'U' 32 ncodec;
  394. 'X' 36 sid;
  395. 'b' 40 rcrypto;
  396. 'b' 41 rcodec;
  397. 'X' 44 auth;
  398. 'U' 48 nauth;
  399. 'a' 52 score;
  400. 'b' 72 dtype;
  401. 'u' 74 count;
  402. 'X' 76 data;
  403. };
  404. defn
  405. VtFcall(addr) {
  406. complex VtFcall addr;
  407. print(" type ", addr.type, "\n");
  408. print(" tag ", addr.tag, "\n");
  409. print(" error ", addr.error\X, "\n");
  410. print(" version ", addr.version\X, "\n");
  411. print(" uid ", addr.uid\X, "\n");
  412. print(" strength ", addr.strength, "\n");
  413. print(" crypto ", addr.crypto\X, "\n");
  414. print(" ncrypto ", addr.ncrypto, "\n");
  415. print(" codec ", addr.codec\X, "\n");
  416. print(" ncodec ", addr.ncodec, "\n");
  417. print(" sid ", addr.sid\X, "\n");
  418. print(" rcrypto ", addr.rcrypto, "\n");
  419. print(" rcodec ", addr.rcodec, "\n");
  420. print(" auth ", addr.auth\X, "\n");
  421. print(" nauth ", addr.nauth, "\n");
  422. print(" score ", addr.score, "\n");
  423. print(" dtype ", addr.dtype, "\n");
  424. print(" count ", addr.count, "\n");
  425. print(" data ", addr.data\X, "\n");
  426. };
  427. VtStateAlloc = 0;
  428. VtStateConnected = 1;
  429. VtStateClosed = 2;
  430. sizeofVtConn = 1148;
  431. aggr VtConn
  432. {
  433. QLock 0 lk;
  434. QLock 16 inlk;
  435. QLock 32 outlk;
  436. 'D' 48 debug;
  437. 'D' 52 infd;
  438. 'D' 56 outfd;
  439. 'D' 60 muxer;
  440. 'X' 64 writeq;
  441. 'X' 68 readq;
  442. 'D' 72 state;
  443. 'a' 76 wait;
  444. 'U' 1100 ntag;
  445. 'U' 1104 nsleep;
  446. 'X' 1108 part;
  447. Rendez 1112 tagrend;
  448. Rendez 1124 rpcfork;
  449. 'X' 1136 version;
  450. 'X' 1140 uid;
  451. 'X' 1144 sid;
  452. };
  453. defn
  454. VtConn(addr) {
  455. complex VtConn addr;
  456. print("QLock lk {\n");
  457. QLock(addr.lk);
  458. print("}\n");
  459. print("QLock inlk {\n");
  460. QLock(addr.inlk);
  461. print("}\n");
  462. print("QLock outlk {\n");
  463. QLock(addr.outlk);
  464. print("}\n");
  465. print(" debug ", addr.debug, "\n");
  466. print(" infd ", addr.infd, "\n");
  467. print(" outfd ", addr.outfd, "\n");
  468. print(" muxer ", addr.muxer, "\n");
  469. print(" writeq ", addr.writeq\X, "\n");
  470. print(" readq ", addr.readq\X, "\n");
  471. print(" state ", addr.state, "\n");
  472. print(" wait ", addr.wait, "\n");
  473. print(" ntag ", addr.ntag, "\n");
  474. print(" nsleep ", addr.nsleep, "\n");
  475. print(" part ", addr.part\X, "\n");
  476. print("Rendez tagrend {\n");
  477. Rendez(addr.tagrend);
  478. print("}\n");
  479. print("Rendez rpcfork {\n");
  480. Rendez(addr.rpcfork);
  481. print("}\n");
  482. print(" version ", addr.version\X, "\n");
  483. print(" uid ", addr.uid\X, "\n");
  484. print(" sid ", addr.sid\X, "\n");
  485. };
  486. NilBlock = -1;
  487. sizeofVtBlock = 88;
  488. aggr VtBlock
  489. {
  490. 'X' 0 c;
  491. QLock 4 lk;
  492. 'X' 20 data;
  493. 'a' 24 score;
  494. 'b' 44 type;
  495. 'D' 48 nlock;
  496. 'D' 52 iostate;
  497. 'D' 56 ref;
  498. 'U' 60 heap;
  499. 'A' VtBlock 64 next;
  500. 'A' VtBlock 68 prev;
  501. 'U' 72 used;
  502. 'U' 76 used2;
  503. 'U' 80 addr;
  504. 'D' 84 decrypted;
  505. };
  506. defn
  507. VtBlock(addr) {
  508. complex VtBlock addr;
  509. print(" c ", addr.c\X, "\n");
  510. print("QLock lk {\n");
  511. QLock(addr.lk);
  512. print("}\n");
  513. print(" data ", addr.data\X, "\n");
  514. print(" score ", addr.score, "\n");
  515. print(" type ", addr.type, "\n");
  516. print(" nlock ", addr.nlock, "\n");
  517. print(" iostate ", addr.iostate, "\n");
  518. print(" ref ", addr.ref, "\n");
  519. print(" heap ", addr.heap, "\n");
  520. print(" next ", addr.next\X, "\n");
  521. print(" prev ", addr.prev\X, "\n");
  522. print(" used ", addr.used, "\n");
  523. print(" used2 ", addr.used2, "\n");
  524. print(" addr ", addr.addr, "\n");
  525. print(" decrypted ", addr.decrypted, "\n");
  526. };
  527. VtOREAD = 0;
  528. VtOWRITE = 1;
  529. VtORDWR = 2;
  530. VtOCREATE = 256;
  531. BioLocal = 1;
  532. BioVenti = 2;
  533. BioReading = 3;
  534. BioWriting = 4;
  535. BioEmpty = 5;
  536. BioVentiError = 6;
  537. BadHeap = -1;
  538. sizeofVtCache = 60;
  539. aggr VtCache
  540. {
  541. QLock 0 lk;
  542. 'A' VtConn 16 z;
  543. 'U' 20 blocksize;
  544. 'U' 24 now;
  545. 'A' VtBlock 28 hash;
  546. 'D' 32 nhash;
  547. 'A' VtBlock 36 heap;
  548. 'D' 40 nheap;
  549. 'A' VtBlock 44 block;
  550. 'D' 48 nblock;
  551. 'X' 52 mem;
  552. 'D' 56 mode;
  553. };
  554. defn
  555. VtCache(addr) {
  556. complex VtCache addr;
  557. print("QLock lk {\n");
  558. QLock(addr.lk);
  559. print("}\n");
  560. print(" z ", addr.z\X, "\n");
  561. print(" blocksize ", addr.blocksize, "\n");
  562. print(" now ", addr.now, "\n");
  563. print(" hash ", addr.hash\X, "\n");
  564. print(" nhash ", addr.nhash, "\n");
  565. print(" heap ", addr.heap\X, "\n");
  566. print(" nheap ", addr.nheap, "\n");
  567. print(" block ", addr.block\X, "\n");
  568. print(" nblock ", addr.nblock, "\n");
  569. print(" mem ", addr.mem\X, "\n");
  570. print(" mode ", addr.mode, "\n");
  571. };
  572. complex VtConn vtcachealloc:z;
  573. complex VtCache vtcachealloc:c;
  574. complex VtBlock vtcachealloc:b;
  575. complex VtCache vtcachefree:c;
  576. complex VtCache vtcachedump:c;
  577. complex VtBlock vtcachedump:b;
  578. complex VtCache cachecheck:c;
  579. complex VtBlock cachecheck:b;
  580. complex VtBlock upheap:b;
  581. complex VtBlock upheap:bb;
  582. complex VtCache upheap:c;
  583. complex VtBlock downheap:b;
  584. complex VtBlock downheap:bb;
  585. complex VtCache downheap:c;
  586. complex VtBlock heapdel:b;
  587. complex VtCache heapdel:c;
  588. complex VtBlock heapins:b;
  589. complex VtCache vtcachebumpblock:c;
  590. complex VtBlock vtcachebumpblock:b;
  591. complex VtCache vtcachelocal:c;
  592. complex VtBlock vtcachelocal:b;
  593. complex VtCache vtcacheallocblock:c;
  594. complex VtBlock vtcacheallocblock:b;
  595. complex VtCache vtcacheglobal:c;
  596. complex VtBlock vtcacheglobal:b;
  597. complex VtBlock vtblockduplock:b;
  598. complex VtBlock vtblockput:b;
  599. complex VtCache vtblockput:c;
  600. complex VtBlock vtblockwrite:b;
  601. complex VtCache vtblockwrite:c;
  602. complex VtCache vtcacheblocksize:c;
  603. complex VtBlock vtblockcopy:b;
  604. complex VtBlock vtblockcopy:bb;