Page MenuHomeFreeBSD

D59279.id.diff
No OneTemporary

D59279.id.diff

diff --git a/sys/arm/arm/exception.S b/sys/arm/arm/exception.S
--- a/sys/arm/arm/exception.S
+++ b/sys/arm/arm/exception.S
@@ -106,9 +106,9 @@
/*
* PUSHFRAMEINSVC - macro to push a trap frame on the stack in SVC32 mode
* This should only be used if the processor is not currently in SVC32
- * mode. The processor mode is switched to SVC mode and the trap frame is
- * stored. The SVC lr field is used to store the previous value of
- * lr in SVC mode.
+ * mode, except for data abort generated and handled by DTrace.
+ * The processor mode is switched to SVC mode and the trap frame is stored.
+ * The SVC lr field is used to store the previous value of lr in SVC mode.
*/
#define PUSHFRAMEINSVC \
stmdb sp, {r0-r3}; /* Save 4 registers */ \
diff --git a/sys/arm/arm/trap-v6.c b/sys/arm/arm/trap-v6.c
--- a/sys/arm/arm/trap-v6.c
+++ b/sys/arm/arm/trap-v6.c
@@ -315,6 +315,14 @@
CTR6(KTR_TRAP, "%s: fsr %#x (idx %u) far %#x prefetch %u usermode %d",
__func__, fsr, idx, far, prefetch, usermode);
+#ifdef KDTRACE_HOOKS
+ if (!usermode) {
+ if (dtrace_trap_func != NULL && (*dtrace_trap_func)(tf, idx)) {
+ return;
+ }
+ }
+#endif
+
/*
* Firstly, handle aborts that are not directly related to mapping.
*/
@@ -550,13 +558,6 @@
#endif
usermode = TRAPF_USERMODE(tf);
-#ifdef KDTRACE_HOOKS
- if (!usermode) {
- if (dtrace_trap_func != NULL && (*dtrace_trap_func)(tf, far))
- return (0);
- }
-#endif
-
mode = usermode ? "user" : "kernel";
rw_mode = fsr & FSR_WNR ? "write" : "read";
disable_interrupts(PSR_I);

File Metadata

Mime Type
text/plain
Expires
Thu, Sep 3, 1:38 PM (18 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37780352
Default Alt Text
D59279.id.diff (1 KB)

Event Timeline