litl  0.1.9
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 
21 #include "litl_config.h"
22 
52 #include <stdio.h>
53 #include <stdint.h>
54 
55 #if USE_GETTID
56 #include <unistd.h>
57 #include <sys/syscall.h> // For SYS_xxx definitions
58 #else
59 #include <pthread.h>
60 #endif
61 
62 // current thread id
63 #if USE_GETTID
68 #define CUR_TID syscall(SYS_gettid)
69 #else
74 #define CUR_TID pthread_self()
75 #endif
76 
77 #if HAVE_32BIT
82 typedef uint32_t litl_tid_t;
87 typedef uint32_t litl_time_t;
92 typedef uint32_t litl_trace_size_t;
97 typedef uint32_t litl_param_t;
102 typedef uint32_t litl_offset_t;
103 
104 #else /* HAVE_32BIT */
109 typedef uint64_t litl_tid_t;
114 typedef uint64_t litl_time_t;
119 typedef uint64_t litl_trace_size_t;
124 typedef uint64_t litl_param_t;
129 typedef uint64_t litl_offset_t;
130 #endif /* HAVE_32BIT */
135 typedef uint8_t* litl_buffer_t;
136 // TODO: there is a possibility of using uint16_t, however then the alignment
137 // would collapse
142 typedef uint32_t litl_code_t;
147 typedef uint32_t litl_size_t;
152 typedef uint16_t litl_med_size_t;
157 typedef uint8_t litl_data_t;
158 
163 #define LITL_OFFSET_CODE 13
164 
169 #define LITL_MAX_PARAMS 10
174 #define LITL_MAX_DATA (LITL_MAX_PARAMS * sizeof(litl_param_t))
175 
180 typedef enum {
185 }__attribute__((packed)) litl_type_t;
186 
192 typedef struct {
200  union {
205  struct {
208  }__attribute__((packed)) regular;
213  struct {
216  }__attribute__((packed)) raw;
221  struct {
222  litl_size_t size;
224  }__attribute__((packed)) packed;
229  struct {
230  litl_data_t nb_params;
232  }__attribute__((packed)) offset;
234 }__attribute__((packed)) litl_t;
235 
242 #define NBTHREADS 32
243 
249 typedef struct {
250  litl_data_t litl_ver[8];
251  litl_data_t sysinfo[128];
253 }__attribute__((packed)) litl_general_header_t;
254 
260 typedef struct {
261  litl_data_t process_name[256];
267 }__attribute__((packed)) litl_process_header_t;
268 
273 typedef struct {
277 
282 typedef struct {
287 
292 typedef struct {
302 
307 typedef struct {
308  int f_handle;
309  char* filename;
329  pthread_once_t index_once;
330  pthread_key_t index;
331  pthread_mutex_t lock_litl_flush;
332  pthread_mutex_t lock_buffer_init;
340 
345 typedef struct {
349 
354 typedef struct {
365 
370 typedef struct {
378  int cur_index;
381 
387 typedef struct {
388  int f_handle;
397 
402 typedef struct {
403  int f_handle;
404  char* filename;
407  char** traces_names;
415 
420 typedef struct {
421  int f_handle;
433 
434 /*
435  * Defining formats for printing data
436  */
437 #define PRTIu32 "u"
438 #define PRTIx32 "x"
439 
440 #if HAVE_32BIT
441 #define PRTIu64 "u"
442 #define PRTIx64 "x"
443 
444 #else
445 #define PRTIu64 "lu"
446 #define PRTIx64 "lx"
447 
448 #endif /* HAVE_32BIT */
449 
450 /*
451  * For internal use only.
452  * Computes the offset of MEMBER in structure TYPE
453  */
454 #define __litl_offset_of(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)
455 
456 /*
457  * For internal use only.
458  * Computes the offset of the first parameter in an event
459  */
460 #define LITL_BASE_SIZE __litl_offset_of(litl_t, parameters)
461 
462 #endif /* LITL_TYPES_H_ */
uint64_t litl_param_t
A data type for the non-optimized storage of parameters.
Definition: litl_types.h:124
#define LITL_MAX_DATA
Defines the "maximum" size of raw data.
Definition: litl_types.h:174
litl_type_t
The enumeration of event types.
Definition: litl_types.h:180
uint8_t litl_data_t
A data type for the optimized storage of parameters.
Definition: litl_types.h:157
uint32_t litl_size_t
An auxiliary data type for storing data.
Definition: litl_types.h:147
uint8_t * litl_buffer_t
A data type for storing sets of events.
Definition: litl_types.h:135
#define LITL_MAX_PARAMS
Defines the maximum number of parameters.
Definition: litl_types.h:169
uint16_t litl_med_size_t
An auxiliary data type for the optimized storage of data.
Definition: litl_types.h:152
uint64_t litl_trace_size_t
A data type for storing traces sizes.
Definition: litl_types.h:119
uint64_t litl_tid_t
A data type for storing thread IDs.
Definition: litl_types.h:109
uint32_t litl_code_t
A data type for storing events codes.
Definition: litl_types.h:142
uint64_t litl_time_t
A data type for storing time stamps.
Definition: litl_types.h:114
uint64_t litl_offset_t
A data type for storing offsets.
Definition: litl_types.h:129
@ LITL_TYPE_RAW
Definition: litl_types.h:182
@ LITL_TYPE_PACKED
Definition: litl_types.h:183
@ LITL_TYPE_REGULAR
Definition: litl_types.h:181
@ LITL_TYPE_OFFSET
Definition: litl_types.h:184
A general data structure that corresponds to the header of a trace file.
Definition: litl_types.h:249
litl_med_size_t nb_processes
Definition: litl_types.h:252
A general data structure that corresponds to the header of a trace file.
Definition: litl_types.h:260
litl_med_size_t header_nb_threads
Definition: litl_types.h:263
litl_med_size_t nb_threads
Definition: litl_types.h:262
litl_trace_size_t trace_size
Definition: litl_types.h:265
litl_size_t buffer_size
Definition: litl_types.h:264
litl_offset_t offset
Definition: litl_types.h:266
A data structure for reading one event.
Definition: litl_types.h:345
litl_tid_t tid
Definition: litl_types.h:346
A data structure for reading process-specific events.
Definition: litl_types.h:370
litl_med_size_t nb_threads
Definition: litl_types.h:375
litl_read_thread_t ** threads
Definition: litl_types.h:376
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:372
litl_buffer_t header_buffer
Definition: litl_types.h:373
litl_process_header_t * header
Definition: litl_types.h:371
A data structure for reading thread-specific events.
Definition: litl_types.h:354
litl_offset_t tracker
Definition: litl_types.h:361
litl_offset_t offset
Definition: litl_types.h:360
litl_thread_pair_t * thread_pair
Definition: litl_types.h:355
litl_buffer_t buffer
Definition: litl_types.h:358
litl_buffer_t buffer_ptr
Definition: litl_types.h:357
litl_read_event_t cur_event
Definition: litl_types.h:363
A data structure for reading events from both regular trace files and archives of traces.
Definition: litl_types.h:387
litl_general_header_t * header
Definition: litl_types.h:390
litl_buffer_t header_buffer
Definition: litl_types.h:392
litl_read_process_t ** processes
Definition: litl_types.h:395
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:391
litl_med_size_t nb_processes
Definition: litl_types.h:394
A general structure of LiTL event type.
Definition: litl_types.h:192
litl_data_t nb_params
Definition: litl_types.h:206
litl_size_t size
Definition: litl_types.h:214
litl_param_t offset
Definition: litl_types.h:231
litl_time_t time
Definition: litl_types.h:193
litl_code_t code
Definition: litl_types.h:194
litl_type_t type
Definition: litl_types.h:195
A data structure for pairs (tid, offset) stored in the trace header.
Definition: litl_types.h:273
litl_offset_t offset
Definition: litl_types.h:275
litl_tid_t tid
Definition: litl_types.h:274
A data structure for merging trace files into an archive of traces.
Definition: litl_types.h:402
litl_size_t buffer_size
Definition: litl_types.h:411
char ** traces_names
Definition: litl_types.h:407
litl_med_size_t nb_traces
Definition: litl_types.h:406
litl_offset_t general_offset
Definition: litl_types.h:413
litl_buffer_t buffer_ptr
Definition: litl_types.h:409
litl_buffer_t buffer
Definition: litl_types.h:410
A data structure for splitting an archive of traces.
Definition: litl_types.h:420
litl_size_t buffer_size
Definition: litl_types.h:431
litl_buffer_t buffer
Definition: litl_types.h:430
litl_buffer_t header_buffer
Definition: litl_types.h:424
litl_med_size_t nb_processes
Definition: litl_types.h:428
litl_general_header_t * trace_header
Definition: litl_types.h:425
litl_buffer_t header_buffer_ptr
Definition: litl_types.h:423
litl_process_header_t * process_header
Definition: litl_types.h:426
A data structure for triples (nb_processes, position, offset)
Definition: litl_types.h:282
litl_offset_t position
Definition: litl_types.h:284
litl_offset_t offset
Definition: litl_types.h:285
litl_med_size_t nb_processes
Definition: litl_types.h:283
Thread-specific buffer.
Definition: litl_types.h:292
litl_buffer_t buffer
Definition: litl_types.h:294
litl_buffer_t buffer_ptr
Definition: litl_types.h:293
litl_data_t already_flushed
Definition: litl_types.h:299
litl_offset_t offset
Definition: litl_types.h:297
A data structure for recording events.
Definition: litl_types.h:307
litl_data_t allow_thread_safety
Definition: litl_types.h:337
litl_buffer_t header
Definition: litl_types.h:314
pthread_mutex_t lock_litl_flush
Definition: litl_types.h:331
litl_buffer_t header_ptr
Definition: litl_types.h:313
litl_offset_t general_offset
Definition: litl_types.h:311
litl_size_t header_size
Definition: litl_types.h:315
litl_size_t buffer_size
Definition: litl_types.h:326
litl_data_t allow_buffer_flush
Definition: litl_types.h:336
litl_write_buffer_t ** buffers
Definition: litl_types.h:324
litl_data_t is_litl_initialized
Definition: litl_types.h:334
litl_param_t threads_offset
Definition: litl_types.h:322
litl_data_t is_header_flushed
Definition: litl_types.h:318
volatile litl_data_t is_recording_paused
Definition: litl_types.h:335
litl_data_t allow_tid_recording
Definition: litl_types.h:338
litl_data_t is_buffer_full
Definition: litl_types.h:327
litl_size_t nb_allocated_buffers
Definition: litl_types.h:325
pthread_key_t index
Definition: litl_types.h:330
litl_size_t header_offset
Definition: litl_types.h:316
pthread_mutex_t lock_buffer_init
Definition: litl_types.h:332
litl_med_size_t nb_slots
Definition: litl_types.h:321
pthread_once_t index_once
Definition: litl_types.h:329
litl_med_size_t nb_threads
Definition: litl_types.h:320
litl_med_size_t header_nb_threads
Definition: litl_types.h:317
An offset event.
A packed event.
A raw event.
A regular event.
Event parameters.