Skip to content

Commit 2eca510

Browse files
committed
Merge branch 'phaseII/verified' into mutexspec
2 parents a2ae829 + fc5cabe commit 2eca510

26 files changed

Lines changed: 137 additions & 131 deletions

File tree

aster_common/src/arch/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ mod x86_64;
22

33
pub use x86_64::*;
44

5-
use super::*;
5+
use super::*;

aster_common/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
#![allow(non_snake_case)]
2+
#![allow(non_camel_case_types)]
3+
#![allow(unused_attributes)]
4+
15
mod arch;
26
mod mm;
37
mod task;

aster_common/src/mm/frame/linked_list.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ impl<M: AnyFrameMeta + Repr<MetaSlotInner>> AnyFrameMeta for Link<M> {
240240
false
241241
}
242242

243-
spec fn vtable_ptr(&self) -> usize;
243+
uninterp spec fn vtable_ptr(&self) -> usize;
244244
}
245245

246246
} // verus!

aster_common/src/mm/frame/linked_list_owners.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub ghost struct LinkModel {
1414
}
1515

1616
impl Inv for LinkModel {
17-
open spec fn inv(&self) -> bool {
17+
open spec fn inv(self) -> bool {
1818
true
1919
}
2020
}
@@ -25,26 +25,26 @@ pub tracked struct LinkOwner {
2525
}
2626

2727
impl Inv for LinkOwner {
28-
open spec fn inv(&self) -> bool {
28+
open spec fn inv(self) -> bool {
2929
true
3030
}
3131
}
3232

3333
impl InvView for LinkOwner {
3434
type V = LinkModel;
3535

36-
open spec fn view(&self) -> Self::V {
36+
open spec fn view(self) -> Self::V {
3737
LinkModel { paddr: self.paddr }
3838
}
3939

40-
proof fn view_preserves_inv(&self) {
40+
proof fn view_preserves_inv(self) {
4141
}
4242
}
4343

4444
impl<M: AnyFrameMeta + Repr<MetaSlotInner>> OwnerOf for Link<M> {
4545
type Owner = LinkOwner;
4646

47-
open spec fn wf(&self, owner: &Self::Owner) -> bool {
47+
open spec fn wf(self, owner: Self::Owner) -> bool {
4848
true
4949
// &&& owner.self_perm@.mem_contents().value() == self
5050
// &&& owner.next == self.next
@@ -80,7 +80,7 @@ impl LinkedListModel {
8080
}
8181

8282
impl Inv for LinkedListModel {
83-
open spec fn inv(&self) -> bool {
83+
open spec fn inv(self) -> bool {
8484
true
8585
}
8686
}
@@ -93,7 +93,7 @@ pub tracked struct LinkedListOwner<M: AnyFrameMeta + Repr<MetaSlotInner>> {
9393
}
9494

9595
impl<M: AnyFrameMeta + Repr<MetaSlotInner>> Inv for LinkedListOwner<M> {
96-
open spec fn inv(&self) -> bool {
96+
open spec fn inv(self) -> bool {
9797
forall|i: int| 0 <= i < self.list.len() ==> self.inv_at(i)
9898
}
9999
}
@@ -108,7 +108,7 @@ impl<M: AnyFrameMeta + Repr<MetaSlotInner>> LinkedListOwner<M> {
108108
&&& FRAME_METADATA_RANGE().start <= self.perms[i]@.addr() < FRAME_METADATA_RANGE().start
109109
+ MAX_NR_PAGES() * META_SLOT_SIZE()
110110
&&& self.perms[i]@.is_init()
111-
&&& self.perms[i]@.value().wf(&self.list[i])
111+
&&& self.perms[i]@.value().wf(self.list[i])
112112
&&& i == 0 <==> self.perms[i]@.mem_contents().value().prev is None
113113
&&& i == self.list.len() - 1 <==> self.perms[i]@.value().next is None
114114
&&& 0 < i ==> self.perms[i]@.value().prev is Some && self.perms[i]@.value().prev.unwrap()
@@ -144,11 +144,11 @@ impl<M: AnyFrameMeta + Repr<MetaSlotInner>> LinkedListOwner<M> {
144144
impl<M: AnyFrameMeta + Repr<MetaSlotInner>> InvView for LinkedListOwner<M> {
145145
type V = LinkedListModel;
146146

147-
open spec fn view(&self) -> Self::V {
147+
open spec fn view(self) -> Self::V {
148148
LinkedListModel { list: Self::view_helper(self.list) }
149149
}
150150

151-
proof fn view_preserves_inv(&self) {
151+
proof fn view_preserves_inv(self) {
152152
}
153153
}
154154

@@ -174,7 +174,7 @@ impl<M: AnyFrameMeta + Repr<MetaSlotInner>> LinkedListOwner<M> {
174174
impl<M: AnyFrameMeta + Repr<MetaSlotInner>> OwnerOf for LinkedList<M> {
175175
type Owner = LinkedListOwner<M>;
176176

177-
open spec fn wf(&self, owner: &Self::Owner) -> bool {
177+
open spec fn wf(self, owner: Self::Owner) -> bool {
178178
&&& self.front is None <==> owner.list.len() == 0
179179
&&& self.back is None <==> owner.list.len() == 0
180180
&&& owner.list.len() > 0 ==> self.front is Some && self.front.unwrap().addr()
@@ -198,7 +198,7 @@ pub ghost struct CursorModel {
198198
}
199199

200200
impl Inv for CursorModel {
201-
open spec fn inv(&self) -> bool {
201+
open spec fn inv(self) -> bool {
202202
self.list_model.inv()
203203
}
204204
}
@@ -211,7 +211,7 @@ pub tracked struct CursorOwner<M: AnyFrameMeta + Repr<MetaSlotInner>> {
211211
}
212212

213213
impl<M: AnyFrameMeta + Repr<MetaSlotInner>> Inv for CursorOwner<M> {
214-
open spec fn inv(&self) -> bool {
214+
open spec fn inv(self) -> bool {
215215
&&& 0 <= self.index <= self.length()
216216
&&& self.list_own.inv()
217217
}
@@ -220,7 +220,7 @@ impl<M: AnyFrameMeta + Repr<MetaSlotInner>> Inv for CursorOwner<M> {
220220
impl<M: AnyFrameMeta + Repr<MetaSlotInner>> InvView for CursorOwner<M> {
221221
type V = CursorModel;
222222

223-
open spec fn view(&self) -> Self::V {
223+
open spec fn view(self) -> Self::V {
224224
let list = self.list_own.view();
225225
CursorModel {
226226
fore: list.list.take(self.index),
@@ -229,21 +229,21 @@ impl<M: AnyFrameMeta + Repr<MetaSlotInner>> InvView for CursorOwner<M> {
229229
}
230230
}
231231

232-
proof fn view_preserves_inv(&self) {
232+
proof fn view_preserves_inv(self) {
233233
}
234234
}
235235

236236
impl<M: AnyFrameMeta + Repr<MetaSlotInner>> OwnerOf for CursorMut<M> {
237237
type Owner = CursorOwner<M>;
238238

239-
open spec fn wf(&self, owner: &Self::Owner) -> bool {
239+
open spec fn wf(self, owner: Self::Owner) -> bool {
240240
&&& 0 <= owner.index < owner.length() ==> self.current.is_some()
241241
&& self.current.unwrap().addr() == owner.list_own.list[owner.index].paddr
242242
&& owner.list_own.perms[owner.index]@.pptr() == self.current.unwrap()
243243
&&& owner.index == owner.list_own.list.len() ==> self.current.is_none()
244244
&&& owner.list_perm@.pptr() == self.list
245245
&&& owner.list_perm@.is_init()
246-
&&& owner.list_perm@.mem_contents().value().wf(&owner.list_own)
246+
&&& owner.list_perm@.mem_contents().value().wf(owner.list_own)
247247
}
248248
}
249249

aster_common/src/mm/frame/meta.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ impl MetaSlot {
139139
Tracked(owner): Tracked<&MetaSlotOwner>,
140140
) -> (res: ReprPtr<MetaSlotStorage, T>)
141141
requires
142-
self.wf(owner),
142+
self.wf(*owner),
143143
owner.inv(),
144144
addr == owner.storage@.addr(),
145145
ensures

aster_common/src/mm/frame/meta_owners.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ pub tracked struct MetaSlotOwner {
103103
}
104104

105105
impl Inv for MetaSlotOwner {
106-
open spec fn inv(&self) -> bool {
106+
open spec fn inv(self) -> bool {
107107
&&& self.ref_count@.value() == REF_COUNT_UNUSED ==> {
108108
&&& self.vtable_ptr@.is_uninit()
109109
&&& self.in_list@.value() == 0
@@ -135,7 +135,7 @@ pub ghost struct MetaSlotModel {
135135
}
136136

137137
impl Inv for MetaSlotModel {
138-
open spec fn inv(&self) -> bool {
138+
open spec fn inv(self) -> bool {
139139
match self.ref_count {
140140
REF_COUNT_UNUSED => {
141141
&&& self.vtable_ptr.is_uninit()
@@ -155,7 +155,7 @@ impl Inv for MetaSlotModel {
155155
impl InvView for MetaSlotOwner {
156156
type V = MetaSlotModel;
157157

158-
open spec fn view(&self) -> Self::V {
158+
open spec fn view(self) -> Self::V {
159159
let storage = self.storage@.mem_contents();
160160
let ref_count = self.ref_count@.value();
161161
let vtable_ptr = self.vtable_ptr@.mem_contents();
@@ -172,15 +172,15 @@ impl InvView for MetaSlotOwner {
172172
MetaSlotModel { status, storage, ref_count, vtable_ptr, in_list, self_addr, usage }
173173
}
174174

175-
proof fn view_preserves_inv(&self) {
175+
proof fn view_preserves_inv(self) {
176176
admit()
177177
}
178178
}
179179

180180
impl OwnerOf for MetaSlot {
181181
type Owner = MetaSlotOwner;
182182

183-
open spec fn wf(&self, owner: &Self::Owner) -> bool {
183+
open spec fn wf(self, owner: Self::Owner) -> bool {
184184
&&& self.storage == owner.storage@.pptr()
185185
&&& self.ref_count.id() == owner.ref_count@.id()
186186
&&& self.vtable_ptr == owner.vtable_ptr@.pptr()

aster_common/src/mm/frame/meta_region_owners.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub ghost struct MetaRegionModel {
2424
}
2525

2626
impl Inv for MetaRegionOwners {
27-
open spec fn inv(&self) -> bool {
27+
open spec fn inv(self) -> bool {
2828
&&& self.slots.dom().finite()
2929
&&& {
3030
// All accessible slots are within the valid address range.
@@ -44,7 +44,7 @@ impl Inv for MetaRegionOwners {
4444
self.slots.contains_key(i) ==> {
4545
&&& self.slots[i]@.is_init()
4646
&&& self.slots[i]@.addr() == meta_addr(i)
47-
&&& self.slots[i]@.value().wf(&self.slot_owners[i])
47+
&&& self.slots[i]@.value().wf(self.slot_owners[i])
4848
&&& self.slot_owners[i].self_addr == self.slots[i]@.addr()
4949
&&& !self.dropped_slots.contains_key(i)
5050
}
@@ -54,7 +54,7 @@ impl Inv for MetaRegionOwners {
5454
self.dropped_slots.contains_key(i) ==> {
5555
&&& self.dropped_slots[i]@.is_init()
5656
&&& self.dropped_slots[i]@.addr() == meta_addr(i)
57-
&&& self.dropped_slots[i]@.value().wf(&self.slot_owners[i])
57+
&&& self.dropped_slots[i]@.value().wf(self.slot_owners[i])
5858
&&& self.slot_owners[i].self_addr == self.dropped_slots[i]@.addr()
5959
&&& !self.slots.contains_key(i)
6060
}
@@ -63,7 +63,7 @@ impl Inv for MetaRegionOwners {
6363
}
6464

6565
impl Inv for MetaRegionModel {
66-
open spec fn inv(&self) -> bool {
66+
open spec fn inv(self) -> bool {
6767
&&& self.slots.dom().finite()
6868
&&& forall|i: usize| i < max_meta_slots() <==> #[trigger] self.slots.contains_key(i)
6969
&&& forall|i: usize| #[trigger] self.slots.contains_key(i) ==> self.slots[i].inv()
@@ -73,19 +73,19 @@ impl Inv for MetaRegionModel {
7373
impl InvView for MetaRegionOwners {
7474
type V = MetaRegionModel;
7575

76-
open spec fn view(&self) -> Self::V {
76+
open spec fn view(self) -> Self::V {
7777
let slots = self.slot_owners.map_values(|s: MetaSlotOwner| s.view());
7878
MetaRegionModel { slots }
7979
}
8080

8181
// XXX: verus `map_values` does not preserves the `finite()` attribute.
82-
axiom fn view_preserves_inv(&self);
82+
axiom fn view_preserves_inv(self);
8383
}
8484

8585
impl OwnerOf for MetaRegion {
8686
type Owner = MetaRegionOwners;
8787

88-
open spec fn wf(&self, owner: &Self::Owner) -> bool {
88+
open spec fn wf(self, owner: Self::Owner) -> bool {
8989
true
9090
}
9191
}

aster_common/src/mm/frame/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub struct Frame<M: AnyFrameMeta> {
4141
}
4242

4343
impl<M: AnyFrameMeta> Inv for Frame<M> {
44-
open spec fn inv(&self) -> bool {
44+
open spec fn inv(self) -> bool {
4545
&&& self.ptr.addr() % META_SLOT_SIZE() == 0
4646
&&& FRAME_METADATA_RANGE().start <= self.ptr.addr() < FRAME_METADATA_RANGE().start
4747
+ MAX_NR_PAGES() * META_SLOT_SIZE()
@@ -65,12 +65,12 @@ impl<M: AnyFrameMeta> Frame<M> {
6565
owner:
6666
MetaSlotOwner,
6767
// Tracked(p_inner): Tracked<&'a cell::PointsTo<MetaSlotInner>>,
68-
) -> (res: &PageTablePageMeta<C>)
68+
) -> (res: &'a PageTablePageMeta<C>)
6969
requires
7070
self.inv(),
7171
p_slot.pptr() == self.ptr,
7272
p_slot.is_init(),
73-
p_slot.value().wf(&owner),
73+
p_slot.value().wf(owner),
7474
is_variant(owner.view().storage.value(), "PTNode"),
7575
ensures
7676
// PTNode(*res) == owner.view().storage.value(),

aster_common/src/mm/frame/unique.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub ghost struct UniqueFrameModel<M: AnyFrameMeta + Repr<MetaSlotStorage> + Owne
2424
}
2525

2626
impl<M: AnyFrameMeta + Repr<MetaSlotStorage> + OwnerOf> Inv for UniqueFrameOwner<M> {
27-
open spec fn inv(&self) -> bool {
27+
open spec fn inv(self) -> bool {
2828
&&& self.meta_perm@.is_init()
2929
&&& self.meta_perm@.wf()
3030
&&& self.slot_index == frame_to_index(meta_to_frame(self.meta_perm@.addr()))
@@ -36,30 +36,30 @@ impl<M: AnyFrameMeta + Repr<MetaSlotStorage> + OwnerOf> Inv for UniqueFrameOwner
3636
}
3737

3838
impl<M: AnyFrameMeta + Repr<MetaSlotStorage> + OwnerOf> Inv for UniqueFrameModel<M> {
39-
open spec fn inv(&self) -> bool {
39+
open spec fn inv(self) -> bool {
4040
true
4141
}
4242
}
4343

4444
impl<M: AnyFrameMeta + Repr<MetaSlotStorage> + OwnerOf> InvView for UniqueFrameOwner<M> {
4545
type V = UniqueFrameModel<M>;
4646

47-
open spec fn view(&self) -> Self::V {
47+
open spec fn view(self) -> Self::V {
4848
UniqueFrameModel { meta: self.meta_own@@ }
4949
}
5050

51-
proof fn view_preserves_inv(&self) {
51+
proof fn view_preserves_inv(self) {
5252
}
5353
}
5454

5555
impl<M: AnyFrameMeta + Repr<MetaSlotStorage> + OwnerOf> UniqueFrameOwner<M> {
56-
pub open spec fn perm_inv(&self, perm: PointsTo<MetaSlot>) -> bool {
56+
pub open spec fn perm_inv(self, perm: PointsTo<MetaSlot>) -> bool {
5757
&&& perm.is_init()
5858
&&& perm.value().storage.addr() == self.meta_perm@.addr()
5959
&&& perm.value().storage.addr() == self.meta_perm@.points_to@.addr()
6060
}
6161

62-
pub open spec fn global_inv(&self, regions: MetaRegionOwners) -> bool {
62+
pub open spec fn global_inv(self, regions: MetaRegionOwners) -> bool {
6363
&&& regions.slots.contains_key(self.slot_index) ==> self.perm_inv(
6464
regions.slots[self.slot_index]@,
6565
)
@@ -72,7 +72,7 @@ impl<M: AnyFrameMeta + Repr<MetaSlotStorage> + OwnerOf> UniqueFrameOwner<M> {
7272
impl<M: AnyFrameMeta + Repr<MetaSlotStorage> + OwnerOf> OwnerOf for UniqueFrame<M> {
7373
type Owner = UniqueFrameOwner<M>;
7474

75-
open spec fn wf(&self, owner: &Self::Owner) -> bool {
75+
open spec fn wf(self, owner: Self::Owner) -> bool {
7676
&&& self.ptr.addr() == owner.meta_perm@.addr()
7777
}
7878
}

0 commit comments

Comments
 (0)