Page MenuHomeFreeBSD

D45649.id140040.diff
No OneTemporary

D45649.id140040.diff

diff --git a/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c b/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c
--- a/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c
+++ b/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c
@@ -238,14 +238,37 @@
printf("IMPLEMENT ME: %s\n", __func__);
}
-/*ARGSUSED*/
uint64_t
-dtrace_getarg(int arg, int aframes)
+dtrace_getarg(int arg, int aframes __unused)
{
+ struct trapframe *tf;
- printf("IMPLEMENT ME: %s\n", __func__);
-
- return (0);
+ /*
+ * We only handle invop providers here.
+ */
+ if ((tf = curthread->t_dtrace_trapframe) == NULL) {
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP);
+ return (0);
+ } else if (arg < 8) {
+ return (tf->tf_x[arg]);
+ } else {
+ uintptr_t p;
+ uint64_t val;
+
+ p = (tf->tf_sp + (arg - 8) * sizeof(uint64_t));
+ if ((p & 7) != 0) {
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_BADALIGN);
+ cpu_core[curcpu].cpuc_dtrace_illval = p;
+ return (0);
+ }
+ if (!kstack_contains(curthread, p, sizeof(uint64_t))) {
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
+ cpu_core[curcpu].cpuc_dtrace_illval = p;
+ return (0);
+ }
+ memcpy(&val, (void *)p, sizeof(uint64_t));
+ return (val);
+ }
}
int

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 16, 4:34 AM (6 h, 16 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31570765
Default Alt Text
D45649.id140040.diff (1 KB)

Event Timeline