/shark/trunk/tracer/include/FTrace_types.h |
---|
27,7 → 27,7 |
DWORD number; |
FTrace_flags flags; |
DWORD size; |
DWORD sizemask; |
DWORD emergency_size; |
DWORD osd; |
}; |
/shark/trunk/tracer/newtrace/FTrace_OSD_ll.c |
---|
0,0 → 1,49 |
#include <FTrace_types.h> |
#include <FTrace_OSD.h> |
/* OSD_pointers |
00 - Actual Chunk Event Pointer Delta |
04 - Actual Chunk Mask |
08 - Actual Chunk Start |
12 - Actual Chunk Flags |
16 - Actual Chunk Fast-Access-Pointer |
20 - Delta (0 Actual, 24 Next) |
24 - Next1 Chunk Event Pointer Delta |
28 - Next1 Chunk Mask |
32 - Next1 Chunk Start |
36 - Next1 Chunk Flags |
40 - Next1 Chunk Fast-Access-Pointer |
44 - Delta |
*/ |
void FTrace_safe_ipoint(DWORD type, DWORD par1, DOWRD par2) |
{ |
extern BYTE OSD_pointers[FTRACE_OSD_CHUNK_HEAD]; |
extern BYTE FTrace_enable; |
} |
void FTrace_unsafe_ipoint(DWORD type, DWORD par1, DWORD par2) |
{ |
extern BYTE OSD_pointers[FTRACE_OSD_CHUNK_HEAD]; |
__asm__("pushfl\n\t" /* Critical Section */ |
"cli\n\t" |
"cpuid\n\t" |
"rdtsc\n\t" |
"movl %%esi,(%%edi)\n\t" /* Save TYPE + WORD par2 */ |
"movl %%edx,4(%%edi)\n\t" /* Save TSC HIGH */ |
"movl %%eax,8(%%edi)\n\t" /* Save TSC LOW */ |
"addl $12,(%%edi)\n\t" /* Inc Fast-Access-Pointer */ |
"popfl\n\t" |
:: "D" (*(DWORD * )(OSD_pointers+16)), "S" (type)); |
} |
/shark/trunk/tracer/newtrace/FTrace.c |
---|
16,15 → 16,15 |
int FTraceEnable = 0; |
/* Init a chunk with default value */ |
static int FTrace_chunk_init(FTrace_Chunk_Ptr c, int number, int size, FTrace_flags flags) |
static int FTrace_chunk_init(FTrace_Chunk_Ptr c, int number, int size, int emergency_size, FTrace_flags flags) |
{ |
c->id = FTRACE_CHUNK_ID; /* Std ID */ |
c->number = number; /* Chunk number */ |
c->flags = flags; /* Chunk flags */ |
c->size = size; /* Chunk real size */ |
c->sizemask = size - 1; /* Chunk data size mask */ |
c->osd = (DWORD)((DWORD)(c) + sizeof(struct FTrace_Chunk)); |
c->id = FTRACE_CHUNK_ID; /* Std ID */ |
c->number = number; /* Chunk number */ |
c->flags = flags; /* Chunk flags */ |
c->size = size; /* Chunk size */ |
c->emergency_size = emergency_size; /* Chunk size */ |
c->osd = (DWORD)((DWORD)(c) + sizeof(struct FTrace_Chunk)); |
return FTrace_OSD_chunk_init(c, size, flags); |
/shark/trunk/tracer/newtrace/FTrace_OSD.c |
---|
0,0 → 1,138 |
#include <FTrace_chunk.h> |
#include <FTrace_OSD.h> |
#include <FTrace_types.h> |
#include <kernel/kern.h> |
#include <stdlib.h> |
SYS_FLAGS FTracef; |
extern FTrace_Chunk_Ptr ActualChunk; |
extern BYTE OSD_pointers[FTRACE_OSD_CHUNK_HEAD]; |
void FTrace_fsave() |
{ |
FTracef = kern_fsave(); |
} |
void FTrace_frestore() |
{ |
kern_frestore(FTracef); |
} |
void FTrace_lock() |
{ |
} |
void FTrace_unlock() |
{ |
} |
void *FTrace_malloc(int size) |
{ |
return malloc(size); |
} |
void FTrace_free(void *ptr) |
{ |
free(ptr); |
} |
int FTrace_OSD_init() |
{ |
return 0; |
} |
int FTrace_OSD_chunk_init(FTrace_Chunk_Ptr c, int size, FTrace_flags flags) |
{ |
*(DWORD *)(c->osd) = 0; |
*(DWORD *)(c->osd + 4) = (DWORD)(c->sizemask); |
*(DWORD *)(c->osd + 8) = (DWORD)(c->osd + 60); |
*(DWORD *)(c->osd + 12) = 0; |
*(DWORD *)(c->osd + 16) = 0; |
*(DWORD *)(c->osd + 20) = 0; |
*(DWORD *)(c->osd + 24) = 0; |
*(DWORD *)(c->osd + 28) = 0; |
*(DWORD *)(c->osd + 32) = 0; |
*(DWORD *)(c->osd + 36) = 0; |
*(DWORD *)(c->osd + 40) = 0; |
*(DWORD *)(c->osd + 44) = 0; |
*(DWORD *)(c->osd + 48) = 0; |
*(DWORD *)(c->osd + 52) = 0; |
*(DWORD *)(c->osd + 56) = 0; |
return 0; |
} |
/* OSD Chunk Link */ |
int FTrace_OSD_chunk_link(FTrace_Chunk_Ptr a, FTrace_Chunk_Ptr b, int osd_flags) |
{ |
int delta = 0; |
if (osd_flags == FTRACE_OSD_NEXT1) |
delta = 20; |
if (osd_flags == FTRACE_OSD_NEXT2) |
delta = 40; |
if (delta == 0) return -1; |
memcpy((void *)(a->osd+delta),(void *)(b->osd),20); |
return 0; |
} |
int FTrace_OSD_load_pointers() |
{ |
if (ActualChunk == NULL) return -1; |
memcpy((void *)OSD_pointers,(void *)ActualChunk->osd,FTRACE_OSD_CHUNK_HEAD); |
return 0; |
} |
int FTrace_OSD_save_pointers() |
{ |
if (ActualChunk == NULL) return -1; |
memcpy((void *)ActualChunk->osd,(void *)OSD_pointers,FTRACE_OSD_CHUNK_HEAD); |
return 0; |
} |
int FTrace_OSD_compress_chunk(int number, void *temp_data, int *data_size) |
{ |
return 0; |
} |
int FTrace_OSD_send_chunk(int number, int osd_flag) |
{ |
return 0; |
} |