@@ -90,33 +90,6 @@ Definition table_desc (next_pa : Z) : Z :=
9090Definition page_desc (out_pa : Z) : Z :=
9191 Z.lor (Z.lor (Z.land out_pa (Z.lnot 0xFFF%Z)) 0x400%Z) 0x3%Z. (* Valid=1, Page=1, AF=1 *)
9292
93- Definition init_empty_table(mem : memoryMap) (baddr : bv addr_size) : memoryMap :=
94- let reserved_addrs := dom mem in
95- foldl (λ mem index,
96- let addr := baddr `+Z` (index * 8) in
97- if decide (addr ∈ reserved_addrs)
98- then mem
99- else mem_insert addr 8 0 mem) mem (seqZ 0 512).
100-
101- Definition clear_offset (addr : bv addr_size) : bv addr_size :=
102- let ones : bv 9 := (-1)%bv in
103- bv_and addr (bv_not (bv_zero_extend addr_size ones)).
104-
105- Definition init_mem_trans (instrs : list (bv addr_size * bv 32))
106- (data : list (bv addr_size * bv 64))
107- (pgt : list (bv addr_size * bv 64))
108- (mem_strict : bool) : memoryMap :=
109- let mem_instrs :=
110- foldl (λ mem '(addr, val), mem_insert addr 4 val mem) ∅ instrs in
111- let mem :=
112- foldl (λ mem '(addr, val), mem_insert addr 8 val mem) mem_instrs (data ++ pgt) in
113-
114- (* WARNING: filling out 512 entries for whole page table level *)
115- if mem_strict then
116- let baddrs := remove_dups $ map clear_offset pgt.*1 in
117- foldl init_empty_table mem baddrs
118- else mem.
119-
12093(** We test against the sail-tiny-arm semantic, with non-determinism enabled *)
12194Definition arm_sem := sail_tiny_arm_sem true.
12295
@@ -561,31 +534,34 @@ Module BBM.
561534 |> reg_insert ID_AA64MMFR1_EL1 0x0
562535 |> reg_insert PSTATE (init_pstate 1%bv 1%bv).
563536
564- (* Instructions
537+ Definition init_mem :=
538+ ∅
539+ (* Instructions
565540 LDR X0, [X1, X0] - first load
566541 STR X3, [X1, X2] - modify page table
567542 LDR X4, [X1, X4] - second load *)
568- Definition instrs : list (bv addr_size * bv 32) :=
569- [(0x500, 0xf8606820); (0x504, 0xf8226823); (0x508, 0xf8646824)].
570-
571- (* Data at two different physical locations
572- Original PA - value 0x2a
573- New PA - value 0x42 *)
574- Definition data : list (bv addr_size * bv 64) :=
575- [(0x1000, 0x2a); (0x2000, 0x42)].
576-
577- (* Page tables
578- L0[1] -> L1
579- L1[0] -> L2
580- L2[0] -> L3
581- L3 entries:
582- - L3[0] -> PA 0x0000 (code page for PC)
583- - L3[1] -> PA 0x1000 (first data page), later updated to 0x2003 by the STR
584- - L3[16] -> PA 0x83000 (VA alias to edit L3 via VA 0x8000010000) *)
585- Definition pgt : list (bv addr_size * bv 64) :=
586- [(0x80008, 0x81003); (0x81000, 0x82003); (0x82000, 0x83003);
587- (0x83000, 0x40000000000783); (0x83008, 0x60000000001783);
588- (0x83080, 0x60000000083703)].
543+ |> mem_insert 0x500 4 0xf8606820
544+ |> mem_insert 0x504 4 0xf8226823
545+ |> mem_insert 0x508 4 0xf8646824
546+ (* Data at two different physical locations
547+ Original PA - value 0x2a
548+ New PA - value 0x42 *)
549+ |> mem_insert 0x1000 8 0x2a
550+ |> mem_insert 0x2000 8 0x42
551+ (* Page tables
552+ L0[1] -> L1
553+ L1[0] -> L2
554+ L2[0] -> L3
555+ L3 entries:
556+ - L3[0] -> PA 0x0000 (code page for PC)
557+ - L3[1] -> PA 0x1000 (first data page), later updated to 0x2003 by the STR
558+ - L3[16] -> PA 0x83000 (VA alias to edit L3 via VA 0x8000010000) *)
559+ |> mem_insert 0x80008 8 0x81003
560+ |> mem_insert 0x81000 8 0x82003
561+ |> mem_insert 0x82000 8 0x83003
562+ |> mem_insert 0x83000 8 0x40000000000783
563+ |> mem_insert 0x83008 8 0x60000000001783
564+ |> mem_insert 0x83080 8 0x60000000083703.
589565
590566 Definition n_threads := 1%nat.
591567
@@ -597,7 +573,7 @@ Module BBM.
597573 Definition mem_strict := false.
598574
599575 Definition initState :=
600- {|archState.memory := init_mem_trans instrs data pgt mem_strict ;
576+ {|archState.memory := init_mem ;
601577 archState.regs := [# init_reg];
602578 archState.address_space := PAS_NonSecure |}.
603579
0 commit comments