Rev 1510 | Rev 1520 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <FTrace.h>
#define READ_BUFFER 2000
#define DELTA_BUFFER 100
int main(int argc, char *argv[])
{
char buffer[READ_BUFFER+DELTA_BUFFER];
void *p, *last;
int n,delta,size,tsc;
unsigned long long ev = 0, tsc_value;
FILE *input_file;
if (argc < 2) {
printf("%s: Enter the input file name [%s filename]\n",argv[0],argv[0]);
exit(1);
}
input_file = fopen(argv[1],"rb");
last = buffer + READ_BUFFER;
while(!feof(input_file)) {
//move remaining byte
delta = (unsigned int)(buffer) + READ_BUFFER - (unsigned int)(last);
if (delta > 0) memcpy(buffer,last,delta);
n = fread(buffer+delta,1,READ_BUFFER+10,input_file);
fseek(input_file,-(delta+10),SEEK_CUR);
p = buffer;
while ((unsigned int)(p) + 16 <= (unsigned int)(buffer + READ_BUFFER) &&
(unsigned int)(p) + 16 <= (unsigned int)(buffer + n + delta)) {
tsc = 0;
switch (*(unsigned short int *)(p) & 0x00FF) {
case FTrace_EVT_ipoint:
printf("%d ",*(unsigned short int *)(p+2));
tsc = 1;
break;
/* Tracer start */
case FTrace_EVT_trace_start:
printf("0 ");
tsc = 1;
break;
/* Tracer stop */
case FTrace_EVT_trace_stop:
printf("1 ");
tsc = 1;
break;
/* Interrupt start (int num) */
case FTrace_EVT_timer_wakeup_start:
case FTrace_EVT_interrupt_start:
printf("2 ");
tsc = 1;
break;
/* Interrupt Stop (int num, or context num is int 3) */
case FTrace_EVT_timer_wakeup_end:
case FTrace_EVT_interrupt_end:
printf("3 ");
tsc = 1;
break;
/* Context to (context num) */
case FTrace_EVT_context_switch:
printf("4 ");
tsc = 1;
break;
/* Task Create (context num, pid num) */
case FTrace_EVT_task_create:
printf("5 ");
tsc = 1;
break;
/* Task Activate (context num) */
case FTrace_EVT_task_activate:
printf("6 ");
tsc = 1;
break;
/* Task End (context num) */
case FTrace_EVT_task_end:
printf("7 ");
tsc = 1;
break;
/* Task End-Cycle (context num) */
case FTrace_EVT_task_end_cycle:
printf("8 ");
tsc = 1;
break;
/* Task Context - PID declaration */
case FTrace_EVT_id:
printf("9 ");
tsc = 1;
break;
case FTrace_EVT_cycles_per_msec:
printf("10 ");
tsc = 1;
break;
}
tsc_value = (unsigned long long)(*(unsigned int *)(p+4)) << 32;
tsc_value += (unsigned long long)(*(unsigned int *)(p+8));
if (tsc == 1) {
printf("%llu ",tsc_value);
switch (*(unsigned short int *)(p) & 0x00FF) {
case FTrace_EVT_interrupt_start:
printf("%d ",*(unsigned short int *)(p+2));
break;
case FTrace_EVT_timer_wakeup_start:
printf("%d ",0);
break;
case FTrace_EVT_timer_wakeup_end:
case FTrace_EVT_interrupt_end:
printf("%d ",*(unsigned short int *)(p+2));
break;
case FTrace_EVT_context_switch:
printf("%d ",*(unsigned short int *)(p+2));
break;
case FTrace_EVT_task_create:
printf("%d %d",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
break;
case FTrace_EVT_task_activate:
printf("%d ",*(unsigned short int *)(p+2));
break;
case FTrace_EVT_task_end_cycle:
printf("%d ",*(unsigned short int *)(p+2));
break;
case FTrace_EVT_task_end:
printf("%d ",*(unsigned short int *)(p+2));
break;
case FTrace_EVT_id:
printf("%d %d",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
break;
case FTrace_EVT_cycles_per_msec:
printf("%d ",*(unsigned int *)(p+12));
break;
}
printf("\n");
}
size = 16;
ev++;
p += 16;
if ((unsigned int)(p) + 10 > (unsigned int)(buffer + n + delta)) break;
last = p;
}
if ((unsigned int)(p) + 10 > (unsigned int)(buffer + n + delta)) break;
}
fclose(input_file);
return 0;
}