123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566(** C Data model.
This module defines abstractions for C values.
A value is backed by a datum - a sequence of bits that represents
the value. This module also defines models for integer
representation.
*)openCore_kernelopenBap.Std(** models for 32 bit systems *)typemodel32=[|`LP32|`ILP32](** models for 64 bit systems *)typemodel64=[|`ILP64|`LLP64|`LP64](** The following table summarize all models of integer
representation.
{v
LP32 ILP32 ILP64 LLP64 LP64
char 8 8 8 8 8
short 16 16 16 16 16
int 16 32 64 32 32
long 32 32 64 32 64
addr 32 32 64 64 64
v}
*)typemodel=[model32|model64](** Abstract value lattice. The lattice is complete, and
[Set []] is the supremum, i.e., the bot.*)typevalue=|Top(** any possible value *)|Setofwordlist(** one of the specified *)[@@derivingbin_io,compare,sexp](** abstraction of a С datum.
The datum is a sequence of bits, that represent a particular C
value. We abstract datum as either an immediate value of the given
size and value lattice, or a sequence of data, or a pointer to a
datum.*)typet=|ImmofSize.t*value(** [Imm (size,value)] *)|Seqoftlist(** [Seq (t1,..,tN)] *)|Ptroft(** [Ptr (type,size)] *)[@@derivingbin_io,compare,sexp](** *)