aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Turner <andrew@FreeBSD.org>2023-03-31 09:15:45 +0000
committerAndrew Turner <andrew@FreeBSD.org>2023-09-25 08:41:15 +0000
commit9cab59fe05b492b23e10ff9c507511cdaa97bae4 (patch)
tree7dc21468b6bb4f5fc5cca97670c799061d71fcf8
parentc1a1e8368b53009efe11fd31990182de2d9f5962 (diff)
downloadsrc-9cab59fe05b492b23e10ff9c507511cdaa97bae4.tar.gz
src-9cab59fe05b492b23e10ff9c507511cdaa97bae4.zip
Handle the arm64 unknown exception separately
Rather than falling through to the default case handle the unknown exception with its own panic message. As ESR_EL1 is zero for this exception stop printing it. Sponsored by: Arm Ltd (cherry picked from commit 3a0cc6fe61ea29334c17dfb71bf24ba9e604ab4c)
-rw-r--r--sys/arm64/arm64/trap.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c
index bc2136cb9e80..10a2138d9625 100644
--- a/sys/arm64/arm64/trap.c
+++ b/sys/arm64/arm64/trap.c
@@ -513,9 +513,12 @@ do_el1h_sync(struct thread *td, struct trapframe *frame)
case EXCP_UNKNOWN:
if (undef_insn(1, frame))
break;
- printf("Undefined instruction: %08x\n",
+ far = READ_SPECIALREG(far_el1);
+ print_registers(frame);
+ print_gp_register("far", far);
+ panic("Undefined instruction: %08x",
*(uint32_t *)frame->tf_elr);
- /* FALLTHROUGH */
+ break;
default:
print_registers(frame);
print_gp_register("far", READ_SPECIALREG(far_el1));