PAPI 7.1.0.0
Loading...
Searching...
No Matches
pfmlib_os_linux_v3.c
Go to the documentation of this file.
1/*
2 * pfmlib_os_linux_v3.c: Perfmon3 API syscalls
3 *
4 * Copyright (c) 2008 Google, Inc
5 * Contributed by Stephane Eranian <eranian@gmail.com>
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
11 * of the Software, and to permit persons to whom the Software is furnished to do so,
12 * subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
18 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
19 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
21 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
22 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24#ifndef _GNU_SOURCE
25#define _GNU_SOURCE /* for getline */
26#endif
27#include <sys/types.h>
28#include <stdint.h>
29#include <stdarg.h>
30#include <stdlib.h>
31#include <unistd.h>
32#include <errno.h>
33#include <syscall.h>
34#include <perfmon/perfmon.h>
35
36#include <perfmon/pfmlib.h>
37#include "pfmlib_priv.h"
38
39/*
40 * v3.x interface
41 */
42#define PFM_pfm_create (_pfmlib_get_sys_base()+0)
43#define PFM_pfm_write (_pfmlib_get_sys_base()+1)
44#define PFM_pfm_read (_pfmlib_get_sys_base()+2)
45#define PFM_pfm_attach (_pfmlib_get_sys_base()+3)
46#define PFM_pfm_set_state (_pfmlib_get_sys_base()+4)
47#define PFM_pfm_create_sets (_pfmlib_get_sys_base()+5)
48#define PFM_pfm_getinfo_sets (_pfmlib_get_sys_base()+6)
49
50/*
51 * perfmon v3 interface
52 */
53int
54//pfm_create(int flags, pfarg_sinfo_t *sif, char *name, void *smpl_arg, size_t smpl_size)
55pfm_create(int flags, pfarg_sinfo_t *sif, ...)
56{
57 va_list ap;
58 char *name = NULL;
59 void *smpl_arg = NULL;
60 size_t smpl_size = 0;
61 int ret;
62
63 if (_pfmlib_major_version < 3) {
64 errno = ENOSYS;
65 return -1;
66 }
67
68 if (flags & PFM_FL_SMPL_FMT)
69 va_start(ap, sif);
70
71 if (flags & PFM_FL_SMPL_FMT) {
72 name = va_arg(ap, char *);
73 smpl_arg = va_arg(ap, void *);
74 smpl_size = va_arg(ap, size_t);
75 }
76
77 ret = (int)syscall(PFM_pfm_create, flags, sif, name, smpl_arg, smpl_size);
78
79 if (flags & PFM_FL_SMPL_FMT)
80 va_end(ap);
81
82 return ret;
83}
84
85int
86pfm_write(int fd, int flags, int type, void *pms, size_t sz)
87{
89 return -ENOSYS;
90 return (int)syscall(PFM_pfm_write, fd, flags, type, pms, sz);
91}
92
93int
94pfm_read(int fd, int flags, int type, void *pms, size_t sz)
95{
97 return -ENOSYS;
98 return (int)syscall(PFM_pfm_read, fd, flags, type, pms, sz);
99}
100
101int
102pfm_create_sets(int fd, int flags, pfarg_set_desc_t *setd, size_t sz)
103{
104 if (_pfmlib_major_version < 3)
105 return -ENOSYS;
106 return (int)syscall(PFM_pfm_create_sets, fd, flags, setd, sz);
107}
108
109int
110pfm_getinfo_sets(int fd, int flags, pfarg_set_info_t *info, size_t sz)
111{
112 if (_pfmlib_major_version < 3)
113 return -ENOSYS;
114 return (int)syscall(PFM_pfm_getinfo_sets, fd, flags, info, sz);
115}
116
117int
118pfm_attach(int fd, int flags, int target)
119{
120 if (_pfmlib_major_version < 3)
121 return -ENOSYS;
122 return (int)syscall(PFM_pfm_attach, fd, flags, target);
123}
124
125int
126pfm_set_state(int fd, int flags, int state)
127{
128 if (_pfmlib_major_version < 3)
129 return -ENOSYS;
130 return (int)syscall(PFM_pfm_set_state, fd, flags, state);
131}
int errno
uint16_t type
__gnuc_va_list va_list
bool state
Definition: papi_hl.c:155
int _pfmlib_major_version
#define PFM_pfm_create
#define PFM_pfm_create_sets
#define PFM_pfm_getinfo_sets
int pfm_create_sets(int fd, int flags, pfarg_set_desc_t *setd, size_t sz)
int pfm_set_state(int fd, int flags, int state)
int pfm_write(int fd, int flags, int type, void *pms, size_t sz)
#define PFM_pfm_write
#define PFM_pfm_attach
#define PFM_pfm_set_state
#define PFM_pfm_read
int pfm_attach(int fd, int flags, int target)
int pfm_read(int fd, int flags, int type, void *pms, size_t sz)
int pfm_getinfo_sets(int fd, int flags, pfarg_set_info_t *info, size_t sz)
int pfm_create(int flags, pfarg_sinfo_t *sif,...)
va_end(arg_list)
va_start(arg_list, fmt)
const char * name
Definition: rocs.c:225
int
Definition: sde_internal.h:89