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