summaryrefslogtreecommitdiff
path: root/tools/primreq.ml
diff options
context:
space:
mode:
Diffstat (limited to 'tools/primreq.ml')
-rw-r--r--tools/primreq.ml90
1 files changed, 0 insertions, 90 deletions
diff --git a/tools/primreq.ml b/tools/primreq.ml
deleted file mode 100644
index cfd6e9af00..0000000000
--- a/tools/primreq.ml
+++ /dev/null
@@ -1,90 +0,0 @@
-(***********************************************************************)
-(* *)
-(* Objective Caml *)
-(* *)
-(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
-(* *)
-(* Copyright 1999 Institut National de Recherche en Informatique et *)
-(* en Automatique. All rights reserved. This file is distributed *)
-(* under the terms of the Q Public License version 1.0. *)
-(* *)
-(***********************************************************************)
-
-(* $Id$ *)
-
-(* Determine the set of C primitives required by the given .cmo and .cma
- files *)
-
-open Config
-open Emitcode
-
-module StringSet = Set.Make(struct type t = string let compare = compare end)
-
-let defined = ref true
-let used = ref false
-let exclude_file = ref ""
-
-let primitives = ref StringSet.empty
-
-let scan_reloc = function
- (Reloc_primitive s, _) -> primitives := StringSet.add s !primitives
- | _ -> ()
-
-let scan_prim s =
- primitives := StringSet.add s !primitives
-
-let scan_info cu =
- if !used then List.iter scan_reloc cu.cu_reloc;
- if !defined then List.iter scan_prim cu.cu_primitives
-
-let scan_obj filename =
- let ic = open_in_bin filename in
- let buffer = String.create (String.length cmo_magic_number) in
- really_input ic buffer 0 (String.length cmo_magic_number);
- if buffer = cmo_magic_number then begin
- let cu_pos = input_binary_int ic in
- seek_in ic cu_pos;
- let cu = (input_value ic : compilation_unit) in
- close_in ic;
- scan_info cu
- end else
- if buffer = cma_magic_number then begin
- let toc_pos = input_binary_int ic in
- seek_in ic toc_pos;
- let toc = (input_value ic : library) in
- close_in ic;
- List.iter scan_info toc.lib_units
- end else begin
- prerr_endline "Not an object file"; exit 2
- end
-
-let exclude filename =
- let ic = open_in filename in
- try
- while true do
- let s = input_line ic in
- primitives := StringSet.remove s !primitives
- done
- with End_of_file -> close_in ic
- | x -> close_in ic; raise x
-
-let main() =
- Arg.parse
- ["-used", Arg.Unit(fun () -> used := true; defined := false),
- "show primitives referenced in the object files";
- "-defined", Arg.Unit(fun () -> defined := true; used := false),
- "show primitives defined in the object files (default)";
- "-all", Arg.Unit(fun () -> defined := true; used := true),
- "show primitives defined or referenced in the object files";
- "-exclude", Arg.String(fun s -> exclude_file := s),
- "<file> don't print the primitives mentioned in <file>"]
- scan_obj
- "Usage: primreq [options] <.cmo and .cma files>\nOptions are:";
- if String.length !exclude_file > 0 then exclude !exclude_file;
- StringSet.iter
- (fun s ->
- if s.[0] <> '%' then begin print_string s; print_newline() end)
- !primitives;
- exit 0
-
-let _ = Printexc.catch main (); exit 0