diff options
| author | Jon French | 2018-06-11 15:25:02 +0100 |
|---|---|---|
| committer | Jon French | 2018-06-11 15:25:02 +0100 |
| commit | 826e94548a86a88d8fefeb1edef177c02bf5d68d (patch) | |
| tree | fc9a5484440e030cc479101c5cab345c1c77468e /lib/main.ml | |
| parent | 5717bb3d0cef5932cb2b33bc66b3b2f0c0552164 (diff) | |
| parent | 4336409f923c10a8c5e4acc91fa7e6ef5551a88f (diff) | |
Merge branch 'sail2' into mappings
(involved some manual tinkering with gitignore, type_check, riscv)
Diffstat (limited to 'lib/main.ml')
| -rw-r--r-- | lib/main.ml | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/lib/main.ml b/lib/main.ml index 5733425f..e9dcb4e0 100644 --- a/lib/main.ml +++ b/lib/main.ml @@ -52,14 +52,37 @@ open Elf_loader;; let opt_file_arguments = ref ([] : string list) - -let options = Arg.align [] +let opt_raw_files = ref ([] : (string * Nat_big_num.num) list) +let options = Arg.align [ + ( "-raw", + Arg.String (fun s -> + let l = Util.split_on_char '@' s in + let (file, addr) = match l with + | [fname;addr] -> (fname, Nat_big_num.of_string addr) + | _ -> raise (Arg.Bad (s ^ " not of form <filename>@<addr>")) in + opt_raw_files := (file, addr) :: !opt_raw_files), + "<file@0xADDR> load a raw binary in memory at given address.")] let usage_msg = "Sail OCaml RTS options:" let () = Arg.parse options (fun s -> opt_file_arguments := !opt_file_arguments @ [s]) usage_msg +let rec load_raw_files = function + | (file, addr) :: files -> begin + let ic = open_in_bin file in + let addr' = ref addr in + try + while true do + let b = input_byte ic in + Sail_lib.wram !addr' b; + addr' := Nat_big_num.succ !addr'; + done + with End_of_file -> (); + load_raw_files files + end + | [] -> () + let () = Random.self_init (); begin @@ -67,4 +90,5 @@ let () = | f :: _ -> load_elf f | _ -> () end; + load_raw_files !opt_raw_files; (* ocaml_backend.ml will append from here *) |
