diff options
Diffstat (limited to 'lib/ocaml_rts/linksem/adaptors/harness_interface.ml')
| -rw-r--r-- | lib/ocaml_rts/linksem/adaptors/harness_interface.ml | 1154 |
1 files changed, 0 insertions, 1154 deletions
diff --git a/lib/ocaml_rts/linksem/adaptors/harness_interface.ml b/lib/ocaml_rts/linksem/adaptors/harness_interface.ml deleted file mode 100644 index 8ce4f6bd..00000000 --- a/lib/ocaml_rts/linksem/adaptors/harness_interface.ml +++ /dev/null @@ -1,1154 +0,0 @@ -(*Generated by Lem from adaptors/harness_interface.lem.*) -open Lem_basic_classes -open Lem_bool -open Lem_function -open Lem_maybe -open Lem_num -open Lem_string - -open Byte_sequence -open Error -open Hex_printing -open Missing_pervasives -open Show - -open Default_printing - -open Endianness -open String_table - -open Elf_dynamic -open Elf_file -open Elf_header -open Elf_program_header_table -open Elf_relocation -open Elf_section_header_table -open Elf_symbol_table -open Elf_types_native_uint - -open Gnu_ext_dynamic -open Gnu_ext_section_header_table -open Gnu_ext_section_to_segment_mapping -open Gnu_ext_symbol_versioning - -(*val concatS' : list string -> string -> string*) -let rec concatS' ss accum:string= - ((match ss with - | [] -> accum - | s::ss -> concatS' ss (accum^s) - )) - -(*val concatS : list string -> string*) -let concatS ss:string= (concatS' ss "") - -(*val harness_string_of_elf32_file_header : elf32_header -> string*) -let harness_string_of_elf32_file_header hdr:string= - (unlines [ - "ELF Header:" - ; (" Magic:" ^ (" " ^ unsafe_hex_string_of_uc_list (hdr.elf32_ident))) - ; (" Class:" ^ (" " ^ string_of_elf_file_class (get_elf32_file_class hdr))) - ; (" Data:" ^ (" " ^ string_of_elf_data_encoding (get_elf32_data_encoding hdr))) - ; (" Version:" ^ (" " ^ string_of_elf_version_number (get_elf32_version_number hdr))) - ; (" OS/ABI:" ^ (" " ^ string_of_elf_osabi_version ((fun y->"Architecture defined")) (get_elf32_osabi hdr))) - ; (" ABI Version:" ^ (" " ^ Nat_big_num.to_string (get_elf32_abi_version hdr))) - ; (" Type:" ^ (" " ^ string_of_elf_file_type default_os_specific_print default_proc_specific_print (Nat_big_num.of_string (Uint32.to_string hdr.elf32_type)))) - ; (" Machine:" ^ (" " ^ string_of_elf_machine_architecture (Nat_big_num.of_string (Uint32.to_string hdr.elf32_machine)))) - ; (" Version:" ^ (" " ^ ("0x" ^ unsafe_hex_string_of_natural( 1) (Nat_big_num.of_string (Uint32.to_string hdr.elf32_version))))) - ; (" Entry point address:" ^ (" " ^ ("0x" ^ unsafe_hex_string_of_natural( 1) (Nat_big_num.of_string (Uint32.to_string hdr.elf32_entry))))) - ; (" Start of program headers:" ^ (" " ^ (Uint32.to_string hdr.elf32_phoff ^ " (bytes into file)"))) - ; (" Start of section headers:" ^ (" " ^ (Uint32.to_string hdr.elf32_shoff ^ " (bytes into file)"))) - ; (" Flags:" ^ (" " ^ ("0x" ^ unsafe_hex_string_of_natural( 1) (Nat_big_num.of_string (Uint32.to_string hdr.elf32_flags))))) - ; (" Size of this header:" ^ (" " ^ (Uint32.to_string hdr.elf32_ehsize ^ " (bytes)"))) - ; (" Size of program headers:" ^ (" " ^ (Uint32.to_string hdr.elf32_phentsize ^ " (bytes)"))) - ; (" Number of program headers:" ^ (" " ^ Uint32.to_string hdr.elf32_phnum)) - ; (" Size of section headers:" ^ (" " ^ (Uint32.to_string hdr.elf32_shentsize ^ " (bytes)"))) - ; (" Number of section headers:" ^ (" " ^ Uint32.to_string hdr.elf32_shnum)) - ; (" Section header string table index:" ^ (" " ^ Uint32.to_string hdr.elf32_shstrndx)) - ]) - -(*val harness_string_of_elf64_file_header : elf64_header -> string*) -let harness_string_of_elf64_file_header hdr:string= - (unlines [ - "ELF Header:" - ; (" Magic:" ^ (" " ^ unsafe_hex_string_of_uc_list (hdr.elf64_ident))) - ; (" Class:" ^ (" " ^ string_of_elf_file_class (get_elf64_file_class hdr))) - ; (" Data:" ^ (" " ^ string_of_elf_data_encoding (get_elf64_data_encoding hdr))) - ; (" Version:" ^ (" " ^ string_of_elf_version_number (get_elf64_version_number hdr))) - ; (" OS/ABI:" ^ (" " ^ string_of_elf_osabi_version ((fun y->"Architecture defined")) (get_elf64_osabi hdr))) - ; (" ABI Version:" ^ (" " ^ Nat_big_num.to_string (get_elf64_abi_version hdr))) - ; (" Type:" ^ (" " ^ string_of_elf_file_type default_os_specific_print default_proc_specific_print (Nat_big_num.of_string (Uint32.to_string hdr.elf64_type)))) - ; (" Machine:" ^ (" " ^ string_of_elf_machine_architecture (Nat_big_num.of_string (Uint32.to_string hdr.elf64_machine)))) - ; (" Version:" ^ (" " ^ ("0x" ^ unsafe_hex_string_of_natural( 1) (Nat_big_num.of_string (Uint32.to_string hdr.elf64_version))))) - ; (" Entry point address:" ^ (" " ^ ("0x" ^ unsafe_hex_string_of_natural( 1) (Ml_bindings.nat_big_num_of_uint64 hdr.elf64_entry)))) - ; (" Start of program headers:" ^ (" " ^ (Uint64.to_string hdr.elf64_phoff ^ " (bytes into file)"))) - ; (" Start of section headers:" ^ (" " ^ (Uint64.to_string hdr.elf64_shoff ^ " (bytes into file)"))) - ; (" Flags:" ^ (" " ^ ("0x" ^ unsafe_hex_string_of_natural( 1) (Nat_big_num.of_string (Uint32.to_string hdr.elf64_flags))))) - ; (" Size of this header:" ^ (" " ^ (Uint32.to_string hdr.elf64_ehsize ^ " (bytes)"))) - ; (" Size of program headers:" ^ (" " ^ (Uint32.to_string hdr.elf64_phentsize ^ " (bytes)"))) - ; (" Number of program headers:" ^ (" " ^ Uint32.to_string hdr.elf64_phnum)) - ; (" Size of section headers:" ^ (" " ^ (Uint32.to_string hdr.elf64_shentsize ^ " (bytes)"))) - ; (" Number of section headers:" ^ (" " ^ Uint32.to_string hdr.elf64_shnum)) - ; (" Section header string table index:" ^ (" " ^ Uint32.to_string hdr.elf64_shstrndx)) - ]) - -(*val harness_string_of_elf32_program_header_table_entry : (natural -> string) -> (natural -> string) -> byte_sequence -> elf32_program_header_table_entry -> string*) -let harness_string_of_elf32_program_header_table_entry os proc bs0 pent:string= - (let typ = (string_of_segment_type os proc (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_type))) in - let typ_s = -(let len = (Nat_num.nat_monus( 15) (String.length typ)) in - if len <= 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int len) " ")) - in - concatS [ - " " - ; typ ; typ_s - ; ("0x" ^ unsafe_hex_string_of_natural( 6) (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_offset))) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 8) (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_vaddr))) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 8) (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_paddr))) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 5) (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_filesz))) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 5) (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_memsz))) - ; " " - ; string_of_elf_segment_permissions (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_flags)) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 1) (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_align))) - ] ^ -(if Nat_big_num.equal (Nat_big_num.of_string (Uint32.to_string pent.elf32_p_type)) elf_pt_interp then - (match Elf_program_header_table.get_elf32_requested_interpreter pent bs0 with - | Fail f -> "\n [Requesting program interpreter: " ^ (f ^ "]") - | Success s -> "\n [Requesting program interpreter: " ^ (s ^ "]") - ) - else - "")) - -(*val harness_string_of_elf64_program_header_table_entry : (natural -> string) -> (natural -> string) -> byte_sequence -> elf64_program_header_table_entry -> string*) -let harness_string_of_elf64_program_header_table_entry os proc bs0 pent:string= - (let typ = (string_of_segment_type os proc (Nat_big_num.of_string (Uint32.to_string pent.elf64_p_type))) in - let typ_s = -(let len = (Nat_num.nat_monus( 15) (String.length typ)) in - if len <= 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int len) " ")) - in - concatS [ - " " - ; typ ; typ_s - ; ("0x" ^ unsafe_hex_string_of_natural( 6) (Nat_big_num.of_string (Uint64.to_string pent.elf64_p_offset))) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 16) (Ml_bindings.nat_big_num_of_uint64 pent.elf64_p_vaddr)) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 16) (Ml_bindings.nat_big_num_of_uint64 pent.elf64_p_paddr)) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 6) (Ml_bindings.nat_big_num_of_uint64 pent.elf64_p_filesz)) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 6) (Ml_bindings.nat_big_num_of_uint64 pent.elf64_p_memsz)) - ; " " - ; string_of_elf_segment_permissions (Nat_big_num.of_string (Uint32.to_string pent.elf64_p_flags)) - ; " " - ; ("0x" ^ unsafe_hex_string_of_natural( 1) (Ml_bindings.nat_big_num_of_uint64 pent.elf64_p_align)) - ] ^ -(if Nat_big_num.equal (Nat_big_num.of_string (Uint32.to_string pent.elf64_p_type)) elf_pt_interp then - (match Elf_program_header_table.get_elf64_requested_interpreter pent bs0 with - | Fail f -> "\n [Requesting program interpreter: " ^ (f ^ "]") - | Success s -> "\n [Requesting program interpreter: " ^ (s ^ "]") - ) - else - "")) - -(*val harness_string_of_efl32_pht : (natural -> string) -> (natural -> string) -> elf32_program_header_table -> byte_sequence -> string*) -let harness_string_of_elf32_pht os proc pht bs0:string= - (" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" ^ - unlines (Lem_list.map (harness_string_of_elf32_program_header_table_entry os proc bs0) pht)) - -(*val harness_string_of_efl64_pht : (natural -> string) -> (natural -> string) -> elf64_program_header_table -> byte_sequence -> string*) -let harness_string_of_elf64_pht os proc pht bs0:string= - (" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" ^ - unlines (Lem_list.map (harness_string_of_elf64_program_header_table_entry os proc bs0) pht)) - -(*val harness_string_of_elf32_segment_section_mappings : elf32_header -> elf32_program_header_table -> elf32_section_header_table -> string_table -> string*) -let harness_string_of_elf32_segment_section_mappings hdr pht sht stbl:string= - (let map1 = -(Lem_list.mapi (fun i -> fun pent -> - let mapping = -((match get_elf32_section_to_segment_mapping hdr sht pent elf32_section_in_segment stbl with - | Fail err -> [("ERR: " ^ err)] - | Success mp -> intercalate " " mp - )) - in - let str = -(let temp = (concatS mapping) in - if temp = "" then - temp - else - temp ^ " ") - in - concatS [ -(" " ^ Ml_bindings.hex_string_of_nat_pad2 i) - ; " " - ; str - ] - ) pht) - in - concatS (intercalate "\n" map1)) - -(*val harness_string_of_elf64_segment_section_mappings : elf64_header -> elf64_program_header_table -> elf64_section_header_table -> string_table -> string*) -let harness_string_of_elf64_segment_section_mappings hdr pht sht stbl:string= - (let map1 = -(Lem_list.mapi (fun i -> fun pent -> - let mapping = -((match get_elf64_section_to_segment_mapping hdr sht pent elf64_section_in_segment stbl with - | Fail err -> [("ERR: " ^ err)] - | Success mp -> intercalate " " mp - )) - in - let str = -(let temp = (concatS mapping) in - if temp = "" then - temp - else - temp ^ " ") - in - concatS [ -(" " ^ Ml_bindings.hex_string_of_nat_pad2 i) - ; " " - ; str - ] - ) pht) - in - concatS (intercalate "\n" map1)) - -(*val harness_string_of_elf32_program_headers : (natural -> string) -> (natural -> string) -> elf32_header -> elf32_program_header_table -> elf32_section_header_table -> string_table -> byte_sequence -> string*) -let harness_string_of_elf32_program_headers os proc hdr pht sht stbl bs0:string= - (let pht_len = (List.length pht) in - if pht_len = 0 then - "\nThere are no program headers in this file." - else - unlines [ - "" - ; ("Elf file type is " ^ string_of_elf_file_type default_os_specific_print default_proc_specific_print (Nat_big_num.of_string (Uint32.to_string hdr.elf32_type))) - ; ("Entry point " ^ ("0x" ^ unsafe_hex_string_of_natural( 1) (Nat_big_num.of_string (Uint32.to_string hdr.elf32_entry)))) - ; ("There are " ^ (Pervasives.string_of_int (List.length pht) ^ (" program headers, starting at offset " ^ Uint32.to_string hdr.elf32_phoff))) - ; "" - ; "Program Headers:" - ; harness_string_of_elf32_pht os proc pht bs0 - ; "" - ; " Section to Segment mapping:" - ; " Segment Sections..." - ; harness_string_of_elf32_segment_section_mappings hdr pht sht stbl - ]) - -(*val harness_string_of_elf64_program_headers : (natural -> string) -> (natural -> string) -> elf64_header -> elf64_program_header_table -> elf64_section_header_table -> string_table -> byte_sequence -> string*) -let harness_string_of_elf64_program_headers os proc hdr pht sht stbl bs0:string= - (let pht_len = (List.length pht) in - if pht_len = 0 then - "\nThere are no program headers in this file." - else - unlines [ - "" - ; ("Elf file type is " ^ string_of_elf_file_type default_os_specific_print default_proc_specific_print (Nat_big_num.of_string (Uint32.to_string hdr.elf64_type))) - ; ("Entry point " ^ ("0x" ^ unsafe_hex_string_of_natural( 1) (Ml_bindings.nat_big_num_of_uint64 hdr.elf64_entry))) - ; ("There are " ^ (Pervasives.string_of_int (List.length pht) ^ (" program headers, starting at offset " ^ Uint64.to_string hdr.elf64_phoff))) - ; "" - ; "Program Headers:" - ; harness_string_of_elf64_pht os proc pht bs0 - ; "" - ; " Section to Segment mapping:" - ; " Segment Sections..." - ; harness_string_of_elf64_segment_section_mappings hdr pht sht stbl - ]) - -(*val harness_sht32_flag_legend : string*) -let harness_sht32_flag_legend:string= - "\nKey to Flags: - W (write), A (alloc), X (execute), M (merge), S (strings) - I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown) - O (extra OS processing required) o (OS specific), p (processor specific)" - -(*val harness_sht64_flag_legend : natural -> string*) -let harness_sht64_flag_legend mach:string= - (if Nat_big_num.equal mach elf_ma_x86_64 || (Nat_big_num.equal - mach elf_ma_l10m || Nat_big_num.equal - mach elf_ma_k10m) then - "\nKey to Flags: - W (write), A (alloc), X (execute), M (merge), S (strings), l (large) - I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown) - O (extra OS processing required) o (OS specific), p (processor specific)" - else - "\nKey to Flags: - W (write), A (alloc), X (execute), M (merge), S (strings) - I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown) - O (extra OS processing required) o (OS specific), p (processor specific)") - -(*val harness_string_of_elf32_sht : (natural -> string) -> (natural -> string) -> (natural -> string) -> elf32_section_header_table -> string_table -> string*) -let harness_string_of_elf32_sht os proc usr sht stbl:string= - (" [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" ^ - unlines (Lem_list.mapi (fun i -> fun sec -> - let is = -(let temp = (Pervasives.string_of_int i) in - if String.length temp = 1 then - " " ^ temp - else - temp) - in - let str = (" [" ^ (is ^ "]")) in - let ((gap : string), name1) = -((match String_table.get_string_at (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_name)) stbl with - | Fail err -> ("", ("ERR " ^ err)) - | Success nm -> - if Nat_big_num.equal (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_type)) sht_null then - let gap = (List.fold_right (^) (Missing_pervasives.replicate0(Nat_big_num.of_int 17) " ") " ") in - (gap, "") - else - let glen = (Nat_big_num.of_int ( Nat_num.nat_monus( 17) (String.length nm))) in - let gap = (List.fold_right (^) (Missing_pervasives.replicate0 glen " ") " ") in - (gap, nm) - )) - in - let str = (str ^ (" " ^ (name1 ^ gap))) in - let typ = (string_of_section_type os proc usr (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_type))) in - let str = (str ^ typ) in - let (gap, addr) = -(let mx = (Nat_big_num.of_int ( Nat_num.nat_monus( 15) (String.length typ))) in - let gap = (List.fold_right (^) (Missing_pervasives.replicate0 mx " ") " ") in - (gap, unsafe_hex_string_of_natural( 8) (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_addr)))) - in - let str = (str ^ (gap ^ addr)) in - let off = (unsafe_hex_string_of_natural( 6) (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_offset))) in - let str = (str ^ (" " ^ off)) in - let size2 = (unsafe_hex_string_of_natural( 6) (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_size))) in - let str = (str ^ (" " ^ size2)) in - let es = (unsafe_hex_string_of_natural( 2) (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_entsize))) in - let str = (str ^ (" " ^ es)) in - let flg = (string_of_section_flags os proc (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_flags))) in - let str = (str ^ (" " ^ flg)) in - let (gap, lnk) = -(let l = (Nat_big_num.to_string (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_link))) in - let gp = (Nat_big_num.of_int ( Nat_num.nat_monus( 2) (String.length l))) in - let gp = (List.fold_right (^) (replicate0 gp " ") " ") in - (gp, l)) - in - let str = (str ^ (gap ^ lnk)) in - let (gap, info) = -(let i = (Nat_big_num.to_string (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_info))) in - let gp = (Nat_big_num.of_int ( Nat_num.nat_monus( 3) (String.length i))) in - let gp = (List.fold_right (^) (replicate0 gp " ") " ") in - (gp, i)) - in - let str = (str ^ (gap ^ info)) in - let (gap, align) = -(let a = (Nat_big_num.to_string (Nat_big_num.of_string (Uint32.to_string sec.elf32_sh_addralign))) in - let gp = (Nat_big_num.of_int ( Nat_num.nat_monus( 2) (String.length a))) in - let gp = (List.fold_right (^) (replicate0 gp " ") " ") in - (gp, a)) - in - let str = (str ^ (gap ^ align)) in - str) sht)) - -(*val harness_string_of_elf64_sht : (natural -> string) -> (natural -> string) -> (natural -> string) -> elf64_section_header_table -> string_table -> string*) -let harness_string_of_elf64_sht os proc usr sht stbl:string= - (" [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" ^ - unlines (Lem_list.mapi (fun i -> fun sec -> - let is = -(let temp = (Pervasives.string_of_int i) in - if String.length temp = 1 then - " " ^ temp - else - temp) - in - let str = (" [" ^ (is ^ "]")) in - let ((gap : string), name1) = -((match String_table.get_string_at (Nat_big_num.of_string (Uint32.to_string sec.elf64_sh_name)) stbl with - | Fail err -> ("", ("ERR " ^ err)) - | Success nm -> - if Nat_big_num.equal (Nat_big_num.of_string (Uint32.to_string sec.elf64_sh_type)) sht_null then - let gap = (List.fold_right (^) (Missing_pervasives.replicate0(Nat_big_num.of_int 17) " ") " ") in - (gap, "") - else - let glen = (Nat_big_num.of_int ( Nat_num.nat_monus( 17) (String.length nm))) in - let gap = (List.fold_right (^) (Missing_pervasives.replicate0 glen " ") " ") in - (gap, nm) - )) - in - let str = (str ^ (" " ^ (name1 ^ gap))) in - let typ = (string_of_section_type os proc usr (Nat_big_num.of_string (Uint32.to_string sec.elf64_sh_type))) in - let str = (str ^ typ) in - let (gap, addr) = -(let mx = (Nat_big_num.of_int ( Nat_num.nat_monus( 15) (String.length typ))) in - let gap = (List.fold_right (^) (Missing_pervasives.replicate0 mx " ") " ") in - (gap, unsafe_hex_string_of_natural( 16) (Ml_bindings.nat_big_num_of_uint64 sec.elf64_sh_addr))) - in - let str = (str ^ (gap ^ addr)) in - let off = (unsafe_hex_string_of_natural( 6) (Nat_big_num.of_string (Uint64.to_string sec.elf64_sh_offset))) in - let str = (str ^ (" " ^ off)) in - let size2 = (unsafe_hex_string_of_natural( 6) (Ml_bindings.nat_big_num_of_uint64 sec.elf64_sh_size)) in - let str = (str ^ (" " ^ size2)) in - let es = (unsafe_hex_string_of_natural( 2) (Ml_bindings.nat_big_num_of_uint64 sec.elf64_sh_entsize)) in - let str = (str ^ (" " ^ es)) in - let flg = (string_of_section_flags os proc (Ml_bindings.nat_big_num_of_uint64 sec.elf64_sh_flags)) in - let str = (str ^ (" " ^ flg)) in - let (gap, lnk) = -(let l = (Nat_big_num.to_string (Nat_big_num.of_string (Uint32.to_string sec.elf64_sh_link))) in - let gp = (Nat_big_num.of_int ( Nat_num.nat_monus( 2) (String.length l))) in - let gp = (List.fold_right (^) (replicate0 gp " ") " ") in - (gp, l)) - in - let str = (str ^ (gap ^ lnk)) in - let (gap, info) = -(let i = (Nat_big_num.to_string (Nat_big_num.of_string (Uint32.to_string sec.elf64_sh_info))) in - let gp = (Nat_big_num.of_int ( Nat_num.nat_monus( 3) (String.length i))) in - let gp = (List.fold_right (^) (replicate0 gp " ") " ") in - (gp, i)) - in - let str = (str ^ (gap ^ info)) in - let (gap, align) = -(let a = (Nat_big_num.to_string (Ml_bindings.nat_big_num_of_uint64 sec.elf64_sh_addralign)) in - let gp = (Nat_big_num.of_int ( Nat_num.nat_monus( 2) (String.length a))) in - let gp = (List.fold_right (^) (replicate0 gp " ") " ") in - (gp, a)) - in - let str = (str ^ (gap ^ align)) in - str) sht)) - - -(*val harness_string_of_elf32_section_headers : (natural -> string) -> (natural -> string) -> (natural -> string) -> elf32_header -> elf32_section_header_table -> string_table -> string*) -let harness_string_of_elf32_section_headers os proc usr hdr sht stbl:string= - (unlines [ -("There are " ^ (Pervasives.string_of_int (List.length sht) ^ (" section headers, starting at offset 0x" ^ (unsafe_hex_string_of_natural( 0) (Nat_big_num.of_string (Uint32.to_string hdr.elf32_shoff)) ^ ":")))) - ; "" - ; "Section Headers:" - ; harness_string_of_elf32_sht os proc usr sht stbl - ] ^ harness_sht32_flag_legend) - -(*val harness_string_of_elf64_section_headers : (natural -> string) -> (natural -> string) -> (natural -> string) -> elf64_header -> elf64_section_header_table -> string_table -> string*) -let harness_string_of_elf64_section_headers os proc usr hdr sht stbl:string= - (unlines [ -("There are " ^ (Pervasives.string_of_int (List.length sht) ^ (" section headers, starting at offset 0x" ^ (unsafe_hex_string_of_natural( 0) (Nat_big_num.of_string (Uint64.to_string hdr.elf64_shoff)) ^ ":")))) - ; "" - ; "Section Headers:" - ; harness_string_of_elf64_sht os proc usr sht stbl - ] ^ harness_sht64_flag_legend (Nat_big_num.of_string (Uint32.to_string hdr.elf64_machine))) - -(*val harness_string_of_elf32_reloc_entry : (natural -> string) -> elf32_section_header_table -> - elf32_symbol_table -> string_table -> string_table -> elf32_relocation -> string*) -let harness_string_of_elf32_reloc_entry os sht symtab stbl sechdr_stbl rel:string= - (let off = (Nat_big_num.of_string (Uint32.to_string rel.elf32_r_offset)) in - let inf = (Nat_big_num.of_string (Uint32.to_string rel.elf32_r_info)) in - let typ = (Missing_pervasives.unsafe_string_take(Nat_big_num.of_int 22) (os (extract_elf32_relocation_r_type rel.elf32_r_info))) in - let typs = -(let len = (Nat_big_num.of_int ( Nat_num.nat_monus( 22) (String.length typ))) in - concatS (replicate0 len " ")) - in - let idx1 = (extract_elf32_relocation_r_sym rel.elf32_r_info) in - (match Lem_list.list_index symtab (Nat_big_num.to_int idx1) with - | None -> "harness_string_of_elf32_reloc_entry: Nothing returned" - | Some sym -> - let (nm, value, symtyp, secthdr) = -((match Lem_list.list_index symtab (Nat_big_num.to_int idx1) with - | None -> (stn_undef,Nat_big_num.of_int 0,Nat_big_num.of_int 0,Nat_big_num.of_int 0) - | Some sym -> (Nat_big_num.of_string (Uint32.to_string sym.elf32_st_name), - Nat_big_num.of_string (Uint32.to_string sym.elf32_st_value), get_elf32_symbol_type sym, - Nat_big_num.of_string (Uint32.to_string sym.elf32_st_shndx)) - )) - in - if Nat_big_num.equal symtyp stt_section then - let vlu = (" " ^ unsafe_hex_string_of_natural( 8) value) in - let nm = -((match Lem_list.list_index sht (Nat_big_num.to_int secthdr) with - | None -> "XXX" - | Some shdr -> - (match String_table.get_string_at (Nat_big_num.of_string (Uint32.to_string shdr.elf32_sh_name)) sechdr_stbl with - | Fail f -> f - | Success n -> n - ) - )) - in - concatS [ - unsafe_hex_string_of_natural( 8) off - ; " " - ; unsafe_hex_string_of_natural( 8) inf - ; " " - ; typ - ; typs - ; vlu - ; " " - ; nm - ] - else if Nat_big_num.equal nm stn_undef then - concatS [ - unsafe_hex_string_of_natural( 8) off - ; " " - ; unsafe_hex_string_of_natural( 8) inf - ; " " - ; typ - ; typs - ] - else - let vlu = (" " ^ unsafe_hex_string_of_natural( 8) (Nat_big_num.of_string (Uint32.to_string sym.elf32_st_value))) in - let nm = -((match String_table.get_string_at nm stbl with - | Fail f -> f - | Success n -> n - )) - in - concatS [ - unsafe_hex_string_of_natural( 8) off - ; " " - ; unsafe_hex_string_of_natural( 8) inf - ; " " - ; typ - ; typs - ; vlu - ; " " - ; nm - ] - )) - -(*val harness_string_of_elf64_reloc_a_entry : (natural -> string) -> elf64_symbol_table -> - elf64_section_header_table -> string_table -> string_table -> elf64_relocation_a -> string*) -let harness_string_of_elf64_reloc_a_entry os symtab sht stbl sechdr_stbl rel:string= - (let off = (Ml_bindings.nat_big_num_of_uint64 rel.elf64_ra_offset) in - let inf = (Ml_bindings.nat_big_num_of_uint64 rel.elf64_ra_info) in - let add = (Nat_big_num.of_int64 rel.elf64_ra_addend) in - let typ = (Missing_pervasives.unsafe_string_take(Nat_big_num.of_int 22) (os (extract_elf64_relocation_r_type rel.elf64_ra_info))) in - let typs = -(let len = (Nat_big_num.of_int ( Nat_num.nat_monus( 22) (String.length typ))) in - concatS (replicate0 len " ")) - in - let idx1 = (extract_elf64_relocation_r_sym rel.elf64_ra_info) in - let (nm, value, symtyp, secthdr) = -((match Lem_list.list_index symtab (Nat_big_num.to_int idx1) with - | None -> (stn_undef,Nat_big_num.of_int 0,Nat_big_num.of_int 0,Nat_big_num.of_int 0) - | Some sym -> (Nat_big_num.of_string (Uint32.to_string sym.elf64_st_name), - Ml_bindings.nat_big_num_of_uint64 sym.elf64_st_value, get_elf64_symbol_type sym, - Nat_big_num.of_string (Uint32.to_string sym.elf64_st_shndx)) - )) - in - if Nat_big_num.equal symtyp stt_section then - let vlu = (" " ^ unsafe_hex_string_of_natural( 16) value) in - let nm = -((match Lem_list.list_index sht (Nat_big_num.to_int secthdr) with - | None -> "XXX" - | Some shdr -> - (match String_table.get_string_at (Nat_big_num.of_string (Uint32.to_string shdr.elf64_sh_name)) sechdr_stbl with - | Fail f -> f - | Success n -> n - ) - )) - in - concatS [ - unsafe_hex_string_of_natural( 16) off - ; " " - ; unsafe_hex_string_of_natural( 16) inf - ; " " - ; typ - ; typs - ; vlu - ; " " - ; nm - ; " + " - ; Ml_bindings.hex_string_of_big_int_no_padding add - ] - else if Nat_big_num.equal nm stn_undef then - concatS [ - unsafe_hex_string_of_natural( 16) off - ; " " - ; unsafe_hex_string_of_natural( 16) inf - ; " " - ; typ - ; typs - ; " " - ; Ml_bindings.hex_string_of_big_int_no_padding add - ] - else - let vlu = (" " ^ unsafe_hex_string_of_natural( 16) value) in - let nm = -((match String_table.get_string_at nm stbl with - | Fail f -> f - | Success n -> n - )) - in - concatS [ - unsafe_hex_string_of_natural( 16) off - ; " " - ; unsafe_hex_string_of_natural( 16) inf - ; " " - ; typ - ; typs - ; vlu - ; " " - ; nm - ; " + " - ; Ml_bindings.hex_string_of_big_int_no_padding add - ]) - -(*val harness_string_of_elf32_relocs' : endianness -> (natural -> string) -> elf32_file -> elf32_section_header_table -> - elf32_section_header_table -> string_table -> string_table -> byte_sequence -> string*) -let harness_string_of_elf32_relocs' endian os f1 sht_relocs sht shdr stbl bs0:string= - (let rels = -(mapM (fun ent -> - let off = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_offset)) in - let siz = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_size)) in - let lnk = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_link)) in - Byte_sequence.offset_and_cut off siz bs0 >>= (fun rels -> - Elf_relocation.read_elf32_relocation_section' endian rels >>= (fun sect -> - Elf_file.get_elf32_symbol_table_by_index f1 lnk >>= (fun symtab -> - return (sect, ent, symtab)))) - ) sht_relocs - >>= - mapM (fun (rels, ent, symtab) -> - let nm = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_name)) in - let off = (unsafe_hex_string_of_natural( 0) (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_offset))) in - let len = (Pervasives.string_of_int (List.length rels)) in - String_table.get_string_at nm shdr >>= (fun nm -> - let hdr = ("Relocation section '" ^ (nm ^ ("' at offset 0x" ^ (off ^ (" contains " ^ (len ^ " entries:\n")))))) in - let ttl = " Offset Info Type Sym. Value Symbol's Name\n" in - let body = (concatS (intercalate "\n" (Lem_list.map (harness_string_of_elf32_reloc_entry os sht symtab stbl shdr) rels))) in - return (hdr ^ (ttl ^ body))))) - in - (match rels with - | Fail err -> err - | Success s -> concatS (intercalate "\n\n" s) - )) - -(*val harness_string_of_elf64_relocs' : endianness -> (natural -> string) -> elf64_file -> - elf64_section_header_table -> elf64_section_header_table -> - string_table -> string_table -> byte_sequence -> string*) -let harness_string_of_elf64_relocs' endian os f1 reloc_sht sht shdr stbl bs0:string= - (let rels = -(mapM (fun ent -> - let off = (Nat_big_num.of_string (Uint64.to_string ent.elf64_sh_offset)) in - let siz = (Ml_bindings.nat_big_num_of_uint64 ent.elf64_sh_size) in - let lnk = (Nat_big_num.of_string (Uint32.to_string ent.elf64_sh_link)) in - Byte_sequence.offset_and_cut off siz bs0 >>= (fun rels -> - Elf_relocation.read_elf64_relocation_a_section' endian rels >>= (fun sect -> - Elf_file.get_elf64_symbol_table_by_index f1 lnk >>= (fun symtab -> - return (sect, ent, symtab)))) - ) reloc_sht - >>= - mapM (fun (rels, ent, symtab) -> - let nm = (Nat_big_num.of_string (Uint32.to_string ent.elf64_sh_name)) in - let off = (unsafe_hex_string_of_natural( 0) (Nat_big_num.of_string (Uint64.to_string ent.elf64_sh_offset))) in - let len = (Pervasives.string_of_int (List.length rels)) in - String_table.get_string_at nm shdr >>= (fun nm -> - let hdr = ("Relocation section '" ^ (nm ^ ("' at offset 0x" ^ (off ^ (" contains " ^ (len ^ " entries:\n")))))) in - let ttl = " Offset Info Type Symbol's Value Symbol's Name + Addend\n" in - let body = (concatS (intercalate "\n" (Lem_list.map (harness_string_of_elf64_reloc_a_entry os symtab sht stbl shdr) rels))) in - return (hdr ^ (ttl ^ body))))) - in - (match rels with - | Fail err -> err - | Success s -> concatS (intercalate "\n\n" s) - )) - -(*val harness_string_of_elf32_relocs : elf32_file -> (natural -> string) -> byte_sequence -> string*) -let harness_string_of_elf32_relocs f1 os bs0:string= - (let hdr = (f1.elf32_file_header) in - let sht = (f1.elf32_file_section_header_table) in - let endian = (get_elf32_header_endianness hdr) in - let rel_secs = (List.filter (fun x -> - x.elf32_sh_type = Uint32.of_string (Nat_big_num.to_string sht_rel)) sht) in - if List.length rel_secs = 0 then - "\nThere are no relocations in this file." - else - (match get_elf32_file_symbol_string_table f1 with - | Fail err -> err - | Success stbl -> - (match get_elf32_file_section_header_string_table f1 with - | Fail err -> err - | Success shdr -> "\n" ^ harness_string_of_elf32_relocs' endian os f1 rel_secs sht shdr stbl bs0 - ) - )) - -(*val harness_string_of_elf64_relocs : elf64_file -> (natural -> string) -> byte_sequence -> string*) -let harness_string_of_elf64_relocs f1 os bs0:string= - (let hdr = (f1.elf64_file_header) in - let sht = (f1.elf64_file_section_header_table) in - let endian = (get_elf64_header_endianness hdr) in - let rel_secs = (List.filter (fun x -> - x.elf64_sh_type = Uint32.of_string (Nat_big_num.to_string sht_rela)) sht) in - if List.length rel_secs = 0 then - "\nThere are no relocations in this file." - else - (match get_elf64_file_symbol_string_table f1 with - | Fail err -> err - | Success stbl -> - (match get_elf64_file_section_header_string_table f1 with - | Fail err -> err - | Success shdr -> "\n" ^ harness_string_of_elf64_relocs' endian os f1 rel_secs sht shdr stbl bs0 - ) - )) - -(*val harness_string_of_elf32_symbol_table_entry : nat -> (natural -> string) -> - (natural -> string) -> byte_sequence -> string_table -> elf32_symbol_table_entry -> string*) -let harness_string_of_elf32_symbol_table_entry num os proc bs0 stbl ent:string= - (let vlu = (unsafe_hex_string_of_natural( 8) (Nat_big_num.of_string (Uint32.to_string ent.elf32_st_value))) in - let siz = (Nat_big_num.to_string (Nat_big_num.of_string (Uint32.to_string ent.elf32_st_size))) in - let siz_pad = - (let pad = (Nat_num.nat_monus( 5) (String.length siz)) in - if pad = 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int pad) " ")) - in - let typ = (string_of_symbol_type (get_elf32_symbol_type ent) os proc) in - let bnd = (string_of_symbol_binding (get_elf32_symbol_binding ent) os proc) in - let bnd_pad = -(let pad = (Nat_num.nat_monus( 6) (String.length typ)) in - if pad = 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int pad) " ")) - in - let vis = (string_of_symbol_visibility (Nat_big_num.of_string (Uint32.to_string ent.elf32_st_other))) in - let vis_pad = -(let pad = (Nat_num.nat_monus( 6) (String.length bnd)) in - if pad = 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int pad) " ")) - in - let ndx = -(let tmp = (Nat_big_num.of_string (Uint32.to_string ent.elf32_st_shndx)) in - if Nat_big_num.equal tmp shn_undef then - "UND" - else if Nat_big_num.equal tmp shn_abs then - "ABS" - else - Nat_big_num.to_string tmp) - in - let ndx_pad = -(let pad = (Nat_num.nat_monus( 3) (String.length ndx)) in - if pad = 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int pad) " ")) - in - let nm = -(let idx1 = (Nat_big_num.of_string (Uint32.to_string ent.elf32_st_name)) in - if Nat_big_num.equal idx1(Nat_big_num.of_int 0) then - "" - else - (match String_table.get_string_at idx1 stbl with - | Fail err -> err - | Success s -> s - )) - in - let sym = "" in - let num = -(let temp = (Pervasives.string_of_int num) in - let pad = (Nat_num.nat_monus( 3) (String.length temp)) in - if pad = 0 then - temp - else - let spcs = (concatS (replicate0 (Nat_big_num.of_int pad) " ")) in - spcs ^ temp) - in - concatS [ - " " - ; (num ^ ":") - ; " " - ; vlu - ; " " - ; siz_pad; siz - ; " " - ; typ - ; " " - ; bnd_pad; bnd - ; " " - ; vis_pad; vis - ; " " - ; ndx_pad; ndx - ; " " - ; nm - ; sym - ]) - -(*val harness_string_of_elf32_syms' : endianness -> (natural -> string) -> (natural -> string) -> elf32_file -> elf32_section_header_table -> elf32_section_header_table -> string_table -> byte_sequence -> string*) -let harness_string_of_elf32_syms' endian os proc f1 filtered_sht sht shdr bs0:string= - (let rels = -(mapM (fun ent -> - let off = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_offset)) in - let siz = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_size)) in - let lnk = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_link)) in - let typ = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_type)) in - Byte_sequence.offset_and_cut off siz bs0 >>= (fun syms -> - Elf_symbol_table.read_elf32_symbol_table endian syms >>= (fun sect -> - Elf_file.get_elf32_string_table_by_index f1 lnk >>= (fun strtab -> - return (sect, ent, strtab, typ)))) - ) filtered_sht >>= (fun sects -> - mapM (fun (syms, ent, strtab, typ) -> - let nm = (Nat_big_num.of_string (Uint32.to_string ent.elf32_sh_name)) in - let len = (Pervasives.string_of_int (List.length syms)) in - String_table.get_string_at nm shdr >>= (fun nm -> - let hdr = ("Symbol table '" ^ (nm ^ ("' contains " ^ (len ^ " entries:\n")))) in - let ttl = " Num: Value Size Type Bind Vis Ndx Name\n" in - let body = (concatS (intercalate "\n" (Lem_list.mapi (fun n -> - harness_string_of_elf32_symbol_table_entry n os proc bs0 strtab) syms))) - in - return (hdr ^ (ttl ^ body)))) sects)) - in - (match rels with - | Fail err -> err - | Success s -> concatS (intercalate "\n\n" s) - )) - -(*val harness_string_of_elf32_syms : elf32_file -> (natural -> string) -> (natural -> string) -> byte_sequence -> string*) -let harness_string_of_elf32_syms f1 os proc bs0:string= - (let hdr = (f1.elf32_file_header) in - let sht = (f1.elf32_file_section_header_table) in - let endian = (get_elf32_header_endianness hdr) in - let sym_secs = (List.filter (fun x -> -(x.elf32_sh_type = Uint32.of_string (Nat_big_num.to_string sht_dynsym)) || -(x.elf32_sh_type = Uint32.of_string (Nat_big_num.to_string sht_symtab))) sht) - in - if List.length sym_secs = 0 then - "\nThere are no symbols in this file." - else - (match get_elf32_file_section_header_string_table f1 with - | Fail err -> err - | Success shdr -> - "\n" ^ - harness_string_of_elf32_syms' endian os proc f1 sym_secs sht shdr bs0 - )) - -(*val harness_string_of_elf64_symbol_table_entry : nat -> (natural -> string) -> (natural -> string) -> string_table -> elf64_symbol_table_entry -> string*) -let harness_string_of_elf64_symbol_table_entry num os proc stbl ent:string= - (let vlu = (unsafe_hex_string_of_natural( 16) (Ml_bindings.nat_big_num_of_uint64 ent.elf64_st_value)) in - let siz = (Nat_big_num.to_string (Ml_bindings.nat_big_num_of_uint64 ent.elf64_st_size)) in - let siz_pad = - (let pad = (Nat_num.nat_monus( 5) (String.length siz)) in - if pad = 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int pad) " ")) - in - let typ = (string_of_symbol_type (get_elf64_symbol_type ent) os proc) in - let bnd = (string_of_symbol_binding (get_elf64_symbol_binding ent) os proc) in - let bnd_pad = -(let pad = (Nat_num.nat_monus( 8) (String.length typ)) in - if pad = 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int pad) " ")) - in - let vis = (string_of_symbol_visibility (Nat_big_num.of_string (Uint32.to_string ent.elf64_st_other))) in - let vis_pad = -(let pad = (Nat_num.nat_monus( 6) (String.length bnd)) in - if pad = 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int pad) " ")) - in - let ndx = -(let tmp = (Nat_big_num.of_string (Uint32.to_string ent.elf64_st_shndx)) in - if Nat_big_num.equal tmp shn_undef then - "UND" - else if Nat_big_num.equal tmp shn_abs then - "ABS" - else - Nat_big_num.to_string tmp) - in - let ndx_pad = -(let pad = (Nat_num.nat_monus( 3) (String.length ndx)) in - if pad = 0 then - "" - else - concatS (replicate0 (Nat_big_num.of_int pad) " ")) - in - let nm = -(let idx1 = (Nat_big_num.of_string (Uint32.to_string ent.elf64_st_name)) in - if Nat_big_num.equal idx1(Nat_big_num.of_int 0) then - "" - else - (match String_table.get_string_at idx1 stbl with - | Fail err -> err - | Success s -> s - )) - in - let num = -(let temp = (Pervasives.string_of_int num) in - let pad = (Nat_num.nat_monus( 3) (String.length temp)) in - if pad = 0 then - temp - else - let spcs = (concatS (replicate0 (Nat_big_num.of_int pad) " ")) in - spcs ^ temp) - in - concatS [ - " " - ; (num ^ ":") - ; " " - ; vlu - ; " " - ; siz_pad; siz - ; " " - ; typ - ; bnd_pad; bnd - ; " " - ; vis_pad; vis - ; " " - ; ndx_pad; ndx - ; " " - ; nm - ]) - -(*val harness_string_of_elf64_syms' : endianness -> (natural -> string) -> (natural -> string) -> elf64_file -> elf64_section_header_table -> elf64_section_header_table -> string_table -> byte_sequence -> string*) -let harness_string_of_elf64_syms' endian os proc f1 filtered_sht sht shdr bs0:string= - (let rels = -(mapM (fun ent -> - let off = (Nat_big_num.of_string (Uint64.to_string ent.elf64_sh_offset)) in - let siz = (Ml_bindings.nat_big_num_of_uint64 ent.elf64_sh_size) in - let lnk = (Nat_big_num.of_string (Uint32.to_string ent.elf64_sh_link)) in - let typ = (Nat_big_num.of_string (Uint32.to_string ent.elf64_sh_type)) in - Byte_sequence.offset_and_cut off siz bs0 >>= (fun syms -> - Elf_symbol_table.read_elf64_symbol_table endian syms >>= (fun sect -> - Elf_file.get_elf64_string_table_by_index f1 lnk >>= (fun strtab -> - return (sect, ent, strtab, typ)))) - ) filtered_sht - >>= - mapM (fun (syms, ent, strtab, typ) -> - let nm = (Nat_big_num.of_string (Uint32.to_string ent.elf64_sh_name)) in - let len = (Pervasives.string_of_int (List.length syms)) in - String_table.get_string_at nm shdr >>= (fun nm -> - let hdr = ("Symbol table '" ^ (nm ^ ("' contains " ^ (len ^ " entries:\n")))) in - let ttl = " Num: Value Size Type Bind Vis Ndx Name\n" in - let body = (concatS (intercalate "\n" (Lem_list.mapi (fun n -> - harness_string_of_elf64_symbol_table_entry n os proc strtab) syms))) - in - return (hdr ^ (ttl ^ body))))) - in - (match rels with - | Fail err -> err - | Success s -> concatS (intercalate "\n\n" s) - )) - -(*val harness_string_of_elf64_syms : elf64_file -> (natural -> string) -> (natural -> string) -> byte_sequence -> string*) -let harness_string_of_elf64_syms f1 os proc bs0:string= - (let hdr = (f1.elf64_file_header) in - let sht = (f1.elf64_file_section_header_table) in - let endian = (get_elf64_header_endianness hdr) in - let sym_secs = (List.filter (fun x -> -(x.elf64_sh_type = Uint32.of_string (Nat_big_num.to_string sht_dynsym)) || -(x.elf64_sh_type = Uint32.of_string (Nat_big_num.to_string sht_symtab))) sht) - in - if List.length sym_secs = 0 then - "\nThere are no symbols in this file." - else - (match get_elf64_file_section_header_string_table f1 with - | Fail err -> err - | Success shdr -> - "\n" ^ - harness_string_of_elf64_syms' endian os proc f1 sym_secs sht shdr bs0 - )) - -(*val string_of_unix_time : natural -> string*) - -(*val string_of_dyn_value : forall 'addr 'size. dyn_value 'addr 'size -> - ('addr -> string) -> ('size -> string) -> string*) -let string_of_dyn_value dyn addr size2:string= - ((match dyn with - | Address a -> addr a - | Size s -> size2 s - | FName f -> f - | Path p -> p - | SOName f -> "Library soname: [" ^ (f ^ "]") - | RPath p -> "Library rpath: [" ^ (p ^ "]") - | RunPath p -> "Library runpath: [" ^ (p ^ "]") - | Flags f -> string_of_dt_flag f - | Flags1 f -> "Flags: " ^ gnu_string_of_dt_flag_1 f - | Ignored -> "" - | Checksum s -> "0x" ^ unsafe_hex_string_of_natural( 0) s - | Library l -> "Shared library: [" ^ (l ^ "]") - | Numeric n -> Nat_big_num.to_string n - | RelType r -> string_of_rel_type r - | Timestamp t -> Ml_bindings.string_of_unix_time t - | Null -> "0x0" - )) - -(*val string_of_elf32_dyn_value : elf32_dyn_value -> string*) -let string_of_elf32_dyn_value dyn:string= - (string_of_dyn_value - dyn - (fun a -> "0x" ^ unsafe_hex_string_of_natural( 0) (Nat_big_num.of_string (Uint32.to_string a))) - (fun s -> Uint32.to_string s ^ " (bytes)")) - -(*val string_of_elf64_dyn_value : elf64_dyn_value -> string*) -let string_of_elf64_dyn_value dyn:string= - (string_of_dyn_value - dyn - (fun a -> "0x" ^ unsafe_hex_string_of_natural( 0) (Ml_bindings.nat_big_num_of_uint64 a)) - (fun s -> Uint64.to_string s ^ " (bytes)")) - -(*val harness_string_of_elf32_dyn_entry : bool -> elf32_dyn -> (natural -> bool) -> (natural -> string) -> - (elf32_dyn -> string_table -> error elf32_dyn_value) -> - (elf32_dyn -> string_table -> error elf32_dyn_value) -> string_table -> string*) -let harness_string_of_elf32_dyn_entry shared_object dyn os_additional_tags typ os_dyn proc_dyn stbl:string= - (let tag = (unsafe_hex_string_of_natural( 8) (Nat_big_num.abs (Nat_big_num.of_int32 dyn.elf32_dyn_tag))) in - let typ = ("(" ^ (typ (Nat_big_num.abs (Nat_big_num.of_int32 dyn.elf32_dyn_tag)) ^ ")")) in - let vlu = -((match get_value_of_elf32_dyn shared_object dyn os_additional_tags os_dyn proc_dyn stbl with - | Fail f -> f - | Success v -> string_of_elf32_dyn_value v - )) - in - let vlu_pad = -(let pad = (Nat_num.nat_monus( 29) (String.length typ)) in - if pad = 0 then - "" - else - let reps = (replicate0 (Nat_big_num.of_int pad) " ") in - concatS reps) - in - concatS [ - " " - ; ("0x" ^ tag) - ; " " - ; typ - ; vlu_pad; vlu - ]) - -(*val harness_string_of_elf32_dynamic_section' : elf32_file -> elf32_program_header_table_entry -> - byte_sequence -> (natural -> bool) -> (natural -> error tag_correspondence) -> - (natural -> error tag_correspondence) -> (natural -> string) -> - (elf32_dyn -> string_table -> error elf32_dyn_value) -> - (elf32_dyn -> string_table -> error elf32_dyn_value) -> string*) -let harness_string_of_elf32_dynamic_section' f1 dyn bs0 os_additional_ranges os proc os_print os_dyn proc_dyn:string= - (let endian = (get_elf32_header_endianness f1.elf32_file_header) in - let sht = (f1.elf32_file_section_header_table) in - let off = (Nat_big_num.of_string (Uint32.to_string dyn.elf32_p_offset)) in - let siz = (Nat_big_num.of_string (Uint32.to_string dyn.elf32_p_filesz)) in - let shared_object = (is_elf32_shared_object_file f1.elf32_file_header) in - let res = -(Byte_sequence.offset_and_cut off siz bs0 >>= (fun rel -> - obtain_elf32_dynamic_section_contents f1 os_additional_ranges os proc bs0 >>= (fun dyns -> - get_string_table_of_elf32_dyn_section endian dyns sht bs0 >>= (fun stbl -> - return (Lem_list.map (fun x -> harness_string_of_elf32_dyn_entry shared_object x os_additional_ranges os_print os_dyn proc_dyn stbl) dyns))))) - in - (match res with - | Fail f -> f - | Success s -> - let off = (unsafe_hex_string_of_natural( 0) off) in - let entries = (Pervasives.string_of_int (List.length s)) in - concatS [ - "\n" - ; ("Dynamic section at offset 0x" ^ (off ^ (" contains " ^ (entries ^ " entries:\n")))) - ; " Tag Type Name/Value\n" - ; concatS (intercalate "\n" s) - ] - )) - -(*val harness_string_of_elf32_dynamic_section : elf32_file -> byte_sequence -> - (natural -> bool) -> (natural -> error tag_correspondence) -> - (natural -> error tag_correspondence) -> (natural -> string) -> - (elf32_dyn -> string_table -> error elf32_dyn_value) -> - (elf32_dyn -> string_table -> error elf32_dyn_value) -> string*) -let harness_string_of_elf32_dynamic_section f1 bs0 os_additional_ranges os proc os_print os_dyn proc_dyn:string= - (let pht = (f1.elf32_file_program_header_table) in - let dyn = -(List.filter (fun x -> - x.elf32_p_type = Uint32.of_string (Nat_big_num.to_string elf_pt_dynamic) - ) pht) - in - let print_msg = (is_elf32_shared_object_file f1.elf32_file_header || - is_elf32_executable_file f1.elf32_file_header) - in - (match dyn with - | [] -> - if print_msg then - "\nThere is no dynamic section in this file." - else - "" - | [x] -> harness_string_of_elf32_dynamic_section' f1 x bs0 os_additional_ranges os proc os_print os_dyn proc_dyn - | _ -> "Multiple dynamic sections detected." - )) - -(*val harness_string_of_elf64_dyn_entry : bool -> elf64_dyn -> (natural -> bool) -> (natural -> string) -> - (elf64_dyn -> string_table -> error elf64_dyn_value) -> - (elf64_dyn -> string_table -> error elf64_dyn_value) -> string_table -> string*) -let harness_string_of_elf64_dyn_entry shared_object dyn os_additional_ranges typ os_dyn proc_dyn stbl:string= - (let tag = (unsafe_hex_string_of_natural( 16) (Nat_big_num.abs (Nat_big_num.of_int64 dyn.elf64_dyn_tag))) in - let typ = ("(" ^ (typ (Nat_big_num.abs (Nat_big_num.of_int64 dyn.elf64_dyn_tag)) ^ ")")) in - let vlu = -((match get_value_of_elf64_dyn shared_object dyn os_additional_ranges os_dyn proc_dyn stbl with - | Fail f -> f - | Success v -> string_of_elf64_dyn_value v - )) - in - let vlu_pad = -(let pad = (Nat_num.nat_monus( 21) (String.length typ)) in - if pad = 0 then - "" - else - let reps = (replicate0 (Nat_big_num.of_int pad) " ") in - concatS reps) - in - concatS [ - " " - ; ("0x" ^ tag) - ; " " - ; typ - ; vlu_pad; vlu - ]) - -(*val harness_string_of_elf64_dynamic_section' : elf64_file -> elf64_program_header_table_entry -> - byte_sequence -> (natural -> bool) -> (natural -> error tag_correspondence) -> - (natural -> error tag_correspondence) -> (natural -> string) -> - (elf64_dyn -> string_table -> error elf64_dyn_value) -> - (elf64_dyn -> string_table -> error elf64_dyn_value) -> string*) -let harness_string_of_elf64_dynamic_section' f1 dyn bs0 os_additional_ranges os proc os_print os_dyn proc_dyn:string= - (let endian = (get_elf64_header_endianness f1.elf64_file_header) in - let sht = (f1.elf64_file_section_header_table) in - let off = (Nat_big_num.of_string (Uint64.to_string dyn.elf64_p_offset)) in - let siz = (Ml_bindings.nat_big_num_of_uint64 dyn.elf64_p_filesz) in - let shared_object = (is_elf64_shared_object_file f1.elf64_file_header) in - let res = -(Byte_sequence.offset_and_cut off siz bs0 >>= (fun rel -> - obtain_elf64_dynamic_section_contents f1 os_additional_ranges os proc bs0 >>= (fun dyns -> - get_string_table_of_elf64_dyn_section endian dyns sht bs0 >>= (fun stbl -> - return (Lem_list.map (fun x -> harness_string_of_elf64_dyn_entry shared_object x os_additional_ranges os_print os_dyn proc_dyn stbl) dyns))))) - in - (match res with - | Fail f -> f - | Success s -> - let off = (unsafe_hex_string_of_natural( 0) off) in - let entries = (Pervasives.string_of_int (List.length s)) in - concatS [ - "\n" - ; ("Dynamic section at offset 0x" ^ (off ^ (" contains " ^ (entries ^ " entries:\n")))) - ; " Tag Type Name/Value\n" - ; concatS (intercalate "\n" s) - ] - )) - -(*val harness_string_of_elf64_dynamic_section : elf64_file -> byte_sequence -> - (natural -> bool) -> (natural -> error tag_correspondence) -> - (natural -> error tag_correspondence) -> (natural -> string) -> - (elf64_dyn -> string_table -> error elf64_dyn_value) -> - (elf64_dyn -> string_table -> error elf64_dyn_value) -> string*) -let harness_string_of_elf64_dynamic_section f1 bs0 os_additional_ranges os proc os_print os_dyn proc_dyn:string= - (let pht = (f1.elf64_file_program_header_table) in - let print_msg = (is_elf64_shared_object_file f1.elf64_file_header || - is_elf64_executable_file f1.elf64_file_header) - in - let dyn = -(List.filter (fun x -> - x.elf64_p_type = Uint32.of_string (Nat_big_num.to_string elf_pt_dynamic) - ) pht) - in - (match dyn with - | [] -> - if print_msg then - "\nThere is no dynamic section in this file." - else - "" - | [x] -> harness_string_of_elf64_dynamic_section' f1 x bs0 os_additional_ranges os proc os_print os_dyn proc_dyn - | _ -> "Multiple dynamic sections detected." - )) - - |
