update syscalls
[lttv.git] / ltt-usertrace / ltt / ltt-usertrace.h
1 /*****************************************************************************
2 * ltt-usertrace.h
3 *
4 * LTT userspace tracing header
5 *
6 * Mathieu Desnoyers, March 2006
7 */
8
9 #ifndef _LTT_USERTRACE_H
10 #define _LTT_USERTRACE_H
11
12 #include <errno.h>
13 #include <syscall.h>
14 #include <string.h>
15 #include <stdint.h>
16 #include <sys/types.h>
17 #include <linux/unistd.h>
18
19 #define inline inline __attribute__((always_inline))
20
21 #if defined(__powerpc__) || defined(__powerpc64__)
22 #ifdef __powerpc64__
23 #include <ltt/atomic-ppc64.h>
24 #include <ltt/system-ppc64.h>
25 #include <asm/timex.h>
26 #else
27 #include <ltt/ppc_asm-ppc.h>
28 #include <ltt/atomic-ppc.h>
29 #include <ltt/system-ppc.h>
30 #include <ltt/timex-ppc.h>
31 #endif
32 #elif defined(__x86_64__)
33 #include <asm/timex.h>
34 #include <asm/bitops.h>
35 #include <asm/atomic.h>
36 #include <asm/system.h>
37 #else
38 #include <asm/timex.h>
39 #include <asm/atomic.h>
40 #endif
41
42 #ifndef min
43 #define min(a,b) ((a)<(b)?(a):(b))
44 #endif
45
46 #ifdef i386
47 #define __NR_ltt_trace_generic 317
48 #define __NR_ltt_register_generic 318
49 #undef NR_syscalls
50 #define NR_syscalls 319
51 #endif
52
53 #ifdef __x86_64__
54 #define __NR_ltt_trace_generic 279
55 #define __NR_ltt_register_generic 280
56 #undef NR_syscalls
57 #define NR_syscalls 281
58 #endif
59
60 #ifdef __powerpc__
61 #define __NR_ltt_trace_generic 301
62 #define __NR_ltt_register_generic 302
63 #undef NR_syscalls
64 #define NR_syscalls 303
65 #endif
66
67 #ifdef __powerpc64__
68 #define __NR_ltt_trace_generic 301
69 #define __NR_ltt_register_generic 302
70 #undef NR_syscalls
71 #define NR_syscalls 303
72 #endif
73
74
75
76 //FIXME : setup for ARM
77 //FIXME : setup for MIPS
78
79 #ifndef _LIBC
80 // Put in bits/syscall.h
81 #define SYS_ltt_trace_generic __NR_ltt_trace_generic
82 #define SYS_ltt_register_generic __NR_ltt_register_generic
83 #endif
84
85 #define FACNAME_LEN 32
86
87 /* LTT userspace tracing is non blocking by default when buffers are full */
88 #ifndef LTT_BLOCKING
89 #define LTT_BLOCKING 0
90 #endif //LTT_BLOCKING
91
92 typedef unsigned int ltt_facility_t;
93
94 struct user_facility_info {
95 char name[FACNAME_LEN];
96 unsigned int num_events;
97 size_t alignment;
98 uint32_t checksum;
99 size_t int_size;
100 size_t long_size;
101 size_t pointer_size;
102 size_t size_t_size;
103 };
104 #if 0
105 static inline __attribute__((no_instrument_function))
106 _syscall5(int, ltt_trace_generic, unsigned int, facility_id,
107 unsigned int, event_id, void *, data, size_t, data_size, int, blocking)
108 static inline __attribute__((no_instrument_function))
109 _syscall2(int, ltt_register_generic, unsigned int *, facility_id,
110 const struct user_facility_info *, info)
111 #endif //0
112
113 #define ltt_register_generic(...) syscall(__NR_ltt_register_generic, __VA_ARGS__)
114 #define ltt_trace_generic(...) syscall(__NR_ltt_trace_generic, __VA_ARGS__)
115
116 #ifndef LTT_PACK
117 /* Calculate the offset needed to align the type */
118 static inline unsigned int __attribute__((no_instrument_function))
119 ltt_align(size_t align_drift, size_t size_of_type)
120 {
121 size_t alignment = min(sizeof(void*), size_of_type);
122
123 return ((alignment - align_drift) & (alignment-1));
124 }
125 #define LTT_ALIGN
126 #else
127 static inline unsigned int __attribute__((no_instrument_function))
128 ltt_align(size_t align_drift,
129 size_t size_of_type)
130 {
131 return 0;
132 }
133 #define LTT_ALIGN __attribute__((packed))
134 #endif //LTT_PACK
135
136 #ifdef LTT_TRACE_FAST
137 #include <ltt/ltt-usertrace-fast.h>
138 #endif //LTT_TRACE_FAST
139
140 #endif //_LTT_USERTRACE_H
141
142
This page took 0.042252 seconds and 4 git commands to generate.