summaryrefslogtreecommitdiff
path: root/cheri
diff options
context:
space:
mode:
authorRobert Norton2017-01-25 13:54:29 +0000
committerRobert Norton2017-01-25 16:15:04 +0000
commit4c28952d632c735478c433c80b69dbf175877ed9 (patch)
treed2cf14255fba95635ab79c176dfe252acf8e82f5 /cheri
parentb357733fefdbbbdd4efa56c8b3ddc6bcbeca4c28 (diff)
set offset of pcc on exception.
Diffstat (limited to 'cheri')
-rw-r--r--cheri/cheri_prelude_128.sail6
1 files changed, 4 insertions, 2 deletions
diff --git a/cheri/cheri_prelude_128.sail b/cheri/cheri_prelude_128.sail
index 323682b7..83056b3f 100644
--- a/cheri/cheri_prelude_128.sail
+++ b/cheri/cheri_prelude_128.sail
@@ -404,8 +404,10 @@ register CapCauseReg CapCause
function forall Type 'o . 'o SignalException ((Exception) ex) =
{
- C31 := PCC;
- (*C31.offset := PC; XXX fix this *)
+ let pcc = capRegToCapStruct(PCC) in
+ let (success, epcc) = setCapOffset(pcc, PC) in
+ C31 := capStructToCapReg(epcc);
+ (* XXX what if not success? *)
nextPCC := C29; (* KCC *)
delayedPCC := C29; (* always write delayedPCC together whether PCC so
that non-capability branches don't override PCC *)