1 (** Code generation. *)
2 (* Memory info command for virtual domains.
3 (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 This module is concerned with actually generating code
23 for types, parsers, etc.
25 We generate two output files, [kernel.mli] is the interface
26 to the kernel structures, and [kernel.ml] is the implementation.
30 Camlp4.PreCast.Syntax.Ast.str_item * Camlp4.PreCast.Syntax.Ast.sig_item
32 (** {2 Generate types}
34 Our internal types, representing kernel structures.
39 * Struct_classify.shape_field_struct list
40 * Struct_classify.content_field_struct list) list ->
42 (** [generate_types structures] generates the internal
43 types used to store variants of each structure, including:
44 - shape field structures
45 - content field structures
48 (** {2 Generate offset functions}
50 [offset_of_<struct>_<field> kernel_version] functions.
52 These actually play a very minor role: We just use them when
53 adjusting [list_head] pointers which cross between structure
54 types, so we only generate functions for those right now.
57 val generate_offsets :
58 (string * ((Pahole_parser.info * Pahole_parser.structure) list
59 * (string * Pahole_parser.f_type) list)) list ->
61 (** [generate_offsets] generates the offset functions. *)
63 (** {2 Generate parsers}
65 Functions which parse the different structures from bitstrings
66 into our internal types.
69 val generate_parsers : (string * Struct_classify.parser_ list) list ->
70 code * (string, string) Hashtbl.t
71 (** [generate_parsers] generates the parser functions.
73 We cannot generate the complete code here because we
74 don't want camlp4 parsing this file to substitute bitmatch
75 code yet. So we only generate labels, which get substituted
76 by the contents of the returned hash table in {!output_implem}.
79 (** {2 Output final files} *)
81 val output_interf : output_file:string ->
82 Camlp4.PreCast.Syntax.Ast.sig_item ->
83 Camlp4.PreCast.Syntax.Ast.sig_item ->
84 Camlp4.PreCast.Syntax.Ast.sig_item ->
86 (** Output the interface file. *)
88 val output_implem : output_file:string ->
89 Camlp4.PreCast.Syntax.Ast.str_item ->
90 Camlp4.PreCast.Syntax.Ast.str_item ->
91 Camlp4.PreCast.Syntax.Ast.str_item ->
92 (string, string) Hashtbl.t ->
94 (** Output the implementation file. *)