From cfebc0faa7cf1377d7c419e9e2ce889f43ffb68b Mon Sep 17 00:00:00 2001 From: Justin Hibbits Date: Wed, 21 Nov 2018 16:47:11 +0000 Subject: [PATCH] DTrace/powerpc: Fix FBT return probes The FBT fuction boundary prober was setting one return probe marker value, but the dtrace handler was expecting another. This causes a hang when tracing return probes. --- sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h | 11 +++++------ sys/cddl/dev/fbt/powerpc/fbt_isa.c | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h b/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h index efbf36e86339..b474f91ce01d 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h +++ b/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h @@ -2435,12 +2435,11 @@ extern void dtrace_helpers_destroy(proc_t *); #elif defined(__powerpc__) -#define DTRACE_INVOP_RET 1 -#define DTRACE_INVOP_BCTR 2 -#define DTRACE_INVOP_BLR 3 -#define DTRACE_INVOP_JUMP 4 -#define DTRACE_INVOP_MFLR_R0 5 -#define DTRACE_INVOP_NOP 6 +#define DTRACE_INVOP_BCTR 1 +#define DTRACE_INVOP_BLR 2 +#define DTRACE_INVOP_JUMP 3 +#define DTRACE_INVOP_MFLR_R0 4 +#define DTRACE_INVOP_NOP 5 #elif defined(__arm__) diff --git a/sys/cddl/dev/fbt/powerpc/fbt_isa.c b/sys/cddl/dev/fbt/powerpc/fbt_isa.c index 6072737fa1e2..8843e2aafe12 100644 --- a/sys/cddl/dev/fbt/powerpc/fbt_isa.c +++ b/sys/cddl/dev/fbt/powerpc/fbt_isa.c @@ -221,7 +221,7 @@ fbt_provide_module_function(linker_file_t lf, int symindx, if (*instr == FBT_BCTR) fbt->fbtp_rval = DTRACE_INVOP_BCTR; else if (*instr == FBT_BLR) - fbt->fbtp_rval = DTRACE_INVOP_RET; + fbt->fbtp_rval = DTRACE_INVOP_BLR; else fbt->fbtp_rval = DTRACE_INVOP_JUMP;