aac64ab9800cd1e9e1e8b666840adbbbe2717e7c
[virt-mem.git] / lib / kernel_task_struct.ml
1 let warning =
2   "This code is automatically generated from the kernel database by kerneldb-to-parser program.  Any edits you make will be lost.";;
3 let zero = 0;;
4 exception ParseError of string * string * string;;
5 type t =
6   { active_mm : [ | `mm_struct ] Virt_mem_mmap.typed_addr; comm : string;
7     mm : [ | `mm_struct ] Virt_mem_mmap.typed_addr; normal_prio : int64;
8     prio : int64; state : int64; static_prio : int64;
9     tasks'next : [ | `task_struct ] Virt_mem_mmap.typed_addr;
10     tasks'prev : [ | `task_struct ] Virt_mem_mmap.typed_addr
11   };;
12 let parser_1 bits = bitmatch bits with
13   | { state : zero+32 : offset(0), littleendian;
14     prio : zero+32 : offset(192), littleendian;
15     static_prio : zero+32 : offset(224), littleendian;
16     normal_prio : zero+32 : offset(256), littleendian;
17     tasks'next : zero+32 : offset(992), littleendian;
18     tasks'prev : zero+32 : offset(1024), littleendian;
19     mm : zero+32 : offset(1056), littleendian;
20     active_mm : zero+32 : offset(1088), littleendian;
21     comm : 128 : offset(3232), string } -> { state = state;
22     prio = prio;
23     static_prio = static_prio;
24     normal_prio = normal_prio;
25     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 124L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
26     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 128L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
27     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
28     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
29     comm = comm }
30   | { _ } -> raise (ParseError ("task_struct", "parser_1", "failed to match kernel structure"));;
31 let parser_2 bits = bitmatch bits with
32   | { state : zero+32 : offset(0), bigendian;
33     prio : zero+32 : offset(160), bigendian;
34     static_prio : zero+32 : offset(192), bigendian;
35     normal_prio : zero+32 : offset(224), bigendian;
36     tasks'next : zero+32 : offset(2176), bigendian;
37     tasks'prev : zero+32 : offset(2208), bigendian;
38     mm : zero+32 : offset(2240), bigendian;
39     active_mm : zero+32 : offset(2272), bigendian;
40     comm : 128 : offset(4416), string } -> { state = state;
41     prio = prio;
42     static_prio = static_prio;
43     normal_prio = normal_prio;
44     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 272L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
45     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 276L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
46     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
47     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
48     comm = comm }
49   | { _ } -> raise (ParseError ("task_struct", "parser_2", "failed to match kernel structure"));;
50 let parser_3 bits = bitmatch bits with
51   | { state : zero+32 : offset(0), bigendian;
52     prio : zero+32 : offset(192), bigendian;
53     static_prio : zero+32 : offset(224), bigendian;
54     normal_prio : zero+32 : offset(256), bigendian;
55     tasks'next : zero+32 : offset(2304), bigendian;
56     tasks'prev : zero+32 : offset(2336), bigendian;
57     mm : zero+32 : offset(2496), bigendian;
58     active_mm : zero+32 : offset(2528), bigendian;
59     comm : 128 : offset(4736), string } -> { state = state;
60     prio = prio;
61     static_prio = static_prio;
62     normal_prio = normal_prio;
63     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 288L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
64     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 292L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
65     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
66     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
67     comm = comm }
68   | { _ } -> raise (ParseError ("task_struct", "parser_3", "failed to match kernel structure"));;
69 let parser_4 bits = bitmatch bits with
70   | { state : zero+64 : offset(0), littleendian;
71     prio : zero+32 : offset(320), littleendian;
72     static_prio : zero+32 : offset(352), littleendian;
73     normal_prio : zero+32 : offset(384), littleendian;
74     tasks'next : zero+64 : offset(1536), littleendian;
75     tasks'prev : zero+64 : offset(1600), littleendian;
76     mm : zero+64 : offset(1664), littleendian;
77     active_mm : zero+64 : offset(1728), littleendian;
78     comm : 128 : offset(5376), string } -> { state = state;
79     prio = prio;
80     static_prio = static_prio;
81     normal_prio = normal_prio;
82     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 192L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
83     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 200L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
84     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
85     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
86     comm = comm }
87   | { _ } -> raise (ParseError ("task_struct", "parser_4", "failed to match kernel structure"));;
88 let parser_5 bits = bitmatch bits with
89   | { state : zero+64 : offset(0), littleendian;
90     prio : zero+32 : offset(256), littleendian;
91     static_prio : zero+32 : offset(288), littleendian;
92     normal_prio : zero+32 : offset(320), littleendian;
93     tasks'next : zero+64 : offset(2816), littleendian;
94     tasks'prev : zero+64 : offset(2880), littleendian;
95     mm : zero+64 : offset(3200), littleendian;
96     active_mm : zero+64 : offset(3264), littleendian;
97     comm : 128 : offset(6912), string } -> { state = state;
98     prio = prio;
99     static_prio = static_prio;
100     normal_prio = normal_prio;
101     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 352L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
102     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 360L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
103     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
104     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
105     comm = comm }
106   | { _ } -> raise (ParseError ("task_struct", "parser_5", "failed to match kernel structure"));;
107 let parser_6 bits = bitmatch bits with
108   | { state : zero+64 : offset(0), bigendian;
109     prio : zero+32 : offset(320), bigendian;
110     static_prio : zero+32 : offset(352), bigendian;
111     normal_prio : zero+32 : offset(384), bigendian;
112     tasks'next : zero+64 : offset(1600), bigendian;
113     tasks'prev : zero+64 : offset(1664), bigendian;
114     mm : zero+64 : offset(1728), bigendian;
115     active_mm : zero+64 : offset(1792), bigendian;
116     comm : 128 : offset(5440), string } -> { state = state;
117     prio = prio;
118     static_prio = static_prio;
119     normal_prio = normal_prio;
120     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 200L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
121     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 208L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
122     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
123     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
124     comm = comm }
125   | { _ } -> raise (ParseError ("task_struct", "parser_6", "failed to match kernel structure"));;
126 let parser_7 bits = bitmatch bits with
127   | { state : zero+64 : offset(0), littleendian;
128     prio : zero+32 : offset(320), littleendian;
129     static_prio : zero+32 : offset(352), littleendian;
130     normal_prio : zero+32 : offset(384), littleendian;
131     tasks'next : zero+64 : offset(1536), littleendian;
132     tasks'prev : zero+64 : offset(1600), littleendian;
133     mm : zero+64 : offset(1664), littleendian;
134     active_mm : zero+64 : offset(1728), littleendian;
135     comm : 128 : offset(5440), string } -> { state = state;
136     prio = prio;
137     static_prio = static_prio;
138     normal_prio = normal_prio;
139     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 192L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
140     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 200L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
141     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
142     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
143     comm = comm }
144   | { _ } -> raise (ParseError ("task_struct", "parser_7", "failed to match kernel structure"));;
145 let parser_8 bits = bitmatch bits with
146   | { state : zero+64 : offset(0), littleendian;
147     prio : zero+32 : offset(224), littleendian;
148     static_prio : zero+32 : offset(256), littleendian;
149     normal_prio : zero+32 : offset(288), littleendian;
150     tasks'next : zero+64 : offset(2816), littleendian;
151     tasks'prev : zero+64 : offset(2880), littleendian;
152     mm : zero+64 : offset(2944), littleendian;
153     active_mm : zero+64 : offset(3008), littleendian;
154     comm : 128 : offset(6592), string } -> { state = state;
155     prio = prio;
156     static_prio = static_prio;
157     normal_prio = normal_prio;
158     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 352L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
159     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 360L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
160     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
161     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
162     comm = comm }
163   | { _ } -> raise (ParseError ("task_struct", "parser_8", "failed to match kernel structure"));;
164 let parser_9 bits = bitmatch bits with
165   | { state : zero+64 : offset(0), bigendian;
166     prio : zero+32 : offset(224), bigendian;
167     static_prio : zero+32 : offset(256), bigendian;
168     normal_prio : zero+32 : offset(288), bigendian;
169     tasks'next : zero+64 : offset(2880), bigendian;
170     tasks'prev : zero+64 : offset(2944), bigendian;
171     mm : zero+64 : offset(3008), bigendian;
172     active_mm : zero+64 : offset(3072), bigendian;
173     comm : 128 : offset(6592), string } -> { state = state;
174     prio = prio;
175     static_prio = static_prio;
176     normal_prio = normal_prio;
177     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 360L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
178     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 368L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
179     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
180     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
181     comm = comm }
182   | { _ } -> raise (ParseError ("task_struct", "parser_9", "failed to match kernel structure"));;
183 let parser_10 bits = bitmatch bits with
184   | { state : zero+32 : offset(0), littleendian;
185     prio : zero+32 : offset(192), littleendian;
186     static_prio : zero+32 : offset(224), littleendian;
187     normal_prio : zero+32 : offset(256), littleendian;
188     tasks'next : zero+32 : offset(2208), littleendian;
189     tasks'prev : zero+32 : offset(2240), littleendian;
190     mm : zero+32 : offset(2400), littleendian;
191     active_mm : zero+32 : offset(2432), littleendian;
192     comm : 128 : offset(4608), string } -> { state = state;
193     prio = prio;
194     static_prio = static_prio;
195     normal_prio = normal_prio;
196     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 276L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
197     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 280L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
198     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
199     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
200     comm = comm }
201   | { _ } -> raise (ParseError ("task_struct", "parser_10", "failed to match kernel structure"));;
202 let parser_11 bits = bitmatch bits with
203   | { state : zero+64 : offset(0), littleendian;
204     prio : zero+32 : offset(224), littleendian;
205     static_prio : zero+32 : offset(256), littleendian;
206     normal_prio : zero+32 : offset(288), littleendian;
207     tasks'next : zero+64 : offset(3648), littleendian;
208     tasks'prev : zero+64 : offset(3712), littleendian;
209     mm : zero+64 : offset(3776), littleendian;
210     active_mm : zero+64 : offset(3840), littleendian;
211     comm : 128 : offset(7816), string } -> { state = state;
212     prio = prio;
213     static_prio = static_prio;
214     normal_prio = normal_prio;
215     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 456L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
216     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 464L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
217     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
218     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
219     comm = comm }
220   | { _ } -> raise (ParseError ("task_struct", "parser_11", "failed to match kernel structure"));;
221 let parser_12 bits = bitmatch bits with
222   | { state : zero+32 : offset(0), bigendian;
223     prio : zero+32 : offset(192), bigendian;
224     static_prio : zero+32 : offset(224), bigendian;
225     normal_prio : zero+32 : offset(256), bigendian;
226     tasks'next : zero+32 : offset(1024), bigendian;
227     tasks'prev : zero+32 : offset(1056), bigendian;
228     mm : zero+32 : offset(1088), bigendian;
229     active_mm : zero+32 : offset(1120), bigendian;
230     comm : 128 : offset(3264), string } -> { state = state;
231     prio = prio;
232     static_prio = static_prio;
233     normal_prio = normal_prio;
234     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 128L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
235     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 132L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
236     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
237     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
238     comm = comm }
239   | { _ } -> raise (ParseError ("task_struct", "parser_12", "failed to match kernel structure"));;
240 let parser_13 bits = bitmatch bits with
241   | { state : zero+64 : offset(0), littleendian;
242     prio : zero+32 : offset(224), littleendian;
243     static_prio : zero+32 : offset(256), littleendian;
244     normal_prio : zero+32 : offset(288), littleendian;
245     tasks'next : zero+64 : offset(3840), littleendian;
246     tasks'prev : zero+64 : offset(3904), littleendian;
247     mm : zero+64 : offset(3968), littleendian;
248     active_mm : zero+64 : offset(4032), littleendian;
249     comm : 128 : offset(8392), string } -> { state = state;
250     prio = prio;
251     static_prio = static_prio;
252     normal_prio = normal_prio;
253     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 480L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
254     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 488L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
255     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
256     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
257     comm = comm }
258   | { _ } -> raise (ParseError ("task_struct", "parser_13", "failed to match kernel structure"));;
259 let parser_14 bits = bitmatch bits with
260   | { state : zero+32 : offset(0), littleendian;
261     prio : zero+32 : offset(160), littleendian;
262     static_prio : zero+32 : offset(192), littleendian;
263     normal_prio : zero+32 : offset(224), littleendian;
264     tasks'next : zero+32 : offset(3008), littleendian;
265     tasks'prev : zero+32 : offset(3040), littleendian;
266     mm : zero+32 : offset(3072), littleendian;
267     active_mm : zero+32 : offset(3104), littleendian;
268     comm : 128 : offset(5416), string } -> { state = state;
269     prio = prio;
270     static_prio = static_prio;
271     normal_prio = normal_prio;
272     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 376L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
273     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 380L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
274     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
275     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
276     comm = comm }
277   | { _ } -> raise (ParseError ("task_struct", "parser_14", "failed to match kernel structure"));;
278 let parser_15 bits = bitmatch bits with
279   | { state : zero+32 : offset(0), littleendian;
280     prio : zero+32 : offset(160), littleendian;
281     static_prio : zero+32 : offset(192), littleendian;
282     normal_prio : zero+32 : offset(224), littleendian;
283     tasks'next : zero+32 : offset(2144), littleendian;
284     tasks'prev : zero+32 : offset(2176), littleendian;
285     mm : zero+32 : offset(2208), littleendian;
286     active_mm : zero+32 : offset(2240), littleendian;
287     comm : 128 : offset(4384), string } -> { state = state;
288     prio = prio;
289     static_prio = static_prio;
290     normal_prio = normal_prio;
291     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 268L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
292     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 272L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
293     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
294     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
295     comm = comm }
296   | { _ } -> raise (ParseError ("task_struct", "parser_15", "failed to match kernel structure"));;
297 let parser_16 bits = bitmatch bits with
298   | { state : zero+64 : offset(0), bigendian;
299     prio : zero+32 : offset(256), bigendian;
300     static_prio : zero+32 : offset(288), bigendian;
301     normal_prio : zero+32 : offset(320), bigendian;
302     tasks'next : zero+64 : offset(2880), bigendian;
303     tasks'prev : zero+64 : offset(2944), bigendian;
304     mm : zero+64 : offset(3264), bigendian;
305     active_mm : zero+64 : offset(3328), bigendian;
306     comm : 128 : offset(6912), string } -> { state = state;
307     prio = prio;
308     static_prio = static_prio;
309     normal_prio = normal_prio;
310     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 360L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
311     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 368L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
312     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
313     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
314     comm = comm }
315   | { _ } -> raise (ParseError ("task_struct", "parser_16", "failed to match kernel structure"));;
316 let parser_17 bits = bitmatch bits with
317   | { state : zero+32 : offset(0), bigendian;
318     prio : zero+32 : offset(160), bigendian;
319     static_prio : zero+32 : offset(192), bigendian;
320     normal_prio : zero+32 : offset(224), bigendian;
321     tasks'next : zero+32 : offset(3136), bigendian;
322     tasks'prev : zero+32 : offset(3168), bigendian;
323     mm : zero+32 : offset(3200), bigendian;
324     active_mm : zero+32 : offset(3232), bigendian;
325     comm : 128 : offset(5576), string } -> { state = state;
326     prio = prio;
327     static_prio = static_prio;
328     normal_prio = normal_prio;
329     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 392L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
330     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 396L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
331     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
332     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
333     comm = comm }
334   | { _ } -> raise (ParseError ("task_struct", "parser_17", "failed to match kernel structure"));;
335 let parser_18 bits = bitmatch bits with
336   | { state : zero+64 : offset(0), bigendian;
337     prio : zero+32 : offset(224), bigendian;
338     static_prio : zero+32 : offset(256), bigendian;
339     normal_prio : zero+32 : offset(288), bigendian;
340     tasks'next : zero+64 : offset(3648), bigendian;
341     tasks'prev : zero+64 : offset(3712), bigendian;
342     mm : zero+64 : offset(3776), bigendian;
343     active_mm : zero+64 : offset(3840), bigendian;
344     comm : 128 : offset(7752), string } -> { state = state;
345     prio = prio;
346     static_prio = static_prio;
347     normal_prio = normal_prio;
348     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 456L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
349     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 464L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
350     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
351     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
352     comm = comm }
353   | { _ } -> raise (ParseError ("task_struct", "parser_18", "failed to match kernel structure"));;
354 let parser_19 bits = bitmatch bits with
355   | { state : zero+64 : offset(0), littleendian;
356     prio : zero+32 : offset(320), littleendian;
357     static_prio : zero+32 : offset(352), littleendian;
358     normal_prio : zero+32 : offset(384), littleendian;
359     tasks'next : zero+64 : offset(1728), littleendian;
360     tasks'prev : zero+64 : offset(1792), littleendian;
361     mm : zero+64 : offset(1856), littleendian;
362     active_mm : zero+64 : offset(1920), littleendian;
363     comm : 128 : offset(5568), string } -> { state = state;
364     prio = prio;
365     static_prio = static_prio;
366     normal_prio = normal_prio;
367     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 216L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
368     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 224L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
369     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
370     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
371     comm = comm }
372   | { _ } -> raise (ParseError ("task_struct", "parser_19", "failed to match kernel structure"));;
373 let parser_20 bits = bitmatch bits with
374   | { state : zero+32 : offset(0), littleendian;
375     prio : zero+32 : offset(160), littleendian;
376     static_prio : zero+32 : offset(192), littleendian;
377     normal_prio : zero+32 : offset(224), littleendian;
378     tasks'next : zero+32 : offset(3232), littleendian;
379     tasks'prev : zero+32 : offset(3264), littleendian;
380     mm : zero+32 : offset(3296), littleendian;
381     active_mm : zero+32 : offset(3328), littleendian;
382     comm : 128 : offset(5928), string } -> { state = state;
383     prio = prio;
384     static_prio = static_prio;
385     normal_prio = normal_prio;
386     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 404L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
387     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 408L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
388     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
389     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
390     comm = comm }
391   | { _ } -> raise (ParseError ("task_struct", "parser_20", "failed to match kernel structure"));;
392 let parser_21 bits = bitmatch bits with
393   | { state : zero+64 : offset(0), littleendian;
394     prio : zero+32 : offset(256), littleendian;
395     static_prio : zero+32 : offset(288), littleendian;
396     normal_prio : zero+32 : offset(320), littleendian;
397     tasks'next : zero+64 : offset(1408), littleendian;
398     tasks'prev : zero+64 : offset(1472), littleendian;
399     mm : zero+64 : offset(1536), littleendian;
400     active_mm : zero+64 : offset(1600), littleendian;
401     comm : 128 : offset(5184), string } -> { state = state;
402     prio = prio;
403     static_prio = static_prio;
404     normal_prio = normal_prio;
405     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 176L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
406     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 184L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
407     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
408     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
409     comm = comm }
410   | { _ } -> raise (ParseError ("task_struct", "parser_21", "failed to match kernel structure"));;
411 let parser_22 bits = bitmatch bits with
412   | { state : zero+64 : offset(0), bigendian;
413     prio : zero+32 : offset(256), bigendian;
414     static_prio : zero+32 : offset(288), bigendian;
415     normal_prio : zero+32 : offset(320), bigendian;
416     tasks'next : zero+64 : offset(1472), bigendian;
417     tasks'prev : zero+64 : offset(1536), bigendian;
418     mm : zero+64 : offset(1600), bigendian;
419     active_mm : zero+64 : offset(1664), bigendian;
420     comm : 128 : offset(5184), string } -> { state = state;
421     prio = prio;
422     static_prio = static_prio;
423     normal_prio = normal_prio;
424     tasks'next = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'next 184L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
425     tasks'prev = (Virt_mem_mmap.unsafe_typed_addr_of_addr (Int64.sub tasks'prev 192L) : [ `task_struct ] Virt_mem_mmap.typed_addr);
426     mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
427     active_mm = (Virt_mem_mmap.unsafe_typed_addr_of_addr active_mm : [ `mm_struct ] Virt_mem_mmap.typed_addr);
428     comm = comm }
429   | { _ } -> raise (ParseError ("task_struct", "parser_22", "failed to match kernel structure"));;
430 module StringMap = Map.Make(String);;
431 let map = StringMap.empty;;
432 let v = (parser_1, 2704);;
433 let map = StringMap.add "2.6.21-1.3128.fc7.i586" v map;;
434 let v = (parser_2, 1756);;
435 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.ppc" v map;;
436 let v = (parser_1, 2704);;
437 let map = StringMap.add "2.6.21-1.3128.fc7.i686" v map;;
438 let v = (parser_1, 2704);;
439 let map = StringMap.add "2.6.21-1.3132.fc7.i686" v map;;
440 let v = (parser_3, 1780);;
441 let map = StringMap.add "2.6.21-1.3236.fc8.ppc" v map;;
442 let v = (parser_1, 1376);;
443 let map = StringMap.add "2.6.21-1.3228.fc7.i586" v map;;
444 let v = (parser_4, 1856);;
445 let map = StringMap.add "2.6.18-1.2798.fc6.x86_64" v map;;
446 let v = (parser_5, 3948);;
447 let map = StringMap.add "2.6.21-1.3236.fc8.x86_64" v map;;
448 let v = (parser_6, 2072);;
449 let map = StringMap.add "2.6.21-1.3228.fc7.ppc64" v map;;
450 let v = (parser_7, 1832);;
451 let map = StringMap.add "2.6.21-1.3228.fc7.x86_64" v map;;
452 let v = (parser_8, 3932);;
453 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.x86_64" v map;;
454 let v = (parser_6, 2132);;
455 let map = StringMap.add "2.6.21-1.3144.fc7.ppc64" v map;;
456 let v = (parser_9, 2292);;
457 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.ppc64" v map;;
458 let v = (parser_10, 2880);;
459 let map = StringMap.add "2.6.21-1.3236.fc8.i686" v map;;
460 let v = (parser_6, 2132);;
461 let map = StringMap.add "2.6.21-1.3132.fc7.ppc64" v map;;
462 let v = (parser_1, 1376);;
463 let map = StringMap.add "2.6.21-1.3228.fc7.i686" v map;;
464 let v = (parser_11, 4684);;
465 let map = StringMap.add "2.6.24-9.fc9.x86_64" v map;;
466 let v = (parser_9, 2292);;
467 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.ppc64" v map;;
468 let v = (parser_6, 2132);;
469 let map = StringMap.add "2.6.21-1.3132.fc7.ppc64" v map;;
470 let v = (parser_1, 1384);;
471 let map = StringMap.add "2.6.18-1.2798.fc6.i586" v map;;
472 let v = (parser_12, 1620);;
473 let map = StringMap.add "2.6.21-1.3132.fc7.ppc" v map;;
474 let v = (parser_1, 1384);;
475 let map = StringMap.add "2.6.18-1.2798.fc6.i686" v map;;
476 let v = (parser_13, 2496);;
477 let map = StringMap.add "2.6.25.11-97.fc9.x86_64" v map;;
478 let v = (parser_1, 1368);;
479 let map = StringMap.add "2.6.18-1.2798.fc6.i686" v map;;
480 let v = (parser_14, 3540);;
481 let map = StringMap.add "2.6.24-9.fc9.i686" v map;;
482 let v = (parser_15, 2856);;
483 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.i686" v map;;
484 let v = (parser_16, 2308);;
485 let map = StringMap.add "2.6.21-1.3236.fc8.ppc64" v map;;
486 let v = (parser_12, 1628);;
487 let map = StringMap.add "2.6.21-1.3209.fc8.ppc" v map;;
488 let v = (parser_16, 2308);;
489 let map = StringMap.add "2.6.21-1.3236.fc8.ppc64" v map;;
490 let v = (parser_6, 2072);;
491 let map = StringMap.add "2.6.21-1.3228.fc7.ppc64" v map;;
492 let v = (parser_6, 2132);;
493 let map = StringMap.add "2.6.21-1.3128.fc7.ppc64" v map;;
494 let v = (parser_1, 2712);;
495 let map = StringMap.add "2.6.21-1.3209.fc8.i686" v map;;
496 let v = (parser_7, 3772);;
497 let map = StringMap.add "2.6.21-1.3132.fc7.x86_64" v map;;
498 let v = (parser_7, 3772);;
499 let map = StringMap.add "2.6.21-1.3228.fc7.x86_64" v map;;
500 let v = (parser_17, 1948);;
501 let map = StringMap.add "2.6.24-9.fc9.ppc" v map;;
502 let v = (parser_12, 1576);;
503 let map = StringMap.add "2.6.18-1.2798.fc6.ppc" v map;;
504 let v = (parser_12, 1620);;
505 let map = StringMap.add "2.6.21-1.3128.fc7.ppc" v map;;
506 let v = (parser_1, 2712);;
507 let map = StringMap.add "2.6.21-1.3209.fc8.i686" v map;;
508 let v = (parser_7, 3772);;
509 let map = StringMap.add "2.6.20-1.2933.fc6.x86_64" v map;;
510 let v = (parser_12, 1620);;
511 let map = StringMap.add "2.6.21-1.3144.fc7.ppc" v map;;
512 let v = (parser_6, 2132);;
513 let map = StringMap.add "2.6.21-1.3144.fc7.ppc64" v map;;
514 let v = (parser_18, 2492);;
515 let map = StringMap.add "2.6.24-9.fc9.ppc64" v map;;
516 let v = (parser_12, 1604);;
517 let map = StringMap.add "2.6.21-1.3128.fc7.ppc" v map;;
518 let v = (parser_19, 1928);;
519 let map = StringMap.add "2.6.18-1.2798.fc6.x86_64" v map;;
520 let v = (parser_12, 1604);;
521 let map = StringMap.add "2.6.21-1.3132.fc7.ppc" v map;;
522 let v = (parser_12, 1584);;
523 let map = StringMap.add "2.6.21-1.3228.fc7.ppc" v map;;
524 let v = (parser_18, 2492);;
525 let map = StringMap.add "2.6.24-9.fc9.ppc64" v map;;
526 let v = (parser_6, 2104);;
527 let map = StringMap.add "2.6.18-1.2798.fc6.ppc64" v map;;
528 let v = (parser_7, 3780);;
529 let map = StringMap.add "2.6.21-1.3128.fc7.x86_64" v map;;
530 let v = (parser_1, 1400);;
531 let map = StringMap.add "2.6.20-1.2933.fc6.i686" v map;;
532 let v = (parser_7, 3772);;
533 let map = StringMap.add "2.6.21-1.3144.fc7.x86_64" v map;;
534 let v = (parser_6, 2112);;
535 let map = StringMap.add "2.6.20-1.2933.fc6.ppc64" v map;;
536 let v = (parser_2, 1772);;
537 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.ppc" v map;;
538 let v = (parser_12, 1612);;
539 let map = StringMap.add "2.6.21-1.3209.fc8.ppc" v map;;
540 let v = (parser_7, 1920);;
541 let map = StringMap.add "2.6.20-1.2933.fc6.x86_64" v map;;
542 let v = (parser_1, 2704);;
543 let map = StringMap.add "2.6.21-1.3132.fc7.i586" v map;;
544 let v = (parser_1, 2704);;
545 let map = StringMap.add "2.6.21-1.3144.fc7.i586" v map;;
546 let v = (parser_7, 1880);;
547 let map = StringMap.add "2.6.21-1.3228.fc7.x86_64" v map;;
548 let v = (parser_6, 2088);;
549 let map = StringMap.add "2.6.18-1.2798.fc6.ppc64iseries" v map;;
550 let v = (parser_12, 1592);;
551 let map = StringMap.add "2.6.20-1.2933.fc6.ppc" v map;;
552 let v = (parser_1, 2704);;
553 let map = StringMap.add "2.6.21-1.3144.fc7.i686" v map;;
554 let v = (parser_1, 1376);;
555 let map = StringMap.add "2.6.21-1.3228.fc7.i686" v map;;
556 let v = (parser_1, 2712);;
557 let map = StringMap.add "2.6.21-1.3209.fc8.i586" v map;;
558 let v = (parser_6, 2088);;
559 let map = StringMap.add "2.6.18-1.2798.fc6.ppc64iseries" v map;;
560 let v = (parser_1, 2704);;
561 let map = StringMap.add "2.6.21-1.3144.fc7.i686" v map;;
562 let v = (parser_7, 1880);;
563 let map = StringMap.add "2.6.20-1.2933.fc6.x86_64" v map;;
564 let v = (parser_7, 1920);;
565 let map = StringMap.add "2.6.20-1.2933.fc6.x86_64" v map;;
566 let v = (parser_19, 1928);;
567 let map = StringMap.add "2.6.18-1.2798.fc6.x86_64" v map;;
568 let v = (parser_7, 3780);;
569 let map = StringMap.add "2.6.21-1.3144.fc7.x86_64" v map;;
570 let v = (parser_12, 1608);;
571 let map = StringMap.add "2.6.20-1.2933.fc6.ppc" v map;;
572 let v = (parser_14, 3540);;
573 let map = StringMap.add "2.6.24-9.fc9.i686" v map;;
574 let v = (parser_1, 2704);;
575 let map = StringMap.add "2.6.20-1.2933.fc6.i686" v map;;
576 let v = (parser_20, 1832);;
577 let map = StringMap.add "2.6.25.11-97.fc9.i686" v map;;
578 let v = (parser_1, 2704);;
579 let map = StringMap.add "2.6.21-1.3228.fc7.i686" v map;;
580 let v = (parser_1, 2704);;
581 let map = StringMap.add "2.6.21-1.3228.fc7.i686" v map;;
582 let v = (parser_1, 2704);;
583 let map = StringMap.add "2.6.21-1.3128.fc7.i686" v map;;
584 let v = (parser_12, 1604);;
585 let map = StringMap.add "2.6.21-1.3144.fc7.ppc" v map;;
586 let v = (parser_1, 1400);;
587 let map = StringMap.add "2.6.20-1.2933.fc6.i686" v map;;
588 let v = (parser_21, 3756);;
589 let map = StringMap.add "2.6.21-1.3209.fc8.x86_64" v map;;
590 let v = (parser_1, 1400);;
591 let map = StringMap.add "2.6.20-1.2933.fc6.i586" v map;;
592 let v = (parser_7, 3780);;
593 let map = StringMap.add "2.6.21-1.3132.fc7.x86_64" v map;;
594 let v = (parser_1, 1400);;
595 let map = StringMap.add "2.6.20-1.2933.fc6.i686" v map;;
596 let v = (parser_6, 2104);;
597 let map = StringMap.add "2.6.18-1.2798.fc6.ppc64" v map;;
598 let v = (parser_1, 1384);;
599 let map = StringMap.add "2.6.18-1.2798.fc6.i686" v map;;
600 let v = (parser_12, 1560);;
601 let map = StringMap.add "2.6.21-1.3228.fc7.ppc" v map;;
602 let v = (parser_10, 2880);;
603 let map = StringMap.add "2.6.21-1.3236.fc8.i686" v map;;
604 let v = (parser_3, 1796);;
605 let map = StringMap.add "2.6.21-1.3236.fc8.ppc" v map;;
606 let v = (parser_1, 1384);;
607 let map = StringMap.add "2.6.20-1.2933.fc6.i686" v map;;
608 let v = (parser_14, 3540);;
609 let map = StringMap.add "2.6.24-9.fc9.i586" v map;;
610 let v = (parser_7, 3772);;
611 let map = StringMap.add "2.6.21-1.3128.fc7.x86_64" v map;;
612 let v = (parser_6, 2112);;
613 let map = StringMap.add "2.6.20-1.2933.fc6.ppc64" v map;;
614 let v = (parser_17, 1936);;
615 let map = StringMap.add "2.6.24-9.fc9.ppc" v map;;
616 let v = (parser_6, 2132);;
617 let map = StringMap.add "2.6.21-1.3128.fc7.ppc64" v map;;
618 let v = (parser_22, 2116);;
619 let map = StringMap.add "2.6.21-1.3209.fc8.ppc64" v map;;
620 let v = (parser_12, 1592);;
621 let map = StringMap.add "2.6.18-1.2798.fc6.ppc" v map;;
622 let v = (parser_15, 2856);;
623 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.i686" v map;;
624 let v = (parser_1, 2704);;
625 let map = StringMap.add "2.6.20-1.2933.fc6.i686" v map;;
626 let v = (parser_22, 2116);;
627 let map = StringMap.add "2.6.21-1.3209.fc8.ppc64" v map;;
628 type kernel_version = string;;
629 let known version = StringMap.mem version map;;
630 let size version = let (_, size) = StringMap.find version map in size;;
631 let of_bits version bits =
632   let (parsefn, _) = StringMap.find version map in parsefn bits;;
633 let get version mem addr =
634   let (parsefn, size) = StringMap.find version map in
635   let addr = Virt_mem_mmap.unsafe_addr_of_typed_addr addr in
636   let bytes = Virt_mem_mmap.get_bytes mem addr size in
637   let bits = Bitstring.bitstring_of_string bytes in parsefn bits;;