138 #define __LITL_READ_INIT_PTR(evt, _ptr_) \
140 if(LITL_READ_GET_TYPE(evt) == LITL_TYPE_REGULAR) \
141 _ptr_ = &LITL_READ_REGULAR(evt)->param[0]; \
142 else if(LITL_READ_GET_TYPE(evt) == LITL_TYPE_PACKED) \
143 _ptr_ = &(LITL_READ_PACKED(evt))->param[0]; \
147 #define __LITL_CHECK_EVENT_SIZE(evt, _ptr_) \
150 __LITL_READ_INIT_PTR(evt, base_ptr); \
151 int expected_size=0; \
152 if(LITL_READ_GET_TYPE(evt) == LITL_TYPE_REGULAR){ \
153 expected_size = LITL_READ_REGULAR(evt)->nb_params * sizeof(litl_param_t); \
154 int actual_size= ((char*)_ptr_)-((char*)base_ptr); \
155 if(actual_size != expected_size){ \
156 fprintf(stderr, "[LiTL] Warning: parameters take %d bytes, but %d bytes were read!\n", expected_size, actual_size); \
160 expected_size = LITL_READ_PACKED(evt)->size; \
161 int actual_size= ((char*)_ptr_)-((char*)base_ptr); \
162 if(actual_size != expected_size){ \
163 fprintf(stderr, "[LiTL] Warning: parameters take %d bytes, but %d bytes were read!\n", expected_size, actual_size); \
169 #define __LITL_CHECK_EVENT_SIZE(evt, _ptr_) do { }while(0)
176 #define __LITL_READ_GET_ARG(evt, _ptr_, arg) \
178 if(LITL_READ_GET_TYPE(evt) == LITL_TYPE_REGULAR) \
179 __LITL_READ_GET_ARG_REGULAR(_ptr_, arg); \
181 __LITL_READ_GET_ARG_PACKED(_ptr_, arg); \
188 #define __LITL_READ_GET_ARG_REGULAR(_ptr_, arg) do { \
189 arg = (typeof(arg)) *(litl_param_t*)_ptr_; \
190 (litl_param_t*)_ptr_++; \
197 #define __LITL_READ_GET_ARG_PACKED(_ptr_, arg) do { \
198 memcpy(&arg, _ptr_, sizeof(arg)); \
199 _ptr_ = ((char*)_ptr_)+sizeof(arg); \
210 #define LITL_READ_GET_CUR_EVENT_PER_THREAD(process, thread_index) \
211 (&(process)->threads[(thread_index)]->cur_event)
217 #define LITL_READ_GET_CUR_EVENT(process) \
218 LITL_READ_GET_CUR_EVENT_PER_THREAD(process, (process)->cur_index)
225 #define LITL_READ_GET_TID(read_event) (read_event)->tid
231 #define LITL_READ_GET_TIME(read_event) (read_event)->event->time
237 #define LITL_READ_GET_TYPE(read_event) (read_event)->event->type
243 #define LITL_READ_GET_CODE(read_event) (read_event)->event->code
250 #define LITL_READ_RAW(read_event) (&(read_event)->event->parameters.raw)
256 #define LITL_READ_REGULAR(read_event) (&(read_event)->event->parameters.regular)
262 #define LITL_READ_PACKED(read_event) (&(read_event)->event->parameters.packed)
268 #define LITL_READ_OFFSET(read_event) (&(read_event)->event->parameters.offset)
276 #define litl_read_get_param_1(p_evt, \
280 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
281 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
282 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
292 #define litl_read_get_param_2(p_evt, \
297 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
298 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
299 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
300 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
311 #define litl_read_get_param_3(p_evt, \
317 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
318 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
319 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
320 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
321 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
333 #define litl_read_get_param_4(p_evt, \
340 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
341 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
342 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
343 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
344 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
345 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
358 #define litl_read_get_param_5(p_evt, \
366 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
367 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
368 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
369 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
370 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
371 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
372 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
386 #define litl_read_get_param_6(p_evt, \
395 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
396 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
397 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
398 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
399 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
400 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
401 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
402 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
417 #define litl_read_get_param_7(p_evt, \
427 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
428 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
429 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
430 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
431 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
432 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
433 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
434 __LITL_READ_GET_ARG(p_evt, _ptr_, param7); \
435 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
451 #define litl_read_get_param_8(p_evt, \
462 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
463 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
464 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
465 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
466 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
467 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
468 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
469 __LITL_READ_GET_ARG(p_evt, _ptr_, param7); \
470 __LITL_READ_GET_ARG(p_evt, _ptr_, param8); \
471 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
488 #define litl_read_get_param_9(p_evt, \
500 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
501 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
502 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
503 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
504 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
505 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
506 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
507 __LITL_READ_GET_ARG(p_evt, _ptr_, param7); \
508 __LITL_READ_GET_ARG(p_evt, _ptr_, param8); \
509 __LITL_READ_GET_ARG(p_evt, _ptr_, param9); \
510 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
528 #define litl_read_get_param_10(p_evt, \
541 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
542 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
543 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
544 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
545 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
546 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
547 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
548 __LITL_READ_GET_ARG(p_evt, _ptr_, param7); \
549 __LITL_READ_GET_ARG(p_evt, _ptr_, param8); \
550 __LITL_READ_GET_ARG(p_evt, _ptr_, param9); \
551 __LITL_READ_GET_ARG(p_evt, _ptr_, param10); \
552 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
litl_process_header_t * litl_read_get_process_header(litl_read_process_t *process)
Returns a pointer to the process header.
litl_size_t litl_read_get_buffer_size(litl_read_trace_t *trace)
Returns the buffer size.
void litl_read_set_buffer_size(litl_read_trace_t *trace, const litl_size_t buf_size)
Sets the buffer size.
litl_read_trace_t * litl_read_open_trace(const char *filename)
Opens a trace and reads the first portion of data (trace header) to the buffer.
litl_general_header_t * litl_read_get_trace_header(litl_read_trace_t *trace)
Returns a pointer to the trace header.
void litl_read_init_processes(litl_read_trace_t *trace)
Initializes the event reading structure.
void litl_read_reset_process(litl_read_process_t *process)
Resets the trace pointer.
litl_read_event_t * litl_read_next_process_event(litl_read_trace_t *trace, litl_read_process_t *process)
Reads the next event from a trace.
litl_read_event_t * litl_read_next_thread_event(litl_read_trace_t *trace, litl_read_process_t *process, litl_read_thread_t *thread)
Reads the next event from a trace.
void litl_read_finalize_trace(litl_read_trace_t *trace)
Closes the trace and frees the allocated memory.
litl_read_event_t * litl_read_next_event(litl_read_trace_t *trace)
Reads the next event from a trace file.
uint32_t litl_size_t
An auxiliary data type for storing data.
litl_types Provides a set of data structures for recording and reading events as well as merging and ...
A data structure for reading one event.
A data structure for reading process-specific events.
A data structure for reading thread-specific events.
A data structure for reading events from both regular trace files and archives of traces.