add SH XML
[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>
7922f60f 40#elif defined(__arm__)
41#include <ltt/kernelutils-arm.h>
60009e26 42#else
4b18c4a6 43#error "Unsupported architecture"
60009e26 44#endif
3d57eb5b 45
46#ifndef min
47#define min(a,b) ((a)<(b)?(a):(b))
48#endif
49
d86395c3 50#ifdef i386
3295df23 51#define __NR_ltt_trace_generic 328
52#define __NR_ltt_register_generic 329
3d57eb5b 53#undef NR_syscalls
3295df23 54#define NR_syscalls 330
d86395c3 55#endif
56
ce22b1be 57#ifdef __x86_64__
3295df23 58#define __NR_ltt_trace_generic 286
59#define __NR_ltt_register_generic 287
ce22b1be 60#undef NR_syscalls
3295df23 61#define NR_syscalls 288
ce22b1be 62#endif
63
3a4541a5 64#ifdef __powerpc__
3295df23 65#define __NR_ltt_trace_generic 309
66#define __NR_ltt_register_generic 310
3a4541a5 67#undef NR_syscalls
3295df23 68#define NR_syscalls 311
3a4541a5 69#endif
70
71#ifdef __powerpc64__
3295df23 72#define __NR_ltt_trace_generic 309
73#define __NR_ltt_register_generic 310
d86395c3 74#undef NR_syscalls
3295df23 75#define NR_syscalls 311
d86395c3 76#endif
3d57eb5b 77
7922f60f 78#ifdef __arm__
3295df23 79#define __NR_ltt_trace_generic 352
80#define __NR_ltt_register_generic 353
7922f60f 81#undef NR_syscalls
3295df23 82#define NR_syscalls 354
7922f60f 83#endif
3a4541a5 84
3d57eb5b 85//FIXME : setup for MIPS
86
87#ifndef _LIBC
88// Put in bits/syscall.h
89#define SYS_ltt_trace_generic __NR_ltt_trace_generic
90#define SYS_ltt_register_generic __NR_ltt_register_generic
91#endif
92
93#define FACNAME_LEN 32
94
972a52cf 95/* LTT userspace tracing is non blocking by default when buffers are full */
96#ifndef LTT_BLOCKING
97#define LTT_BLOCKING 0
98#endif //LTT_BLOCKING
4ea155a2 99
3d57eb5b 100typedef unsigned int ltt_facility_t;
101
102struct user_facility_info {
103 char name[FACNAME_LEN];
505932fe 104 uint32_t num_events;
105 uint32_t alignment;
3d57eb5b 106 uint32_t checksum;
505932fe 107 uint32_t int_size;
108 uint32_t long_size;
109 uint32_t pointer_size;
cf145ed2 110 uint32_t size_t_size;
3d57eb5b 111};
5ecaa1ab 112#if 0
e90c7b86 113static inline __attribute__((no_instrument_function))
114_syscall5(int, ltt_trace_generic, unsigned int, facility_id,
115 unsigned int, event_id, void *, data, size_t, data_size, int, blocking)
116static inline __attribute__((no_instrument_function))
117_syscall2(int, ltt_register_generic, unsigned int *, facility_id,
118 const struct user_facility_info *, info)
5ecaa1ab 119#endif //0
120
121#define ltt_register_generic(...) syscall(__NR_ltt_register_generic, __VA_ARGS__)
122#define ltt_trace_generic(...) syscall(__NR_ltt_trace_generic, __VA_ARGS__)
3d57eb5b 123
895ad115 124static inline unsigned int __attribute__((no_instrument_function))
125 ltt_align(size_t align_drift, size_t size_of_type);
126
3d57eb5b 127#ifndef LTT_PACK
128/* Calculate the offset needed to align the type */
895ad115 129static inline unsigned int
bf48b748 130 ltt_align(size_t align_drift, size_t size_of_type)
3d57eb5b 131{
132 size_t alignment = min(sizeof(void*), size_of_type);
133
134 return ((alignment - align_drift) & (alignment-1));
135}
8a9103df 136#define LTT_ALIGN
3d57eb5b 137#else
895ad115 138static inline unsigned int ltt_align(size_t align_drift, size_t size_of_type)
3d57eb5b 139{
140 return 0;
141}
8a9103df 142#define LTT_ALIGN __attribute__((packed))
3d57eb5b 143#endif //LTT_PACK
144
895ad115 145#ifdef __cplusplus
146} /* end of extern "C" */
147#endif
148
976db1b3 149#ifdef LTT_TRACE_FAST
150#include <ltt/ltt-usertrace-fast.h>
151#endif //LTT_TRACE_FAST
152
38f24d5c 153#endif //_LTT_USERTRACE_H
This page took 0.036106 seconds and 4 git commands to generate.