From 73697a01478a61e7fa5385f881731c9111dcd9a4 Mon Sep 17 00:00:00 2001 From: Jon French Date: Mon, 15 Oct 2018 14:35:18 +0100 Subject: Interpreter: add new command :bin to load raw binary into memory --- src/elf_loader.ml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/elf_loader.ml') diff --git a/src/elf_loader.ml b/src/elf_loader.ml index 88fcfddb..c6fb0589 100644 --- a/src/elf_loader.ml +++ b/src/elf_loader.ml @@ -149,6 +149,24 @@ let load_elf ?writer:(writer=write_sail_lib) name = opt_elf_tohost := tohost_addr); List.iter (load_segment ~writer:writer) segments +let load_binary ?writer:(writer=write_sail_lib) addr name = + let f = open_in_bin name in + let buf = Buffer.create 1024 in + try + while true do + let char = input_char f in + Buffer.add_char buf char; + done; + assert false + with + | End_of_file -> begin + Bytes.iteri (fun i ch -> writer addr i (int_of_char ch)) (Buffer.to_bytes buf); + close_in f + end + | exc -> + close_in f; + raise exc + (* The sail model can access this by externing a unit -> int function as Elf_loader.elf_entry. *) let elf_entry () = !opt_elf_entry -- cgit v1.2.3