|
PAPI
5.0.1.0
|
00001 #include <stdio.h> 00002 #include <unistd.h> 00003 #include <string.h> 00004 #include <errno.h> 00005 00006 #include PEINCLUDE 00007 00008 #include "papi_debug.h" /* SUBDBG */ 00009 00010 #include <asm/unistd.h> 00011 00012 /* In case headers aren't new enough to have __NR_perf_event_open */ 00013 #ifndef __NR_perf_event_open 00014 00015 #ifdef __powerpc__ 00016 #define __NR_perf_event_open 319 00017 #elif defined(__x86_64__) 00018 #define __NR_perf_event_open 298 00019 #elif defined(__i386__) 00020 #define __NR_perf_event_open 336 00021 #elif defined(__arm__) 366+0x900000 00022 #define __NR_perf_event_open 00023 #endif 00024 00025 #endif 00026 00027 long 00028 sys_perf_event_open( struct perf_event_attr *hw_event, pid_t pid, int cpu, 00029 int group_fd, unsigned long flags ) 00030 { 00031 int ret; 00032 00033 SUBDBG("sys_perf_event_open(%p,%d,%d,%d,%lx\n",hw_event,pid,cpu,group_fd,flags); 00034 SUBDBG(" type: %d\n",hw_event->type); 00035 SUBDBG(" size: %d\n",hw_event->size); 00036 SUBDBG(" config: %"PRIx64" (%"PRIu64")\n",hw_event->config, 00037 hw_event->config); 00038 SUBDBG(" sample_period: %"PRIu64"\n",hw_event->sample_period); 00039 SUBDBG(" sample_type: %"PRIu64"\n",hw_event->sample_type); 00040 SUBDBG(" read_format: %"PRIu64"\n",hw_event->read_format); 00041 SUBDBG(" disabled: %d\n",hw_event->disabled); 00042 SUBDBG(" inherit: %d\n",hw_event->inherit); 00043 SUBDBG(" pinned: %d\n",hw_event->pinned); 00044 SUBDBG(" exclusive: %d\n",hw_event->exclusive); 00045 SUBDBG(" exclude_user: %d\n",hw_event->exclude_user); 00046 SUBDBG(" exclude_kernel: %d\n",hw_event->exclude_kernel); 00047 SUBDBG(" exclude_hv: %d\n",hw_event->exclude_hv); 00048 SUBDBG(" exclude_idle: %d\n",hw_event->exclude_idle); 00049 SUBDBG(" mmap: %d\n",hw_event->mmap); 00050 SUBDBG(" comm: %d\n",hw_event->comm); 00051 SUBDBG(" freq: %d\n",hw_event->freq); 00052 SUBDBG(" inherit_stat: %d\n",hw_event->inherit_stat); 00053 SUBDBG(" enable_on_exec: %d\n",hw_event->enable_on_exec); 00054 SUBDBG(" task: %d\n",hw_event->task); 00055 SUBDBG(" watermark: %d\n",hw_event->watermark); 00056 00057 00058 ret = 00059 syscall( __NR_perf_event_open, hw_event, pid, cpu, group_fd, flags ); 00060 #if defined(__x86_64__) || defined(__i386__) 00061 if ( ret < 0 && ret > -4096 ) { 00062 errno = -ret; 00063 ret = -1; 00064 } 00065 #endif 00066 SUBDBG("Returned %d %d %s\n",ret, 00067 ret<0?errno:0, 00068 ret<0?strerror(errno):" "); 00069 return ret; 00070 }