summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlastair Reid2018-07-03 14:00:22 +0100
committerAlastair Reid2018-07-03 14:00:42 +0100
commit9502f9ffabc5ec8f423974bd89da3d9810e4df80 (patch)
tree161350068fd8983639abd88ca953e0e6f5abbe15
parent4f986dfa677652e0fa984e356e22c392ea945934 (diff)
Main: fix SEE handling
If a SEE exception is not caught within the decoder, it is an error in the Sail implementation or in the instruction set spec. This change ensures that we promptly detect and unambiguously report such errors.
-rw-r--r--aarch64/elfmain.sail7
1 files changed, 6 insertions, 1 deletions
diff --git a/aarch64/elfmain.sail b/aarch64/elfmain.sail
index bccbbda5..44b6c14a 100644
--- a/aarch64/elfmain.sail
+++ b/aarch64/elfmain.sail
@@ -107,7 +107,12 @@ function Step_CPU() = {
} catch {
// note: if supporting AArch32 as well, call _UndefinedFault() instead
Error_Undefined() => try { AArch64_UndefinedFault() } catch { _ => print("Exception during Undefined recovery\n") },
- Error_See(_) => try { AArch64_UndefinedFault() } catch { _ => print("Exception during SEE recovery\n") },
+ Error_See(_) => {
+ print(concat_str("BROKEN: SEE support ",
+ concat_str(HexStr(UInt(__currentInstr)),
+ "\n")));
+ exit()
+ },
Error_ReservedEncoding(_) => try { AArch64_UndefinedFault() } catch { _ => print("Exception during ReservedEncoding recovery\n") },
Error_ExceptionTaken() => {
print(concat_str("ExceptionTaken during Decode/Execute from PC=",