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_); \ A data structure for reading events from both regular trace files and archives of traces...
A data structure for reading thread-specific events.
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_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.
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.