ocaml/bytecomp/emitcode.mli

60 lines
2.5 KiB
OCaml

(***********************************************************************)
(* *)
(* Caml Special Light *)
(* *)
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
(* *)
(* Copyright 1995 Institut National de Recherche en Informatique et *)
(* Automatique. Distributed only by permission. *)
(* *)
(***********************************************************************)
(* $Id$ *)
(* Generation of bytecode for .cmo files *)
open Lambda
open Instruct
(* Relocation information *)
type reloc_info =
Reloc_literal of structured_constant (* structured constant *)
| Reloc_getglobal of Ident.t (* reference to a global *)
| Reloc_setglobal of Ident.t (* definition of a global *)
| Reloc_primitive of string (* C primitive number *)
(* Descriptor for compilation units *)
type compilation_unit =
{ cu_name: string; (* Name of compilation unit *)
mutable cu_pos: int; (* Absolute position in file *)
cu_codesize: int; (* Size of code block *)
cu_reloc: (reloc_info * int) list; (* Relocation information *)
cu_interface: Digest.t; (* CRC of interface implemented *)
cu_imports: (string * Digest.t) list; (* Names and CRC of intfs imported *)
cu_primitives: string list } (* Primitives declared inside *)
(* Format of a .cmo file:
Obj.magic number (Config.cmo_magic_number)
absolute offset of compilation unit descriptor
block of relocatable bytecode
compilation unit descriptor *)
val to_file: out_channel -> string -> Digest.t -> instruction list -> unit
(* Arguments:
channel on output file
name of compilation unit implemented
CRC of interface implemented
list of instructions to emit *)
val to_memory: instruction list -> instruction list ->
string * int * (reloc_info * int) list
(* Arguments:
initialization code (terminated by STOP)
function code
Results:
block of relocatable bytecode
size of this block
relocation information *)