WIP [NTOS] Fix handling of non-volatiles in trap vs exception frame

This commit is contained in:
Timo Kreuzer 2022-12-15 21:55:16 +02:00
parent 7f2ed4d02f
commit 048db88043
2 changed files with 10 additions and 7 deletions

View file

@ -36,11 +36,11 @@ KeContextToTrapFrame(IN PCONTEXT Context,
if (ContextFlags & CONTEXT_INTEGER) if (ContextFlags & CONTEXT_INTEGER)
{ {
TrapFrame->Rax = Context->Rax; TrapFrame->Rax = Context->Rax;
TrapFrame->Rbx = Context->Rbx; //TrapFrame->Rbx = Context->Rbx;
TrapFrame->Rcx = Context->Rcx; TrapFrame->Rcx = Context->Rcx;
TrapFrame->Rdx = Context->Rdx; TrapFrame->Rdx = Context->Rdx;
TrapFrame->Rsi = Context->Rsi; //TrapFrame->Rsi = Context->Rsi;
TrapFrame->Rdi = Context->Rdi; //TrapFrame->Rdi = Context->Rdi;
TrapFrame->Rbp = Context->Rbp; TrapFrame->Rbp = Context->Rbp;
TrapFrame->R8 = Context->R8; TrapFrame->R8 = Context->R8;
TrapFrame->R9 = Context->R9; TrapFrame->R9 = Context->R9;
@ -48,6 +48,9 @@ KeContextToTrapFrame(IN PCONTEXT Context,
TrapFrame->R11 = Context->R11; TrapFrame->R11 = Context->R11;
if (ExceptionFrame) if (ExceptionFrame)
{ {
ExceptionFrame->Rbx = Context->Rbx;
ExceptionFrame->Rsi = Context->Rsi;
ExceptionFrame->Rdi = Context->Rdi;
ExceptionFrame->R12 = Context->R12; ExceptionFrame->R12 = Context->R12;
ExceptionFrame->R13 = Context->R13; ExceptionFrame->R13 = Context->R13;
ExceptionFrame->R14 = Context->R14; ExceptionFrame->R14 = Context->R14;

View file

@ -57,7 +57,7 @@ MACRO(EnterTrap, Flags)
lea rbp, [rsp] lea rbp, [rsp]
.setframe rbp, 0 .setframe rbp, 0
if (Flags AND TF_NONVOLATILES) if (Flags AND TF_NONVOLATILES) // ???
/* Save non-volatile registers */ /* Save non-volatile registers */
mov [rbp + KTRAP_FRAME_Rbx], rbx mov [rbp + KTRAP_FRAME_Rbx], rbx
.savereg rbx, KTRAP_FRAME_Rbx .savereg rbx, KTRAP_FRAME_Rbx
@ -228,9 +228,9 @@ kernel_mode_return:
if (Flags AND TF_NONVOLATILES) if (Flags AND TF_NONVOLATILES)
/* Restore non-volatile registers */ /* Restore non-volatile registers */
mov rbx, [rbp + KTRAP_FRAME_Rbx] //mov rbx, [rbp + KTRAP_FRAME_Rbx]
mov rdi, [rbp + KTRAP_FRAME_Rdi] //mov rdi, [rbp + KTRAP_FRAME_Rdi]
mov rsi, [rbp + KTRAP_FRAME_Rsi] //mov rsi, [rbp + KTRAP_FRAME_Rsi]
endif endif
if (Flags AND TF_VOLATILES) if (Flags AND TF_VOLATILES)