crucible-llvm-0.10: Support for translating and executing LLVM code in Crucible
Copyright(c) Galois Inc 2026
LicenseBSD3
MaintainerLangston Barrett <langston@galois.com>
Stabilityprovisional
Safe HaskellNone
LanguageHaskell2010

Lang.Crucible.LLVM.Intrinsics.Cast

Description

In Crucible-LLVM, LLVM pointers and integers are translated to terms of type LLVMPointerType. When writing overrides, it can be convenient to take arguments or return values of BVType. This is done frequently in the built-in overrides in Lang.Crucible.LLVM.Intrinsics.Libc and Lang.Crucible.LLVM.Intrinsics.LLVM. This module contains helpers for "lowering" signatures using Crucible bitvectors to ones that use LLVM pointers.

Synopsis

There

type family CtxToLLVMType (t :: Ctx CrucibleType) :: Ctx CrucibleType where ... Source #

Convert bitvectors to LLVMPointers.

ctxToLLVMType :: forall (ctx :: Ctx CrucibleType). Assignment TypeRepr ctx -> Assignment TypeRepr (CtxToLLVMType ctx) Source #

Value-level analogue of CtxToLLVMType

toLLVMType :: forall (t :: CrucibleType). TypeRepr t -> TypeRepr (ToLLVMType t) Source #

Value-level analogue of ToLLVMType

regValueToLLVM :: forall sym (ty :: CrucibleType). IsSymInterface sym => sym -> TypeRepr ty -> RegValue sym ty -> IO (RegValue sym (ToLLVMType ty)) Source #

Convert a RegValue to its corresponding LLVM type (replacing bitvectors with LLVM pointers).

Back again

regValuesFromLLVM Source #

Arguments

:: forall sym bak (tys :: Ctx CrucibleType). IsSymBackend sym bak 
=> bak 
-> FunctionName

Only used in error messages

-> Assignment TypeRepr tys 
-> Assignment TypeRepr (CtxToLLVMType tys) 
-> Assignment (RegValue' sym) (CtxToLLVMType tys) 
-> IO (Assignment (RegValue' sym) tys) 

regValueFromLLVM Source #

Arguments

:: forall sym bak (ty :: CrucibleType). IsSymBackend sym bak 
=> bak 
-> FunctionName

Only used in error messages

-> TypeRepr ty 
-> TypeRepr (ToLLVMType ty) 
-> RegValue sym (ToLLVMType ty) 
-> IO (RegValue sym ty) 

Convert a RegValue from its corresponding LLVM type (replacing LLVM pointers with bitvectors where needed).

regEntriesFromLLVM Source #

Arguments

:: forall sym bak (tys :: Ctx CrucibleType). IsSymBackend sym bak 
=> bak 
-> FunctionName

Only used in error messages

-> Assignment TypeRepr tys 
-> Assignment TypeRepr (CtxToLLVMType tys) 
-> Assignment (RegEntry sym) (CtxToLLVMType tys) 
-> IO (Assignment (RegEntry sym) tys) 

regMapFromLLVM Source #

Arguments

:: forall sym bak (tys :: Ctx CrucibleType). IsSymBackend sym bak 
=> bak 
-> FunctionName

Only used in error messages

-> Assignment TypeRepr tys 
-> Assignment TypeRepr (CtxToLLVMType tys) 
-> RegMap sym (CtxToLLVMType tys) 
-> IO (RegMap sym tys) 

Lowering overrides

lowerLLVMOverride :: forall p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType). HasLLVMAnn sym => LLVMOverride p sym ext args ret -> LLVMOverride p sym ext (CtxToLLVMType args) (ToLLVMType ret) Source #

Lower an override to use the Crucible-LLVM ABI.

lowerMakeOverride :: forall sym p ext (arch :: LLVMArch). HasLLVMAnn sym => MakeOverride p sym ext arch -> MakeOverride p sym ext arch Source #

Postcompose lowerLLVMOverride with a MakeOverride

lowerOverrideTemplate :: forall sym p ext (arch :: LLVMArch). HasLLVMAnn sym => OverrideTemplate p sym ext arch -> OverrideTemplate p sym ext arch Source #

Call lowerLLVMOverride on the override in a OverrideTemplate