kernel: fn69.1 - get simd context

mtdbg: display contents of mmx registers

git-svn-id: svn://kolibrios.org@4893 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2014-04-24 23:03:14 +00:00
parent 06df103c1c
commit 6f2aa3f1f1
2 changed files with 103 additions and 52 deletions

View File

@ -136,9 +136,18 @@ debug_getcontext:
; ecx=pid ; ecx=pid
; edx=sizeof(CONTEXT) ; edx=sizeof(CONTEXT)
; esi->CONTEXT ; esi->CONTEXT
; destroys eax,ecx,edx,esi,edi ; destroys eax,ebx,ecx,edx,esi,edi
cmp edx, 28h
jnz .ret 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 ; push ecx
; mov ecx, esi ; mov ecx, esi
call check_region call check_region
@ -147,8 +156,15 @@ debug_getcontext:
jnz .ret jnz .ret
call get_debuggee_slot call get_debuggee_slot
jc .ret jc .ret
shr eax, 5
cmp eax, [fpu_owner]
jne @f
inc bh ; set swap context flag
@@:
shl eax, 8
mov edi, esi 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] lea esi, [eax+RING0_STACK_SIZE]
.ring0: .ring0:
@ -178,6 +194,29 @@ debug_getcontext:
mov [edi+4], eax mov [edi+4], eax
lodsd ;esp lodsd ;esp
mov [edi+18h], eax 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: .ret:
sti sti
ret ret

View File

@ -105,19 +105,11 @@ OnQuit:
get_new_context: get_new_context:
mov esi, context mov esi, context
mov edi, oldcontext mov edi, oldcontext
mov ecx, 10 mov ecx, (ctx_end-context)/4
rep movsd rep movsd
get_context: get_context:
;push 1 mcall 69, 1, [debuggee_pid], ctx_end-context, context
;pop ebx
;push 69
;pop eax
;mov ecx, [debuggee_pid]
;mov esi, context
;push 28h
;pop edx
mcall 69, 1, [debuggee_pid], 28h, context
ret ret
set_context: set_context:
@ -259,7 +251,7 @@ do_reload:
push ecx push ecx
call get_context call get_context
mov edi, oldcontext mov edi, oldcontext
mov ecx, 10 mov ecx, (ctx_end-context)/4
rep movsd rep movsd
; activate debugger window ; activate debugger window
@ -1136,7 +1128,7 @@ get_byte_nobreak:
mov al, [edi+5] mov al, [edi+5]
clc clc
ret ret
.nobreak: .nobreak:
;push 69 ;push 69
;pop eax ;pop eax
@ -1152,7 +1144,7 @@ get_byte_nobreak:
clc clc
jz @f jz @f
stc stc
@@: @@:
pop eax pop eax
ret ret
@ -1170,7 +1162,7 @@ OnCalc:
mov esi, calc_string mov esi, calc_string
call put_message_nodraw call put_message_nodraw
jmp draw_messages jmp draw_messages
.ret: .ret:
ret ret
@ -1183,7 +1175,7 @@ OnDump:
jnz .param jnz .param
add [dumppos], dump_height*10h add [dumppos], dump_height*10h
jmp .doit jmp .doit
.param: .param:
call calc_expression call calc_expression
jc .ret jc .ret
@ -1527,7 +1519,7 @@ OnBl:
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
show_break_info: show_break_info:
push edi push edi
test byte [edi+4], 8 test byte [edi+4], 8
@ -2081,7 +2073,7 @@ help_data_msg db 'List of data commands:',10
db 'u [<expression>] - unassemble instructions at given address',10 db 'u [<expression>] - unassemble instructions at given address',10
db 'r <register> <expression> or',10 db 'r <register> <expression> or',10
db 'r <register>=<expression> - set register value',10,0 db 'r <register>=<expression> - set register value',10,0
; Breakpoints commands group ; Breakpoints commands group
aBreakpoints db 12,'breakpoints',0 aBreakpoints db 12,'breakpoints',0
@ -2428,10 +2420,12 @@ dbgbuf rb 256
fileattr rb 40 fileattr rb 40
;keep aligned !!!
;do not change layout !!!
align 16
needzerostart: needzerostart:
context: context:
_eip dd ? _eip dd ?
_eflags dd ? _eflags dd ?
_eax dd ? _eax dd ?
@ -2442,41 +2436,57 @@ _esp dd ?
_ebp dd ? _ebp dd ?
_esi dd ? _esi dd ?
_edi dd ? _edi dd ?
oldcontext rb $-context
mmx_context: _ctx_flags:
_mm0 dq ? dd ?
_mm1 dq ? dd ?
_mm2 dq ?
_mm3 dq ? _sse_flags:
_mm4 dq ? dq ?
_mm5 dq ? dq ?
_mm6 dq ? dq ?
_mm7 dq ? dq ?
oldmmxcontext rb $-mmx_context
fpu_context: fpu_context:
_st0 dq ? mmx_context:
_st1 dq ? _st0:
_st2 dq ? _mm0: rq 2
_st3 dq ? _st1:
_st4 dq ? _mm1: rq 2
_st5 dq ? _st2:
_st6 dq ? _mm2: rq 2
_st7 dq ? _st3:
oldfpucontext rb $-fpu_context _mm3: rq 2
_st4:
_mm4: rq 2
_st5:
_mm5: rq 2
_st6:
_mm6: rq 2
_st7:
_mm7: rq 2
sse_context: sse_context:
_xmm0 dq 2 dup ? _xmm0 rq 2
_xmm1 dq 2 dup ? _xmm1 rq 2
_xmm2 dq 2 dup ? _xmm2 rq 2
_xmm3 dq 2 dup ? _xmm3 rq 2
_xmm4 dq 2 dup ? _xmm4 rq 2
_xmm5 dq 2 dup ? _xmm5 rq 2
_xmm6 dq 2 dup ? _xmm6 rq 2
_xmm7 dq 2 dup ? _xmm7 rq 2
oldssecontext rb $-sse_context 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: avx_context:
_ymm0 dq 4 dup ? _ymm0 dq 4 dup ?
_ymm1 dq 4 dup ? _ymm1 dq 4 dup ?
@ -2487,6 +2497,8 @@ _ymm5 dq 4 dup ?
_ymm6 dq 4 dup ? _ymm6 dq 4 dup ?
_ymm7 dq 4 dup ? _ymm7 dq 4 dup ?
oldavxcontext rb $-avx_context oldavxcontext rb $-avx_context
end if
step_num dd 0 step_num dd 0
proc_num dd 0 proc_num dd 0