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