diff options
| author | Robert Norton | 2018-06-26 11:31:20 +0100 |
|---|---|---|
| committer | Robert Norton | 2018-06-26 11:34:36 +0100 |
| commit | 2e529d7f5261749d0a1463283020f56265ad2e9a (patch) | |
| tree | a531d721b941c0951bed1b2e7decd2367038aba1 /src | |
| parent | 090d2b38c09f12fdbb677b94b94ac7d86bb8c789 (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.ml | 13 |
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) |
