Avoid infinite exception loop

PiperOrigin-RevId: 696199044
Change-Id: I13d544bb2fe4a5f782a5e52565ac7df6f0ac2aff
diff --git a/cheriot/cheriot_top.cc b/cheriot/cheriot_top.cc
index 798ccfe..f74fc76 100644
--- a/cheriot/cheriot_top.cc
+++ b/cheriot/cheriot_top.cc
@@ -210,8 +210,16 @@
 bool CheriotTop::ExecuteInstruction(Instruction *inst) {
   // Check that pcc has tag set.
   if (!pcc_->tag()) {
-    state_->HandleCheriRegException(inst, inst->address(),
-                                    EC::kCapExTagViolation, pcc_);
+    if (state_->mtcc()->tag()) {
+      state_->HandleCheriRegException(inst, inst->address(),
+                                      EC::kCapExTagViolation, pcc_);
+      return true;
+    }
+    // If the mtcc tag is not set, then we would get an infinite loop of
+    // exceptions. Better to exit.
+    LOG(ERROR) << absl::StrCat("Infinite exception loop detected at ",
+                               absl::Hex(inst->address()), " - halting");
+    RequestHalt(HaltReason::kSimulatorError, inst);
     return true;
   }
   // Check that pcc has execute permission.
diff --git a/cheriot/riscv_cheriot_instructions.cc b/cheriot/riscv_cheriot_instructions.cc
index cdd30ee..1bf26e0 100644
--- a/cheriot/riscv_cheriot_instructions.cc
+++ b/cheriot/riscv_cheriot_instructions.cc
@@ -79,7 +79,6 @@
 // Instruction semantic function bodies.
 
 void CheriotAuicap(const Instruction *instruction) {
-  // TODO(torerik): fix bug here.
   auto *cap_src = GetCapSource(instruction, 0);
   auto offset = generic::GetInstructionSource<uint32_t>(instruction, 1);
   auto *cap_dest = GetCapDest(instruction, 0);
diff --git a/repos.bzl b/repos.bzl
index a563a21..ded86d7 100644
--- a/repos.bzl
+++ b/repos.bzl
@@ -22,7 +22,7 @@
     if not native.existing_rule("com_google_mpact-riscv"):
         http_archive(
             name = "com_google_mpact-riscv",
-            sha256 = "b708de08f8371ad38d30eafb71951199d96de0901753398b2f923303e2938990",
-            strip_prefix = "mpact-riscv-39ca15d0f1265758fdfbef4b6cfd5d321988aeac",
-            url = "https://github.com/google/mpact-riscv/archive/39ca15d0f1265758fdfbef4b6cfd5d321988aeac.tar.gz",
+            sha256 = "7490948dac93eaa6d97f9f834d5831f9e46eae32e67cbb4b95c71be919e59487",
+            strip_prefix = "mpact-riscv-280f56fa6f91cda69d3e1198249db706024c1acb",
+            url = "https://github.com/google/mpact-riscv/archive/280f56fa6f91cda69d3e1198249db706024c1acb.tar.gz",
         )