perf: Convert a FILE* instead of a filename
[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 <ros/common.h>
9 #include <sys/types.h>
10 #include <sys/stat.h>
11 #include <stdint.h>
12 #include <stdio.h>
13 #include <string.h>
14 #include <stdlib.h>
15 #include <unistd.h>
16 #include <fcntl.h>
17
18 #define min(a, b)                                                               \
19         ({ __typeof__(a) _a = (a);                                      \
20                 __typeof__(b) _b = (b);                                 \
21                 _a < _b ? _a : _b; })
22 #define max(a, b)                                                               \
23         ({ __typeof__(a) _a = (a);                                      \
24                 __typeof__(b) _b = (b);                                 \
25                 _a > _b ? _a : _b; })
26 #define always_assert(c)                                                                                                \
27         do {                                                                                                                            \
28                 if (!(c))                                                                                                               \
29                         fprintf(stderr, "%s: %d: Assertion failed: " #c "\n",           \
30                                         __FILE__, __LINE__);                                                            \
31         } while (0)
32
33 int xopen(const char *path, int flags, mode_t mode);
34 void xwrite(int fd, const void *data, size_t size);
35 void xread(int fd, void *data, size_t size);
36 void xpwrite(int fd, const void *data, size_t size, off_t off);
37 void xpread(int fd, void *data, size_t size, off_t off);
38 FILE *xfopen(const char *path, const char *mode);
39 off_t xfsize(FILE *file);
40 void xfwrite(const void *data, size_t size, FILE *file);
41 void xfseek(FILE *file, off_t offset, int whence);
42 void *xmalloc(size_t size);
43 void *xzmalloc(size_t size);
44 char *xstrdup(const char *str);
45 const char *vb_decode_uint64(const char *data, uint64_t *pval);
46 int vb_fdecode_uint64(FILE *file, uint64_t *pval);
47 uint8_t nibble_to_num(char c);
48
49 static inline void cpuid(uint32_t ieax, uint32_t iecx, uint32_t *eaxp,
50                          uint32_t *ebxp, uint32_t *ecxp, uint32_t *edxp)
51 {
52         uint32_t eax, ebx, ecx, edx;
53
54         asm volatile("cpuid"
55                                  : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
56                                  : "a" (ieax), "c" (iecx));
57         if (eaxp)
58                 *eaxp = eax;
59         if (ebxp)
60                 *ebxp = ebx;
61         if (ecxp)
62                 *ecxp = ecx;
63         if (edxp)
64                 *edxp = edx;
65 }
66
67 static inline void set_bitno(void *data, size_t bitno)
68 {
69         ((char *) data)[bitno / 8] |= 1 << (bitno % 8);
70 }