/kernel/trunk/core/debug.inc |
---|
136,9 → 136,18 |
; ecx=pid |
; edx=sizeof(CONTEXT) |
; esi->CONTEXT |
; destroys eax,ecx,edx,esi,edi |
cmp edx, 28h |
jnz .ret |
; destroys eax,ebx,ecx,edx,esi,edi |
xor ebx, ebx ; 0 - get only gp regs |
cmp edx, 40 |
je .std_ctx |
cmp edx, 48+288 |
jne .ret |
inc ebx ; 1 - get sse context |
; TODO legacy 32-bit FPU/MMX context |
.std_ctx: |
; push ecx |
; mov ecx, esi |
call check_region |
147,8 → 156,15 |
jnz .ret |
call get_debuggee_slot |
jc .ret |
shr eax, 5 |
cmp eax, [fpu_owner] |
jne @f |
inc bh ; set swap context flag |
@@: |
shl eax, 8 |
mov edi, esi |
mov eax, [eax*8+SLOT_BASE+APPDATA.pl0_stack] |
mov eax, [eax+SLOT_BASE+APPDATA.pl0_stack] |
lea esi, [eax+RING0_STACK_SIZE] |
.ring0: |
178,6 → 194,29 |
mov [edi+4], eax |
lodsd ;esp |
mov [edi+18h], eax |
dec bl |
js .ret |
dec bl |
jns .ret |
test bh, bh ; check swap flag |
jz @F |
ffree st0 ; swap context |
@@: |
add esi, 4 ;top of ring0 stack |
;fpu/sse context saved here |
add edi, 40 |
mov eax, 1 ;sse context |
stosd |
xor eax, eax ;reserved dword |
stosd |
mov ecx, 288/4 |
rep movsd ;copy sse context |
.ret: |
sti |
ret |
/programs/develop/mtdbg/mtdbg.asm |
---|
105,19 → 105,11 |
get_new_context: |
mov esi, context |
mov edi, oldcontext |
mov ecx, 10 |
mov ecx, (ctx_end-context)/4 |
rep movsd |
get_context: |
;push 1 |
;pop ebx |
;push 69 |
;pop eax |
;mov ecx, [debuggee_pid] |
;mov esi, context |
;push 28h |
;pop edx |
mcall 69, 1, [debuggee_pid], 28h, context |
mcall 69, 1, [debuggee_pid], ctx_end-context, context |
ret |
set_context: |
259,7 → 251,7 |
push ecx |
call get_context |
mov edi, oldcontext |
mov ecx, 10 |
mov ecx, (ctx_end-context)/4 |
rep movsd |
; activate debugger window |
2428,10 → 2420,12 |
fileattr rb 40 |
;keep aligned !!! |
;do not change layout !!! |
align 16 |
needzerostart: |
context: |
_eip dd ? |
_eflags dd ? |
_eax dd ? |
2442,41 → 2436,57 |
_ebp dd ? |
_esi dd ? |
_edi dd ? |
oldcontext rb $-context |
mmx_context: |
_mm0 dq ? |
_mm1 dq ? |
_mm2 dq ? |
_mm3 dq ? |
_mm4 dq ? |
_mm5 dq ? |
_mm6 dq ? |
_mm7 dq ? |
oldmmxcontext rb $-mmx_context |
_ctx_flags: |
dd ? |
dd ? |
_sse_flags: |
dq ? |
dq ? |
dq ? |
dq ? |
fpu_context: |
_st0 dq ? |
_st1 dq ? |
_st2 dq ? |
_st3 dq ? |
_st4 dq ? |
_st5 dq ? |
_st6 dq ? |
_st7 dq ? |
oldfpucontext rb $-fpu_context |
mmx_context: |
_st0: |
_mm0: rq 2 |
_st1: |
_mm1: rq 2 |
_st2: |
_mm2: rq 2 |
_st3: |
_mm3: rq 2 |
_st4: |
_mm4: rq 2 |
_st5: |
_mm5: rq 2 |
_st6: |
_mm6: rq 2 |
_st7: |
_mm7: rq 2 |
sse_context: |
_xmm0 dq 2 dup ? |
_xmm1 dq 2 dup ? |
_xmm2 dq 2 dup ? |
_xmm3 dq 2 dup ? |
_xmm4 dq 2 dup ? |
_xmm5 dq 2 dup ? |
_xmm6 dq 2 dup ? |
_xmm7 dq 2 dup ? |
oldssecontext rb $-sse_context |
_xmm0 rq 2 |
_xmm1 rq 2 |
_xmm2 rq 2 |
_xmm3 rq 2 |
_xmm4 rq 2 |
_xmm5 rq 2 |
_xmm6 rq 2 |
_xmm7 rq 2 |
ctx_end: |
oldcontext rb _ctx_flags-context |
rd 2 |
rq 4 |
oldfpucontext: |
oldmmxcontext: rb sse_context-fpu_context |
oldssecontext: rb ctx_end-sse_context |
if 0 |
avx_context: |
_ymm0 dq 4 dup ? |
_ymm1 dq 4 dup ? |
2487,7 → 2497,9 |
_ymm6 dq 4 dup ? |
_ymm7 dq 4 dup ? |
oldavxcontext rb $-avx_context |
end if |
step_num dd 0 |
proc_num dd 0 |
dumpread dd ? |