diff --git a/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c b/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c index ff0e068006b..037d4734659 100644 --- a/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c +++ b/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c @@ -228,10 +228,22 @@ dtrace_getupcstack(uint64_t *pcstack, int pcstack_limit) int dtrace_getustackdepth(void) { + proc_t *p = curproc; + struct trapframe *tf; + uintptr_t pc, fp; + int n = 0; - printf("IMPLEMENT ME: %s\n", __func__); + if (p == NULL || (tf = curthread->td_frame) == NULL) + return (0); - return (0); + if (DTRACE_CPUFLAG_ISSET(CPU_DTRACE_FAULT)) + return (-1); + + pc = tf->tf_elr; + fp = tf->tf_x[29]; + n += dtrace_getustack_common(NULL, 0, pc, fp); + + return (n); } void