123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100(*Generated by Lem from auxv.lem.*)openLem_basic_classesopenLem_listopenLem_maybeopenLem_numopenShowopenLem_stringopenByte_sequenceopenEndiannessopenErroropenMissing_pervasivesopenElf_types_native_uint(* Legal values for auxiliary vector entry types. *)letat_null:Nat_big_num.num=((Nat_big_num.of_int0))(** End of vector *)letat_ignore:Nat_big_num.num=((Nat_big_num.of_int1))(** Entry should be ignored *)letat_execfd:Nat_big_num.num=((Nat_big_num.of_int2))(** File descriptor of program *)letat_phdr:Nat_big_num.num=((Nat_big_num.of_int3))(** Program headers for program *)letat_phent:Nat_big_num.num=((Nat_big_num.of_int4))(** Size of program header entry *)letat_phnum:Nat_big_num.num=((Nat_big_num.of_int5))(** Number of program headers *)letat_pagesz:Nat_big_num.num=((Nat_big_num.of_int6))(** System page size *)letat_base:Nat_big_num.num=((Nat_big_num.of_int7))(** Base address of interpreter *)letat_flags:Nat_big_num.num=((Nat_big_num.of_int8))(** Flags *)letat_entry:Nat_big_num.num=((Nat_big_num.of_int9))(** Entry point of program *)letat_notelf:Nat_big_num.num=((Nat_big_num.of_int10))(** Program is not ELF *)letat_uid:Nat_big_num.num=((Nat_big_num.of_int11))(** Real uid *)letat_euid:Nat_big_num.num=((Nat_big_num.of_int12))(** Effective uid *)letat_gid:Nat_big_num.num=((Nat_big_num.of_int13))(** Real gid *)letat_egid:Nat_big_num.num=((Nat_big_num.of_int14))(** Effective gid *)letat_clktck:Nat_big_num.num=((Nat_big_num.of_int17))(** Frequency of times() *)(* Some more special a_type values describing the hardware. *)letat_platform:Nat_big_num.num=((Nat_big_num.of_int15))(** String identifying platform. *)letat_hwcap:Nat_big_num.num=((Nat_big_num.of_int16))(** Machine-dependent hints about processor capabilities. *)(* This entry gives some information about the FPU initialization performed by the kernel. *)letat_fpucw:Nat_big_num.num=((Nat_big_num.of_int18))(** Used FPU control word. *)(* Cache block sizes. *)letat_dcachebsize:Nat_big_num.num=((Nat_big_num.of_int19))(** Data cache block size. *)letat_icachebsize:Nat_big_num.num=((Nat_big_num.of_int20))(** Instruction cache block size. *)letat_ucachebsize:Nat_big_num.num=((Nat_big_num.of_int21))(** Unified cache block size. *)(* A special ignored value for PPC, used by the kernel to control the interpretation of the AUXV. Must be > 16. *)letat_ignoreppc:Nat_big_num.num=((Nat_big_num.of_int22))(** Entry should be ignored. *)letat_secure:Nat_big_num.num=((Nat_big_num.of_int23))(** Boolean, was exec setuid-like? *)letat_base_platform:Nat_big_num.num=((Nat_big_num.of_int24))(** String identifying real platforms.*)letat_random:Nat_big_num.num=((Nat_big_num.of_int25))(** Address of 16 random bytes. *)letat_hwcap2:Nat_big_num.num=((Nat_big_num.of_int26))(** More machine-dependent hints about processor capabilities. *)letat_execfn:Nat_big_num.num=((Nat_big_num.of_int31))(** Filename of executable. *)(* Pointer to the global system page used for system calls and other nice things. *)letat_sysinfo:Nat_big_num.num=((Nat_big_num.of_int32))letat_sysinfo_ehdr:Nat_big_num.num=((Nat_big_num.of_int33))(** Auxiliary vector *)typeelf64_auxv={elf64_auxv_type:Uint64_wrapper.uint64;elf64_auxv_value:Uint64_wrapper.uint64}(* Defined in include/uapi/linux/elfcore.h *)typeelf64_siginfo={elf64_si_signo:Uint64_wrapper.uint64;elf64_si_code:Uint64_wrapper.uint64;elf64_si_errno:Uint64_wrapper.uint64}(* Defined in include/uapi/linux/elfcore.h *)typeelf64_prstatus={elf64_pr_info:elf64_siginfo;}(*val read_elf64_auxv : endianness -> byte_sequence -> error (elf64_auxv * byte_sequence)*)letread_elf64_auxvendianbs:(elf64_auxv*Byte_sequence_wrapper.byte_sequence)error=(bind(read_elf64_xwordendianbs)(fun(typ,bs)->bind(read_elf64_xwordendianbs)(fun(value,bs)->letav=({elf64_auxv_type=typ;elf64_auxv_value=value})inreturn(av,bs))))(*val read_all_elf64_auxv : endianness -> byte_sequence -> error (list elf64_auxv)*)letrecread_all_elf64_auxvendianbs:((elf64_auxv)list)error=(ifNat_big_num.equal(Byte_sequence.length0bs)((Nat_big_num.of_int0))thenfail"read_all_elf64_auxv: EOF before reading a NULL auxv"elsebind(read_elf64_auxvendianbs)(fun(av,bs)->ifNat_big_num.equal(Ml_bindings.nat_big_num_of_uint64av.elf64_auxv_type)at_nullthenreturn[]elsebind(read_all_elf64_auxvendianbs)(fun(next)->return(av::next))))(*val find_elf64_auxv_value : list elf64_auxv -> natural -> error (maybe natural)*)letfind_elf64_auxv_valueauxv_listauxv_type:((Nat_big_num.num)option)error=(Error.foldM(funvalueauxv->ifNat_big_num.equal(Ml_bindings.nat_big_num_of_uint64auxv.elf64_auxv_type)auxv_typethen(matchvaluewith|None->return(Some(Ml_bindings.nat_big_num_of_uint64auxv.elf64_auxv_value))|Some_->Error.fail("find_elf64_auxv_value: duplicate value for type "^(Nat_big_num.to_stringauxv_type)))elsereturnvalue)Noneauxv_list)