summaryrefslogtreecommitdiff
path: root/src/elf_loader.ml
diff options
context:
space:
mode:
authorJon French2018-10-15 14:35:18 +0100
committerJon French2018-10-15 14:35:18 +0100
commit73697a01478a61e7fa5385f881731c9111dcd9a4 (patch)
treed3dbcf1fb9f75577156bfbddd6c64fb6741fe0a8 /src/elf_loader.ml
parente79b9f7d8de3866b939ca9d16f11e5a9e25047ff (diff)
Interpreter: add new command :bin <addr> <file> to load raw binary into memory
Diffstat (limited to 'src/elf_loader.ml')
-rw-r--r--src/elf_loader.ml18
1 files changed, 18 insertions, 0 deletions
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