summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRobert Norton2018-05-17 17:26:16 +0100
committerRobert Norton2018-05-17 17:29:37 +0100
commit2c5bbd6f7fbfdf32bafab50e36a1bebcd7cd8dab (patch)
treed1da5c12d566d80a230520ca5bbbc88710e27fa5 /lib
parent1867ec89a4493ca6ce92c8926885c4090b6d3d5d (diff)
changes to for testing FreeBSD boot on MIPS: allowing loading raw file in ocaml main so that we can have simboot + kernel. Support UART output only.
Diffstat (limited to 'lib')
-rw-r--r--lib/main.ml26
1 files changed, 24 insertions, 2 deletions
diff --git a/lib/main.ml b/lib/main.ml
index 5733425f..1e9943a7 100644
--- a/lib/main.ml
+++ b/lib/main.ml
@@ -52,8 +52,19 @@
open Elf_loader;;
let opt_file_arguments = ref ([] : string list)
-
-let options = Arg.align []
+let opt_raw_fname = ref ""
+let opt_raw_addr = ref Nat_big_num.zero
+let options = Arg.align [
+ ( "-raw",
+ Arg.String (fun s ->
+ let l = String.split_on_char '@' s in
+ match l with
+ | [fname;addr] -> begin
+ opt_raw_fname := fname;
+ opt_raw_addr := Nat_big_num.of_string addr;
+ end
+ | _ -> raise (Arg.Bad (s ^ " not of form <filename>@:<addr>"))),
+ "<file@0xADDR> load a raw binary in memory at given address.")]
let usage_msg = "Sail OCaml RTS options:"
@@ -67,4 +78,15 @@ let () =
| f :: _ -> load_elf f
| _ -> ()
end;
+ if !opt_raw_fname != "" then
+ begin
+ let ic = open_in_bin !opt_raw_fname in
+ try
+ while true do
+ let b = input_byte ic in
+ Sail_lib.wram !opt_raw_addr b;
+ opt_raw_addr := Nat_big_num.succ !opt_raw_addr;
+ done
+ with End_of_file -> ();
+ end;
(* ocaml_backend.ml will append from here *)