summaryrefslogtreecommitdiffstats
path: root/sys/i386/include/pmc_mdep.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386/include/pmc_mdep.h')
-rw-r--r--sys/i386/include/pmc_mdep.h29
1 files changed, 19 insertions, 10 deletions
diff --git a/sys/i386/include/pmc_mdep.h b/sys/i386/include/pmc_mdep.h
index 9209a2b..5ce791a 100644
--- a/sys/i386/include/pmc_mdep.h
+++ b/sys/i386/include/pmc_mdep.h
@@ -66,16 +66,16 @@ struct pmc_mdep;
* measurement architecture have PMCs of the following classes: TSC,
* IAF, IAP, UCF and UCP.
*/
-#define PMC_MDEP_CLASS_INDEX_TSC 0
-#define PMC_MDEP_CLASS_INDEX_K7 1
-#define PMC_MDEP_CLASS_INDEX_K8 1
-#define PMC_MDEP_CLASS_INDEX_P4 1
-#define PMC_MDEP_CLASS_INDEX_P5 1
-#define PMC_MDEP_CLASS_INDEX_P6 1
-#define PMC_MDEP_CLASS_INDEX_IAP 1
-#define PMC_MDEP_CLASS_INDEX_IAF 2
-#define PMC_MDEP_CLASS_INDEX_UCP 3
-#define PMC_MDEP_CLASS_INDEX_UCF 4
+#define PMC_MDEP_CLASS_INDEX_TSC 1
+#define PMC_MDEP_CLASS_INDEX_K7 2
+#define PMC_MDEP_CLASS_INDEX_K8 2
+#define PMC_MDEP_CLASS_INDEX_P4 2
+#define PMC_MDEP_CLASS_INDEX_P5 2
+#define PMC_MDEP_CLASS_INDEX_P6 2
+#define PMC_MDEP_CLASS_INDEX_IAP 2
+#define PMC_MDEP_CLASS_INDEX_IAF 3
+#define PMC_MDEP_CLASS_INDEX_UCP 4
+#define PMC_MDEP_CLASS_INDEX_UCF 5
/*
* Architecture specific extensions to <sys/pmc.h> structures.
@@ -154,6 +154,15 @@ struct pmc_mdep;
#define PMC_AT_FUNCTION_EPILOGUE_RET(I) \
(((I) & 0xFF) == 0xC3) /* ret */
+/* Build a fake kernel trapframe from current instruction pointer. */
+#define PMC_FAKE_TRAPFRAME(TF) \
+ do { \
+ (TF)->tf_cs = 0; (TF)->tf_eflags = 0; \
+ __asm __volatile("movl %%ebp,%0" : "=r" ((TF)->tf_ebp)); \
+ __asm __volatile("movl %%esp,%0" : "=r" ((TF)->tf_esp)); \
+ __asm __volatile("call 1f \n\t1: pop %0" : "=r"((TF)->tf_eip)); \
+ } while (0)
+
/*
* Prototypes
*/
OpenPOWER on IntegriCloud