127 #define __LITL_READ_INIT_PTR(evt, _ptr_) \
129 if(LITL_READ_GET_TYPE(evt) == LITL_TYPE_REGULAR) \
130 _ptr_ = &LITL_READ_REGULAR(evt)->param[0]; \
131 else if(LITL_READ_GET_TYPE(evt) == LITL_TYPE_PACKED) \
132 _ptr_ = &(LITL_READ_PACKED(evt))->param[0]; \
136 #define __LITL_CHECK_EVENT_SIZE(evt, _ptr_) \
139 __LITL_READ_INIT_PTR(evt, base_ptr); \
140 int expected_size=0; \
141 if(LITL_READ_GET_TYPE(evt) == LITL_TYPE_REGULAR){ \
142 expected_size = LITL_READ_REGULAR(evt)->nb_params * sizeof(litl_param_t); \
143 int actual_size= ((char*)_ptr_)-((char*)base_ptr); \
144 if(actual_size != expected_size){ \
145 fprintf(stderr, "[LiTL] Warning: parameters take %d bytes, but %d bytes were read!\n", expected_size, actual_size); \
149 expected_size = LITL_READ_PACKED(evt)->size; \
150 int actual_size= ((char*)_ptr_)-((char*)base_ptr); \
151 if(actual_size != expected_size){ \
152 fprintf(stderr, "[LiTL] Warning: parameters take %d bytes, but %d bytes were read!\n", expected_size, actual_size); \
158 #define __LITL_CHECK_EVENT_SIZE(evt, _ptr_) do { }while(0)
165 #define __LITL_READ_GET_ARG(evt, _ptr_, arg) \
167 if(LITL_READ_GET_TYPE(evt) == LITL_TYPE_REGULAR) \
168 __LITL_READ_GET_ARG_REGULAR(_ptr_, arg); \
170 __LITL_READ_GET_ARG_PACKED(_ptr_, arg); \
177 #define __LITL_READ_GET_ARG_REGULAR(_ptr_, arg) do { \
178 arg = (typeof(arg)) *(litl_param_t*)_ptr_; \
179 (litl_param_t*)_ptr_++; \
186 #define __LITL_READ_GET_ARG_PACKED(_ptr_, arg) do { \
187 memcpy(&arg, _ptr_, sizeof(arg)); \
188 _ptr_ = ((char*)_ptr_)+sizeof(arg); \
199 #define LITL_READ_GET_CUR_EVENT_PER_THREAD(process, thread_index) \
200 (&(process)->threads[(thread_index)]->cur_event)
206 #define LITL_READ_GET_CUR_EVENT(process) \
207 LITL_READ_GET_CUR_EVENT_PER_THREAD(process, (process)->cur_index)
214 #define LITL_READ_GET_TID(read_event) (read_event)->tid
220 #define LITL_READ_GET_TIME(read_event) (read_event)->event->time
226 #define LITL_READ_GET_TYPE(read_event) (read_event)->event->type
232 #define LITL_READ_GET_CODE(read_event) (read_event)->event->code
239 #define LITL_READ_RAW(read_event) (&(read_event)->event->parameters.raw)
245 #define LITL_READ_REGULAR(read_event) (&(read_event)->event->parameters.regular)
251 #define LITL_READ_PACKED(read_event) (&(read_event)->event->parameters.packed)
257 #define LITL_READ_OFFSET(read_event) (&(read_event)->event->parameters.offset)
265 #define litl_read_get_param_1(p_evt, \
269 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
270 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
271 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
281 #define litl_read_get_param_2(p_evt, \
286 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
287 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
288 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
289 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
300 #define litl_read_get_param_3(p_evt, \
306 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
307 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
308 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
309 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
310 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
322 #define litl_read_get_param_4(p_evt, \
329 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
330 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
331 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
332 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
333 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
334 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
347 #define litl_read_get_param_5(p_evt, \
355 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
356 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
357 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
358 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
359 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
360 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
361 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
375 #define litl_read_get_param_6(p_evt, \
384 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
385 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
386 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
387 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
388 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
389 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
390 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
391 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
406 #define litl_read_get_param_7(p_evt, \
416 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
417 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
418 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
419 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
420 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
421 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
422 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
423 __LITL_READ_GET_ARG(p_evt, _ptr_, param7); \
424 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
440 #define litl_read_get_param_8(p_evt, \
451 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
452 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
453 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
454 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
455 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
456 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
457 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
458 __LITL_READ_GET_ARG(p_evt, _ptr_, param7); \
459 __LITL_READ_GET_ARG(p_evt, _ptr_, param8); \
460 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
477 #define litl_read_get_param_9(p_evt, \
489 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
490 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
491 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
492 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
493 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
494 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
495 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
496 __LITL_READ_GET_ARG(p_evt, _ptr_, param7); \
497 __LITL_READ_GET_ARG(p_evt, _ptr_, param8); \
498 __LITL_READ_GET_ARG(p_evt, _ptr_, param9); \
499 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
517 #define litl_read_get_param_10(p_evt, \
530 __LITL_READ_INIT_PTR(p_evt, _ptr_); \
531 __LITL_READ_GET_ARG(p_evt, _ptr_, param1); \
532 __LITL_READ_GET_ARG(p_evt, _ptr_, param2); \
533 __LITL_READ_GET_ARG(p_evt, _ptr_, param3); \
534 __LITL_READ_GET_ARG(p_evt, _ptr_, param4); \
535 __LITL_READ_GET_ARG(p_evt, _ptr_, param5); \
536 __LITL_READ_GET_ARG(p_evt, _ptr_, param6); \
537 __LITL_READ_GET_ARG(p_evt, _ptr_, param7); \
538 __LITL_READ_GET_ARG(p_evt, _ptr_, param8); \
539 __LITL_READ_GET_ARG(p_evt, _ptr_, param9); \
540 __LITL_READ_GET_ARG(p_evt, _ptr_, param10); \
541 __LITL_CHECK_EVENT_SIZE(p_evt, _ptr_); \
A data structure for reading events from both regular trace files and archives of traces...
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.
void litl_read_reset_process(litl_read_process_t *process)
Resets the trace pointer.
litl_process_header_t * litl_read_get_process_header(litl_read_process_t *process)
Returns a pointer to the process header.
A data structure for reading one event.
litl_size_t litl_read_get_buffer_size(litl_read_trace_t *trace)
Returns the buffer size.
A data structure for reading process-specific events.
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.
void litl_read_finalize_trace(litl_read_trace_t *trace)
Closes the trace and frees the allocated memory.
void litl_read_set_buffer_size(litl_read_trace_t *trace, const litl_size_t buf_size)
Sets the buffer size.
litl_read_event_t * litl_read_next_event(litl_read_trace_t *trace)
Reads the next event from a trace file.
litl_types Provides a set of data structures for recording and reading events as well as merging and ...
uint32_t litl_size_t
An auxiliary data type for storing data.
void litl_read_init_processes(litl_read_trace_t *trace)
Initializes the event reading structure.
litl_general_header_t * litl_read_get_trace_header(litl_read_trace_t *trace)
Returns a pointer to the trace header.