diff options
| author | Robert Norton | 2018-05-17 17:26:16 +0100 |
|---|---|---|
| committer | Robert Norton | 2018-05-17 17:29:37 +0100 |
| commit | 2c5bbd6f7fbfdf32bafab50e36a1bebcd7cd8dab (patch) | |
| tree | d1da5c12d566d80a230520ca5bbbc88710e27fa5 /lib/main.ml | |
| parent | 1867ec89a4493ca6ce92c8926885c4090b6d3d5d (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/main.ml')
| -rw-r--r-- | lib/main.ml | 26 |
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 *) |
