summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Norton2018-06-26 11:31:20 +0100
committerRobert Norton2018-06-26 11:34:36 +0100
commit2e529d7f5261749d0a1463283020f56265ad2e9a (patch)
treea531d721b941c0951bed1b2e7decd2367038aba1 /src
parent090d2b38c09f12fdbb677b94b94ac7d86bb8c789 (diff)
In elf_loader don't attempt to convert paddr to int64 because on MIPS it is quite likely to exceed representable range of signed 64-bit integer (e.g. address starting 0x9...). Also make clear which values are displayed in hex vs. decimal.
Diffstat (limited to 'src')
-rw-r--r--src/elf_loader.ml13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/elf_loader.ml b/src/elf_loader.ml
index 7a0bf7c5..88fcfddb 100644
--- a/src/elf_loader.ml
+++ b/src/elf_loader.ml
@@ -129,11 +129,14 @@ let load_segment ?writer:(writer=write_sail_lib) seg =
let size = seg.elf64_segment_size in
let memsz = seg.elf64_segment_memsz in
prerr_endline "\nLoading Segment";
- prerr_endline ("Segment offset: " ^ (Printf.sprintf "%Lx" (Big_int.to_int64 offset)));
- prerr_endline ("Segment base address: " ^ (Printf.sprintf "%Lx" (Big_int.to_int64 base)));
- prerr_endline ("Segment physical address: " ^ (Printf.sprintf "%Lx" (Big_int.to_int64 paddr)));
- prerr_endline ("Segment size: " ^ (Printf.sprintf "%Lx" (Big_int.to_int64 size)));
- prerr_endline ("Segment memsz: " ^ (Printf.sprintf "%Lx" (Big_int.to_int64 memsz)));
+ prerr_endline ("Segment offset: " ^ (Printf.sprintf "0x%Lx" (Big_int.to_int64 offset)));
+ prerr_endline ("Segment base address: " ^ (Big_int.to_string base));
+ (* NB don't attempt to convert paddr to int64 because on MIPS it is quite likely to exceed signed
+ 64-bit range e.g. addresses beginning 0x9.... Really need to_uint64 or to_string_hex but lem
+ doesn't have them. *)
+ prerr_endline ("Segment physical address: " ^ (Printf.sprintf "0x%Lx" (Big_int.to_int64 paddr)));
+ prerr_endline ("Segment size: " ^ (Printf.sprintf "0x%Lx" (Big_int.to_int64 size)));
+ prerr_endline ("Segment memsz: " ^ (Printf.sprintf "0x%Lx" (Big_int.to_int64 memsz)));
print_segment seg;
List.iteri (writer paddr) (List.rev_map int_of_char (List.rev (Byte_sequence.char_list_of_byte_sequence bs)));
write_mem_zeros (Big_int.add paddr size) (Big_int.sub memsz size)