Cross-references in list_head fields working.
[virt-mem.git] / lib / kernel.ml
index 1a2e91b..8a7b132 100644 (file)
@@ -83,9 +83,19 @@ type inet6_ifaddr_shape_fields_46 =
 type inet6_ifaddr_content_fields_47 =
   { inet6_ifaddr_content_fields_47_prefix_len : int64
   };;
+module StringMap = Map.Make(String);;
+let offset_of_net_device_dev_list'next =
+  let map =
+    StringMap.add "2.6.27-0.226.rc1.git5.fc10.ppc" 48
+      (StringMap.add "2.6.26.1-9.fc9.ppc64" 72
+         (StringMap.add "2.6.25.14-69.fc8.x86_64" 72
+            (StringMap.add "2.6.24-0.167.rc8.git4.fc9.ppc64" 72
+               (StringMap.add "2.6.22-0.23.rc7.git6.fc8.ppc" 48 StringMap.
+                  empty))))
+  in fun kernel_version -> StringMap.find kernel_version map;;
 let match_err = "failed to match kernel structure";;
 let zero = 0;;
-let task_struct_parser_4 bits = 
+let task_struct_parser_4 kernel_version bits = 
   bitmatch bits with
   | { state : zero+32 : offset(0), littleendian;
       prio : zero+32 : offset(192), littleendian;
@@ -110,7 +120,7 @@ let task_struct_parser_4 bits =
       { task_struct_shape = shape; task_struct_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_4", match_err));;
-let task_struct_parser_5 bits = 
+let task_struct_parser_5 kernel_version bits = 
   bitmatch bits with
   | { state : zero+64 : offset(0), bigendian;
       prio : zero+32 : offset(320), bigendian;
@@ -135,7 +145,7 @@ let task_struct_parser_5 bits =
       { task_struct_shape = shape; task_struct_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_5", match_err));;
-let task_struct_parser_6 bits = 
+let task_struct_parser_6 kernel_version bits = 
   bitmatch bits with
   | { state : zero+64 : offset(0), littleendian;
       prio : zero+32 : offset(320), littleendian;
@@ -160,7 +170,7 @@ let task_struct_parser_6 bits =
       { task_struct_shape = shape; task_struct_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_6", match_err));;
-let task_struct_parser_7 bits = 
+let task_struct_parser_7 kernel_version bits = 
   bitmatch bits with
   | { state : zero+32 : offset(0), bigendian;
       prio : zero+32 : offset(160), bigendian;
@@ -185,7 +195,7 @@ let task_struct_parser_7 bits =
       { task_struct_shape = shape; task_struct_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_7", match_err));;
-let task_struct_parser_8 bits = 
+let task_struct_parser_8 kernel_version bits = 
   bitmatch bits with
   | { state : zero+64 : offset(0), bigendian;
       prio : zero+32 : offset(224), bigendian;
@@ -210,7 +220,7 @@ let task_struct_parser_8 bits =
       { task_struct_shape = shape; task_struct_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_8", match_err));;
-let task_struct_parser_9 bits = 
+let task_struct_parser_9 kernel_version bits = 
   bitmatch bits with
   | { state : zero+64 : offset(0), littleendian;
       prio : zero+32 : offset(224), littleendian;
@@ -229,7 +239,7 @@ let task_struct_parser_9 bits =
       { task_struct_shape = shape; task_struct_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_9", match_err));;
-let task_struct_parser_10 bits = 
+let task_struct_parser_10 kernel_version bits = 
   bitmatch bits with
   | { state : zero+64 : offset(0), bigendian;
       prio : zero+32 : offset(256), bigendian;
@@ -248,7 +258,7 @@ let task_struct_parser_10 bits =
       { task_struct_shape = shape; task_struct_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_10", match_err));;
-let task_struct_parser_11 bits = 
+let task_struct_parser_11 kernel_version bits = 
   bitmatch bits with
   | { state : zero+32 : offset(0), bigendian;
       prio : zero+32 : offset(192), bigendian;
@@ -267,7 +277,7 @@ let task_struct_parser_11 bits =
       { task_struct_shape = shape; task_struct_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_11", match_err));;
-let net_device_parser_15 bits = 
+let net_device_parser_15 kernel_version bits = 
   bitmatch bits with
   | { name : 128 : offset(0), string;
       next : zero+32 : offset(384), littleendian;
@@ -289,7 +299,7 @@ let net_device_parser_15 bits =
       { net_device_shape = shape; net_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_15", match_err));;
-let net_device_parser_16 bits = 
+let net_device_parser_16 kernel_version bits = 
   bitmatch bits with
   | { name : 128 : offset(0), string;
       next : zero+64 : offset(576), bigendian;
@@ -311,7 +321,7 @@ let net_device_parser_16 bits =
       { net_device_shape = shape; net_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_16", match_err));;
-let net_device_parser_17 bits = 
+let net_device_parser_17 kernel_version bits = 
   bitmatch bits with
   | { name : 128 : offset(0), string;
       next : zero+64 : offset(576), littleendian;
@@ -333,7 +343,7 @@ let net_device_parser_17 bits =
       { net_device_shape = shape; net_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_17", match_err));;
-let net_device_parser_18 bits = 
+let net_device_parser_18 kernel_version bits = 
   bitmatch bits with
   | { name : 128 : offset(0), string;
       dev_list'next : zero+32 : offset(384), bigendian;
@@ -358,7 +368,7 @@ let net_device_parser_18 bits =
       { net_device_shape = shape; net_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_18", match_err));;
-let net_device_parser_19 bits = 
+let net_device_parser_19 kernel_version bits = 
   bitmatch bits with
   | { name : 128 : offset(0), string;
       dev_list'next : zero+64 : offset(576), bigendian;
@@ -383,7 +393,7 @@ let net_device_parser_19 bits =
       { net_device_shape = shape; net_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_19", match_err));;
-let net_device_parser_20 bits = 
+let net_device_parser_20 kernel_version bits = 
   bitmatch bits with
   | { name : 128 : offset(0), string;
       dev_list'next : zero+64 : offset(576), littleendian;
@@ -408,7 +418,7 @@ let net_device_parser_20 bits =
       { net_device_shape = shape; net_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_20", match_err));;
-let net_device_parser_21 bits = 
+let net_device_parser_21 kernel_version bits = 
   bitmatch bits with
   | { name : 128 : offset(0), string;
       dev_list'next : zero+32 : offset(384), bigendian;
@@ -433,59 +443,91 @@ let net_device_parser_21 bits =
       { net_device_shape = shape; net_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_21", match_err));;
-let net_parser_24 bits = 
+let net_parser_24 kernel_version bits = 
   bitmatch bits with
   | { dev_base_head'next : zero+64 : offset(704), bigendian;
       dev_base_head'prev : zero+64 : offset(768), bigendian } ->
       let shape =
-      { net_shape_fields_22_dev_base_head'next = Int64.sub dev_base_head'next 666L;
-        net_shape_fields_22_dev_base_head'prev = Int64.sub dev_base_head'prev 666L } in
+      { net_shape_fields_22_dev_base_head'next = (
+                      let offset = offset_of_net_device_dev_list'next kernel_version in
+                      let offset = Int64.of_int offset in
+                      Int64.sub dev_base_head'next offset
+                    );
+        net_shape_fields_22_dev_base_head'prev = (
+                      let offset = offset_of_net_device_dev_list'next kernel_version in
+                      let offset = Int64.of_int offset in
+                      Int64.sub dev_base_head'prev offset
+                    ) } in
       let content =
       { net_shape_fields_22_dev_base_head'next = dev_base_head'next;
         net_shape_fields_22_dev_base_head'prev = dev_base_head'prev } in
       { net_shape = shape; net_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net", "net_parser_24", match_err));;
-let net_parser_25 bits = 
+let net_parser_25 kernel_version bits = 
   bitmatch bits with
   | { dev_base_head'next : zero+64 : offset(768), littleendian;
       dev_base_head'prev : zero+64 : offset(832), littleendian } ->
       let shape =
-      { net_shape_fields_22_dev_base_head'next = Int64.sub dev_base_head'next 666L;
-        net_shape_fields_22_dev_base_head'prev = Int64.sub dev_base_head'prev 666L } in
+      { net_shape_fields_22_dev_base_head'next = (
+                      let offset = offset_of_net_device_dev_list'next kernel_version in
+                      let offset = Int64.of_int offset in
+                      Int64.sub dev_base_head'next offset
+                    );
+        net_shape_fields_22_dev_base_head'prev = (
+                      let offset = offset_of_net_device_dev_list'next kernel_version in
+                      let offset = Int64.of_int offset in
+                      Int64.sub dev_base_head'prev offset
+                    ) } in
       let content =
       { net_shape_fields_22_dev_base_head'next = dev_base_head'next;
         net_shape_fields_22_dev_base_head'prev = dev_base_head'prev } in
       { net_shape = shape; net_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net", "net_parser_25", match_err));;
-let net_parser_26 bits = 
+let net_parser_26 kernel_version bits = 
   bitmatch bits with
   | { dev_base_head'next : zero+64 : offset(768), bigendian;
       dev_base_head'prev : zero+64 : offset(832), bigendian } ->
       let shape =
-      { net_shape_fields_22_dev_base_head'next = Int64.sub dev_base_head'next 666L;
-        net_shape_fields_22_dev_base_head'prev = Int64.sub dev_base_head'prev 666L } in
+      { net_shape_fields_22_dev_base_head'next = (
+                      let offset = offset_of_net_device_dev_list'next kernel_version in
+                      let offset = Int64.of_int offset in
+                      Int64.sub dev_base_head'next offset
+                    );
+        net_shape_fields_22_dev_base_head'prev = (
+                      let offset = offset_of_net_device_dev_list'next kernel_version in
+                      let offset = Int64.of_int offset in
+                      Int64.sub dev_base_head'prev offset
+                    ) } in
       let content =
       { net_shape_fields_22_dev_base_head'next = dev_base_head'next;
         net_shape_fields_22_dev_base_head'prev = dev_base_head'prev } in
       { net_shape = shape; net_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net", "net_parser_26", match_err));;
-let net_parser_27 bits = 
+let net_parser_27 kernel_version bits = 
   bitmatch bits with
   | { dev_base_head'next : zero+32 : offset(448), bigendian;
       dev_base_head'prev : zero+32 : offset(480), bigendian } ->
       let shape =
-      { net_shape_fields_22_dev_base_head'next = Int64.sub dev_base_head'next 666L;
-        net_shape_fields_22_dev_base_head'prev = Int64.sub dev_base_head'prev 666L } in
+      { net_shape_fields_22_dev_base_head'next = (
+                      let offset = offset_of_net_device_dev_list'next kernel_version in
+                      let offset = Int64.of_int offset in
+                      Int64.sub dev_base_head'next offset
+                    );
+        net_shape_fields_22_dev_base_head'prev = (
+                      let offset = offset_of_net_device_dev_list'next kernel_version in
+                      let offset = Int64.of_int offset in
+                      Int64.sub dev_base_head'prev offset
+                    ) } in
       let content =
       { net_shape_fields_22_dev_base_head'next = dev_base_head'next;
         net_shape_fields_22_dev_base_head'prev = dev_base_head'prev } in
       { net_shape = shape; net_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("net", "net_parser_27", match_err));;
-let in_device_parser_30 bits = 
+let in_device_parser_30 kernel_version bits = 
   bitmatch bits with
   | { ifa_list : zero+32 : offset(96), littleendian } ->
       let shape =
@@ -495,7 +537,7 @@ let in_device_parser_30 bits =
       { in_device_shape = shape; in_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_30", match_err));;
-let in_device_parser_33 bits = 
+let in_device_parser_33 kernel_version bits = 
   bitmatch bits with
   | { ifa_list : zero+32 : offset(96), bigendian } ->
       let shape =
@@ -505,7 +547,7 @@ let in_device_parser_33 bits =
       { in_device_shape = shape; in_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_33", match_err));;
-let in_device_parser_32 bits = 
+let in_device_parser_32 kernel_version bits = 
   bitmatch bits with
   | { ifa_list : zero+64 : offset(128), littleendian } ->
       let shape =
@@ -515,7 +557,7 @@ let in_device_parser_32 bits =
       { in_device_shape = shape; in_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_32", match_err));;
-let in_device_parser_31 bits = 
+let in_device_parser_31 kernel_version bits = 
   bitmatch bits with
   | { ifa_list : zero+64 : offset(128), bigendian } ->
       let shape =
@@ -525,7 +567,7 @@ let in_device_parser_31 bits =
       { in_device_shape = shape; in_device_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_31", match_err));;
-let inet6_dev_parser_36 bits = 
+let inet6_dev_parser_36 kernel_version bits = 
   bitmatch bits with
   | { addr_list : zero+32 : offset(32), littleendian } ->
       let shape =
@@ -535,7 +577,7 @@ let inet6_dev_parser_36 bits =
       { inet6_dev_shape = shape; inet6_dev_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_36", match_err));;
-let inet6_dev_parser_39 bits = 
+let inet6_dev_parser_39 kernel_version bits = 
   bitmatch bits with
   | { addr_list : zero+32 : offset(32), bigendian } ->
       let shape =
@@ -545,7 +587,7 @@ let inet6_dev_parser_39 bits =
       { inet6_dev_shape = shape; inet6_dev_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_39", match_err));;
-let inet6_dev_parser_38 bits = 
+let inet6_dev_parser_38 kernel_version bits = 
   bitmatch bits with
   | { addr_list : zero+64 : offset(64), littleendian } ->
       let shape =
@@ -555,7 +597,7 @@ let inet6_dev_parser_38 bits =
       { inet6_dev_shape = shape; inet6_dev_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_38", match_err));;
-let inet6_dev_parser_37 bits = 
+let inet6_dev_parser_37 kernel_version bits = 
   bitmatch bits with
   | { addr_list : zero+64 : offset(64), bigendian } ->
       let shape =
@@ -565,7 +607,7 @@ let inet6_dev_parser_37 bits =
       { inet6_dev_shape = shape; inet6_dev_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_37", match_err));;
-let in_ifaddr_parser_42 bits = 
+let in_ifaddr_parser_42 kernel_version bits = 
   bitmatch bits with
   | { ifa_next : zero+32 : offset(0), littleendian;
       ifa_local : zero+32 : offset(128), littleendian;
@@ -579,7 +621,7 @@ let in_ifaddr_parser_42 bits =
       { in_ifaddr_shape = shape; in_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_42", match_err));;
-let in_ifaddr_parser_45 bits = 
+let in_ifaddr_parser_45 kernel_version bits = 
   bitmatch bits with
   | { ifa_next : zero+32 : offset(0), bigendian;
       ifa_local : zero+32 : offset(128), bigendian;
@@ -593,7 +635,7 @@ let in_ifaddr_parser_45 bits =
       { in_ifaddr_shape = shape; in_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_45", match_err));;
-let in_ifaddr_parser_43 bits = 
+let in_ifaddr_parser_43 kernel_version bits = 
   bitmatch bits with
   | { ifa_next : zero+64 : offset(0), bigendian;
       ifa_local : zero+32 : offset(256), bigendian;
@@ -607,7 +649,7 @@ let in_ifaddr_parser_43 bits =
       { in_ifaddr_shape = shape; in_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_43", match_err));;
-let in_ifaddr_parser_44 bits = 
+let in_ifaddr_parser_44 kernel_version bits = 
   bitmatch bits with
   | { ifa_next : zero+64 : offset(0), littleendian;
       ifa_local : zero+32 : offset(256), littleendian;
@@ -621,7 +663,7 @@ let in_ifaddr_parser_44 bits =
       { in_ifaddr_shape = shape; in_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_44", match_err));;
-let inet6_ifaddr_parser_48 bits = 
+let inet6_ifaddr_parser_48 kernel_version bits = 
   bitmatch bits with
   | { prefix_len : zero+32 : offset(128), littleendian;
       lst_next : zero+32 : offset(1024), littleendian } ->
@@ -632,7 +674,7 @@ let inet6_ifaddr_parser_48 bits =
       { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_48", match_err));;
-let inet6_ifaddr_parser_50 bits = 
+let inet6_ifaddr_parser_50 kernel_version bits = 
   bitmatch bits with
   | { prefix_len : zero+32 : offset(128), littleendian;
       lst_next : zero+64 : offset(1856), littleendian } ->
@@ -643,7 +685,7 @@ let inet6_ifaddr_parser_50 bits =
       { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_50", match_err));;
-let inet6_ifaddr_parser_49 bits = 
+let inet6_ifaddr_parser_49 kernel_version bits = 
   bitmatch bits with
   | { prefix_len : zero+32 : offset(128), bigendian;
       lst_next : zero+64 : offset(1472), bigendian } ->
@@ -654,7 +696,7 @@ let inet6_ifaddr_parser_49 bits =
       { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_49", match_err));;
-let inet6_ifaddr_parser_51 bits = 
+let inet6_ifaddr_parser_51 kernel_version bits = 
   bitmatch bits with
   | { prefix_len : zero+32 : offset(128), littleendian;
       lst_next : zero+64 : offset(1472), littleendian } ->
@@ -665,7 +707,7 @@ let inet6_ifaddr_parser_51 bits =
       { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_51", match_err));;
-let inet6_ifaddr_parser_52 bits = 
+let inet6_ifaddr_parser_52 kernel_version bits = 
   bitmatch bits with
   | { prefix_len : zero+32 : offset(128), bigendian;
       lst_next : zero+32 : offset(928), bigendian } ->
@@ -676,7 +718,7 @@ let inet6_ifaddr_parser_52 bits =
       { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_52", match_err));;
-let inet6_ifaddr_parser_53 bits = 
+let inet6_ifaddr_parser_53 kernel_version bits = 
   bitmatch bits with
   | { prefix_len : zero+32 : offset(128), littleendian;
       lst_next : zero+64 : offset(1280), littleendian } ->
@@ -687,7 +729,7 @@ let inet6_ifaddr_parser_53 bits =
       { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
   | { _ } ->
       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_53", match_err));;
-let inet6_ifaddr_parser_54 bits = 
+let inet6_ifaddr_parser_54 kernel_version bits = 
   bitmatch bits with
   | { prefix_len : zero+32 : offset(128), bigendian;
       lst_next : zero+64 : offset(1280), bigendian } ->