12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182(*Generated by Lem from abis/aarch64/abi_aarch64_le.lem.*)(** [abi_aarch64_le] contains top-level definition for the AArch64 ABI (little-endian case).
*)openLem_basic_classesopenLem_boolopenLem_listopenLem_numopenLem_maybeopenLem_assert_extraopenErroropenMissing_pervasivesopenElf_headeropenElf_types_native_uintopenElf_fileopenElf_interpreted_segmentopenElf_interpreted_sectionopenEndianness(* open import Elf_memory_image *)openAbi_classesopenMemory_imageopenAbi_aarch64_relocationopenAbi_aarch64_le_elf_header(** [abi_aarch64_le_compute_program_entry_point segs entry] computes the program
* entry point using ABI-specific conventions. On AArch64 the entry point in
* the ELF header ([entry] here) is the real entry point. On other ABIs, e.g.
* PowerPC64, the entry point [entry] is a pointer into one of the segments
* constituting the process image (passed in as [segs] here for a uniform
* interface).
*)(*val abi_aarch64_le_compute_program_entry_point : list elf64_interpreted_segments -> elf64_addr -> error natural*)letabi_aarch64_le_compute_program_entry_pointsegsentry:(Nat_big_num.num)error=(return(Ml_bindings.nat_big_num_of_uint64entry))(*val header_is_aarch64_le : elf64_header -> bool*)letheader_is_aarch64_leh:bool=(is_valid_elf64_headerh&&((Lem.option_equal(=)(Lem_list.list_indexh.elf64_ident(Nat_big_num.to_intelf_ii_data))(Some(Uint32_wrapper.of_bigintelf_data_2lsb)))&&(is_valid_abi_aarch64_le_machine_architecture(Uint32_wrapper.to_biginth.elf64_machine)&&is_valid_abi_aarch64_le_magic_numberh.elf64_ident)))typeaarch64_le_abi_feature=GOT|PLT(* placeholder / FIXME *)(*val abiFeatureCompare : aarch64_le_abi_feature -> aarch64_le_abi_feature -> Basic_classes.ordering*)letabiFeatureComparef1f2:int=((match(f1,f2)with(GOT,GOT)->0|(GOT,PLT)->(-1)|(PLT,PLT)->0|(PLT,GOT)->1))(*val abiFeatureTagEq : aarch64_le_abi_feature -> aarch64_le_abi_feature -> bool*)letabiFeatureTagEqf1f2:bool=((match(f1,f2)with(GOT,GOT)->true|(PLT,PLT)->true|(_,_)->false))letinstance_Basic_classes_Ord_Abi_aarch64_le_aarch64_le_abi_feature_dict:(aarch64_le_abi_feature)ord_class=({compare_method=abiFeatureCompare;isLess_method=(funf1->(funf2->(Lem.orderingEqual(abiFeatureComparef1f2)(-1))));isLessEqual_method=(funf1->(funf2->Pset.mem(abiFeatureComparef1f2)(Pset.from_listcompare[(-1);0])));isGreater_method=(funf1->(funf2->(Lem.orderingEqual(abiFeatureComparef1f2)1)));isGreaterEqual_method=(funf1->(funf2->Pset.mem(abiFeatureComparef1f2)(Pset.from_listcompare[1;0])))})letinstance_Abi_classes_AbiFeatureTagEquiv_Abi_aarch64_le_aarch64_le_abi_feature_dict:(aarch64_le_abi_feature)abiFeatureTagEquiv_class=({abiFeatureTagEquiv_method=abiFeatureTagEq})(*val section_is_special : forall 'abifeature. elf64_interpreted_section -> annotated_memory_image 'abifeature -> bool*)letsection_is_special0sf:bool=(elf_section_is_specialsf||(* FIXME *)false)