ocaml/asmcomp/cmx_format.mli

73 lines
3.4 KiB
OCaml

(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *)
(* Pierre Chambart, OCamlPro *)
(* Mark Shinwell and Leo White, Jane Street Europe *)
(* *)
(* Copyright 2010 Institut National de Recherche en Informatique et *)
(* en Automatique *)
(* Copyright 2013--2016 OCamlPro SAS *)
(* Copyright 2014--2016 Jane Street Group LLC *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file ../LICENSE. *)
(* *)
(**************************************************************************)
(* Format of .cmx, .cmxa and .cmxs files *)
(* Each .o file has a matching .cmx file that provides the following infos
on the compilation unit:
- list of other units imported, with MD5s of their .cmx files
- approximation of the structure implemented
(includes descriptions of known functions: arity and direct entry
points)
- list of currying functions and application functions needed
The .cmx file contains these infos (as an externed record) plus a MD5
of these infos *)
type export_info =
| Clambda of Clambda.value_approximation
| Flambda of Export_info.t
type unit_infos =
{ mutable ui_name: string; (* Name of unit implemented *)
mutable ui_symbol: string; (* Prefix for symbols *)
mutable ui_defines: string list; (* Unit and sub-units implemented *)
mutable ui_imports_cmi:
(string * Digest.t option) list; (* Interfaces imported *)
mutable ui_imports_cmx:(string * Digest.t option) list; (* Infos imported *)
mutable ui_curry_fun: int list; (* Currying functions needed *)
mutable ui_apply_fun: int list; (* Apply functions needed *)
mutable ui_send_fun: int list; (* Send functions needed *)
mutable ui_export_info: export_info;
mutable ui_force_link: bool } (* Always linked *)
(* Each .a library has a matching .cmxa file that provides the following
infos on the library: *)
type library_infos =
{ lib_units: (unit_infos * Digest.t) list; (* List of unit infos w/ MD5s *)
lib_ccobjs: string list; (* C object files needed *)
lib_ccopts: string list } (* Extra opts to C compiler *)
(* Each .cmxs dynamically-loaded plugin contains a symbol
"caml_plugin_header" containing the following info
(as an externed record) *)
type dynunit = {
dynu_name: string;
dynu_crc: Digest.t;
dynu_imports_cmi: (string * Digest.t option) list;
dynu_imports_cmx: (string * Digest.t option) list;
dynu_defines: string list;
}
type dynheader = {
dynu_magic: string;
dynu_units: dynunit list;
}