+int
+enable_branch_tracing()
+{
+#ifndef i386
+ struct proc *p;
+ if (-1 != pc_sample_pid) {
+ p = pfind(pc_sample_pid);
+ if (p) {
+ p->p_flag |= P_BTRACE;
+ }
+ }
+ else {
+ pc_trace_frameworks = TRUE;
+ }
+
+ return 1;
+
+#else
+ return 0;
+#endif
+}
+
+int
+disable_branch_tracing()
+{
+ struct proc *p;
+ switch (pc_sample_pid) {
+ case -1:
+ pc_trace_frameworks = FALSE;
+ break;
+ case 0:
+ break;
+ default:
+ p = pfind(pc_sample_pid);
+ if (p) {
+ p->p_flag &= ~P_BTRACE;
+ }
+ break;
+}
+ clr_be_bit();
+ return 1;
+}
+
+/*
+ * this only works for the current proc as it
+ * is called from context_switch in the scheduler
+ */
+int
+branch_tracing_enabled()
+{
+ struct proc *p = current_proc();
+ if (TRUE == pc_trace_frameworks) return TRUE;
+ if (p) {
+ return (P_BTRACE == (p->p_flag & P_BTRACE));
+ }
+ return 0;
+}
+
+