From 88bcd6b487cbf69e0814f684caccc7505b6ae89b Mon Sep 17 00:00:00 2001 From: Peter Rugg Date: Tue, 2 Jun 2020 10:20:44 +0100 Subject: [PATCH] Implement getHardPerms on CapMem --- CHERICC_Fat.bsv | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/CHERICC_Fat.bsv b/CHERICC_Fat.bsv index 2c79e7e..836056a 100644 --- a/CHERICC_Fat.bsv +++ b/CHERICC_Fat.bsv @@ -893,7 +893,23 @@ instance CHERICap #(CapMem, OTypeW, FlagsW, CapAddressW, CapW, TSub#(MW, 3)); capMem.flags = f; return pack(capMem); endfunction - function getHardPerms = error("getHardPerms not implemented for CapMem"); + function getHardPerms (x); + CapabilityInMemory cap = unpack(x); + return HardPerms { + permitSetCID: cap.perms.hard.permit_set_CID, + accessSysRegs: cap.perms.hard.access_sys_regs, + permitUnseal: cap.perms.hard.permit_unseal, + permitCCall: cap.perms.hard.permit_ccall, + permitSeal: cap.perms.hard.permit_seal, + permitStoreLocalCap: cap.perms.hard.permit_store_ephemeral_cap, + permitStoreCap: cap.perms.hard.permit_store_cap, + permitLoadCap: cap.perms.hard.permit_load_cap, + permitStore: cap.perms.hard.permit_store, + permitLoad: cap.perms.hard.permit_load, + permitExecute: cap.perms.hard.permit_execute, + global: cap.perms.hard.non_ephemeral + }; + endfunction function setHardPerms = error("setHardPerms not implemented for CapMem"); function getSoftPerms = error("getSoftPerms not implemented for CapMem"); function setSoftPerms = error("setSoftPerms not implemented for CapMem");