28,18 → 28,29 |
extern BYTE FTrace_enable; |
|
DWORD tsclow, tschigh; |
DWORD next = *(DWORD *)(OSD_pointers); |
DWORD current = *(DWORD *)(OSD_pointers + next); |
DWORD start = *(DWORD *)(OSD_pointers + next + 4); |
DWORD size = *(DWORD *)(OSD_pointers + next + 8); |
DWORD flags = *(DWORD *)(OSD_pointers + next + 16); |
DWORD next; |
DWORD current; |
DWORD start; |
DWORD size; |
DWORD flags; |
|
SYS_FLAGS f; |
|
f = ll_fsave(); |
|
if (FTrace_enable) { |
|
f = ll_fsave(); |
next = *(DWORD *)(OSD_pointers); |
current = *(DWORD *)(OSD_pointers + next); |
start = *(DWORD *)(OSD_pointers + next + 4); |
size = *(DWORD *)(OSD_pointers + next + 8); |
flags = *(DWORD *)(OSD_pointers + next + 16); |
|
if (current == NULL) { |
ll_frestore(f); |
return; |
} |
|
if (type != FTrace_EVT_next_chunk) { |
|
if ((flags & FTRACE_CHUNK_FLAG_FULL) == FTRACE_CHUNK_FLAG_FULL) { |
52,7 → 63,7 |
if ((flags & 0x0C) == FTRACE_CHUNK_FLAG_CYC) { |
current = start; |
} else { |
*(WORD *)(OSD_pointers + next + 16) &= FTRACE_CHUNK_FLAG_FULL; |
*(WORD *)(OSD_pointers + next + 16) |= FTRACE_CHUNK_FLAG_FULL; |
if ((flags & 0x0C) == FTRACE_CHUNK_FLAG_JTN) { |
*(DWORD *)(OSD_pointers) += 20; |
next = *(DWORD *)(OSD_pointers); |
62,7 → 73,7 |
|
__asm__("cpuid\n\t" |
"rdtsc\n\t" |
: "=a" (tsclow), "=b" (tschigh) : : "ecx","edx"); |
: "=a" (tsclow), "=d" (tschigh) : : "ecx","ebx"); |
|
*(DWORD *)current = (DWORD)(type << 16 | par1); |
*(DWORD *)(current + 4) = tschigh; |
73,18 → 84,17 |
|
} else { |
|
*(WORD *)(OSD_pointers + next + 16) &= FTRACE_CHUNK_FLAG_FULL; |
if ((flags & 0x0C) == FTRACE_CHUNK_FLAG_JTN) |
*(WORD *)(OSD_pointers + next + 16) |= FTRACE_CHUNK_FLAG_FULL; |
*(DWORD *)(OSD_pointers) += 20; |
|
} |
|
} |
|
ll_frestore(f); |
|
} |
|
} |
|
void FTrace_unsafe_ipoint(WORD type, WORD par1) |
{ |
|
98,9 → 108,10 |
"movl %%esi,(%%ebx)\n\t" /* Save TYPE + WORD par1 */ |
"movl %%edx,4(%%ebx)\n\t" /* Save TSC HIGH */ |
"movl %%eax,8(%%ebx)\n\t" /* Save TSC LOW */ |
"addl $12,(%%edi)\n\t" /* Inc Position */ |
"movl %%eax,12(%%ebx)\n\t" /* DWORD par2 */ |
"addl $16,(%%edi)\n\t" /* Inc Position */ |
"popfl\n\t" |
:: "D" ((DWORD *)(OSD_pointers)), "S" ((type | 0x8000) << 16 | par1)); |
:: "D" ((DWORD *)(OSD_pointers+4)), "S" ((type | 0x8000) << 16 | par1)); |
|
} |
|