diff options
Diffstat (limited to 'sys/i386/include/pmc_mdep.h')
-rw-r--r-- | sys/i386/include/pmc_mdep.h | 29 |
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 */ |