Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 531 → Rev 532

/shark/trunk/tracer/newtrace/FTrace.c
9,8 → 9,8
FTrace_Chunk_Ptr ChunkTable[MAX_CHUNK]; /* Chunk array */
FTrace_Chunk_Ptr ActualChunk = NULL; /* Actual Chunk */
 
/* Global Pointers */
BYTE OSD_pointers[FTRACE_OSD_CHUNK_HEAD];
/* OSD Pointer */
void *OSD_current_pointer;
 
int FTraceInit = 0;
int FTraceEnable = 0;
63,7 → 63,7
 
FTrace_lock();
 
memset(OSD_pointers,0,sizeof(OSD_pointers));
OSD_current_pointer = NULL;
 
for (i = 0;i < MAX_CHUNK;i++)
ChunkTable[i] = NULL;
114,11 → 114,11
}
 
int FTrace_chunk_create(int n, int size, int emergency_size, FTrace_flags flags)
int FTrace_chunk_create(int size, int emergency_size, FTrace_flags flags)
{
 
FTrace_Chunk_Ptr FT_temp;
int i, number, err;
int number, err;
 
FTrace_lock();
 
133,48 → 133,44
}
}
 
for (i = 0;i < n;i++) {
number = FTrace_find_free_slot();
if (number == -1) {
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Error: cannot find free slot for chunk\n");
#endif
FTrace_unlock();
return -1;
}
 
number = FTrace_find_free_slot();
if (number == -1) {
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Error: cannot find free slot for chunk\n");
#endif
FTrace_unlock();
return -1;
}
FT_temp = (FTrace_Chunk_Ptr)FTrace_malloc(sizeof(struct FTrace_Chunk) + FTRACE_OSD_CHUNK_HEAD + size + emergency_size);
if (FT_temp == NULL) {
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Error: cannot allocate memory for chunk\n");
#endif
FTrace_unlock();
return -1;
}
 
FT_temp = (FTrace_Chunk_Ptr)FTrace_malloc(sizeof(struct FTrace_Chunk) + FTRACE_OSD_CHUNK_HEAD + size + emergency_size);
if (FT_temp == NULL) {
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Error: cannot allocate memory for chunk\n");
#endif
FTrace_unlock();
return -1;
}
memset(FT_temp,0,sizeof(struct FTrace_Chunk) + FTRACE_OSD_CHUNK_HEAD + size + emergency_size);
 
memset(FT_temp,0,sizeof(struct FTrace_Chunk) + FTRACE_OSD_CHUNK_HEAD + size + emergency_size);
err = FTrace_chunk_init(FT_temp, number, size, emergency_size, flags);
if (err != 0) {
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Error: cannot initialized the new chunk\n");
#endif
FTrace_unlock();
return -1;
}
 
err = FTrace_chunk_init(FT_temp, number, size, emergency_size, flags);
if (err != 0) {
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Error: cannot initialized the new chunk\n");
#endif
FTrace_unlock();
return -1;
}
/* Set the ChunkTable */
ChunkTable[number] = FT_temp;
 
/* Set the ChunkTable */
ChunkTable[number] = FT_temp;
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Debug: Chunk %d created at addr %x\n",number,(int)FT_temp);
#endif
 
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Debug: Chunk %d created at addr %x\n",number,(int)FT_temp);
#endif
 
}
 
FTrace_unlock();
return 0;
return number;
 
}
 
269,9 → 265,11
FTrace_unlock();
return -1;
}
*flags = FT_temp->flags;
FTrace_OSD_update_chunk_flags(FT_temp); *flags = FT_temp->flags;
 
FTrace_unlock();
 
return 0;
}
308,9 → 306,8
 
/* Update the actual_chunk and OSD_pointers */
FTrace_fsave();
FTrace_OSD_save_pointers();
ActualChunk = FT_temp;
FTrace_OSD_load_pointers();
OSD_current_pointer = (void *)FT_temp->osd;
FTrace_frestore();
 
} else {
369,7 → 366,7
}
 
/* Link two chunks */
int FTrace_chunk_link(int chunk_A, int chunk_B, int osd_flags)
int FTrace_chunk_link(int chunk_A, int chunk_B)
{
 
FTrace_Chunk_Ptr ckA = ChunkTable[chunk_A];
415,9 → 412,7
 
/* FTrace Low Level Blocking Part */
FTrace_fsave();
FTrace_OSD_save_pointers();
 
err = FTrace_OSD_chunk_link(ckA,ckB,osd_flags);
err = FTrace_OSD_chunk_link(ckA,ckB);
if (err != 0) {
#ifdef FTRACE_DEBUG
FTrace_printf("FTrace Error: Cannot link the chunks\n");
424,8 → 419,6
#endif
return -1;
}
 
FTrace_OSD_load_pointers();
FTrace_frestore();
 
FTrace_unlock();
434,25 → 427,6
 
}
 
/* Update the OSD of actual chunk */
int FTrace_update_actual_chunk()
{
 
FTrace_lock();
 
if (ActualChunk == NULL) return 0;
 
FTrace_fsave();
FTrace_OSD_save_pointers();
FTrace_frestore();
 
FTrace_unlock();
 
return 0;
 
}
 
/* Create a new memory region where the compressed data are stored */
int FTrace_compress_chunk(int number, FTrace_flags new_flags)
{
581,11 → 555,7
void FTrace_chunk_dump(int number) {
 
FTrace_Chunk_Ptr FT_temp = ChunkTable[number];
int i,t;
DWORD p;
 
FTrace_update_actual_chunk();
 
cprintf("ID = %x\n",FT_temp->id);
cprintf("NUM = %d\n",FT_temp->number);
cprintf("FLAGS = %d\n",FT_temp->flags);
592,25 → 562,5
cprintf("SIZE = %d\n",FT_temp->size);
cprintf("EMERG = %d\n",FT_temp->emergency_size);
 
for (i=0; i<0xFF; i++) {
p = *(DWORD *)(FT_temp->osd + 8);
t = 0;
while((p + 16) < *(DWORD *)(FT_temp->osd + 8) + *(DWORD *)(FT_temp->osd + 12)) {
if (*(WORD *)(p+2) == i) t++;
p += 16;
}
if (t != 0)
cprintf("Event type %02x => %d\n",i,t);
}
}
 
void FTrace_OSD_dump() {
void *p = OSD_pointers;
int i;
 
for (i=0;i<FTRACE_OSD_CHUNK_HEAD;i+=4)
cprintf("DATA %d = %x\n",i,*(unsigned int *)(p+i));
 
}