Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1055 → Rev 1056

/kernel/trunk/core/memory.inc
544,23 → 544,14
 
 
align 4
; Now it is called from sys32::exc_c (see stack frame there)
proc page_fault_handler
 
test byte [esp+12+2], 2
jnz v86_page_fault
 
.err_code equ ebp+32
.err_addr equ ebp-4
 
pushad
mov ebp, esp
mov eax, cr2
push eax
 
mov ax, app_data
mov ds, ax
mov es, ax
 
mov ebx, cr2
push ebx ; that is locals: .err_addr = cr2
inc [pg_data.pages_faults]
 
; push eax
571,10 → 562,9
; pop edx
; pop eax
 
mov ebx, [.err_addr]
mov eax, [.err_code]
mov eax, [pf_err_code]
 
cmp ebx, OS_BASE
cmp ebx, OS_BASE ;ebx == .err_addr
jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíèÿ ;
 
cmp ebx, page_tabs
583,7 → 573,7
cmp ebx, kernel_tabs
jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíèÿ ;
;ïðîñòî ñîçäàäèì îäíó
 
if 0 ;ïîêà ýòî ïðîñòî ëèøíåå
cmp ebx, LFB_BASE
jb .core_tabs ;òàáëèöû ñòðàíèö ÿäðà
;Îøèáêà
591,8 → 581,13
;îáëàñòü LFB
;Îøèáêà
jmp .fail
end if
.core_tabs:
.fail: ;simply return to caller
mov esp, ebp
mov bl, 14 ;#PF
ret
 
align 4
.user_space:
test eax, PG_MAP
jnz .err_access ;Ñòðàíèöà ïðèñóòñòâóåò
615,33 → 610,32
test eax, eax
jz .fail
 
stdcall map_page,[ebp-4],eax,dword PG_UW
stdcall map_page,[.err_addr],eax,dword PG_UW
 
mov edi, [ebp-4]
mov edi, [.err_addr]
and edi, 0xFFFFF000
mov ecx, 1024
xor eax, eax
cld
;cld ;caller is duty for this
rep stosd
.exit:
mov esp, ebp
popad
add esp, 4
.exit: ;iret with repeat fault instruction
add esp,8 ; clear in stack: locals(.err_addr) + ret_to_caller
restore_ring3_context
iretd
 
.err_access:
.err_access = .fail
;íèêîãäà íå ïðîèñõîäèò
jmp .fail
;jmp .fail
 
.kernel_space:
test eax, PG_MAP
jz .fail ;ñòðàíèöà íå ïðèñóòñòâóåò
 
test eax, 4 ;U/S
test eax,12 ;U/S (+below)
jnz .fail ;ïðèëîæåíèå îáðàòèëîñü ê ïàìÿòè
;ÿäðà
test eax, 8
jnz .fail ;óñòàíîâëåí çàðåçåðâèðîâàííûé áèò
;test eax, 8
;jnz .fail ;óñòàíîâëåí çàðåçåðâèðîâàííûé áèò
;â òàáëèöàõ ñòðàíèö. äîáàâëåíî â P4/Xeon
 
;ïîïûòêà çàïèñè â çàùèù¸ííóþ ñòðàíèöó ÿäðà
660,7 → 654,7
jz .fail
 
push eax
stdcall map_page,[ebp-4],eax,dword PG_SW
stdcall map_page,[.err_addr],eax,dword PG_SW
pop eax
mov edi, [.err_addr]
and edi, -4096
674,26 → 668,9
 
add esi, [default_io_map]
mov ecx, 4096/4
cld
;cld ;caller is duty for this
rep movsd
jmp .exit
 
 
;íå îáðàáàòûâàåì. Îøèáêà
 
.core_tabs:
.fail:
mov esp, ebp
popad
add esp, 4
 
; iretd
 
save_ring3_context ;debugger support
 
mov bl, 14
jmp exc_c
iretd
endp
 
align 4
1346,6 → 1323,3
.fail:
ret
endp