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