diff options
| author | Robert Norton | 2017-01-25 13:54:29 +0000 |
|---|---|---|
| committer | Robert Norton | 2017-01-25 16:15:04 +0000 |
| commit | 4c28952d632c735478c433c80b69dbf175877ed9 (patch) | |
| tree | d2cf14255fba95635ab79c176dfe252acf8e82f5 /cheri | |
| parent | b357733fefdbbbdd4efa56c8b3ddc6bcbeca4c28 (diff) | |
set offset of pcc on exception.
Diffstat (limited to 'cheri')
| -rw-r--r-- | cheri/cheri_prelude_128.sail | 6 |
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 *) |
