litl  0.1.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
litl_types.h
Go to the documentation of this file.
1 /* -*- c-file-style: "GNU" -*- */
2 /*
3  * Copyright © Télécom SudParis.
4  * See COPYING in top-level directory.
5  */
6 
18 #ifndef LITL_TYPES_H_
19 #define LITL_TYPES_H_
20 
50 #include <stdio.h>
51 #include <stdint.h>
52 
53 #ifdef USE_GETTID
54 #include <unistd.h>
55 #include <sys/syscall.h> // For SYS_xxx definitions
56 #else
57 #include <pthread.h>
58 #endif
59 
60 // current thread id
61 #ifdef USE_GETTID
62 
66 #define CUR_TID syscall(SYS_gettid)
67 #else
68 
72 #define CUR_TID pthread_self()
73 #endif
74 
75 #ifdef HAVE_32BIT
76 
80 typedef uint32_t litl_tid_t;
85 typedef uint32_t litl_time_t;
90 typedef uint32_t litl_trace_size_t;
95 typedef uint32_t litl_param_t;
100 typedef uint32_t litl_offset_t;
101 
102 #else /* HAVE_32BIT */
103 
107 typedef uint64_t litl_tid_t;
112 typedef uint64_t litl_time_t;
117 typedef uint64_t litl_trace_size_t;
122 typedef uint64_t litl_param_t;
127 typedef uint64_t litl_offset_t;
128 #endif /* HAVE_32BIT */
129 
133 typedef uint8_t* litl_buffer_t;
134 // TODO: there is a possibility of using uint16_t, however then the alignment
135 // would collapse
140 typedef uint32_t litl_code_t;
145 typedef uint32_t litl_size_t;
150 typedef uint16_t litl_med_size_t;
155 typedef uint8_t litl_data_t;
156 
161 #define LITL_OFFSET_CODE 13
162 
167 #define LITL_MAX_PARAMS 10
168 
172 #define LITL_MAX_DATA (LITL_MAX_PARAMS * sizeof(litl_param_t))
173 
178 typedef enum {
183 }__attribute__((packed)) litl_type_t;
184 
190 typedef struct {
193  litl_type_t type;
198  union {
203  struct {
206  }__attribute__((packed)) regular;
211  struct {
214  }__attribute__((packed)) raw;
219  struct {
222  }__attribute__((packed)) packed;
227  struct {
228  litl_data_t nb_params;
230  }__attribute__((packed)) offset;
231  } parameters;
232 }__attribute__((packed)) litl_t;
233 
240 #define NBTHREADS 32
241 
247 typedef struct {
248  litl_data_t litl_ver[8];
249  litl_data_t sysinfo[128];
251 }__attribute__((packed)) litl_general_header_t;
252 
258 typedef struct {
259  litl_data_t process_name[256];
265 }__attribute__((packed)) litl_process_header_t;
266 
271 typedef struct {
275 
280 typedef struct {
285 
290 typedef struct {
299 
304 typedef struct {
305  int f_handle;
306  char* filename;
326  pthread_once_t index_once;
327  pthread_key_t index;
328  pthread_mutex_t lock_litl_flush;
329  pthread_mutex_t lock_buffer_init;
337 
342 typedef struct {
344  litl_t *event;
346 
351 typedef struct {
362 
367 typedef struct {
375  int cur_index;
378 
384 typedef struct {
385  int f_handle;
394 
399 typedef struct {
400  int f_handle;
401  char* filename;
404  char** traces_names;
412 
417 typedef struct {
418  int f_handle;
430 
431 /*
432  * Defining formats for printing data
433  */
434 #define PRTIu32 "u"
435 #define PRTIx32 "x"
436 
437 #ifdef HAVE_32BIT
438 #define PRTIu64 "u"
439 #define PRTIx64 "x"
440 
441 #else
442 #define PRTIu64 "lu"
443 #define PRTIx64 "lx"
444 
445 #endif /* HAVE_32BIT */
446 
447 /*
448  * For internal use only.
449  * Computes the offset of MEMBER in structure TYPE
450  */
451 #define __litl_offset_of(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)
452 
453 /*
454  * For internal use only.
455  * Computes the offset of the first parameter in an event
456  */
457 #define LITL_BASE_SIZE __litl_offset_of(litl_t, parameters.regular.param)
458 
459 #endif /* LITL_TYPES_H_ */
litl_buffer_t buffer_ptr
Definition: litl_types.h:291
litl_type_t
The enumeration of event types.
Definition: litl_types.h:178
litl_data_t size
Definition: litl_types.h:220
litl_size_t buffer_size
Definition: litl_types.h:323
litl_data_t is_buffer_full
Definition: litl_types.h:324
litl_med_size_t header_nb_threads
Definition: litl_types.h:261
litl_size_t buffer_size
Definition: litl_types.h:408
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:388
A data structure for reading events from both regular trace files and archives of traces...
Definition: litl_types.h:384
#define LITL_MAX_PARAMS
Defines the maximum number of parameters.
Definition: litl_types.h:167
litl_size_t buffer_size
Definition: litl_types.h:262
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:420
Thread-specific buffer.
Definition: litl_types.h:290
A data structure for reading thread-specific events.
Definition: litl_types.h:351
litl_med_size_t nb_processes
Definition: litl_types.h:281
litl_size_t buffer_size
Definition: litl_types.h:428
litl_write_buffer_t ** buffers
Definition: litl_types.h:321
litl_data_t is_header_flushed
Definition: litl_types.h:315
uint64_t litl_param_t
A data type for the non-optimized storage of parameters.
Definition: litl_types.h:122
A regular event.
A raw event.
litl_med_size_t nb_slots
Definition: litl_types.h:318
volatile litl_data_t is_recording_paused
Definition: litl_types.h:332
A data structure for splitting an archive of traces.
Definition: litl_types.h:417
litl_general_header_t * header
Definition: litl_types.h:387
litl_buffer_t buffer
Definition: litl_types.h:292
litl_offset_t offset
Definition: litl_types.h:283
litl_size_t header_offset
Definition: litl_types.h:313
litl_time_t time
Definition: litl_types.h:191
A data structure for reading one event.
Definition: litl_types.h:342
litl_read_event_t cur_event
Definition: litl_types.h:360
litl_read_thread_t ** threads
Definition: litl_types.h:373
litl_size_t nb_allocated_buffers
Definition: litl_types.h:322
A data structure for recording events.
Definition: litl_types.h:304
litl_process_header_t * header
Definition: litl_types.h:368
litl_data_t allow_thread_safety
Definition: litl_types.h:334
#define LITL_MAX_DATA
Defines the "maximum" size of raw data.
Definition: litl_types.h:172
litl_data_t is_litl_initialized
Definition: litl_types.h:331
litl_med_size_t nb_processes
Definition: litl_types.h:425
A general structure of LiTL event type.
Definition: litl_types.h:190
litl_buffer_t header_buffer
Definition: litl_types.h:421
litl_offset_t offset
Definition: litl_types.h:273
A general data structure that corresponds to the header of a trace file.
Definition: litl_types.h:258
litl_med_size_t nb_threads
Definition: litl_types.h:317
Event parameters.
litl_med_size_t nb_traces
Definition: litl_types.h:403
litl_med_size_t nb_processes
Definition: litl_types.h:250
litl_tid_t tid
Definition: litl_types.h:272
litl_offset_t offset
Definition: litl_types.h:357
litl_buffer_t buffer
Definition: litl_types.h:427
uint8_t * litl_buffer_t
A data type for storing sets of events.
Definition: litl_types.h:133
A data structure for reading process-specific events.
Definition: litl_types.h:367
litl_buffer_t buffer
Definition: litl_types.h:407
litl_tid_t tid
Definition: litl_types.h:343
litl_process_header_t * process_header
Definition: litl_types.h:423
litl_data_t allow_tid_recording
Definition: litl_types.h:335
litl_buffer_t header_buffer
Definition: litl_types.h:370
litl_buffer_t header_buffer
Definition: litl_types.h:389
litl_param_t threads_offset
Definition: litl_types.h:319
pthread_key_t index
Definition: litl_types.h:327
litl_general_header_t * trace_header
Definition: litl_types.h:422
litl_buffer_t header
Definition: litl_types.h:311
litl_offset_t general_offset
Definition: litl_types.h:308
litl_size_t header_size
Definition: litl_types.h:312
litl_param_t offset
Definition: litl_types.h:229
litl_buffer_t buffer
Definition: litl_types.h:355
litl_offset_t offset
Definition: litl_types.h:264
litl_thread_pair_t * thread_pair
Definition: litl_types.h:352
uint16_t litl_med_size_t
An auxiliary data type for the optimized storage of data.
Definition: litl_types.h:150
pthread_mutex_t lock_buffer_init
Definition: litl_types.h:329
pthread_mutex_t lock_litl_flush
Definition: litl_types.h:328
A data structure for pairs (tid, offset) stored in the trace header.
Definition: litl_types.h:271
litl_data_t nb_params
Definition: litl_types.h:204
uint64_t litl_tid_t
A data type for storing thread IDs.
Definition: litl_types.h:107
litl_buffer_t header_ptr
Definition: litl_types.h:310
An offset event.
litl_med_size_t header_nb_threads
Definition: litl_types.h:314
litl_offset_t offset
Definition: litl_types.h:295
uint8_t litl_data_t
A data type for the optimized storage of parameters.
Definition: litl_types.h:155
A packed event.
A data structure for merging trace files into an archive of traces.
Definition: litl_types.h:399
litl_med_size_t nb_threads
Definition: litl_types.h:260
litl_offset_t general_offset
Definition: litl_types.h:410
litl_read_process_t ** processes
Definition: litl_types.h:392
uint32_t litl_size_t
An auxiliary data type for storing data.
Definition: litl_types.h:145
pthread_once_t index_once
Definition: litl_types.h:326
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:369
uint64_t litl_time_t
A data type for storing time stamps.
Definition: litl_types.h:112
litl_data_t already_flushed
Definition: litl_types.h:297
litl_offset_t tracker
Definition: litl_types.h:358
uint64_t litl_trace_size_t
A data type for storing traces sizes.
Definition: litl_types.h:117
litl_data_t allow_buffer_flush
Definition: litl_types.h:333
litl_med_size_t nb_processes
Definition: litl_types.h:391
uint64_t litl_offset_t
A data type for storing offsets.
Definition: litl_types.h:127
litl_med_size_t nb_threads
Definition: litl_types.h:372
A general data structure that corresponds to the header of a trace file.
Definition: litl_types.h:247
litl_offset_t position
Definition: litl_types.h:282
litl_size_t size
Definition: litl_types.h:212
A data structure for triples (nb_processes, position, offset)
Definition: litl_types.h:280
uint32_t litl_code_t
A data type for storing events codes.
Definition: litl_types.h:140
litl_type_t type
Definition: litl_types.h:193
litl_buffer_t buffer_ptr
Definition: litl_types.h:406
char ** traces_names
Definition: litl_types.h:404
litl_trace_size_t trace_size
Definition: litl_types.h:263
litl_code_t code
Definition: litl_types.h:192
litl_buffer_t buffer_ptr
Definition: litl_types.h:354