diff options
| author | Prashanth Mundkur | 2019-02-27 19:03:27 -0800 |
|---|---|---|
| committer | Prashanth Mundkur | 2019-02-27 19:03:32 -0800 |
| commit | 9fd08144367f0b3a08bd5fd3e973ede900a9c72d (patch) | |
| tree | 911b71e2282d9982e42b610d564ab0cc0df04cbb /src/elf_loader.ml | |
| parent | b118c78ba85320ef2d6632bc2a6ee4f0907e5d23 (diff) | |
Provide more access to the ELF symbols in the OCaml ELF-loader.
Diffstat (limited to 'src/elf_loader.ml')
| -rw-r--r-- | src/elf_loader.ml | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/elf_loader.ml b/src/elf_loader.ml index 2f63087f..d6016c8b 100644 --- a/src/elf_loader.ml +++ b/src/elf_loader.ml @@ -47,9 +47,10 @@ let opt_elf_threads = ref 1 let opt_elf_entry = ref Big_int.zero let opt_elf_tohost = ref Big_int.zero -(* the type of elf last loaded *) +(* the type of elf last loaded, and its symbol map *) type elf_class = ELF_Class_64 | ELF_Class_32 let opt_elf_class = ref ELF_Class_64 (* default *) +let opt_symbol_map = ref ([] : Elf_file.global_symbol_init_info) type word8 = int @@ -144,6 +145,7 @@ let load_segment ?writer:(writer=write_sail_lib) bs paddr base offset size memsz let load_elf ?writer:(writer=write_sail_lib) name = let segments, e_entry, symbol_map = read name in opt_elf_entry := e_entry; + opt_symbol_map := symbol_map; (if List.mem_assoc "tohost" symbol_map then let (_, _, tohost_addr, _, _) = List.assoc "tohost" symbol_map in opt_elf_tohost := tohost_addr); @@ -181,3 +183,12 @@ let elf_entry () = !opt_elf_entry let elf_tohost () = !opt_elf_tohost (* Used to check last loaded elf class. *) let elf_class () = !opt_elf_class +(* Lookup the address for a symbol *) +let elf_symbol symbol = + if List.mem_assoc symbol !opt_symbol_map then + let (_, _, addr, _, _) = List.assoc symbol !opt_symbol_map in + Some addr + else None +(* Get all symbols *) +let elf_symbols () = + !opt_symbol_map |
