Dynamic version, working.
[virt-mem.git] / extract / codegen / struct_classify.mli
diff --git a/extract/codegen/struct_classify.mli b/extract/codegen/struct_classify.mli
deleted file mode 100644 (file)
index b0cd5da..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-(** Structure classification. *)
-(* Memory info command for virtual domains.
-   (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
-   http://libvirt.org/
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *)
-
-(**
-   {2 How it works}
-
-   There's no getting around it, this is complicated.
-
-   {!Pahole_parser} has parsed in a limited set of structures from
-   each available kernel.  We now aim to take a holistic view of
-   a structure as it changed over time, though different kernel
-   versions and also on different architectures.
-
-   {3 Shape fields and content fields}
-
-   A structure is a list of fields.
-
-   Fields fall into two classifications, as far as we are interested:
-
-   (i) 'Shape' fields define the relationship between different
-   structures.  Shape fields are all pointers to other structures
-   that we care about.   They have type {!Pahole_parser.FStructPointer}
-   and {!Pahole_parser.FListHeadPointer}.
-
-   (ii) 'Content' fields are fields in a structure that contain
-   some data, like ints and strings.  (In the current implementation,
-   it's anything left which isn't a shape field).
-
-   So we can easily take a structure and place its fields into two
-   buckets.  For example, with [task_struct] it might be:
-
-   [task_struct] shape fields:
-   - [tasks'next]  (the linked list of tasks)
-   - [tasks'prev]
-   - [parent]      (points to the parent task)
-
-   [task_struct] content fields:
-   - [pid]  (process ID)
-   - [comm] (task name)
-   - etc. etc.
-
-   {3 Shape fields and iterator functions}
-
-   For each kernel/structure we can build a list of shape fields, but
-   in fact in many kernels they will be the same, so we also
-   performing a {i sharing} operation to minimize the number of
-   variations.
-
-   We also write (by hand) iterator functions.  These iterator
-   functions are matched to the corresponding shape field structure,
-   by setting up some prerequisites that the function needs, then
-   matching on those prerequisites with the available shape
-   field structures.
-
-   {3 Content fields and printing functions}
-
-   The same (minimization & matching) applies to hand-written printing
-   functions over content field structures.
-
-   {3 Generated parsing functions}
-
-   A third form of minimization is required to find kernel
-   structures which happen to be similar - ie. all the fields
-   happen to be in the same place, with the same wordsize and
-   endianness.
-
-   We can then generate a minimal set of parsing functions which
-   map the binary data from the kernel image into shape and
-   content field structures.
-
-   {3 Generated loading code}
-
-   Finally, we generate recursive loading code which recurses over
-   structures into order to load the kernel memory and invoke the
-   correct parsers on it, ensuring that when the program runs, all
-   known kernel structures are recursively reached and loaded in.
-*)
-
-(** {2 Field classification} *)
-
-type f_class = ShapeField | ContentField
-
-val classify_field : string list -> Pahole_parser.f_type -> f_class
-  (** [classify_field names field] classifies a field as either
-      a shape field or a content field.  [names] is a list of
-      all kernel structures that we care about. *)
-
-(** {2 Minimization of shape field structures and content field structures} *)
-
-type shape_field_struct = {
-  sf_i : int;                          (** Unique number. *)
-  sf_name : string;                    (** Structure name in output. *)
-  sf_fields : (string * Pahole_parser.f_type) list; (** Shape fields. *)
-}
-    (** The type of a shape field structure. *)
-
-and content_field_struct = {
-  cf_i : int;                          (** Unique number. *)
-  cf_name : string;                    (** Structure name in output. *)
-  cf_fields : (string * Pahole_parser.f_type) list; (** Content fields. *)
-}
-    (** The type of a content field structure. *)
-
-type sfhash = (string, shape_field_struct) Hashtbl.t
-    (** Hash of kernel version to the shape field structure. *)
-
-val minimize_shape_field_structs :
-  string -> string list ->
-  (Pahole_parser.info * Pahole_parser.structure) list ->
-  shape_field_struct list * sfhash
-    (** [minimize_shape_field_structs struct_name names kernels] returns
-       a minimized list of shape field structures
-       (a hash table of kernel version to {!shape_field_struct}).
-
-       [struct_name] is the name of the structure.
-
-       [names] is the list of interesting kernel structures. *)
-
-type cfhash = (string, content_field_struct) Hashtbl.t
-    (** Hash of kernel version to the content field structure. *)
-
-val minimize_content_field_structs :
-  string -> string list ->
-  (Pahole_parser.info * Pahole_parser.structure) list ->
-  content_field_struct list * cfhash
-    (** [minimize_content_field_structs struct_name names kernels] returns
-       a minimized list of content field structures
-       (a hash table of kernel version to {!content_field_struct}).
-
-       [struct_name] is the name of the structure.
-
-       [names] is the list of interesting kernel structures. *)
-
-(** {2 Minimization of parsers} *)
-
-type parser_ (* parser is a reserved word *) = {
-  pa_i : int;                          (** Unique number. *)
-  pa_name : string;                    (** Parser function name in output. *)
-  (* The input to the parser: *)
-  pa_endian : Bitstring.endian;                (** Default field endianness. *)
-  pa_structure : Pahole_parser.structure; (** Original structure. *)
-  (* The output of the parser: *)
-  pa_shape_field_struct : shape_field_struct;
-  pa_content_field_struct : content_field_struct;
-}
-    (** The type of a parser. *)
-
-type pahash = (string, parser_) Hashtbl.t
-    (** Hash of the kernel version to the parser. *)
-
-val minimize_parsers :
-  string ->
-  (Pahole_parser.info * Pahole_parser.structure) list ->
-  sfhash -> cfhash ->
-  parser_ list * pahash
-    (** [minimize_parsers struct_name kernels sfhash cfhash] returns
-       a minimized list of parsers (a hash table of kernel version
-       to {!parser_}).
-
-       [sfhash] and [cfhash] are the kernel version -> shape/content
-       field struct hashes returned by a previous call to
-       {!minimize_shape_field_structs} and {!minimize_content_field_structs}
-       respectively. *)