/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* bos72V src/bos/usr/sbin/perf/pmapi/libpmapi/pmapi.h 1.32.1.9 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* Restricted Materials of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1999,2020 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* @(#)41 1.32.1.9 src/bos/usr/sbin/perf/pmapi/libpmapi/pmapi.h, pmapi, bos72V, v2020_17B7 4/22/20 00:49:06 */ #ifndef _H_PMAPI #define _H_PMAPI /* * COMPONENT_NAME: PMAPI * * ORIGINS: 27 * * -- ( when * combined with the aggregated modules for this product) * OBJECT CODE ONLY SOURCE MATERIALS * * (C) COPYRIGHT International Business Machines Corp. 1999, 2002. * All Rights Reserved * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ #include #include #include /* cid_t */ #ifdef __cplusplus extern "C" { #endif #define MAX_COUNTERS 8 /* maximum number of supported counters */ #define MIN_THRESH_VALUE 0 /* minimum threshold value */ #define MAX_THRESH_VALUE 63 /* maximum threshold value */ /* Each processor has a different event number for the "count-nothing event". * To shield this from the user the following define is used. */ #define COUNT_NOTHING -1 /* * defines for pm_initialize proctype argument */ #define PM_CURRENT -1 #define PM_PowerPC604 0 #define PM_PowerPC604e 1 #define PM_RS64_II 2 #define PM_POWER3 3 #define PM_RS64_III 4 #define PM_POWER3_II 5 #define PM_POWER4 6 #define PM_MPC7450 7 #define PM_POWER4_II 8 #define PM_POWER5 9 #define PM_PowerPC970 10 #define PM_POWER5_II 11 #define PM_POWER6 12 #define PM_PowerPC970MP 13 #define PM_POWERCOMPAT 14 #define PM_POWER7 15 /*#define PM_MAXPROCTYPE PM_POWER7*/ /* Defines for event filters */ #define PM_MAX_FILTER 4 /* # filters */ #define PM_VERIFIED 1 /* events that have been verified */ #define PM_UNVERIFIED 2 /* events that have not been verified*/ #define PM_CAVEAT 4 /* events that work with caveats */ #define PM_GET_GROUPS 8 /* want to receive group info */ /* Define performance monitor registers for POWER 8 */ #define PPMC1 771 #define PPMC2 772 #define PPMC3 773 #define PPMC4 774 #define PPMC5 775 #define PPMC6 776 #define PMMCR0 779 #define PMMCR2 769 #define PMMCRA 770 /* Define pragma functions to invoke PMC read/write millicode functions */ #pragma mc_func pmc_read_1to4 \ { \ "48008493" \ }\ #pragma reg_killed_by pmc_read_1to4 gr3, gr4, lr #pragma mc_func pmc_read_5to6 \ { \ "480084D3" \ }\ #pragma reg_killed_by pmc_read_5to6 gr3, gr4, lr #pragma mc_func mmcr_read \ { \ "48008503" \ }\ #pragma reg_killed_by mmcr_read gr3, gr4, lr #pragma mc_func sampled_regs_read \ { \ "48008533" \ }\ #pragma reg_killed_by sampled_regs_read gr3, gr4, lr #pragma mc_func pmc_write \ { \ "48008563" \ }\ #pragma reg_killed_by pmc_write gr3, gr5, cr0, lr #pragma mc_func mmcr_write \ { \ "480085F3" \ }\ #pragma reg_killed_by mmcr_write gr3, gr5, cr0, lr typedef uint ptid_t; typedef struct { /* structure for available events */ int event_id; /* event number */ char status; /* verified/unverified/... */ char threshold; /* thresholdable event */ char *short_name; /* mnemonic name */ char *long_name; /* long name */ char *description; /* full description */ } pm_events_t; typedef union { /* event status and characteristics */ int w; struct { unsigned unverified :1; unsigned verified :1; unsigned caveat :1; unsigned broken :1; unsigned spare1 :12; /* reserved for future usage */ unsigned group_only :1; /* grouped only event */ unsigned threshold :1; /* thresholdable event */ unsigned shared :1; /* shared event core level */ unsigned support_mode :1; /* support, user, kernel,hypervisor and proctree counting modes applied */ unsigned overflow :1; /* generate an interrupt on overflow */ unsigned marked :1; /* marked event */ unsigned sharedchip :1; /* shared event chip level */ unsigned speculative :1; /* speculative event */ unsigned undefined :1; /* speculative behavior undefined */ unsigned spare2 :7; /* reserved for future usage */ } b; } pm_status_t; typedef struct { /* structure for available events */ int event_id; /* event number */ pm_status_t status ; /* event status */ char *short_name; /* mnemonic name */ char *long_name; /* long name */ char *description; /* full description */ long reserved; /* reserved for future usage */ } pm_events2_t; typedef struct { /* structure returned by pminit */ int maxpmcs; /* number of available counters */ int *maxevents; /* number of events for each hw counter */ pm_events_t **list_events; /* list of available events */ int thresholdmult; /* threshold multiplier */ char *proc_name; /* processor name */ int hthresholdmult; /* upper threshold multiplier */ } pm_info_t; typedef union { /* features supported by processor */ int w; struct { unsigned spare :27; /* reserved for future usage */ unsigned compatibility :1; /* Compatibility mode is enabled */ unsigned spurr :1; /* SPURR supported */ unsigned purr :1; /* PURR supported */ unsigned runlatch :1; /* runlatch mode */ unsigned hypervisor :1; /* hypervisor counting mode */ } b; } pm_feature_t; typedef struct { /* structure returned by pminitialize */ int maxpmcs; /* number of available counters */ int *maxevents; /* number of events for each hw counter */ pm_events2_t **list_events; /* list of available events */ int thresholdmult; /* threshold multiplier */ int hthresholdmult; /* upper threshold multiplier */ int Hthresholdmult; /* hyper threshold multiplier */ int reserved; /* reserved for future usage */ char *proc_name; /* processor name */ pm_feature_t proc_feature; /* processor feature list */ int reserved2; /* reserved for future usage */ } pm_info2_t; typedef struct { /* structure for available events */ int group_id; /* group number */ int *events; /* events in this group, by ID # */ char *short_name; /* mnemonic name */ char *long_name; /* long name */ char *description; /* full description */ } pm_groups_t; typedef struct { int maxgroups; /* number of available groups */ pm_groups_t *event_groups; /* list of event groups */ } pm_groups_info_t; typedef union { /* defines mode of operations */ int w; struct { unsigned threshold :6; /* threshold value */ unsigned thresh_res :1; /* use upper threshold multiplier if set */ unsigned runlatch :1; /* runlatch enable/disable */ unsigned hypervisor :1; /* turns hypervisor counting on */ unsigned thresh_hres :1; /* use hyper threshold multiplier if set */ unsigned nointerrupt :1; /* interruption counting disabled */ unsigned wpar_all :1; /* collect per-WPAR data */ unsigned no_inherit :1; /* Child threads to inherit the parent context or not; 0- Inherit; 1- Dont inherit */ unsigned spare :12; unsigned shared :1; unsigned is_group :1; /* is an event group */ unsigned process :1; /* process level group indicator */ unsigned kernel :1; /* turns kernel mode counting on */ unsigned user :1; /* turns user mode counting on */ unsigned count :1; /* counting state */ unsigned proctree :1; /* turns process tree counting on */ } b; } pm_mode_t; typedef struct { /* structure for PM programing */ pm_mode_t mode; /* mode of operation */ int events[MAX_COUNTERS]; /* list of counted events */ long reserved; /* reserved for future use */ } pm_prog_t; typedef struct { int members; /* number of threads in group */ union { /* group characteristics */ int w; struct { unsigned spare :29; unsigned direct :1; /* hardware counters read in direct mode */ unsigned process :1; /* process level group indicator */ unsigned consistent :1; /* group data consistent with members */ } b; } flags; } pm_ginfo_t; typedef struct { /* structure for PM data */ pm_ginfo_t ginfo; /* group information */ long long accu[MAX_COUNTERS]; /* accumulated data */ long reserved; /* reserved for future use */ } pm_data_t; typedef struct { timebasestruct_t accu_timebase; /* accumulated time base */ timebasestruct_t accu_purr; /* accumulated PURR time */ timebasestruct_t accu_spurr; /* accumulated SPURR time */ } pm_accu_time_t; /* counters multiplexing support */ typedef int pm_events_prog_t[MAX_COUNTERS]; typedef unsigned int pm_mmcrs_prog_t[MAX_COUNTERS]; typedef struct { /* structure for PM programing */ pm_mode_t mode; /* mode of operation */ int slice_duration; /* duration of each time slice in ms */ int nb_events_prog; /* number of events_set */ pm_events_prog_t *events_set; /* list of counted events */ } pm_prog_mx_t; typedef struct { timebasestruct_t accu_time; /* accumulated time */ timebasestruct_t accu_purr; /* accumulated PURR time */ timebasestruct_t accu_spurr; /* accumulated SPURR time */ long long accu_data[MAX_COUNTERS];/* accumulated data */ } pm_accu_mx_t; typedef struct { /* structure for PM data */ pm_ginfo_t ginfo; /* group information */ int nb_accu_mx; /* number of accu_set */ int nb_mx_round; /* number of loops on all the event sets */ pm_accu_mx_t *accu_set; /* accumulated data */ } pm_data_mx_t; /* multi-mode programmation support */ typedef struct { /* structure for PM programing */ int slice_duration; /* duration of each time slice in ms */ int nb_set_prog; /* number of events_set */ pm_prog_t *prog_set; /* list of counted events */ } pm_prog_mm_t; /* unique WPAR opaque identifier */ typedef unsigned long long pm_wp_handle_t; #define PM_INVALID_WP_HANDLE ((pm_wp_handle_t)-1) typedef struct { cid_t cid; /* corral identifier */ char name[MAXWPARNAMELEN + 1]; /* WPAR name */ pm_wp_handle_t hwpar; /* WPAR opaque identifier */ } pm_wpar_ctx_info_t; typedef enum profiler_type { P_THREAD = 0, P_THREAD_GROUP, P_PROCESS }profiler_type_t; typedef pm_accu_mx_t pm_accu_t; typedef struct pm_data_time { int nb_accu; /* number of accu_set */ int nb_mx_round; /* number of loops on all the event sets */ timebasestruct_t total_active_time; /* total time context is active and competing for PMU */ timebasestruct_t total_active_purr; /* total PURR time context is active and competing for PMU */ timebasestruct_t total_active_spurr; /* total SPURR time context is active and competing for PMU */ timebasestruct_t total_profiled_time; /* total time context got the PMU */ timebasestruct_t total_profiled_purr; /* total PURR time context got the PMU */ timebasestruct_t total_profiled_spurr; /* total SPURR time context got the PMU */ pm_ginfo_t ginfo; /* group information */ pm_accu_t *accu_set; /* accumulated data */ } pm_data_time_t; /* function prototypes */ extern double pm_cycles(void); extern void pm_error(char *where, int error); extern char *pm_strerror(char *where, int error); extern int pm_init(int filter, pm_info_t *pminfo, pm_groups_info_t *pmgroups); extern int pm_initialize(int filter, pm_info2_t *pminfo, pm_groups_info_t *pmgroups, int proctype); extern int pm_set_program(pm_prog_t *prog); extern int pm_set_program_mx(pm_prog_mx_t *prog); extern int pm_set_program_mm(pm_prog_mm_t *prog); extern int pm_set_program_wp(cid_t, pm_prog_t *); extern int pm_set_program_wp_mm(cid_t, pm_prog_mm_t *); extern int pm_get_program(pm_prog_t *prog); extern int pm_get_program_mx(pm_prog_mx_t *prog); extern int pm_get_program_mm(pm_prog_mm_t *prog); extern int pm_get_program_wp(cid_t, pm_prog_t *); extern int pm_get_program_wp_mm(cid_t, pm_prog_mm_t *); extern int pm_start(void); extern int pm_tstart(timebasestruct_t *time); extern int pm_start_wp(cid_t); extern int pm_tstart_wp(cid_t, timebasestruct_t *); extern int pm_stop(void); extern int pm_tstop(timebasestruct_t *time); extern int pm_stop_wp(cid_t); extern int pm_tstop_wp(cid_t, timebasestruct_t *); extern int pm_reset_data(void); extern int pm_reset_data_wp(cid_t); extern int pm_get_data(pm_data_t *data); extern int pm_get_tdata(pm_data_t *data, timebasestruct_t *time); extern int pm_get_Tdata(pm_data_t *data, pm_accu_time_t *times); extern int pm_get_data_mx(pm_data_mx_t *data); extern int pm_get_tdata_mx(pm_data_mx_t *data, timebasestruct_t *time); extern int pm_get_data_lcpu(int lcpuid, pm_data_t *data); extern int pm_get_data_cpu(int cpuid, pm_data_t *data); extern int pm_get_tdata_lcpu(int lcpuid, pm_data_t *data, timebasestruct_t *time); extern int pm_get_tdata_cpu(int cpuid, pm_data_t *data, timebasestruct_t *time); extern int pm_get_Tdata_lcpu(int lcpuid, pm_data_t *data, pm_accu_time_t *time); extern int pm_get_Tdata_cpu(int cpuid, pm_data_t *data, pm_accu_time_t *time); extern int pm_get_data_lcpu_mx(int lcpuid, pm_data_mx_t *data); extern int pm_get_data_cpu_mx(int cpuid, pm_data_mx_t *data); extern int pm_get_tdata_lcpu_mx(int lcpuid, pm_data_mx_t *data, timebasestruct_t *time); extern int pm_get_tdata_cpu_mx(int cpuid, pm_data_mx_t *data, timebasestruct_t *time); extern int pm_get_data_wp(pm_wp_handle_t, pm_data_t *); extern int pm_get_tdata_wp(pm_wp_handle_t, pm_data_t *, timebasestruct_t *); extern int pm_get_Tdata_wp(pm_wp_handle_t, pm_data_t *, pm_accu_time_t *); extern int pm_get_data_wp_mx(pm_wp_handle_t, pm_data_mx_t *); extern int pm_get_tdata_wp_mx(pm_wp_handle_t, pm_data_mx_t *, timebasestruct_t *); extern int pm_get_data_lcpu_wp(pm_wp_handle_t, int, pm_data_t *); extern int pm_get_tdata_lcpu_wp(pm_wp_handle_t, int, pm_data_t *, timebasestruct_t *); extern int pm_get_Tdata_lcpu_wp(pm_wp_handle_t, int, pm_data_t *, pm_accu_time_t *); extern int pm_get_data_lcpu_wp_mx(pm_wp_handle_t, int, pm_data_mx_t *); extern int pm_get_tdata_lcpu_wp_mx(pm_wp_handle_t, int, pm_data_mx_t *, timebasestruct_t *); extern int pm_delete_program(void); extern int pm_delete_program_wp(cid_t); extern int pm_get_wplist(const char *, pm_wpar_ctx_info_t *, int *); extern int pm_set_program_mythread(pm_prog_t *prog); extern int pm_set_program_mythread_mx(pm_prog_mx_t *prog); extern int pm_get_program_mythread(pm_prog_t *prog); extern int pm_get_program_mythread_mx(pm_prog_mx_t *prog); extern int pm_tstart_mythread(timebasestruct_t *time); extern int pm_start_mythread(void); extern int pm_tstop_mythread(timebasestruct_t *time); extern int pm_stop_mythread(void); extern int pm_reset_data_mythread(void); extern int pm_get_data_mythread(pm_data_t *data); extern int pm_get_tdata_mythread(pm_data_t *data, timebasestruct_t *time); extern int pm_get_Tdata_mythread(pm_data_t *data, pm_accu_time_t *time); extern int pm_get_data_mythread_mx(pm_data_mx_t *data); extern int pm_get_tdata_mythread_mx(pm_data_mx_t *data, timebasestruct_t *time); extern int pm_delete_program_mythread(void); extern int pm_set_program_thread(pid_t pid, tid_t tid, pm_prog_t *prog); extern int pm_set_program_thread_mx(pid_t pid, tid_t tid, pm_prog_mx_t *prog); extern int pm_set_program_thread_mm(pid_t pid, tid_t tid, pm_prog_mm_t *prog); extern int pm_get_program_thread(pid_t pid, tid_t tid, pm_prog_t *prog); extern int pm_get_program_thread_mx(pid_t pid, tid_t tid, pm_prog_mx_t *prog); extern int pm_get_program_thread_mm(pid_t pid, tid_t tid, pm_prog_mm_t *prog); extern int pm_start_thread(pid_t pid, tid_t tid); extern int pm_tstart_thread(pid_t pid, tid_t tid, timebasestruct_t *time); extern int pm_stop_thread(pid_t pid, tid_t tid); extern int pm_tstop_thread(pid_t pid, tid_t tid, timebasestruct_t *time); extern int pm_reset_data_thread(pid_t pid, tid_t tid); extern int pm_get_data_thread(pid_t pid, tid_t tid, pm_data_t *data); extern int pm_get_tdata_thread(pid_t pid, tid_t tid, pm_data_t *data, timebasestruct_t *time); extern int pm_get_Tdata_thread(pid_t pid, tid_t tid, pm_data_t *data, pm_accu_time_t *time); extern int pm_get_data_thread_mx(pid_t pid, tid_t tid, pm_data_mx_t *data); extern int pm_get_tdata_thread_mx(pid_t pid, tid_t tid, pm_data_mx_t *data, timebasestruct_t *time); extern int pm_delete_program_thread(pid_t pid, tid_t tid); extern int pm_set_program_pthread(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_t *prog); extern int pm_set_program_pthread_mx(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_mx_t *prog); extern int pm_set_program_pthread_mm(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_mm_t *prog); extern int pm_get_program_pthread(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_t *prog); extern int pm_get_program_pthread_mx(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_mx_t *prog); extern int pm_get_program_pthread_mm(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_mm_t *prog); extern int pm_start_pthread(pid_t pid, tid_t tid, ptid_t ptid); extern int pm_tstart_pthread(pid_t pid, tid_t tid, ptid_t ptid, timebasestruct_t *time); extern int pm_stop_pthread(pid_t pid, tid_t tid, ptid_t ptid); extern int pm_tstop_pthread(pid_t pid, tid_t tid, ptid_t ptid, timebasestruct_t *time); extern int pm_reset_data_pthread(pid_t pid, tid_t tid, ptid_t ptid); extern int pm_get_data_pthread(pid_t pid, tid_t tid, ptid_t ptid, pm_data_t *data); extern int pm_get_tdata_pthread(pid_t pid, tid_t tid, ptid_t ptid, pm_data_t *data, timebasestruct_t *time); extern int pm_get_Tdata_pthread(pid_t pid, tid_t tid, ptid_t ptid, pm_data_t *data, pm_accu_time_t *time); extern int pm_get_data_pthread_mx(pid_t pid, tid_t tid, ptid_t ptid, pm_data_mx_t *data); extern int pm_get_tdata_pthread_mx(pid_t pid, tid_t tid, ptid_t ptid, pm_data_mx_t *data, timebasestruct_t *time); extern int pm_delete_program_pthread(pid_t pid, tid_t tid, ptid_t ptid); extern int pm_set_program_mygroup(pm_prog_t *prog); extern int pm_set_program_mygroup_mx(pm_prog_mx_t *prog); extern int pm_set_program_mygroup_mm(pm_prog_mm_t *prog); extern int pm_get_program_mygroup(pm_prog_t *prog); extern int pm_get_program_mygroup_mx(pm_prog_mx_t *prog); extern int pm_get_program_mygroup_mm(pm_prog_mm_t *prog); extern int pm_start_mygroup(void); extern int pm_tstart_mygroup(timebasestruct_t *time); extern int pm_stop_mygroup(void); extern int pm_tstop_mygroup(timebasestruct_t *time); extern int pm_reset_data_mygroup(void); extern int pm_get_data_mygroup(pm_data_t *data); extern int pm_get_tdata_mygroup(pm_data_t *data, timebasestruct_t *time); extern int pm_get_Tdata_mygroup(pm_data_t *data, pm_accu_time_t *time); extern int pm_get_data_mygroup_mx(pm_data_mx_t *data); extern int pm_get_tdata_mygroup_mx(pm_data_mx_t *data, timebasestruct_t *time); extern int pm_delete_program_mygroup(void); extern int pm_set_program_group(pid_t pid, tid_t tid, pm_prog_t *prog); extern int pm_set_program_group_mx(pid_t pid, tid_t tid, pm_prog_mx_t *prog); extern int pm_set_program_group_mm(pid_t pid, tid_t tid, pm_prog_mm_t *prog); extern int pm_get_program_group(pid_t pid, tid_t tid, pm_prog_t *prog); extern int pm_get_program_group_mx(pid_t pid, tid_t tid, pm_prog_mx_t *prog); extern int pm_get_program_group_mm(pid_t pid, tid_t tid, pm_prog_mm_t *prog); extern int pm_start_group(pid_t pid, tid_t tid); extern int pm_tstart_group(pid_t pid, tid_t tid, timebasestruct_t *time); extern int pm_stop_group(pid_t pid, tid_t tid); extern int pm_tstop_group(pid_t pid, tid_t tid, timebasestruct_t *time); extern int pm_reset_data_group(pid_t pid, tid_t tid); extern int pm_get_data_group(pid_t pid, tid_t tid, pm_data_t *data); extern int pm_get_tdata_group(pid_t pid, tid_t tid, pm_data_t *data, timebasestruct_t *time); extern int pm_get_Tdata_group(pid_t pid, tid_t tid, pm_data_t *data, pm_accu_time_t *time); extern int pm_get_data_group_mx(pid_t pid, tid_t tid, pm_data_mx_t *data); extern int pm_get_tdata_group_mx(pid_t pid, tid_t tid, pm_data_mx_t *data, timebasestruct_t *time); extern int pm_delete_program_group(pid_t pid, tid_t tid); extern int pm_set_program_pgroup(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_t *prog); extern int pm_set_program_pgroup_mx(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_mx_t *prog); extern int pm_set_program_pgroup_mm(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_mm_t *prog); extern int pm_get_program_pgroup(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_t *prog); extern int pm_get_program_pgroup_mx(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_mx_t *prog); extern int pm_get_program_pgroup_mm(pid_t pid, tid_t tid, ptid_t ptid, pm_prog_mm_t *prog); extern int pm_start_pgroup(pid_t pid, tid_t tid, ptid_t ptid); extern int pm_tstart_pgroup(pid_t pid, tid_t tid, ptid_t ptid, timebasestruct_t *time); extern int pm_stop_pgroup(pid_t pid, tid_t tid, ptid_t ptid); extern int pm_tstop_pgroup(pid_t pid, tid_t tid, ptid_t ptid, timebasestruct_t *time); extern int pm_reset_data_pgroup(pid_t pid, tid_t tid, ptid_t ptid); extern int pm_get_data_pgroup(pid_t pid, tid_t tid, ptid_t ptid, pm_data_t *data); extern int pm_get_tdata_pgroup(pid_t pid, tid_t tid, ptid_t ptid, pm_data_t *data, timebasestruct_t *time); extern int pm_get_Tdata_pgroup(pid_t pid, tid_t tid, ptid_t ptid, pm_data_t *data, pm_accu_time_t *time); extern int pm_get_data_pgroup_mx(pid_t pid, tid_t tid, ptid_t ptid, pm_data_mx_t *data); extern int pm_get_tdata_pgroup_mx(pid_t pid, tid_t tid, ptid_t ptid, pm_data_mx_t *data, timebasestruct_t *time); extern int pm_delete_program_pgroup(pid_t pid, tid_t tid, ptid_t ptid); extern int pm_get_data_generic( pid_t pid, tid_t tid, ptid_t ptid, profiler_type_t prof_type, pm_data_time_t *data); #ifdef __cplusplus } #endif #endif