ppc fix
[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>
17#include <linux/unistd.h>
60009e26 18#if defined(__powerpc__) || defined(__powerpc64__)
19#include "ltt/ltt-usertrace-ppc.h"
20#else
21#include <asm/atomic.h>
22#endif
3d57eb5b 23
24#ifndef min
25#define min(a,b) ((a)<(b)?(a):(b))
26#endif
27
d86395c3 28#ifdef i386
7f23953b 29#define __NR_ltt_trace_generic 311
30#define __NR_ltt_register_generic 312
3d57eb5b 31#undef NR_syscalls
7f23953b 32#define NR_syscalls 313
d86395c3 33#endif
34
35#ifdef powerpc
36#define __NR_ltt_trace_generic 283
37#define __NR_ltt_register_generic 284
38#undef NR_syscalls
39#define NR_syscalls 285
40#endif
3d57eb5b 41
42//FIXME : setup for ARM
43//FIXME : setup for MIPS
44
45#ifndef _LIBC
46// Put in bits/syscall.h
47#define SYS_ltt_trace_generic __NR_ltt_trace_generic
48#define SYS_ltt_register_generic __NR_ltt_register_generic
49#endif
50
51#define FACNAME_LEN 32
52
972a52cf 53/* LTT userspace tracing is non blocking by default when buffers are full */
54#ifndef LTT_BLOCKING
55#define LTT_BLOCKING 0
56#endif //LTT_BLOCKING
57
3d57eb5b 58typedef unsigned int ltt_facility_t;
59
60struct user_facility_info {
61 char name[FACNAME_LEN];
62 unsigned int num_events;
63 size_t alignment;
64 uint32_t checksum;
65 size_t int_size;
66 size_t long_size;
67 size_t pointer_size;
68 size_t size_t_size;
69};
70
e90c7b86 71static inline __attribute__((no_instrument_function))
72_syscall5(int, ltt_trace_generic, unsigned int, facility_id,
73 unsigned int, event_id, void *, data, size_t, data_size, int, blocking)
74static inline __attribute__((no_instrument_function))
75_syscall2(int, ltt_register_generic, unsigned int *, facility_id,
76 const struct user_facility_info *, info)
3d57eb5b 77
78#ifndef LTT_PACK
79/* Calculate the offset needed to align the type */
e90c7b86 80static inline unsigned int __attribute__((no_instrument_function))
81 ltt_align(size_t align_drift,
82 size_t size_of_type)
3d57eb5b 83{
84 size_t alignment = min(sizeof(void*), size_of_type);
85
86 return ((alignment - align_drift) & (alignment-1));
87}
8a9103df 88#define LTT_ALIGN
3d57eb5b 89#else
e90c7b86 90static inline unsigned int __attribute__((no_instrument_function))
91 ltt_align(size_t align_drift,
92 size_t size_of_type)
3d57eb5b 93{
94 return 0;
95}
8a9103df 96#define LTT_ALIGN __attribute__((packed))
3d57eb5b 97#endif //LTT_PACK
98
976db1b3 99#ifdef LTT_TRACE_FAST
100#include <ltt/ltt-usertrace-fast.h>
101#endif //LTT_TRACE_FAST
102
38f24d5c 103#endif //_LTT_USERTRACE_H
3d57eb5b 104
105
This page took 0.027633 seconds and 4 git commands to generate.