diff options
| author | Jon French | 2018-10-15 14:35:18 +0100 |
|---|---|---|
| committer | Jon French | 2018-10-15 14:35:18 +0100 |
| commit | 73697a01478a61e7fa5385f881731c9111dcd9a4 (patch) | |
| tree | d3dbcf1fb9f75577156bfbddd6c64fb6741fe0a8 /src/elf_loader.ml | |
| parent | e79b9f7d8de3866b939ca9d16f11e5a9e25047ff (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.ml | 18 |
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 |
