Kernel stack grows on each context switch
Posted: Tue Jun 25, 2019 3:13 pm
As per the title, every time the kernel switches the current process, the stack grows by exactly 28 bytes if the process is a user mode process. I have no idea what is causing this, and all of my debugging efforts have come up empty. I have no idea what is causing this, and the only fix I have come up with so far is to manually change TSS.ESP0 by adding 28.
Should this be happening, or am I doing something stupid that I didn't realize?
common IRQ handler:
process switcher:
Any help would be greatly appreciated
Should this be happening, or am I doing something stupid that I didn't realize?
common IRQ handler:
Code: Select all
irq_common:
pusha
push ds
push es
push fs
push gs
mov ax, 0x10
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
cld
push esp
call irq_intHandler
add esp, 4
pop gs
pop fs
pop es
pop ds
popa
add esp, 8
iret
}
Code: Select all
void switchTask(regs_t *r){
if(processList == NULL) return;
if(processList->size <= 1) return;
memcpy(&(currentProcess->task->state), r, sizeof(regs_t));
switchTask_nextproc:
nextProcess = nextProcess->next;
if(nextProcess == NULL){
nextProcess = processList->tail;
}
currentProcess = nextProcess->data;
if(currentProcess->sleepCounter > 0){
goto switchTask_nextproc;
}
memcpy(r, &(currentProcess->task->state), sizeof(regs_t));
pg_switchDir(currentProcess->task->dir);
tss_setStack(r->esp);
}