28,29 → 28,18 |
extern BYTE FTrace_enable; |
|
DWORD tsclow, tschigh; |
DWORD next; |
DWORD current; |
DWORD start; |
DWORD size; |
DWORD flags; |
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); |
|
SYS_FLAGS f; |
|
f = ll_fsave(); |
|
if (FTrace_enable) { |
|
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); |
f = ll_fsave(); |
|
if (current == NULL) { |
ll_frestore(f); |
return; |
} |
|
if (type != FTrace_EVT_next_chunk) { |
|
if ((flags & FTRACE_CHUNK_FLAG_FULL) == FTRACE_CHUNK_FLAG_FULL) { |
63,7 → 52,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); |
73,7 → 62,7 |
|
__asm__("cpuid\n\t" |
"rdtsc\n\t" |
: "=a" (tsclow), "=d" (tschigh) : : "ecx","ebx"); |
: "=a" (tsclow), "=b" (tschigh) : : "ecx","edx"); |
|
*(DWORD *)current = (DWORD)(type << 16 | par1); |
*(DWORD *)(current + 4) = tschigh; |
84,15 → 73,16 |
|
} else { |
|
*(WORD *)(OSD_pointers + next + 16) |= FTRACE_CHUNK_FLAG_FULL; |
*(DWORD *)(OSD_pointers) += 20; |
*(WORD *)(OSD_pointers + next + 16) &= FTRACE_CHUNK_FLAG_FULL; |
if ((flags & 0x0C) == FTRACE_CHUNK_FLAG_JTN) |
*(DWORD *)(OSD_pointers) += 20; |
|
} |
|
ll_frestore(f); |
|
} |
|
ll_frestore(f); |
|
} |
|
void FTrace_unsafe_ipoint(WORD type, WORD par1) |
105,13 → 95,12 |
"cpuid\n\t" |
"rdtsc\n\t" |
"movl (%%edi),%%ebx\n\t" |
"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 */ |
"movl %%eax,12(%%ebx)\n\t" /* DWORD par2 */ |
"addl $16,(%%edi)\n\t" /* Inc Position */ |
"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 */ |
"popfl\n\t" |
:: "D" ((DWORD *)(OSD_pointers+4)), "S" ((type | 0x8000) << 16 | par1)); |
:: "D" ((DWORD *)(OSD_pointers)), "S" ((type | 0x8000) << 16 | par1)); |
|
} |
|