summaryrefslogtreecommitdiff
path: root/src/elf_model/sail_interface.lem
diff options
context:
space:
mode:
authorKathy Gray2015-04-17 15:03:51 +0100
committerKathy Gray2015-04-17 15:03:51 +0100
commit565d5da276d42fb7af810e5b6a84dc668eaf589e (patch)
tree0accf50a1ef688891d0741cdea7925acdef5647f /src/elf_model/sail_interface.lem
parent0bcc529f60400a555f45e0f3630c6c943cffb17e (diff)
remove old elf sources
Diffstat (limited to 'src/elf_model/sail_interface.lem')
-rw-r--r--src/elf_model/sail_interface.lem120
1 files changed, 0 insertions, 120 deletions
diff --git a/src/elf_model/sail_interface.lem b/src/elf_model/sail_interface.lem
deleted file mode 100644
index 6c474fa7..00000000
--- a/src/elf_model/sail_interface.lem
+++ /dev/null
@@ -1,120 +0,0 @@
-open import Basic_classes
-open import Function
-open import Maybe
-open import String
-open import Tuple
-
-open import Assert_extra
-
-open import Bitstring
-open import Error
-open import Missing_pervasives
-open import Show
-
-open import Elf_header
-open import Elf_executable_file3
-open import Elf_types
-
-type elf_class
- = ELF_Class_32
- | ELF_Class_64
-
-val populate : string -> executable_process_image * elf_class
-let populate fname =
- let res =
- (* Acquire the data from the file... *)
- Bitstring.acquire fname >>= fun bs0 ->
- (* Read the magic number and the flags in the header... *)
- repeatM' Elf_header.ei_nident bs0 (read_unsigned_char Endianness.default_endianness) >>= fun (ident, bs) ->
- match List.index ident 4 with
- | Nothing -> fail "populate: ELF ident transcription error"
- | Just c ->
- (* Calculate whether we are dealing with a 32- or 64-bit file based on
- * what we have read...
- *)
- if nat_of_unsigned_char c = Elf_header.elf_class_32 then
- Elf_executable_file3.read_elf32_executable_file3 bs0 >>= fun ef5 ->
- Elf_executable_file3.get_elf32_executable_image ef5 >>= fun (chunks, entry) ->
- return ((chunks, entry), ELF_Class_32)
- else if nat_of_unsigned_char c = Elf_header.elf_class_64 then
- Elf_executable_file3.read_elf64_executable_file3 bs0 >>= fun ef5 ->
- Elf_executable_file3.get_elf64_executable_image ef5 >>= fun (chunks, entry) ->
- return ((chunks, entry), ELF_Class_64)
- else
- fail "populate: ELF class unrecognised"
- end
- in
- match res with
- | Fail err -> failwith err
- | Success chunks -> chunks
- end
-
-val obtain_symbol_to_address_mapping : string -> list (string * nat)
-let obtain_symbol_to_address_mapping fname =
- let res =
- (* Acquire the data from the file... *)
- Bitstring.acquire fname >>= fun bs0 ->
- (* Read the magic number and the flags in the header... *)
- repeatM' Elf_header.ei_nident bs0 (read_unsigned_char Endianness.default_endianness) >>= fun (ident, bs) ->
- match List.index ident 4 with
- | Nothing -> fail "populate: ELF ident transcription error"
- | Just c ->
- (* Calculate whether we are dealing with a 32- or 64-bit file based on
- * what we have read...
- *)
- if nat_of_unsigned_char c = Elf_header.elf_class_32 then
- Elf_executable_file3.read_elf32_executable_file3 bs0 >>= fun f1 ->
- Elf_executable_file3.get_elf32_symbol_table f1 >>= fun symtab ->
- Elf_executable_file3.get_elf32_symbol_string_table f1 >>= fun strtab ->
- Elf_symbol_table.get_elf32_symbol_image_address symtab strtab >>= fun strs ->
- return strs
- else if nat_of_unsigned_char c = Elf_header.elf_class_64 then
- Elf_executable_file3.read_elf64_executable_file3 bs0 >>= fun f1 ->
- Elf_executable_file3.get_elf64_symbol_table f1 >>= fun symtab ->
- Elf_executable_file3.get_elf64_symbol_string_table f1 >>= fun strtab ->
- Elf_symbol_table.get_elf64_symbol_image_address symtab strtab >>= fun strs ->
- return strs
- else
- fail "obtain_symbol_to_address_mapping: ELF class unrecognised"
- end
- in
- match res with
- | Fail err -> failwith err
- | Success strs -> strs
- end
-
-val populate_and_obtain_symbol_to_address_mapping : string -> ((executable_process_image * elf_class) * list (string * nat))
-let populate_and_obtain_symbol_to_address_mapping fname =
- let res =
- (* Acquire the data from the file... *)
- Bitstring.acquire fname >>= fun bs0 ->
- (* Read the magic number and the flags in the header... *)
- repeatM' Elf_header.ei_nident bs0 (read_unsigned_char Endianness.default_endianness) >>= fun (ident, bs) ->
- match List.index ident 4 with
- | Nothing -> fail "populate: ELF ident transcription error"
- | Just c ->
- (* Calculate whether we are dealing with a 32- or 64-bit file based on
- * what we have read...
- *)
- if nat_of_unsigned_char c = Elf_header.elf_class_32 then
- Elf_executable_file3.read_elf32_executable_file3 bs0 >>= fun f1 ->
- Elf_executable_file3.get_elf32_symbol_table f1 >>= fun symtab ->
- Elf_executable_file3.get_elf32_symbol_string_table f1 >>= fun strtab ->
- Elf_symbol_table.get_elf32_symbol_image_address symtab strtab >>= fun strs ->
- Elf_executable_file3.get_elf32_executable_image f1 >>= fun (chunks, entry) ->
- return (((chunks, entry), ELF_Class_32), strs)
- else if nat_of_unsigned_char c = Elf_header.elf_class_64 then
- Elf_executable_file3.read_elf64_executable_file3 bs0 >>= fun f1 ->
- Elf_executable_file3.get_elf64_symbol_table f1 >>= fun symtab ->
- Elf_executable_file3.get_elf64_symbol_string_table f1 >>= fun strtab ->
- Elf_symbol_table.get_elf64_symbol_image_address symtab strtab >>= fun strs ->
- Elf_executable_file3.get_elf64_executable_image f1 >>= fun (chunks, entry) ->
- return (((chunks, entry), ELF_Class_64), strs)
- else
- fail "populate_and_obtain_symbol_to_address_mapping: ELF class unrecognised"
- end
- in
- match res with
- | Fail err -> failwith err
- | Success res -> res
- end \ No newline at end of file