Structure parsers reintroduced. ** NOT WORKING **
[virt-mem.git] / extract / codegen / struct_classify.ml
index d10d1c4..d959a1f 100644 (file)
@@ -27,7 +27,9 @@ module PP = Pahole_parser
 type f_class = ShapeField | ContentField
 
 let classify_field names = function
-  | (PP.FStructPointer struct_name | PP.FListHeadPointer struct_name)
+  | PP.FListHeadPointer None -> ShapeField
+  | (PP.FStructPointer struct_name
+    | PP.FListHeadPointer (Some (struct_name, _)))
       when List.mem struct_name names -> ShapeField
     (* .. anything else is a content field: *)
   | PP.FStructPointer _
@@ -53,7 +55,7 @@ and parser_ = {
   pa_i : int;
   pa_name : string;
   pa_endian : Bitstring.endian;
-  pa_fields : Pahole_parser.field list;
+  pa_structure : Pahole_parser.structure;
   pa_shape_field_struct : shape_field_struct;
   pa_content_field_struct : content_field_struct;
 }
@@ -158,11 +160,13 @@ let minimize_parsers struct_name kernels sfhash cfhash =
   let h = Hashtbl.create 13 in
   let rh = Hashtbl.create 13 in
 
+  (* Do not change - see Code_generation.re_subst. *)
   let name_of i = sprintf "%s_parser_%d" struct_name i in
 
   List.iter (
     fun ({ PP.kernel_version = version; arch = arch },
-        { PP.struct_fields = fields; struct_name = name_check }) ->
+        ({ PP.struct_fields = fields; struct_name = name_check }
+           as structure)) ->
       assert (struct_name = name_check);
       let endian = endian_of_architecture arch in
       let key = endian, fields in
@@ -176,8 +180,9 @@ let minimize_parsers struct_name kernels sfhash cfhash =
          let cf =
            try Hashtbl.find cfhash version
            with Not_found -> assert false in
-         let pa = { pa_i = i; pa_name = name_of i; pa_fields = fields;
+         let pa = { pa_i = i; pa_name = name_of i;
                     pa_endian = endian;
+                    pa_structure = structure;
                     pa_shape_field_struct = sf;
                     pa_content_field_struct = cf } in
          Hashtbl.add h key pa;