Page MenuHomeFreeBSD

D53073.diff
No OneTemporary

D53073.diff

diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c
--- a/sys/arm64/arm64/trap.c
+++ b/sys/arm64/arm64/trap.c
@@ -228,6 +228,8 @@
external_abort(struct thread *td, struct trapframe *frame, uint64_t esr,
uint64_t far, int lower)
{
+ struct pcb *pcb;
+
if (lower) {
call_trapsignal(td, SIGBUS, BUS_OBJERR, (void *)far,
ESR_ELx_EXCEPTION(frame->tf_esr));
@@ -235,6 +237,15 @@
return;
}
+ /* If there is a fault handler use it */
+ if (td->td_intr_nesting_level == 0) {
+ pcb = td->td_pcb;
+ if (pcb->pcb_onfault != 0) {
+ frame->tf_elr = pcb->pcb_onfault;
+ return;
+ }
+ }
+
/*
* Try to handle synchronous external aborts caused by
* bus_space_peek() and/or bus_space_poke() functions.

File Metadata

Mime Type
text/plain
Expires
Sun, Feb 1, 9:46 PM (6 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28407365
Default Alt Text
D53073.diff (735 B)

Event Timeline