malloc.acid 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. sizeof_1_ = 8;
  2. aggr _1_
  3. {
  4. 'D' 0 lo;
  5. 'D' 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. 'D' 0 lo;
  19. 'D' 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. sizeofFconv = 24;
  35. aggr Fconv
  36. {
  37. 'X' 0 out;
  38. 'X' 4 eout;
  39. 'D' 8 f1;
  40. 'D' 12 f2;
  41. 'D' 16 f3;
  42. 'D' 20 chr;
  43. };
  44. defn
  45. Fconv(addr) {
  46. complex Fconv addr;
  47. print(" out ", addr.out\X, "\n");
  48. print(" eout ", addr.eout\X, "\n");
  49. print(" f1 ", addr.f1, "\n");
  50. print(" f2 ", addr.f2, "\n");
  51. print(" f3 ", addr.f3, "\n");
  52. print(" chr ", addr.chr, "\n");
  53. };
  54. sizeofTm = 40;
  55. aggr Tm
  56. {
  57. 'D' 0 sec;
  58. 'D' 4 min;
  59. 'D' 8 hour;
  60. 'D' 12 mday;
  61. 'D' 16 mon;
  62. 'D' 20 year;
  63. 'D' 24 wday;
  64. 'D' 28 yday;
  65. 'a' 32 zone;
  66. 'D' 36 tzoff;
  67. };
  68. defn
  69. Tm(addr) {
  70. complex Tm addr;
  71. print(" sec ", addr.sec, "\n");
  72. print(" min ", addr.min, "\n");
  73. print(" hour ", addr.hour, "\n");
  74. print(" mday ", addr.mday, "\n");
  75. print(" mon ", addr.mon, "\n");
  76. print(" year ", addr.year, "\n");
  77. print(" wday ", addr.wday, "\n");
  78. print(" yday ", addr.yday, "\n");
  79. print(" zone ", addr.zone, "\n");
  80. print(" tzoff ", addr.tzoff, "\n");
  81. };
  82. PNPROC = 1;
  83. PNGROUP = 2;
  84. sizeofLock = 4;
  85. aggr Lock
  86. {
  87. 'D' 0 val;
  88. };
  89. defn
  90. Lock(addr) {
  91. complex Lock addr;
  92. print(" val ", addr.val, "\n");
  93. };
  94. sizeofQLp = 12;
  95. aggr QLp
  96. {
  97. 'D' 0 inuse;
  98. 'A' QLp 4 next;
  99. 'C' 8 state;
  100. };
  101. defn
  102. QLp(addr) {
  103. complex QLp addr;
  104. print(" inuse ", addr.inuse, "\n");
  105. print(" next ", addr.next\X, "\n");
  106. print(" state ", addr.state, "\n");
  107. };
  108. sizeofQLock = 16;
  109. aggr QLock
  110. {
  111. Lock 0 lock;
  112. 'D' 4 locked;
  113. 'A' QLp 8 $head;
  114. 'A' QLp 12 $tail;
  115. };
  116. defn
  117. QLock(addr) {
  118. complex QLock addr;
  119. print("Lock lock {\n");
  120. Lock(addr.lock);
  121. print("}\n");
  122. print(" locked ", addr.locked, "\n");
  123. print(" $head ", addr.$head\X, "\n");
  124. print(" $tail ", addr.$tail\X, "\n");
  125. };
  126. sizeofRWLock = 20;
  127. aggr RWLock
  128. {
  129. Lock 0 lock;
  130. 'D' 4 readers;
  131. 'D' 8 writer;
  132. 'A' QLp 12 $head;
  133. 'A' QLp 16 $tail;
  134. };
  135. defn
  136. RWLock(addr) {
  137. complex RWLock addr;
  138. print("Lock lock {\n");
  139. Lock(addr.lock);
  140. print("}\n");
  141. print(" readers ", addr.readers, "\n");
  142. print(" writer ", addr.writer, "\n");
  143. print(" $head ", addr.$head\X, "\n");
  144. print(" $tail ", addr.$tail\X, "\n");
  145. };
  146. RFNAMEG = 1;
  147. RFENVG = 2;
  148. RFFDG = 4;
  149. RFNOTEG = 8;
  150. RFPROC = 16;
  151. RFMEM = 32;
  152. RFNOWAIT = 64;
  153. RFCNAMEG = 1024;
  154. RFCENVG = 2048;
  155. RFCFDG = 4096;
  156. RFREND = 8192;
  157. RFNOMNT = 16384;
  158. sizeofQid = 16;
  159. aggr Qid
  160. {
  161. 'W' 0 path;
  162. 'U' 8 vers;
  163. 'b' 12 type;
  164. };
  165. defn
  166. Qid(addr) {
  167. complex Qid addr;
  168. print(" path ", addr.path, "\n");
  169. print(" vers ", addr.vers, "\n");
  170. print(" type ", addr.type, "\n");
  171. };
  172. sizeofDir = 60;
  173. aggr Dir
  174. {
  175. 'u' 0 type;
  176. 'U' 4 dev;
  177. Qid 8 qid;
  178. 'U' 24 mode;
  179. 'U' 28 atime;
  180. 'U' 32 mtime;
  181. 'V' 36 length;
  182. 'X' 44 name;
  183. 'X' 48 uid;
  184. 'X' 52 gid;
  185. 'X' 56 muid;
  186. };
  187. defn
  188. Dir(addr) {
  189. complex Dir addr;
  190. print(" type ", addr.type, "\n");
  191. print(" dev ", addr.dev, "\n");
  192. print("Qid qid {\n");
  193. Qid(addr.qid);
  194. print("}\n");
  195. print(" mode ", addr.mode, "\n");
  196. print(" atime ", addr.atime, "\n");
  197. print(" mtime ", addr.mtime, "\n");
  198. print(" length ", addr.length, "\n");
  199. print(" name ", addr.name\X, "\n");
  200. print(" uid ", addr.uid\X, "\n");
  201. print(" gid ", addr.gid\X, "\n");
  202. print(" muid ", addr.muid\X, "\n");
  203. };
  204. sizeofWaitmsg = 20;
  205. aggr Waitmsg
  206. {
  207. 'D' 0 pid;
  208. 'a' 4 time;
  209. 'X' 16 msg;
  210. };
  211. defn
  212. Waitmsg(addr) {
  213. complex Waitmsg addr;
  214. print(" pid ", addr.pid, "\n");
  215. print(" time ", addr.time, "\n");
  216. print(" msg ", addr.msg\X, "\n");
  217. };
  218. sizeofIOchunk = 8;
  219. aggr IOchunk
  220. {
  221. 'X' 0 addr;
  222. 'U' 4 len;
  223. };
  224. defn
  225. IOchunk(addr) {
  226. complex IOchunk addr;
  227. print(" addr ", addr.addr\X, "\n");
  228. print(" len ", addr.len, "\n");
  229. };
  230. sizeofPool = 88;
  231. aggr Pool
  232. {
  233. 'X' 0 name;
  234. 'U' 4 maxsize;
  235. 'U' 8 cursize;
  236. 'U' 12 curfree;
  237. 'U' 16 curalloc;
  238. 'U' 20 minarena;
  239. 'U' 24 quantum;
  240. 'U' 28 minblock;
  241. 'X' 32 freeroot;
  242. 'X' 36 arenalist;
  243. 'X' 40 alloc;
  244. 'X' 44 merge;
  245. 'X' 48 move;
  246. 'D' 52 flags;
  247. 'D' 56 nfree;
  248. 'D' 60 lastcompact;
  249. 'X' 64 lock;
  250. 'X' 68 unlock;
  251. 'X' 72 print;
  252. 'X' 76 panic;
  253. 'X' 80 logstack;
  254. 'X' 84 private;
  255. };
  256. defn
  257. Pool(addr) {
  258. complex Pool addr;
  259. print(" name ", addr.name\X, "\n");
  260. print(" maxsize ", addr.maxsize, "\n");
  261. print(" cursize ", addr.cursize, "\n");
  262. print(" curfree ", addr.curfree, "\n");
  263. print(" curalloc ", addr.curalloc, "\n");
  264. print(" minarena ", addr.minarena, "\n");
  265. print(" quantum ", addr.quantum, "\n");
  266. print(" minblock ", addr.minblock, "\n");
  267. print(" freeroot ", addr.freeroot\X, "\n");
  268. print(" arenalist ", addr.arenalist\X, "\n");
  269. print(" alloc ", addr.alloc\X, "\n");
  270. print(" merge ", addr.merge\X, "\n");
  271. print(" move ", addr.move\X, "\n");
  272. print(" flags ", addr.flags, "\n");
  273. print(" nfree ", addr.nfree, "\n");
  274. print(" lastcompact ", addr.lastcompact, "\n");
  275. print(" lock ", addr.lock\X, "\n");
  276. print(" unlock ", addr.unlock\X, "\n");
  277. print(" print ", addr.print\X, "\n");
  278. print(" panic ", addr.panic\X, "\n");
  279. print(" logstack ", addr.logstack\X, "\n");
  280. print(" private ", addr.private\X, "\n");
  281. };
  282. sizeofTraverse = 20;
  283. aggr Traverse
  284. {
  285. 'X' 0 visit;
  286. 'D' 4 maxvisit;
  287. 'X' 8 a;
  288. 'X' 12 b;
  289. 'X' 16 prev;
  290. };
  291. defn
  292. Traverse(addr) {
  293. complex Traverse addr;
  294. print(" visit ", addr.visit\X, "\n");
  295. print(" maxvisit ", addr.maxvisit, "\n");
  296. print(" a ", addr.a\X, "\n");
  297. print(" b ", addr.b\X, "\n");
  298. print(" prev ", addr.prev\X, "\n");
  299. };
  300. complex Pool mainmem;
  301. complex Pool imagmem;
  302. POOL_ANTAGONISM = 1;
  303. POOL_PARANOIA = 2;
  304. POOL_VERBOSITY = 4;
  305. POOL_DEBUGGING = 8;
  306. POOL_LOGGING = 16;
  307. POOL_TOLERANCE = 32;
  308. sizeofPrivate = 8;
  309. aggr Private
  310. {
  311. Lock 0 lk;
  312. 'D' 4 printfd;
  313. };
  314. defn
  315. Private(addr) {
  316. complex Private addr;
  317. print("Lock lk {\n");
  318. Lock(addr.lk);
  319. print("}\n");
  320. print(" printfd ", addr.printfd, "\n");
  321. };
  322. complex Private sbrkmempriv;
  323. complex Pool sbrkmem;
  324. complex Pool mainmem;
  325. complex Pool imagmem;
  326. complex Pool plock:p;
  327. complex Private plock:pv;
  328. complex Pool punlock:p;
  329. complex Private punlock:pv;
  330. complex Pool pprint:p;
  331. complex Private pprint:pv;
  332. complex Pool ppanic:p;
  333. complex Private ppanic:pv;
  334. Npadlong = 2;
  335. MallocOffset = 0;
  336. ReallocOffset = 1;