diff options
| author | rsc <rsc> | 2007-09-27 20:38:53 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2007-09-27 20:38:53 +0000 | 
| commit | c95bde8163eca7a19c95f3b05156e0ad33312589 (patch) | |
| tree | a884f62568fff045687c5047c7ff640a2adbf4ca | |
| parent | 4f74de0edc243ffdae0233eb5c84d09c44677ccf (diff) | |
| download | xv6-labs-c95bde8163eca7a19c95f3b05156e0ad33312589.tar.gz xv6-labs-c95bde8163eca7a19c95f3b05156e0ad33312589.tar.bz2 xv6-labs-c95bde8163eca7a19c95f3b05156e0ad33312589.zip | |
yank out stack overflow checking ugliness
| -rw-r--r-- | main.c | 1 | ||||
| -rw-r--r-- | proc.c | 6 | ||||
| -rw-r--r-- | proc.h | 5 | ||||
| -rw-r--r-- | swtch.S | 4 | 
4 files changed, 2 insertions, 14 deletions
| @@ -60,7 +60,6 @@ mpmain(void)    if(cpu() != mp_bcpu())      lapic_init(cpu());    setupsegs(0); -  asm volatile("movl %0, %%ss" :: "r" (SEG_CPUSTACK << 3));    cpuid(0, 0, 0, 0, 0);  // memory barrier    cpus[cpu()].booted = 1;    popcli(); @@ -73,7 +73,7 @@ setupsegs(struct proc *p)    pushcli();    c = &cpus[cpu()]; -  c->ts.ss0 = SEG_PROCSTACK << 3; +  c->ts.ss0 = SEG_KDATA << 3;    if(p)      c->ts.esp0 = (uint)(p->kstack + KSTACKSIZE);    else @@ -84,15 +84,12 @@ setupsegs(struct proc *p)    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].s = 0; -  c->gdt[SEG_CPUSTACK] = SEG(STA_W|STA_E, 0, (uint)c->stack, 0);    if(p){      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_PROCSTACK] = SEG(STA_W|STA_E, 0, (uint)p->kstack, 0);    } else {      c->gdt[SEG_UCODE] = SEG_NULL;      c->gdt[SEG_UDATA] = SEG_NULL; -    c->gdt[SEG_PROCSTACK] = SEG_NULL;    }    lgdt(c->gdt, sizeof(c->gdt)); @@ -143,7 +140,6 @@ copyproc(struct proc *p)    memset(&np->context, 0, sizeof(np->context));    np->context.eip = (uint)forkret;    np->context.esp = (uint)np->tf; -  np->context.ss = SEG_PROCSTACK<<3;    // Clear %eax so that fork system call returns 0 in child.    np->tf->eax = 0; @@ -4,9 +4,7 @@  #define SEG_UCODE 3  #define SEG_UDATA 4  #define SEG_TSS   5  // this process's task state -#define SEG_CPUSTACK 6 -#define SEG_PROCSTACK 7 -#define NSEGS     8 +#define NSEGS     6  // Saved registers for kernel context switches.  // Don't need to save all the %fs etc. segment registers, @@ -24,7 +22,6 @@ struct context {    int esi;    int edi;    int ebp; -  int ss;  };  enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE }; @@ -16,14 +16,10 @@ swtch:    movl %esi, 20(%eax)    movl %edi, 24(%eax)    movl %ebp, 28(%eax) -  movl %ss, %ebx -  movl %ebx, 32(%eax)    # Load new registers    movl 4(%esp), %eax  # not 8(%esp) - popped return address above -  movl 32(%eax), %ebx -  movl %ebx, %ss    movl 28(%eax), %ebp    movl 24(%eax), %edi    movl 20(%eax), %esi | 
