Index: sys/cddl/dev/dtrace/arm/dtrace_isa.c =================================================================== --- sys/cddl/dev/dtrace/arm/dtrace_isa.c +++ sys/cddl/dev/dtrace/arm/dtrace_isa.c @@ -71,13 +71,12 @@ { struct unwind_state state; register_t sp; - int scp_offset; int depth = 0; - if (intrpc != 0) + if (intrpc != 0) { pcstack[depth++] = (pc_t) intrpc; - - aframes++; + aframes++; + } __asm __volatile("mov %0, sp" : "=&r" (sp)); @@ -89,7 +88,12 @@ while (depth < pcstack_limit) { int done; - done = unwind_stack_one(&state, 1); + done = unwind_stack_one(&state, 0); + + if (state.update_mask == 0) + break; + if (!INKERNEL(state.registers[PC])) + break; /* * NB: Unlike some other architectures, we don't need to @@ -144,7 +148,6 @@ { struct unwind_state state; register_t sp; - int scp_offset; int done = 0; int depth = 1; @@ -156,7 +159,7 @@ state.registers[PC] = (uint32_t)dtrace_getstackdepth; do { - done = unwind_stack_one(&state, 1); + done = unwind_stack_one(&state, 0); depth++; } while (!done); Index: sys/cddl/dev/fbt/arm/fbt_isa.c =================================================================== --- sys/cddl/dev/fbt/arm/fbt_isa.c +++ sys/cddl/dev/fbt/arm/fbt_isa.c @@ -125,7 +125,7 @@ fbt = malloc(sizeof (fbt_probe_t), M_FBT, M_WAITOK | M_ZERO); fbt->fbtp_name = name; fbt->fbtp_id = dtrace_probe_create(fbt_id, modname, - name, FBT_ENTRY, 3, fbt); + name, FBT_ENTRY, 2, fbt); fbt->fbtp_patchpoint = instr; fbt->fbtp_ctl = lf; fbt->fbtp_loadcnt = lf->loadcnt; Index: sys/cddl/dev/sdt/sdt.c =================================================================== --- sys/cddl/dev/sdt/sdt.c +++ sys/cddl/dev/sdt/sdt.c @@ -186,7 +186,7 @@ if (dtrace_probe_lookup(prov->id, mod, func, name) != DTRACE_IDNONE) return; - (void)dtrace_probe_create(prov->id, mod, func, name, 1, probe); + (void)dtrace_probe_create(prov->id, mod, func, name, 0, probe); } /*