4 /* structure definition */
6 typedef struct _trace_header_event
{
7 //information of the machine type
8 uint32_t arch_type
; /* Type of architecture */
9 uint32_t arch_variant
; /* Variant of the given type of architecture */
10 uint32_t system_type
; /* Operating system type */
11 char system_name
[32]; /* system name */
12 // uint32_t magic_number; /* Magic number to identify a trace */
13 ltt_arch_size arch_size
; /* data type size */
14 ltt_arch_endian arch_endian
; /* endian type : little or big */
17 uint8_t time_size
; /* time size */
18 uint8_t time_granul
; /* time granularity */
19 uint8_t id_size
; /* size of combined facility/event ids */
22 uint32_t ip_addr
; /* IP of the machine */
23 uint8_t cpu_number
; /* number of CPU */
24 uint8_t cpu_id
; /* cpu id */
25 uint8_t cpu_number_used
; /* the number of the cpu used in the tracefile */
26 uint32_t buffer_size
; /* Size of blocks */
27 } LTT_PACKED_STRUCT trace_header_event
;
30 typedef struct _block_header
{
31 ltt_time time
; /* Time stamp of this block */
32 ltt_cycle_count cycle_count
; /* cycle count of the event */
33 uint32_t event_count
; /* event count */
34 } LTT_PACKED_STRUCT block_header
;
37 typedef struct _block_footer
{
38 uint32_t unused_bytes
; /* unused bytes at the end of the block */
39 ltt_time time
; /* Time stamp of this block */
40 ltt_cycle_count cycle_count
; /* cycle count of the event */
41 } LTT_PACKED_STRUCT block_footer
;
45 char * element_name
; //elements name of the struct or type name
48 ltt_type_enum type_class
; //which type
49 char ** enum_strings
; //for enum labels
50 struct _ltt_type
** element_type
; //for array, sequence and struct
51 unsigned element_number
; //the number of elements
52 //for enum, array, sequence and structure
55 struct _ltt_eventtype
{
58 int index
; //id of the event type within the facility
59 ltt_facility
* facility
; //the facility that contains the event type
60 ltt_field
* root_field
; //root field
61 int latest_block
; //the latest block using the event type
62 int latest_event
; //the latest event using the event type
66 unsigned field_pos
; //field position within its parent
67 ltt_type
* field_type
; //field type, if it is root field
68 //then it must be struct type
70 off_t offset_root
; //offset from the root, -1:uninitialized
71 short fixed_root
; //offset fixed according to the root
72 //-1:uninitialized, 0:unfixed, 1:fixed
73 off_t offset_parent
; //offset from the parent,-1:uninitialized
74 short fixed_parent
; //offset fixed according to its parent
75 //-1:uninitialized, 0:unfixed, 1:fixed
76 // void * base_address; //base address of the field ????
78 int field_size
; //>0: size of the field,
81 int element_size
; //the element size of the sequence
82 int field_fixed
; //0: field has string or sequence
83 //1: field has no string or sequenc
86 struct _ltt_field
* parent
;
87 struct _ltt_field
** child
;//for array, sequence and struct:
88 //list of fields, it may have only one
89 //field if the element is not a struct
90 unsigned current_element
; //which element is currently processed
95 ltt_cycle_count cycle_count
;
96 ltt_tracefile
* tracefile
;
97 void * data
; //event data
100 struct _ltt_facility
{
101 char * name
; //facility name
102 int event_number
; //number of events in the facility
103 ltt_checksum checksum
; //checksum of the facility
104 ltt_eventtype
** events
; //array of event types
105 unsigned usage_count
; //usage count
106 table all_named_types
; //an array of named ltt_type
107 sequence all_unnamed_types
;//an array of unnamed ltt_type
108 sequence all_fields
; //an array of fields
111 struct _ltt_tracefile
{
112 int fd
; /* file descriptor */
113 off_t file_size
; /* file size */
114 int block_number
; /* number of blocks in the file */
115 int which_block
; /* which block the current block is */
116 int which_event
; /* which event of the current block
117 is currently processed */
118 ltt_time current_event_time
; /* time of the current event */
119 trace_header_event
* trace_header
; /* the first event in the first block */
120 block_header
* a_block_header
; /* block header of the block*/
121 block_footer
* a_block_footer
; /* block footer of the block*/
122 void * first_event_pos
; /* the position of the first event */
123 void * cur_event_pos
; /* the position of the current event */
124 void * buffer
; /* the buffer containing the block */
125 double cycle_per_nsec
; /* Cycles per nsec */
126 unsigned int cur_heart_beat_number
;/* the number of heart beat so far
129 ltt_time start_time
; /* trace start time */
130 ltt_time end_time
; /* trace end time */
131 ltt_time prev_block_end_time
; /* the end time of previous block */
132 ltt_time prev_event_time
; /* the time of the previous event */
134 int eventtype_number
; /* the number of event type
136 int facility_number
; /* the number of the facility in
138 GHashTable
* index_facility
; /* facility index and facility pair */
139 GHashTable
* facility_name
; /* name and facility pair */
140 GHashTable
* base_id_name
; /* facility name and base id pair*/
142 GPtrArray
* eventtype_event_id
; /* an array of eventtypes accessed
145 ltt_arch_size my_arch_size
; /* data type size of the local machine */
146 ltt_arch_endian my_arch_endian
; /* endian type of the local machine */
153 /*****************************************************************************
154 macro for size of some data types
155 *****************************************************************************/
156 #define EVENT_ID_SIZE sizeof(int8_t)
157 #define CYCLE_COUNT_SIZE sizeof(ltt_cycle_count)
158 //event id and time delta(cycle count)
159 //yxx disable during the test
160 //#define EVENT_HEADER_SIZE (EVENT_ID_SIZE + CYCLE_COUNT_SIZE)
161 #define EVENT_HEADER_SIZE (EVENT_ID_SIZE + sizeof(uint32_t))
166 /* obtain the time of an event */
167 ltt_time
getEventTime(ltt_tracefile
* tf
);
169 /* get the data type size and endian type of the local machine */
170 void getDataEndianType(ltt_arch_size
* size
, ltt_arch_endian
* endian
);
173 typedef struct _ptr_wrap
{