litl  0.1.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
litl_print.c
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 #include <string.h>
19 #include <stdlib.h>
20 
21 #include "litl_tools.h"
22 #include "litl_read.h"
23 
24 static char* __input_filename = "trace";
25 
26 static void __litl_read_usage(int argc __attribute__((unused)), char **argv) {
27  fprintf(stderr, "Usage: %s [-f input_filename] \n", argv[0]);
28  printf(" -?, -h: Display this help and exit\n");
29 }
30 
31 static void __litl_read_parse_args(int argc, char **argv) {
32  int i;
33 
34  for (i = 1; i < argc; i++) {
35  if ((strcmp(argv[i], "-f") == 0)) {
36  __input_filename = argv[++i];
37  } else if ((strcmp(argv[i], "-h") || strcmp(argv[i], "-?")) == 0) {
38  __litl_read_usage(argc, argv);
39  exit(-1);
40  } else if (argv[i][0] == '-') {
41  fprintf(stderr, "Unknown option %s\n", argv[i]);
42  __litl_read_usage(argc, argv);
43  exit(-1);
44  }
45  }
46 
47  if (strcmp(__input_filename, "trace") == 0) {
48  __litl_read_usage(argc, argv);
49  exit(-1);
50  }
51 }
52 
53 int main(int argc, char **argv) {
55  litl_read_event_t* event;
56  litl_read_trace_t *trace;
57  litl_general_header_t* trace_header;
58  litl_process_header_t* process_header;
59 
60  // parse the arguments passed to this program
61  __litl_read_parse_args(argc, argv);
62 
63  trace = litl_read_open_trace(__input_filename);
64 
66 
67  trace_header = litl_read_get_trace_header(trace);
68  process_header = litl_read_get_process_header(trace->processes[0]);
69 
70  // print the header
71  printf(" LiTL v.%s\n", trace_header->litl_ver);
72  printf(" %s\n", trace_header->sysinfo);
73  printf(" nb_processes \t %d\n", trace_header->nb_processes);
74  if (trace_header->nb_processes == 1)
75  printf(" nb_threads \t %d\n", process_header->nb_threads);
76  printf(
77  " buffer_size \t %d\n",
78  trace->processes[0]->header->buffer_size
81 
82  printf(
83  "[Timestamp]\t[ThreadID]\t[EventType]\t[EventCode]\t[NbParam]\t[Parameters]\n");
84  while (1) {
85  event = litl_read_next_event(trace);
86 
87  if (event == NULL )
88  break;
89 
90  switch (LITL_READ_GET_TYPE(event)) {
91  case LITL_TYPE_REGULAR: { // regular event
92  printf("%"PRTIu64" \t%"PRTIu64" \t Reg %"PRTIx32" \t %"PRTIu32,
94  LITL_READ_GET_CODE(event), LITL_READ_REGULAR(event)->nb_params);
95 
96  for (i = 0; i < LITL_READ_REGULAR(event)->nb_params; i++)
97  printf("\t %"PRTIx64, LITL_READ_REGULAR(event)->param[i]);
98  break;
99  }
100  case LITL_TYPE_RAW: { // raw event
101  printf("%"PRTIu64"\t%"PRTIu64" \t Raw %"PRTIx32" \t %"PRTIu32,
102  LITL_READ_GET_TIME(event), LITL_READ_GET_TID(event),
103  LITL_READ_GET_CODE(event), LITL_READ_RAW(event)->size);
104  printf("\t %s", (litl_data_t *) LITL_READ_RAW(event)->data);
105  break;
106  }
107  case LITL_TYPE_PACKED: { // packed event
108  printf("%"PRTIu64" \t%"PRTIu64" \t Packed %"PRTIx32" \t %"PRTIu32"\t",
109  LITL_READ_GET_TIME(event), LITL_READ_GET_TID(event),
110  LITL_READ_GET_CODE(event), LITL_READ_PACKED(event)->size);
111  for (i = 0; i < LITL_READ_PACKED(event)->size; i++) {
112  printf(" %x", LITL_READ_PACKED(event)->param[i]);
113  }
114  break;
115  }
116  case LITL_TYPE_OFFSET: { // offset event
117  continue;
118  }
119  default: {
120  fprintf(stderr, "Unknown event type %d\n", LITL_READ_GET_TYPE(event));
121  abort();
122  }
123  }
124 
125  printf("\n");
126  }
127 
129 
130  return EXIT_SUCCESS;
131 }
#define LITL_READ_GET_TID(read_event)
Returns a thread id of a given event.
Definition: litl_read.h:188
A data structure for reading events from both regular trace files and archives of traces...
Definition: litl_types.h:384
#define LITL_MAX_PARAMS
Defines the maximum number of parameters.
Definition: litl_types.h:167
litl_size_t buffer_size
Definition: litl_types.h:262
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.
Definition: litl_read.c:187
litl_med_size_t __litl_get_reg_event_size(litl_data_t nb_params)
Returns the size of a regular event (in Bytes) depending on the number of its parameters.
Definition: litl_tools.c:18
litl_data_t sysinfo[128]
Definition: litl_types.h:249
litl_process_header_t * litl_read_get_process_header(litl_read_process_t *process)
Returns a pointer to the process header.
Definition: litl_read.c:245
#define LITL_READ_PACKED(read_event)
Returns a size and a list of parameters of a packed event.
Definition: litl_read.h:225
#define LITL_READ_GET_TIME(read_event)
Returns a time stamp of a given event.
Definition: litl_read.h:194
A data structure for reading one event.
Definition: litl_types.h:342
litl_process_header_t * header
Definition: litl_types.h:368
int main(int argc, char **argv)
Definition: litl_print.c:53
A general data structure that corresponds to the header of a trace file.
Definition: litl_types.h:258
litl_med_size_t nb_processes
Definition: litl_types.h:250
#define PRTIu64
Definition: litl_types.h:442
litl_data_t litl_ver[8]
Definition: litl_types.h:248
void litl_read_finalize_trace(litl_read_trace_t *trace)
Closes the trace and frees the allocated memory.
Definition: litl_read.c:443
uint16_t litl_med_size_t
An auxiliary data type for the optimized storage of data.
Definition: litl_types.h:150
#define LITL_READ_GET_TYPE(read_event)
Returns a type of a given event.
Definition: litl_read.h:200
litl_read_event_t * litl_read_next_event(litl_read_trace_t *trace)
Reads the next event from a trace file.
Definition: litl_read.c:424
#define PRTIx32
Definition: litl_types.h:435
uint8_t litl_data_t
A data type for the optimized storage of parameters.
Definition: litl_types.h:155
#define LITL_READ_REGULAR(read_event)
Returns a size and a list of parameters of a regular event.
Definition: litl_read.h:219
#define LITL_READ_RAW(read_event)
Returns a size and parameters in the string format of a raw event.
Definition: litl_read.h:213
litl_med_size_t nb_threads
Definition: litl_types.h:260
#define PRTIx64
Definition: litl_types.h:443
litl_read_process_t ** processes
Definition: litl_types.h:392
litl_read Provides a set of functions for reading events from a regular trace file or an archive of t...
#define LITL_READ_GET_CODE(read_event)
Returns a code of a given event.
Definition: litl_read.h:206
A general data structure that corresponds to the header of a trace file.
Definition: litl_types.h:247
void litl_read_init_processes(litl_read_trace_t *trace)
Initializes the event reading structure.
Definition: litl_read.c:206
litl_tools Provides a set of auxiliary functions
#define PRTIu32
Definition: litl_types.h:434
litl_general_header_t * litl_read_get_trace_header(litl_read_trace_t *trace)
Returns a pointer to the trace header.
Definition: litl_read.c:238