; I went from this....
[BITS 32]
extern currentProcess
; right now stack looks like
; processPtr
; esp-->returnAddress
;
;
align 16
; void switchTo(process_t *p)
global switchTo
switchTo:
pop eax ; save return address
pushfd ; push eflags register
push eax ; push return address back for partial iret
; stack frame (eip, eflags)
push ebp
push edi
push esi
push ebx
mov eax, [currentProcess]
mov [eax+0], esp
mov eax, [esp+24];
mov [currentProcess], eax
mov esp, [eax+0];
pop ebx
pop esi
pop edi
pop ebp
pop ecx
push cs
push ecx
iret
; To this...
[BITS 32]
extern currentProcess
; right now stack looks like
; processPtr
; esp-->returnAddress
;
;
align 16
; void switchTo(process_t *p)
global switchTo
switchTo:
pop eax ; save return address
pushfd ; push eflags register
push cs ; push cs
push eax ; push return address back for iret
; stack frame (eip, cs, eflags)
push ebp
push edi
push esi
push ebx
mov eax, [currentProcess]
mov [eax+0], esp ;save current process esp
mov eax, [esp+24]; ;retrieve process_t pointer passed to switchTo()
mov [currentProcess], eax
mov esp, [eax+0];
pop ebx
pop esi
pop edi
pop ebp
iret