Added new perf utility to access CPU counters from userspace
[akaros.git] / tools / profile / perf / xlib.h
1 /* Copyright (c) 2015 Google Inc
2  * Davide Libenzi <dlibenzi@google.com>
3  * See LICENSE for details.
4  */
5
6 #pragma once
7
8 #include <sys/types.h>
9 #include <sys/stat.h>
10 #include <stdint.h>
11 #include <stdio.h>
12 #include <string.h>
13 #include <stdlib.h>
14 #include <unistd.h>
15 #include <fcntl.h>
16
17 int xopen(const char *path, int flags, mode_t mode);
18 void xwrite(int fd, const void *data, size_t size);
19 void xread(int fd, void *data, size_t size);
20 void xpwrite(int fd, const void *data, size_t size, off_t off);
21 void xpread(int fd, void *data, size_t size, off_t off);
22 void *xmalloc(size_t size);
23 void *xzmalloc(size_t size);
24 char *xstrdup(const char *str);
25
26 static inline void cpuid(uint32_t ieax, uint32_t iecx, uint32_t *eaxp,
27                          uint32_t *ebxp, uint32_t *ecxp, uint32_t *edxp)
28 {
29         uint32_t eax, ebx, ecx, edx;
30
31         asm volatile("cpuid"
32                                  : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
33                                  : "a" (ieax), "c" (iecx));
34         if (eaxp)
35                 *eaxp = eax;
36         if (ebxp)
37                 *ebxp = ebx;
38         if (ecxp)
39                 *ecxp = ecx;
40         if (edxp)
41                 *edxp = edx;
42 }