summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdtrace/common/dt_proc.c
diff options
context:
space:
mode:
authorahl <none@none>2007-05-18 10:21:51 -0700
committerahl <none@none>2007-05-18 10:21:51 -0700
commitdcafa303bc5c0028c4ebf51300caac6e2ea88d74 (patch)
treec083b9fff44ce3a805be15fd63c8fef863888c2f /usr/src/lib/libdtrace/common/dt_proc.c
parent45d93f12402acbccc624631396fc3d0f7a2d5f74 (diff)
downloadillumos-gate-dcafa303bc5c0028c4ebf51300caac6e2ea88d74.tar.gz
6535590 Pid provider doesn't work with probe "main:entry"
6551723 dtrace's mkdemo.pl causes false positive on inter-workspace wsdiff 6556673 potential deadlock with USDT tear-down and enable
Diffstat (limited to 'usr/src/lib/libdtrace/common/dt_proc.c')
-rw-r--r--usr/src/lib/libdtrace/common/dt_proc.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/usr/src/lib/libdtrace/common/dt_proc.c b/usr/src/lib/libdtrace/common/dt_proc.c
index 3d739a7b06..419f13b847 100644
--- a/usr/src/lib/libdtrace/common/dt_proc.c
+++ b/usr/src/lib/libdtrace/common/dt_proc.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -162,7 +162,7 @@ dt_proc_bpmatch(dtrace_hdl_t *dtp, dt_proc_t *dpr)
(void) Pxecbkpt(dpr->dpr_proc, dbp->dbp_instr);
}
-void
+static void
dt_proc_bpenable(dt_proc_t *dpr)
{
dt_bkpt_t *dbp;
@@ -179,7 +179,7 @@ dt_proc_bpenable(dt_proc_t *dpr)
dt_dprintf("breakpoints enabled\n");
}
-void
+static void
dt_proc_bpdisable(dt_proc_t *dpr)
{
dt_bkpt_t *dbp;
@@ -241,8 +241,17 @@ dt_proc_stop(dt_proc_t *dpr, uint8_t why)
(void) pthread_cond_broadcast(&dpr->dpr_cv);
+ /*
+ * We disable breakpoints while stopped to preserve the
+ * integrity of the program text for both our own disassembly
+ * and that of the kernel.
+ */
+ dt_proc_bpdisable(dpr);
+
while (dpr->dpr_stop & DT_PROC_STOP_IDLE)
(void) pthread_cond_wait(&dpr->dpr_cv, &dpr->dpr_lock);
+
+ dt_proc_bpenable(dpr);
}
}