update compat
[lttv.git] / tags / lttv-0.10.0-pre15-12082008 / ltt / ltt.h
1 /* This file is part of the Linux Trace Toolkit trace reading library
2 * Copyright (C) 2003-2004 Michel Dagenais
3 * 2005 Mathieu Desnoyers
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License Version 2.1 as published by the Free Software Foundation.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 */
19
20 #ifndef LTT_H
21 #define LTT_H
22
23 #include <glib.h>
24 #include <ltt/time.h>
25 #include <ltt/compiler.h>
26
27 /* A trace is associated with a tracing session run on a single, possibly
28 multi-cpu, system. It is defined as a pathname to a directory containing
29 all the relevant trace files. All the tracefiles for a trace were
30 generated in a single system for the same time period by the same
31 trace daemon. They simply contain different events. Typically control
32 tracefiles contain the important events (process creations and registering
33 tracing facilities) for all CPUs, and one file for each CPU contains all
34 the events for that CPU. All the tracefiles within the same trace directory
35 then use the exact same id numbers for event types.
36
37 A tracefile (LttTracefile) contains a list of events (LttEvent) sorted
38 by time for each CPU; events from different CPUs may be slightly out of
39 order, especially using the (possibly drifting) cycle counters as
40 time unit.
41
42 A facility is a list of event types (LttEventType), declared in a special
43 eventdefs file. A corresponding checksum differentiates different
44 facilities which would have the same name but a different content
45 (e.g., different versions). The files are stored within the trace
46 directory and are accessed automatically upon opening a trace.
47 The list of facilities (and associated checksum) used in a trace
48 must be known in order to properly decode the contained events. An event
49 is stored in the "facilities" control tracefile to denote each different
50 facility used.
51
52 Event types (LttEventType) refer to data types (LttType) describing
53 their content. The data types supported are integer and unsigned integer
54 (of various length), enumerations (a special form of unsigned integer),
55 floating point (of various length), fixed size arrays, sequence
56 (variable sized arrays), structures and null terminated strings.
57 The elements of arrays and sequences, and the data members for
58 structures, may be of any nested data type (LttType).
59
60 An LttField is a special object to denote a specific, possibly nested,
61 field within an event type. Suppose an event type socket_connect is a
62 structure containing two data members, source and destination, of type
63 socket_address. Type socket_address contains two unsigned integer
64 data members, ip and port. An LttField is different from a data type
65 structure member since it can denote a specific nested field, like the
66 source port, and store associated access information (byte offset within
67 the event data). The LttField objects are trace specific since the
68 contained information (byte offsets) may vary with the architecture
69 associated to the trace. */
70
71 #define NUM_FACILITIES 256
72 #define FACILITIES_BITS 8
73 #define AVG_EVENTS_PER_FACILITIES 10
74
75 typedef struct LttTrace LttTrace;
76
77 typedef struct LttTracefile LttTracefile;
78
79 typedef struct LttSystemDescription LttSystemDescription;
80
81 typedef struct LttEvent LttEvent;
82
83 /* Checksums are used to differentiate facilities which have the same name
84 but differ. */
85
86 //typedef guint32 LttChecksum;
87
88
89 /* Events are usually stored with the easily obtained CPU clock cycle count,
90 ltt_cycle_count. This can be converted to the real time value, LttTime,
91 using linear interpolation between regularly sampled values (e.g. a few
92 times per second) of the real time clock with their corresponding
93 cycle count values. */
94
95
96 typedef struct _TimeInterval{
97 LttTime start_time;
98 LttTime end_time;
99 } TimeInterval;
100
101
102 typedef guint64 LttCycleCount;
103
104 /* Event positions are used to seek within a tracefile based on
105 the block number and event position within the block. */
106
107 typedef struct LttEventPosition LttEventPosition;
108
109
110 /* Differences between architectures include word sizes, endianess,
111 alignment, floating point format and calling conventions. For a
112 packed binary trace, endianess and size matter, assuming that the
113 floating point format is standard (and is seldom used anyway). */
114
115 typedef enum _LttArchSize
116 { LTT_LP32, LTT_ILP32, LTT_LP64, LTT_ILP64, LTT_UNKNOWN
117 } LttArchSize;
118
119
120 typedef enum _LttArchEndian
121 { LTT_LITTLE_ENDIAN, LTT_BIG_ENDIAN
122 } LttArchEndian;
123
124 typedef enum _LttTypeEnum
125 { LTT_INT_FIXED,
126 LTT_UINT_FIXED,
127 LTT_POINTER,
128 LTT_CHAR,
129 LTT_UCHAR,
130 LTT_SHORT,
131 LTT_USHORT,
132 LTT_INT,
133 LTT_UINT,
134 LTT_LONG,
135 LTT_ULONG,
136 LTT_SIZE_T,
137 LTT_SSIZE_T,
138 LTT_OFF_T,
139 LTT_FLOAT,
140 LTT_STRING,
141 LTT_ENUM,
142 LTT_ARRAY,
143 LTT_SEQUENCE,
144 LTT_STRUCT,
145 LTT_UNION,
146 LTT_NONE
147 } LttTypeEnum;
148
149
150 /* Architecture types */
151 #define LTT_ARCH_TYPE_I386 1
152 #define LTT_ARCH_TYPE_PPC 2
153 #define LTT_ARCH_TYPE_SH 3
154 #define LTT_ARCH_TYPE_S390 4
155 #define LTT_ARCH_TYPE_MIPS 5
156 #define LTT_ARCH_TYPE_ARM 6
157 #define LTT_ARCH_TYPE_PPC64 7
158 #define LTT_ARCH_TYPE_X86_64 8
159 #define LTT_ARCH_TYPE_C2 9
160 #define LTT_ARCH_TYPE_POWERPC 10
161 #define LTT_ARCH_TYPE_X86 11
162
163 /* Standard definitions for variants */
164 #define LTT_ARCH_VARIANT_NONE 0 /* Main architecture implementation */
165
166
167
168 #endif // LTT_H
This page took 0.034552 seconds and 4 git commands to generate.