1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
type t = Concrete_memory.t * Symbolic_memory.t
module C = Concrete_memory
module S = Symbolic_memory
let with_concrete (mc, ms) a f_c f_s =
let open Concolic_choice in
let+ a = select_i32 a in
(f_c mc a, f_s ms (Symbolic_value.const_i32 a))
let with_concrete_store (mc, ms) a f_c f_s (vc, vs) =
let open Concolic_choice in
let+ addr = select_i32 a in
f_c mc ~addr vc;
f_s ms ~addr:(Symbolic_value.const_i32 addr) vs
let load_8_s m a = with_concrete m a C.load_8_s S.load_8_s
let load_8_u m a = with_concrete m a C.load_8_u S.load_8_u
let load_16_s m a = with_concrete m a C.load_16_s S.load_16_s
let load_16_u m a = with_concrete m a C.load_16_u S.load_16_u
let load_32 m a = with_concrete m a C.load_32 S.load_32
let load_64 m a = with_concrete m a C.load_64 S.load_64
let store_8 m ~addr v = with_concrete_store m addr C.store_8 S.store_8 v
let store_16 m ~addr v = with_concrete_store m addr C.store_16 S.store_16 v
let store_32 m ~addr v = with_concrete_store m addr C.store_32 S.store_32 v
let store_64 m ~addr v = with_concrete_store m addr C.store_64 S.store_64 v
let grow (mc, ms) (deltac, deltas) =
Concrete_memory.grow mc deltac;
Symbolic_memory.grow ms deltas
let size (mc, ms) = (Concrete_memory.size mc, Symbolic_memory.size ms)
let size_in_pages (mc, ms) =
(Concrete_memory.size_in_pages mc, Symbolic_memory.size_in_pages ms)
let fill _ = Fmt.failwith "TODO"
let blit _ = Fmt.failwith "TODO"
let blit_string (mc, ms) str ~src ~dst ~len =
let src_c, src_s = src in
let dst_c, dst_s = dst in
let len_c, len_s = len in
( Concrete_memory.blit_string mc str ~src:src_c ~dst:dst_c ~len:len_c
, Symbolic_memory.blit_string ms str ~src:src_s ~dst:dst_s ~len:len_s )
let get_limit_max _ = Fmt.failwith "TODO"