Skip to content

Commit

Permalink
Add some SMT properties for CSetBoundsRoundDown
Browse files Browse the repository at this point in the history
  • Loading branch information
nwf committed Nov 20, 2024
1 parent 4936443 commit 3990ca5
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
1 change: 1 addition & 0 deletions properties/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ SRCS+=${TOP}/src/cheri_types.sail
SRCS+=${TOP}/src/cheri_cap_common.sail
SRCS+=proplib.sail
SRCS+=props.sail
SRCS+=props_setboundsrounddown.sail

all: generate_smt run_smt

Expand Down
37 changes: 37 additions & 0 deletions properties/props_setboundsrounddown.sail
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*!
* THIS checks that CSetBoundsRoundDown meets its description: the result leaves
* the base unaltered and returns a capability with length at most the requested
* size.
*/
$counterexample
function prop_csbrd_brief(reqBase : CapAddrBits, reqLen : CapAddrBits) -> bool = {
let c = setCapBoundsRoundDown(root_cap_mem, reqBase, reqLen);
let (base, top) = getCapBoundsBits(c);
let reqTop = (0b0 @ reqBase) + (0b0 @ reqLen);
let saneTop = reqTop <=_u 0b1@0x00000000;
saneTop --> ((base == reqBase) & (top <=_u reqTop) & (0b0 @ base <=_u top))
}

/*!
* THIS checks that exactly representable requests give equal answers between
* CSetBoundsRoundDown and CSetBounds.
*/
$property
function prop_csbrd_exact(reqBase : CapAddrBits, reqLen : CapAddrBits) -> bool = {
let cRD = setCapBoundsRoundDown(root_cap_mem, reqBase, reqLen);
let (exact, cSB) = setCapBounds(root_cap_mem, reqBase, reqLen);
exact --> (cRD == cSB)
}

/*!
* THIS checks that the resulting capability has nonzero length unless requested
*/
$property
function prop_csbrd_nonzero(reqBase : CapAddrBits, reqLen : CapAddrBits) -> bool = {
let c = setCapBoundsRoundDown(root_cap_mem, reqBase, reqLen);
let (resBase, resTop) = getCapBoundsBits(c);
let reqTop = (0b0 @ reqBase) + (0b0 @ reqLen);
let saneTop = reqTop <=_u 0b1@0x00000000;
(saneTop & (reqLen != zeros())) --> (0b0 @ resBase <_u resTop)
}

0 comments on commit 3990ca5

Please sign in to comment.