yank out stack overflow checking ugliness
This commit is contained in:
parent
4f74de0edc
commit
c95bde8163
4 changed files with 2 additions and 14 deletions
1
main.c
1
main.c
|
@ -60,7 +60,6 @@ mpmain(void)
|
||||||
if(cpu() != mp_bcpu())
|
if(cpu() != mp_bcpu())
|
||||||
lapic_init(cpu());
|
lapic_init(cpu());
|
||||||
setupsegs(0);
|
setupsegs(0);
|
||||||
asm volatile("movl %0, %%ss" :: "r" (SEG_CPUSTACK << 3));
|
|
||||||
cpuid(0, 0, 0, 0, 0); // memory barrier
|
cpuid(0, 0, 0, 0, 0); // memory barrier
|
||||||
cpus[cpu()].booted = 1;
|
cpus[cpu()].booted = 1;
|
||||||
popcli();
|
popcli();
|
||||||
|
|
6
proc.c
6
proc.c
|
@ -73,7 +73,7 @@ setupsegs(struct proc *p)
|
||||||
|
|
||||||
pushcli();
|
pushcli();
|
||||||
c = &cpus[cpu()];
|
c = &cpus[cpu()];
|
||||||
c->ts.ss0 = SEG_PROCSTACK << 3;
|
c->ts.ss0 = SEG_KDATA << 3;
|
||||||
if(p)
|
if(p)
|
||||||
c->ts.esp0 = (uint)(p->kstack + KSTACKSIZE);
|
c->ts.esp0 = (uint)(p->kstack + KSTACKSIZE);
|
||||||
else
|
else
|
||||||
|
@ -84,15 +84,12 @@ setupsegs(struct proc *p)
|
||||||
c->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0);
|
c->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0);
|
||||||
c->gdt[SEG_TSS] = SEG16(STS_T32A, (uint)&c->ts, sizeof(c->ts)-1, 0);
|
c->gdt[SEG_TSS] = SEG16(STS_T32A, (uint)&c->ts, sizeof(c->ts)-1, 0);
|
||||||
c->gdt[SEG_TSS].s = 0;
|
c->gdt[SEG_TSS].s = 0;
|
||||||
c->gdt[SEG_CPUSTACK] = SEG(STA_W|STA_E, 0, (uint)c->stack, 0);
|
|
||||||
if(p){
|
if(p){
|
||||||
c->gdt[SEG_UCODE] = SEG(STA_X|STA_R, (uint)p->mem, p->sz-1, DPL_USER);
|
c->gdt[SEG_UCODE] = SEG(STA_X|STA_R, (uint)p->mem, p->sz-1, DPL_USER);
|
||||||
c->gdt[SEG_UDATA] = SEG(STA_W, (uint)p->mem, p->sz-1, DPL_USER);
|
c->gdt[SEG_UDATA] = SEG(STA_W, (uint)p->mem, p->sz-1, DPL_USER);
|
||||||
c->gdt[SEG_PROCSTACK] = SEG(STA_W|STA_E, 0, (uint)p->kstack, 0);
|
|
||||||
} else {
|
} else {
|
||||||
c->gdt[SEG_UCODE] = SEG_NULL;
|
c->gdt[SEG_UCODE] = SEG_NULL;
|
||||||
c->gdt[SEG_UDATA] = SEG_NULL;
|
c->gdt[SEG_UDATA] = SEG_NULL;
|
||||||
c->gdt[SEG_PROCSTACK] = SEG_NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lgdt(c->gdt, sizeof(c->gdt));
|
lgdt(c->gdt, sizeof(c->gdt));
|
||||||
|
@ -143,7 +140,6 @@ copyproc(struct proc *p)
|
||||||
memset(&np->context, 0, sizeof(np->context));
|
memset(&np->context, 0, sizeof(np->context));
|
||||||
np->context.eip = (uint)forkret;
|
np->context.eip = (uint)forkret;
|
||||||
np->context.esp = (uint)np->tf;
|
np->context.esp = (uint)np->tf;
|
||||||
np->context.ss = SEG_PROCSTACK<<3;
|
|
||||||
|
|
||||||
// Clear %eax so that fork system call returns 0 in child.
|
// Clear %eax so that fork system call returns 0 in child.
|
||||||
np->tf->eax = 0;
|
np->tf->eax = 0;
|
||||||
|
|
5
proc.h
5
proc.h
|
@ -4,9 +4,7 @@
|
||||||
#define SEG_UCODE 3
|
#define SEG_UCODE 3
|
||||||
#define SEG_UDATA 4
|
#define SEG_UDATA 4
|
||||||
#define SEG_TSS 5 // this process's task state
|
#define SEG_TSS 5 // this process's task state
|
||||||
#define SEG_CPUSTACK 6
|
#define NSEGS 6
|
||||||
#define SEG_PROCSTACK 7
|
|
||||||
#define NSEGS 8
|
|
||||||
|
|
||||||
// Saved registers for kernel context switches.
|
// Saved registers for kernel context switches.
|
||||||
// Don't need to save all the %fs etc. segment registers,
|
// Don't need to save all the %fs etc. segment registers,
|
||||||
|
@ -24,7 +22,6 @@ struct context {
|
||||||
int esi;
|
int esi;
|
||||||
int edi;
|
int edi;
|
||||||
int ebp;
|
int ebp;
|
||||||
int ss;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE };
|
enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE };
|
||||||
|
|
4
swtch.S
4
swtch.S
|
@ -16,14 +16,10 @@ swtch:
|
||||||
movl %esi, 20(%eax)
|
movl %esi, 20(%eax)
|
||||||
movl %edi, 24(%eax)
|
movl %edi, 24(%eax)
|
||||||
movl %ebp, 28(%eax)
|
movl %ebp, 28(%eax)
|
||||||
movl %ss, %ebx
|
|
||||||
movl %ebx, 32(%eax)
|
|
||||||
|
|
||||||
# Load new registers
|
# Load new registers
|
||||||
movl 4(%esp), %eax # not 8(%esp) - popped return address above
|
movl 4(%esp), %eax # not 8(%esp) - popped return address above
|
||||||
|
|
||||||
movl 32(%eax), %ebx
|
|
||||||
movl %ebx, %ss
|
|
||||||
movl 28(%eax), %ebp
|
movl 28(%eax), %ebp
|
||||||
movl 24(%eax), %edi
|
movl 24(%eax), %edi
|
||||||
movl 20(%eax), %esi
|
movl 20(%eax), %esi
|
||||||
|
|
Loading…
Reference in a new issue