xref: /plan9/sys/src/libc/port/malloc.acid (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombiersizeof_1_ = 8;
2*9a747e4fSDavid du Colombieraggr _1_
3*9a747e4fSDavid du Colombier{
4*9a747e4fSDavid du Colombier	'D' 0 lo;
5*9a747e4fSDavid du Colombier	'D' 4 hi;
6*9a747e4fSDavid du Colombier};
7*9a747e4fSDavid du Colombier
8*9a747e4fSDavid du Colombierdefn
9*9a747e4fSDavid du Colombier_1_(addr) {
10*9a747e4fSDavid du Colombier	complex _1_ addr;
11*9a747e4fSDavid du Colombier	print("	lo	", addr.lo, "\n");
12*9a747e4fSDavid du Colombier	print("	hi	", addr.hi, "\n");
13*9a747e4fSDavid du Colombier};
14*9a747e4fSDavid du Colombier
15*9a747e4fSDavid du ColombiersizeofFPdbleword = 8;
16*9a747e4fSDavid du Colombieraggr FPdbleword
17*9a747e4fSDavid du Colombier{
18*9a747e4fSDavid du Colombier	'F' 0 x;
19*9a747e4fSDavid du Colombier	{
20*9a747e4fSDavid du Colombier	'D' 0 lo;
21*9a747e4fSDavid du Colombier	'D' 4 hi;
22*9a747e4fSDavid du Colombier	};
23*9a747e4fSDavid du Colombier};
24*9a747e4fSDavid du Colombier
25*9a747e4fSDavid du Colombierdefn
26*9a747e4fSDavid du ColombierFPdbleword(addr) {
27*9a747e4fSDavid du Colombier	complex FPdbleword addr;
28*9a747e4fSDavid du Colombier	print("	x	", addr.x, "\n");
29*9a747e4fSDavid du Colombier	print("_1_ {\n");
30*9a747e4fSDavid du Colombier		_1_(addr+0);
31*9a747e4fSDavid du Colombier	print("}\n");
32*9a747e4fSDavid du Colombier};
33*9a747e4fSDavid du Colombier
34*9a747e4fSDavid du ColombierUTFmax = 3;
35*9a747e4fSDavid du ColombierRunesync = 128;
36*9a747e4fSDavid du ColombierRuneself = 128;
37*9a747e4fSDavid du ColombierRuneerror = 128;
38*9a747e4fSDavid du ColombiersizeofFconv = 24;
39*9a747e4fSDavid du Colombieraggr Fconv
40*9a747e4fSDavid du Colombier{
41*9a747e4fSDavid du Colombier	'X' 0 out;
42*9a747e4fSDavid du Colombier	'X' 4 eout;
43*9a747e4fSDavid du Colombier	'D' 8 f1;
44*9a747e4fSDavid du Colombier	'D' 12 f2;
45*9a747e4fSDavid du Colombier	'D' 16 f3;
46*9a747e4fSDavid du Colombier	'D' 20 chr;
47*9a747e4fSDavid du Colombier};
48*9a747e4fSDavid du Colombier
49*9a747e4fSDavid du Colombierdefn
50*9a747e4fSDavid du ColombierFconv(addr) {
51*9a747e4fSDavid du Colombier	complex Fconv addr;
52*9a747e4fSDavid du Colombier	print("	out	", addr.out\X, "\n");
53*9a747e4fSDavid du Colombier	print("	eout	", addr.eout\X, "\n");
54*9a747e4fSDavid du Colombier	print("	f1	", addr.f1, "\n");
55*9a747e4fSDavid du Colombier	print("	f2	", addr.f2, "\n");
56*9a747e4fSDavid du Colombier	print("	f3	", addr.f3, "\n");
57*9a747e4fSDavid du Colombier	print("	chr	", addr.chr, "\n");
58*9a747e4fSDavid du Colombier};
59*9a747e4fSDavid du Colombier
60*9a747e4fSDavid du ColombiersizeofTm = 40;
61*9a747e4fSDavid du Colombieraggr Tm
62*9a747e4fSDavid du Colombier{
63*9a747e4fSDavid du Colombier	'D' 0 sec;
64*9a747e4fSDavid du Colombier	'D' 4 min;
65*9a747e4fSDavid du Colombier	'D' 8 hour;
66*9a747e4fSDavid du Colombier	'D' 12 mday;
67*9a747e4fSDavid du Colombier	'D' 16 mon;
68*9a747e4fSDavid du Colombier	'D' 20 year;
69*9a747e4fSDavid du Colombier	'D' 24 wday;
70*9a747e4fSDavid du Colombier	'D' 28 yday;
71*9a747e4fSDavid du Colombier	'a' 32 zone;
72*9a747e4fSDavid du Colombier	'D' 36 tzoff;
73*9a747e4fSDavid du Colombier};
74*9a747e4fSDavid du Colombier
75*9a747e4fSDavid du Colombierdefn
76*9a747e4fSDavid du ColombierTm(addr) {
77*9a747e4fSDavid du Colombier	complex Tm addr;
78*9a747e4fSDavid du Colombier	print("	sec	", addr.sec, "\n");
79*9a747e4fSDavid du Colombier	print("	min	", addr.min, "\n");
80*9a747e4fSDavid du Colombier	print("	hour	", addr.hour, "\n");
81*9a747e4fSDavid du Colombier	print("	mday	", addr.mday, "\n");
82*9a747e4fSDavid du Colombier	print("	mon	", addr.mon, "\n");
83*9a747e4fSDavid du Colombier	print("	year	", addr.year, "\n");
84*9a747e4fSDavid du Colombier	print("	wday	", addr.wday, "\n");
85*9a747e4fSDavid du Colombier	print("	yday	", addr.yday, "\n");
86*9a747e4fSDavid du Colombier	print("	zone	", addr.zone, "\n");
87*9a747e4fSDavid du Colombier	print("	tzoff	", addr.tzoff, "\n");
88*9a747e4fSDavid du Colombier};
89*9a747e4fSDavid du Colombier
90*9a747e4fSDavid du ColombierPNPROC = 1;
91*9a747e4fSDavid du ColombierPNGROUP = 2;
92*9a747e4fSDavid du ColombiersizeofLock = 4;
93*9a747e4fSDavid du Colombieraggr Lock
94*9a747e4fSDavid du Colombier{
95*9a747e4fSDavid du Colombier	'D' 0 val;
96*9a747e4fSDavid du Colombier};
97*9a747e4fSDavid du Colombier
98*9a747e4fSDavid du Colombierdefn
99*9a747e4fSDavid du ColombierLock(addr) {
100*9a747e4fSDavid du Colombier	complex Lock addr;
101*9a747e4fSDavid du Colombier	print("	val	", addr.val, "\n");
102*9a747e4fSDavid du Colombier};
103*9a747e4fSDavid du Colombier
104*9a747e4fSDavid du ColombiersizeofQLp = 12;
105*9a747e4fSDavid du Colombieraggr QLp
106*9a747e4fSDavid du Colombier{
107*9a747e4fSDavid du Colombier	'D' 0 inuse;
108*9a747e4fSDavid du Colombier	'A' QLp 4 next;
109*9a747e4fSDavid du Colombier	'C' 8 state;
110*9a747e4fSDavid du Colombier};
111*9a747e4fSDavid du Colombier
112*9a747e4fSDavid du Colombierdefn
113*9a747e4fSDavid du ColombierQLp(addr) {
114*9a747e4fSDavid du Colombier	complex QLp addr;
115*9a747e4fSDavid du Colombier	print("	inuse	", addr.inuse, "\n");
116*9a747e4fSDavid du Colombier	print("	next	", addr.next\X, "\n");
117*9a747e4fSDavid du Colombier	print("	state	", addr.state, "\n");
118*9a747e4fSDavid du Colombier};
119*9a747e4fSDavid du Colombier
120*9a747e4fSDavid du ColombiersizeofQLock = 16;
121*9a747e4fSDavid du Colombieraggr QLock
122*9a747e4fSDavid du Colombier{
123*9a747e4fSDavid du Colombier	Lock 0 lock;
124*9a747e4fSDavid du Colombier	'D' 4 locked;
125*9a747e4fSDavid du Colombier	'A' QLp 8 $head;
126*9a747e4fSDavid du Colombier	'A' QLp 12 $tail;
127*9a747e4fSDavid du Colombier};
128*9a747e4fSDavid du Colombier
129*9a747e4fSDavid du Colombierdefn
130*9a747e4fSDavid du ColombierQLock(addr) {
131*9a747e4fSDavid du Colombier	complex QLock addr;
132*9a747e4fSDavid du Colombier	print("Lock lock {\n");
133*9a747e4fSDavid du Colombier	Lock(addr.lock);
134*9a747e4fSDavid du Colombier	print("}\n");
135*9a747e4fSDavid du Colombier	print("	locked	", addr.locked, "\n");
136*9a747e4fSDavid du Colombier	print("	$head	", addr.$head\X, "\n");
137*9a747e4fSDavid du Colombier	print("	$tail	", addr.$tail\X, "\n");
138*9a747e4fSDavid du Colombier};
139*9a747e4fSDavid du Colombier
140*9a747e4fSDavid du ColombiersizeofRWLock = 20;
141*9a747e4fSDavid du Colombieraggr RWLock
142*9a747e4fSDavid du Colombier{
143*9a747e4fSDavid du Colombier	Lock 0 lock;
144*9a747e4fSDavid du Colombier	'D' 4 readers;
145*9a747e4fSDavid du Colombier	'D' 8 writer;
146*9a747e4fSDavid du Colombier	'A' QLp 12 $head;
147*9a747e4fSDavid du Colombier	'A' QLp 16 $tail;
148*9a747e4fSDavid du Colombier};
149*9a747e4fSDavid du Colombier
150*9a747e4fSDavid du Colombierdefn
151*9a747e4fSDavid du ColombierRWLock(addr) {
152*9a747e4fSDavid du Colombier	complex RWLock addr;
153*9a747e4fSDavid du Colombier	print("Lock lock {\n");
154*9a747e4fSDavid du Colombier	Lock(addr.lock);
155*9a747e4fSDavid du Colombier	print("}\n");
156*9a747e4fSDavid du Colombier	print("	readers	", addr.readers, "\n");
157*9a747e4fSDavid du Colombier	print("	writer	", addr.writer, "\n");
158*9a747e4fSDavid du Colombier	print("	$head	", addr.$head\X, "\n");
159*9a747e4fSDavid du Colombier	print("	$tail	", addr.$tail\X, "\n");
160*9a747e4fSDavid du Colombier};
161*9a747e4fSDavid du Colombier
162*9a747e4fSDavid du ColombierRFNAMEG = 1;
163*9a747e4fSDavid du ColombierRFENVG = 2;
164*9a747e4fSDavid du ColombierRFFDG = 4;
165*9a747e4fSDavid du ColombierRFNOTEG = 8;
166*9a747e4fSDavid du ColombierRFPROC = 16;
167*9a747e4fSDavid du ColombierRFMEM = 32;
168*9a747e4fSDavid du ColombierRFNOWAIT = 64;
169*9a747e4fSDavid du ColombierRFCNAMEG = 1024;
170*9a747e4fSDavid du ColombierRFCENVG = 2048;
171*9a747e4fSDavid du ColombierRFCFDG = 4096;
172*9a747e4fSDavid du ColombierRFREND = 8192;
173*9a747e4fSDavid du ColombierRFNOMNT = 16384;
174*9a747e4fSDavid du ColombiersizeofQid = 16;
175*9a747e4fSDavid du Colombieraggr Qid
176*9a747e4fSDavid du Colombier{
177*9a747e4fSDavid du Colombier	'W' 0 path;
178*9a747e4fSDavid du Colombier	'U' 8 vers;
179*9a747e4fSDavid du Colombier	'b' 12 type;
180*9a747e4fSDavid du Colombier};
181*9a747e4fSDavid du Colombier
182*9a747e4fSDavid du Colombierdefn
183*9a747e4fSDavid du ColombierQid(addr) {
184*9a747e4fSDavid du Colombier	complex Qid addr;
185*9a747e4fSDavid du Colombier	print("	path	", addr.path, "\n");
186*9a747e4fSDavid du Colombier	print("	vers	", addr.vers, "\n");
187*9a747e4fSDavid du Colombier	print("	type	", addr.type, "\n");
188*9a747e4fSDavid du Colombier};
189*9a747e4fSDavid du Colombier
190*9a747e4fSDavid du ColombiersizeofDir = 60;
191*9a747e4fSDavid du Colombieraggr Dir
192*9a747e4fSDavid du Colombier{
193*9a747e4fSDavid du Colombier	'u' 0 type;
194*9a747e4fSDavid du Colombier	'U' 4 dev;
195*9a747e4fSDavid du Colombier	Qid 8 qid;
196*9a747e4fSDavid du Colombier	'U' 24 mode;
197*9a747e4fSDavid du Colombier	'U' 28 atime;
198*9a747e4fSDavid du Colombier	'U' 32 mtime;
199*9a747e4fSDavid du Colombier	'V' 36 length;
200*9a747e4fSDavid du Colombier	'X' 44 name;
201*9a747e4fSDavid du Colombier	'X' 48 uid;
202*9a747e4fSDavid du Colombier	'X' 52 gid;
203*9a747e4fSDavid du Colombier	'X' 56 muid;
204*9a747e4fSDavid du Colombier};
205*9a747e4fSDavid du Colombier
206*9a747e4fSDavid du Colombierdefn
207*9a747e4fSDavid du ColombierDir(addr) {
208*9a747e4fSDavid du Colombier	complex Dir addr;
209*9a747e4fSDavid du Colombier	print("	type	", addr.type, "\n");
210*9a747e4fSDavid du Colombier	print("	dev	", addr.dev, "\n");
211*9a747e4fSDavid du Colombier	print("Qid qid {\n");
212*9a747e4fSDavid du Colombier	Qid(addr.qid);
213*9a747e4fSDavid du Colombier	print("}\n");
214*9a747e4fSDavid du Colombier	print("	mode	", addr.mode, "\n");
215*9a747e4fSDavid du Colombier	print("	atime	", addr.atime, "\n");
216*9a747e4fSDavid du Colombier	print("	mtime	", addr.mtime, "\n");
217*9a747e4fSDavid du Colombier	print("	length	", addr.length, "\n");
218*9a747e4fSDavid du Colombier	print("	name	", addr.name\X, "\n");
219*9a747e4fSDavid du Colombier	print("	uid	", addr.uid\X, "\n");
220*9a747e4fSDavid du Colombier	print("	gid	", addr.gid\X, "\n");
221*9a747e4fSDavid du Colombier	print("	muid	", addr.muid\X, "\n");
222*9a747e4fSDavid du Colombier};
223*9a747e4fSDavid du Colombier
224*9a747e4fSDavid du ColombiersizeofWaitmsg = 20;
225*9a747e4fSDavid du Colombieraggr Waitmsg
226*9a747e4fSDavid du Colombier{
227*9a747e4fSDavid du Colombier	'D' 0 pid;
228*9a747e4fSDavid du Colombier	'a' 4 time;
229*9a747e4fSDavid du Colombier	'X' 16 msg;
230*9a747e4fSDavid du Colombier};
231*9a747e4fSDavid du Colombier
232*9a747e4fSDavid du Colombierdefn
233*9a747e4fSDavid du ColombierWaitmsg(addr) {
234*9a747e4fSDavid du Colombier	complex Waitmsg addr;
235*9a747e4fSDavid du Colombier	print("	pid	", addr.pid, "\n");
236*9a747e4fSDavid du Colombier	print("	time	", addr.time, "\n");
237*9a747e4fSDavid du Colombier	print("	msg	", addr.msg\X, "\n");
238*9a747e4fSDavid du Colombier};
239*9a747e4fSDavid du Colombier
240*9a747e4fSDavid du ColombiersizeofIOchunk = 8;
241*9a747e4fSDavid du Colombieraggr IOchunk
242*9a747e4fSDavid du Colombier{
243*9a747e4fSDavid du Colombier	'X' 0 addr;
244*9a747e4fSDavid du Colombier	'U' 4 len;
245*9a747e4fSDavid du Colombier};
246*9a747e4fSDavid du Colombier
247*9a747e4fSDavid du Colombierdefn
248*9a747e4fSDavid du ColombierIOchunk(addr) {
249*9a747e4fSDavid du Colombier	complex IOchunk addr;
250*9a747e4fSDavid du Colombier	print("	addr	", addr.addr\X, "\n");
251*9a747e4fSDavid du Colombier	print("	len	", addr.len, "\n");
252*9a747e4fSDavid du Colombier};
253*9a747e4fSDavid du Colombier
254*9a747e4fSDavid du ColombiersizeofPool = 88;
255*9a747e4fSDavid du Colombieraggr Pool
256*9a747e4fSDavid du Colombier{
257*9a747e4fSDavid du Colombier	'X' 0 name;
258*9a747e4fSDavid du Colombier	'U' 4 maxsize;
259*9a747e4fSDavid du Colombier	'U' 8 cursize;
260*9a747e4fSDavid du Colombier	'U' 12 curfree;
261*9a747e4fSDavid du Colombier	'U' 16 curalloc;
262*9a747e4fSDavid du Colombier	'U' 20 minarena;
263*9a747e4fSDavid du Colombier	'U' 24 quantum;
264*9a747e4fSDavid du Colombier	'U' 28 minblock;
265*9a747e4fSDavid du Colombier	'X' 32 freeroot;
266*9a747e4fSDavid du Colombier	'X' 36 arenalist;
267*9a747e4fSDavid du Colombier	'X' 40 alloc;
268*9a747e4fSDavid du Colombier	'X' 44 merge;
269*9a747e4fSDavid du Colombier	'X' 48 move;
270*9a747e4fSDavid du Colombier	'D' 52 flags;
271*9a747e4fSDavid du Colombier	'D' 56 nfree;
272*9a747e4fSDavid du Colombier	'D' 60 lastcompact;
273*9a747e4fSDavid du Colombier	'X' 64 lock;
274*9a747e4fSDavid du Colombier	'X' 68 unlock;
275*9a747e4fSDavid du Colombier	'X' 72 print;
276*9a747e4fSDavid du Colombier	'X' 76 panic;
277*9a747e4fSDavid du Colombier	'X' 80 logstack;
278*9a747e4fSDavid du Colombier	'X' 84 private;
279*9a747e4fSDavid du Colombier};
280*9a747e4fSDavid du Colombier
281*9a747e4fSDavid du Colombierdefn
282*9a747e4fSDavid du ColombierPool(addr) {
283*9a747e4fSDavid du Colombier	complex Pool addr;
284*9a747e4fSDavid du Colombier	print("	name	", addr.name\X, "\n");
285*9a747e4fSDavid du Colombier	print("	maxsize	", addr.maxsize, "\n");
286*9a747e4fSDavid du Colombier	print("	cursize	", addr.cursize, "\n");
287*9a747e4fSDavid du Colombier	print("	curfree	", addr.curfree, "\n");
288*9a747e4fSDavid du Colombier	print("	curalloc	", addr.curalloc, "\n");
289*9a747e4fSDavid du Colombier	print("	minarena	", addr.minarena, "\n");
290*9a747e4fSDavid du Colombier	print("	quantum	", addr.quantum, "\n");
291*9a747e4fSDavid du Colombier	print("	minblock	", addr.minblock, "\n");
292*9a747e4fSDavid du Colombier	print("	freeroot	", addr.freeroot\X, "\n");
293*9a747e4fSDavid du Colombier	print("	arenalist	", addr.arenalist\X, "\n");
294*9a747e4fSDavid du Colombier	print("	alloc	", addr.alloc\X, "\n");
295*9a747e4fSDavid du Colombier	print("	merge	", addr.merge\X, "\n");
296*9a747e4fSDavid du Colombier	print("	move	", addr.move\X, "\n");
297*9a747e4fSDavid du Colombier	print("	flags	", addr.flags, "\n");
298*9a747e4fSDavid du Colombier	print("	nfree	", addr.nfree, "\n");
299*9a747e4fSDavid du Colombier	print("	lastcompact	", addr.lastcompact, "\n");
300*9a747e4fSDavid du Colombier	print("	lock	", addr.lock\X, "\n");
301*9a747e4fSDavid du Colombier	print("	unlock	", addr.unlock\X, "\n");
302*9a747e4fSDavid du Colombier	print("	print	", addr.print\X, "\n");
303*9a747e4fSDavid du Colombier	print("	panic	", addr.panic\X, "\n");
304*9a747e4fSDavid du Colombier	print("	logstack	", addr.logstack\X, "\n");
305*9a747e4fSDavid du Colombier	print("	private	", addr.private\X, "\n");
306*9a747e4fSDavid du Colombier};
307*9a747e4fSDavid du Colombier
308*9a747e4fSDavid du ColombiersizeofTraverse = 20;
309*9a747e4fSDavid du Colombieraggr Traverse
310*9a747e4fSDavid du Colombier{
311*9a747e4fSDavid du Colombier	'X' 0 visit;
312*9a747e4fSDavid du Colombier	'D' 4 maxvisit;
313*9a747e4fSDavid du Colombier	'X' 8 a;
314*9a747e4fSDavid du Colombier	'X' 12 b;
315*9a747e4fSDavid du Colombier	'X' 16 prev;
316*9a747e4fSDavid du Colombier};
317*9a747e4fSDavid du Colombier
318*9a747e4fSDavid du Colombierdefn
319*9a747e4fSDavid du ColombierTraverse(addr) {
320*9a747e4fSDavid du Colombier	complex Traverse addr;
321*9a747e4fSDavid du Colombier	print("	visit	", addr.visit\X, "\n");
322*9a747e4fSDavid du Colombier	print("	maxvisit	", addr.maxvisit, "\n");
323*9a747e4fSDavid du Colombier	print("	a	", addr.a\X, "\n");
324*9a747e4fSDavid du Colombier	print("	b	", addr.b\X, "\n");
325*9a747e4fSDavid du Colombier	print("	prev	", addr.prev\X, "\n");
326*9a747e4fSDavid du Colombier};
327*9a747e4fSDavid du Colombier
328*9a747e4fSDavid du Colombiercomplex Pool mainmem;
329*9a747e4fSDavid du Colombiercomplex Pool imagmem;
330*9a747e4fSDavid du ColombierPOOL_ANTAGONISM = 1;
331*9a747e4fSDavid du ColombierPOOL_PARANOIA = 2;
332*9a747e4fSDavid du ColombierPOOL_VERBOSITY = 4;
333*9a747e4fSDavid du ColombierPOOL_DEBUGGING = 8;
334*9a747e4fSDavid du ColombierPOOL_LOGGING = 16;
335*9a747e4fSDavid du ColombierPOOL_TOLERANCE = 32;
336*9a747e4fSDavid du ColombiersizeofPrivate = 8;
337*9a747e4fSDavid du Colombieraggr Private
338*9a747e4fSDavid du Colombier{
339*9a747e4fSDavid du Colombier	Lock 0 lk;
340*9a747e4fSDavid du Colombier	'D' 4 printfd;
341*9a747e4fSDavid du Colombier};
342*9a747e4fSDavid du Colombier
343*9a747e4fSDavid du Colombierdefn
344*9a747e4fSDavid du ColombierPrivate(addr) {
345*9a747e4fSDavid du Colombier	complex Private addr;
346*9a747e4fSDavid du Colombier	print("Lock lk {\n");
347*9a747e4fSDavid du Colombier	Lock(addr.lk);
348*9a747e4fSDavid du Colombier	print("}\n");
349*9a747e4fSDavid du Colombier	print("	printfd	", addr.printfd, "\n");
350*9a747e4fSDavid du Colombier};
351*9a747e4fSDavid du Colombier
352*9a747e4fSDavid du Colombiercomplex Private sbrkmempriv;
353*9a747e4fSDavid du Colombiercomplex Pool sbrkmem;
354*9a747e4fSDavid du Colombiercomplex Pool mainmem;
355*9a747e4fSDavid du Colombiercomplex Pool imagmem;
356*9a747e4fSDavid du Colombiercomplex Pool plock:p;
357*9a747e4fSDavid du Colombiercomplex Private plock:pv;
358*9a747e4fSDavid du Colombiercomplex Pool punlock:p;
359*9a747e4fSDavid du Colombiercomplex Private punlock:pv;
360*9a747e4fSDavid du Colombiercomplex Pool pprint:p;
361*9a747e4fSDavid du Colombiercomplex Private pprint:pv;
362*9a747e4fSDavid du Colombiercomplex Pool ppanic:p;
363*9a747e4fSDavid du Colombiercomplex Private ppanic:pv;
364*9a747e4fSDavid du ColombierNpadlong = 2;
365*9a747e4fSDavid du ColombierMallocOffset = 0;
366*9a747e4fSDavid du ColombierReallocOffset = 1;
367