redo boot around an explicit system volume and fixed kernel/HAL images, redo volumes and filesystem paths around capabilities instead of drive numbers and kernel CWD state, add a capability/security model with derived and revocable handles and security contexts, add port IPC and rssrv to manage the userspace resource namespace and publish the system volume, move process, dll and path loading to userspace and add process builder syscalls, init now supervises rssrv and the session process, redo the syscall ABI around request structs and four arguments, add a volume manager and proper partition arrival/removal handling so FAT and NTFS mount dynamically, clean up the HAL/DDK boundary so drivers don't depend on HAL internals, save fpu state properly now, the serial driver doesn't hang on a missing port, fix AHCI startup races, fix timeout accounting, fix shared mmap writeback, more smoke tests
This commit is contained in:
1 parent
4add6789ba
commit
f882d339fb
232 files changed
+20934
-8898
No files matched your search
+61
-27
@@ -112,22 +112,18 @@ KeSyscallEntry PROC
|
||||
call KiEnterTrapFrame
|
||||
add rsp, 32
|
||||
|
||||
; Re-order original user arguments into KeSyscallDispatch(nr,a0..a5).
|
||||
; Re-order original user arguments into KeSyscallDispatch(nr,a0..a3).
|
||||
; Original registers were saved in the trap frame before any C calls.
|
||||
sub rsp, 64
|
||||
sub rsp, 48
|
||||
mov rax, [rbx + TF_R9]
|
||||
mov [rsp + 32], rax ; a3
|
||||
mov rax, [rbx + TF_R10]
|
||||
mov [rsp + 40], rax ; a4
|
||||
mov rax, [rbx + TF_R11]
|
||||
mov [rsp + 48], rax ; a5
|
||||
|
||||
mov r9, [rbx + TF_R8] ; a2
|
||||
mov r8, [rbx + TF_Rdx] ; a1
|
||||
mov rdx, [rbx + TF_Rcx] ; a0
|
||||
mov rcx, [rbx + TF_Rax] ; nr
|
||||
call KeSyscallDispatch
|
||||
add rsp, 64
|
||||
add rsp, 48
|
||||
|
||||
mov [rbx + TF_Rax], rax
|
||||
|
||||
@@ -199,7 +195,22 @@ KF_R13 EQU 0A8h
|
||||
KF_R14 EQU 0B0h
|
||||
KF_R15 EQU 0B8h
|
||||
|
||||
FAULT_CALL_SHADOW EQU 28h
|
||||
; Asynchronous kernel entry must preserve the full interrupted x87/SSE state.
|
||||
; MS x64 calls may freely clobber XMM0-XMM5, and an interrupt or fault can
|
||||
; arrive between any two user or kernel instructions rather than at a call ABI.
|
||||
; Reserve one 512-byte FXSAVE image plus alignment slack on the interrupted stack.
|
||||
ASYNC_FPU_SCRATCH EQU 528
|
||||
|
||||
ASYNC_FPU_SAVE MACRO
|
||||
sub rsp, ASYNC_FPU_SCRATCH
|
||||
lea r12, [rsp + 15]
|
||||
and r12, -16
|
||||
fxsave64 [r12]
|
||||
ENDM
|
||||
|
||||
ASYNC_FPU_RESTORE MACRO
|
||||
fxrstor64 [r12]
|
||||
ENDM
|
||||
|
||||
FAULT_RESUME_NOERR MACRO
|
||||
LOCAL noerr_skip_user_slots, noerr_no_swapgs, noerr_unhandled_halt
|
||||
@@ -372,11 +383,13 @@ de_kernel_frame:
|
||||
mov qword ptr [rax + KF_Ss], 0
|
||||
|
||||
de_call:
|
||||
and rsp, -16
|
||||
sub rsp, FAULT_CALL_SHADOW
|
||||
mov rbx, rax
|
||||
mov rcx, rax
|
||||
ASYNC_FPU_SAVE
|
||||
and rsp, -16
|
||||
sub rsp, 32
|
||||
mov rcx, rbx
|
||||
call KeFaultDispatchFrame
|
||||
ASYNC_FPU_RESTORE
|
||||
FAULT_RESUME_NOERR
|
||||
KeFaultDE ENDP
|
||||
|
||||
@@ -440,11 +453,13 @@ gp_kernel_frame:
|
||||
mov qword ptr [rax + KF_Ss], 0
|
||||
|
||||
gp_call:
|
||||
and rsp, -16
|
||||
sub rsp, FAULT_CALL_SHADOW
|
||||
mov rbx, rax
|
||||
mov rcx, rax
|
||||
ASYNC_FPU_SAVE
|
||||
and rsp, -16
|
||||
sub rsp, 32
|
||||
mov rcx, rbx
|
||||
call KeFaultDispatchFrame
|
||||
ASYNC_FPU_RESTORE
|
||||
FAULT_RESUME_ERR
|
||||
KeFaultGP ENDP
|
||||
|
||||
@@ -509,11 +524,13 @@ pf_kernel_frame:
|
||||
mov qword ptr [rax + KF_Ss], 0
|
||||
|
||||
pf_call:
|
||||
and rsp, -16
|
||||
sub rsp, FAULT_CALL_SHADOW
|
||||
mov rbx, rax ; Keep the KFAULT_FRAME pointer across C.
|
||||
mov rcx, rax
|
||||
ASYNC_FPU_SAVE
|
||||
and rsp, -16
|
||||
sub rsp, 32
|
||||
mov rcx, rbx
|
||||
call KeFaultDispatchFrame
|
||||
ASYNC_FPU_RESTORE
|
||||
FAULT_RESUME_ERR
|
||||
KeFaultPF ENDP
|
||||
|
||||
@@ -579,11 +596,13 @@ noerr_kernel_frame:
|
||||
mov qword ptr [rax + KF_Ss], 0
|
||||
|
||||
noerr_call:
|
||||
and rsp, -16
|
||||
sub rsp, FAULT_CALL_SHADOW
|
||||
mov rbx, rax
|
||||
mov rcx, rax
|
||||
ASYNC_FPU_SAVE
|
||||
and rsp, -16
|
||||
sub rsp, 32
|
||||
mov rcx, rbx
|
||||
call KeFaultDispatchFrame
|
||||
ASYNC_FPU_RESTORE
|
||||
FAULT_RESUME_NOERR
|
||||
StubName ENDP
|
||||
ENDM
|
||||
@@ -646,11 +665,13 @@ err_kernel_frame:
|
||||
mov qword ptr [rax + KF_Ss], 0
|
||||
|
||||
err_call:
|
||||
and rsp, -16
|
||||
sub rsp, FAULT_CALL_SHADOW
|
||||
mov rbx, rax
|
||||
mov rcx, rax
|
||||
ASYNC_FPU_SAVE
|
||||
and rsp, -16
|
||||
sub rsp, 32
|
||||
mov rcx, rbx
|
||||
call KeFaultDispatchFrame
|
||||
ASYNC_FPU_RESTORE
|
||||
FAULT_RESUME_ERR
|
||||
StubName ENDP
|
||||
ENDM
|
||||
@@ -669,14 +690,22 @@ KeNmiIpiStub PROC
|
||||
push r9
|
||||
push r10
|
||||
push r11
|
||||
push r12
|
||||
push r13
|
||||
mov r13, rsp
|
||||
|
||||
ASYNC_FPU_SAVE
|
||||
and rsp, -16
|
||||
sub rsp, 32
|
||||
call KeHandleNmiIpi
|
||||
add rsp, 32
|
||||
ASYNC_FPU_RESTORE
|
||||
mov rsp, r13
|
||||
|
||||
test eax, eax
|
||||
jz short NmiUnhandled
|
||||
|
||||
pop r13
|
||||
pop r12
|
||||
pop r11
|
||||
pop r10
|
||||
pop r9
|
||||
@@ -687,6 +716,8 @@ KeNmiIpiStub PROC
|
||||
iretq
|
||||
|
||||
NmiUnhandled:
|
||||
pop r13
|
||||
pop r12
|
||||
pop r11
|
||||
pop r10
|
||||
pop r9
|
||||
@@ -857,7 +888,9 @@ IrqKernelModeFrame:
|
||||
mov qword ptr [rbx + TF_SsSlot], 0
|
||||
|
||||
IrqFrameReady:
|
||||
sub rsp, 40 ; 32-byte shadow space + alignment/local slack
|
||||
ASYNC_FPU_SAVE
|
||||
and rsp, -16
|
||||
sub rsp, 32
|
||||
mov rcx, rbx
|
||||
call KiEnterTrapFrame
|
||||
call KiEnterInterrupt
|
||||
@@ -866,14 +899,15 @@ IrqFrameReady:
|
||||
call KiExitInterrupt
|
||||
mov rcx, rbx
|
||||
call KiExitTrapFrame
|
||||
add rsp, 40
|
||||
ASYNC_FPU_RESTORE
|
||||
|
||||
mov eax, [rbx + TF_PreviousMode]
|
||||
cmp eax, KTRAP_MODE_USER
|
||||
jne short IrqNoSwapGsOut
|
||||
swapgs ; returning to ring 3: restore user GS/TEB
|
||||
IrqNoSwapGsOut:
|
||||
add rsp, KTRAP_FRAME_SIZE
|
||||
mov r12, [rbx + TF_R12]
|
||||
lea rsp, [rbx + KTRAP_FRAME_SIZE]
|
||||
pop rbx
|
||||
pop r11
|
||||
pop r10
|
||||
|
||||
Reference in new issue
Block a user