Page MenuHomeFreeBSD

D25590.1785281834.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D25590.1785281834.diff

Index: sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
===================================================================
--- sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
+++ sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
@@ -231,6 +231,31 @@
(uintptr_t)which, (uintptr_t)fault, (uintptr_t)fltoffs);
}
+static void
+dtrace_load64(uint64_t *addr, struct trapframe *frame, u_int reg)
+{
+
+ KASSERT(reg <= 31, ("dtrace_load64: Invalid register %u", reg));
+ if (reg < nitems(frame->tf_x))
+ frame->tf_x[reg] = *addr;
+ else if (reg == 30) /* lr */
+ frame->tf_lr = *addr;
+ /* Nothing to do for load to xzr */
+}
+
+static void
+dtrace_store64(uint64_t *addr, struct trapframe *frame, u_int reg)
+{
+
+ KASSERT(reg <= 31, ("dtrace_store64: Invalid register %u", reg));
+ if (reg < nitems(frame->tf_x))
+ *addr = frame->tf_x[reg];
+ else if (reg == 30) /* lr */
+ *addr = frame->tf_lr;
+ else if (reg == 31) /* xzr */
+ *addr = 0;
+}
+
static int
dtrace_invop_start(struct trapframe *frame)
{
@@ -258,12 +283,12 @@
sp -= (~offs & OFFSET_MASK) + 1;
else
sp += (offs);
- *(sp + 0) = frame->tf_x[arg1];
- *(sp + 1) = frame->tf_x[arg2];
+ dtrace_store64(sp + 0, frame, arg1);
+ dtrace_store64(sp + 1, frame, arg2);
break;
case LDP_64:
- frame->tf_x[arg1] = *(sp + 0);
- frame->tf_x[arg2] = *(sp + 1);
+ dtrace_load64(sp, frame, arg1);
+ dtrace_load64(sp + 1, frame, arg2);
if (offs >> (OFFSET_SIZE - 1))
sp -= (~offs & OFFSET_MASK) + 1;
else

File Metadata

Mime Type
text/plain
Expires
Tue, Jul 28, 11:37 PM (7 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29297915
Default Alt Text
D25590.1785281834.diff (1 KB)

Event Timeline