Subversion Repositories shark

Rev

Rev 1558 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1491 giacomo 1
/*
2
 * Project: S.Ha.R.K.
3
 *
4
 * Coordinators:
5
 *   Giorgio Buttazzo    <giorgio@sssup.it>
6
 *   Paolo Gai           <pj@gandalf.sssup.it>
7
 *
8
 * Authors     :
9
 *    Giacomo Guidi      <giacomo@gandalf.sssup.it>
10
 *
11
 * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
12
 *
13
 * http://www.sssup.it
14
 * http://retis.sssup.it
15
 * http://shark.sssup.it
16
 */
17
 
18
#include <stdio.h>
19
#include <unistd.h>
20
#include <stdlib.h>
21
#include <string.h>
22
 
23
#include <FTrace.h>
24
 
25
#define READ_BUFFER 2000
26
#define DELTA_BUFFER 100
27
 
28
int main(int argc, char *argv[])
29
{
30
 
31
  char buffer[READ_BUFFER+DELTA_BUFFER];
32
  void *p, *last;
1492 giacomo 33
  int n,delta,size,tsc;
1491 giacomo 34
 
35
  unsigned long long ev = 0, tsc_value;
36
 
37
  FILE *input_file;
38
 
39
  if (argc < 2) {
40
    printf("%s: Enter the input file name [%s filename]\n",argv[0],argv[0]);
41
    exit(1);
42
  }
43
 
44
  input_file = fopen(argv[1],"rb");
45
 
46
  last = buffer + READ_BUFFER;
47
 
48
  while(!feof(input_file)) {
49
 
50
    //move remaining byte
51
    delta = (unsigned int)(buffer) + READ_BUFFER - (unsigned int)(last);
52
    if (delta > 0) memcpy(buffer,last,delta);
53
 
54
    n = fread(buffer+delta,1,READ_BUFFER+10,input_file);
55
    fseek(input_file,-(delta+10),SEEK_CUR);
56
 
57
    p = buffer;
1558 trimarchi 58
    /*
59
    // specific server events
60
    #define FTrace_EVT_server_create      0x08 // Par1 [empty] Par2 [server]
61
    #define FTrace_EVT_server_replenish   0x18 // Par1 [empty] Par2 [server]
62
    #define FTrace_EVT_server_exhaust     0x28 // Par1 [empty] Par2 [server]
63
    #define FTrace_EVT_server_reclaiming  0x38 // Par1 [empty] Par2 [server]
64
    #define FTrace_EVT_server_remove      0x48 // Par1 [empty] Par2 [server]
65
    #define FTrace_EVT_server_active      0x58 // Par1 [empty] Par2 [server]
66
    #define FTrace_EVT_server_using_rec   0x68 // Par1 [reclaiming] Par2 [server]
67
    */
1491 giacomo 68
 
69
    while ((unsigned int)(p) + 16 <= (unsigned int)(buffer + READ_BUFFER) &&
70
	   (unsigned int)(p) + 16 <= (unsigned int)(buffer + n + delta)) {
71
 
1492 giacomo 72
	tsc = 0;
73
 
1510 giacomo 74
	switch (*(unsigned short int *)(p) & 0x00FF) {
1491 giacomo 75
 
76
	  case FTrace_EVT_ipoint:
77
		printf("%d ",*(unsigned short int *)(p+2));
1492 giacomo 78
		tsc = 1;
1491 giacomo 79
		break;
80
 
1494 giacomo 81
	  /* Tracer start */
1491 giacomo 82
          case FTrace_EVT_trace_start:
83
                printf("0 ");
1492 giacomo 84
		tsc = 1;
1491 giacomo 85
                break;
86
 
1494 giacomo 87
	  /* Tracer stop */
1491 giacomo 88
          case FTrace_EVT_trace_stop:
89
                printf("1 ");
1492 giacomo 90
		tsc = 1;
1491 giacomo 91
                break;
92
 
1494 giacomo 93
	  /* Interrupt start (int num) */
1491 giacomo 94
	  case FTrace_EVT_timer_wakeup_start:
95
	  case FTrace_EVT_interrupt_start:
96
                printf("2 ");
1492 giacomo 97
		tsc = 1;
1491 giacomo 98
                break;
99
 
1494 giacomo 100
          /* Interrupt Stop (int num, or context num is int 3) */
101
	  case FTrace_EVT_timer_wakeup_end:
1491 giacomo 102
          case FTrace_EVT_interrupt_end:
103
                printf("3 ");
1492 giacomo 104
		tsc = 1;
1491 giacomo 105
                break;
106
 
1494 giacomo 107
	  /* Context to (context num) */
1491 giacomo 108
	  case FTrace_EVT_context_switch:
109
                printf("4 ");
1492 giacomo 110
		tsc = 1;
1491 giacomo 111
                break;
112
 
1494 giacomo 113
	  /* Task Create (context num, pid num) */
114
	  case FTrace_EVT_task_create:
115
		printf("5 ");
116
		tsc = 1;
117
		break;
118
 
119
	  /* Task Activate (context num) */
120
	  case FTrace_EVT_task_activate:
121
		printf("6 ");
122
		tsc = 1;
123
		break;
124
 
125
	  /* Task End (context num) */
126
	  case FTrace_EVT_task_end:
127
		printf("7 ");
128
		tsc = 1;
129
		break;
130
 
131
	  /* Task End-Cycle (context num) */
132
	  case FTrace_EVT_task_end_cycle:
133
		printf("8 ");
134
		tsc = 1;
135
		break;
136
 
1508 giacomo 137
	  /* Task Context - PID declaration */
138
	  case FTrace_EVT_id:
139
		printf("9 ");
140
		tsc = 1;
141
		break;
142
 
1517 giacomo 143
	  case FTrace_EVT_cycles_per_msec:
144
		printf("10 ");
145
		tsc = 1;
146
                break;
1558 trimarchi 147
		// specific server events
1517 giacomo 148
 
1558 trimarchi 149
          case FTrace_EVT_server_active:
150
                printf("16 ");
151
                tsc=1;
152
                break;
153
 
1523 giacomo 154
	  case FTrace_EVT_task_deadline_miss:
155
		printf("20 ");
156
		tsc = 1;
157
		break;
158
 
159
	  case FTrace_EVT_task_wcet_violation:
160
                printf("21 ");
161
                tsc = 1;
162
                break;
163
 
1491 giacomo 164
	}
165
 
166
        tsc_value = (unsigned long long)(*(unsigned int *)(p+4)) << 32;
167
        tsc_value += (unsigned long long)(*(unsigned int *)(p+8));
168
 
1492 giacomo 169
	if (tsc == 1) {
1491 giacomo 170
 
1492 giacomo 171
	  printf("%llu ",tsc_value);
172
 
1510 giacomo 173
	  switch (*(unsigned short int *)(p) & 0x00FF) {
1492 giacomo 174
 
1520 giacomo 175
	    case FTrace_EVT_trace_start:
176
		printf("%d %d ",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
177
		break;
178
 
1492 giacomo 179
            case FTrace_EVT_interrupt_start:
180
                printf("%d ",*(unsigned short int *)(p+2));
181
                break;
182
 
183
	    case FTrace_EVT_timer_wakeup_start:
184
                printf("%d ",0);
185
                break;
186
 
187
	    case FTrace_EVT_timer_wakeup_end:
188
	    case FTrace_EVT_interrupt_end:
189
                printf("%d ",*(unsigned short int *)(p+2));
190
                break;
191
 
192
            case FTrace_EVT_context_switch:
193
                printf("%d ",*(unsigned short int *)(p+2));
194
                break;
195
 
1494 giacomo 196
	    case FTrace_EVT_task_create:
197
		printf("%d %d",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
198
		break;
199
 
1523 giacomo 200
	    case FTrace_EVT_task_deadline_miss:
201
		printf("%d %d",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
202
		break;
203
 
204
	    case FTrace_EVT_task_wcet_violation:
205
                printf("%d %d",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
206
                break;
207
 
1494 giacomo 208
	    case FTrace_EVT_task_activate:
209
		printf("%d ",*(unsigned short int *)(p+2));
210
		break;
211
 
212
	    case FTrace_EVT_task_end_cycle:
213
		printf("%d ",*(unsigned short int *)(p+2));
214
		break;
215
 
216
	    case FTrace_EVT_task_end:
217
		printf("%d ",*(unsigned short int *)(p+2));
218
		break;
219
 
1508 giacomo 220
	    case FTrace_EVT_id:
221
		printf("%d %d",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
222
		break;
223
 
1517 giacomo 224
	    case FTrace_EVT_cycles_per_msec:
225
                printf("%d ",*(unsigned int *)(p+12));
226
                break;
1558 trimarchi 227
 
1560 trimarchi 228
  	    case FTrace_EVT_server_active:
1558 trimarchi 229
	        printf("%d %d",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
230
		break;
1492 giacomo 231
	  }
232
 
233
	  printf("\n");
234
 
235
	}
236
 
1491 giacomo 237
	size = 16;
238
 
239
      ev++;
240
 
241
      p += 16;
242
 
243
      if ((unsigned int)(p) + 10 > (unsigned int)(buffer + n + delta)) break;
244
 
245
      last = p;
246
 
247
    }
248
 
249
    if ((unsigned int)(p) + 10 > (unsigned int)(buffer + n + delta)) break;
250
 
251
  }
252
 
253
  fclose(input_file);
254
 
255
  return 0;
256
 
257
}
258