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.