diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-07-12 15:46:22 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-07-12 15:46:22 +0200 |
commit | c6c2e04d4a700fe3982a4a72e768c69d6ace08a6 (patch) | |
tree | d64dc55189b55da8c7d01be1c981dda6dcab76dd /sys/src/9/pc/main.c | |
parent | b429f72eaedff27b43c4ac951cea62f574e6fb23 (diff) |
segdesc: add /dev/^(ldt gdt) support
Diffstat (limited to 'sys/src/9/pc/main.c')
-rw-r--r-- | sys/src/9/pc/main.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/sys/src/9/pc/main.c b/sys/src/9/pc/main.c index d82dacf36..ff928af2e 100644 --- a/sys/src/9/pc/main.c +++ b/sys/src/9/pc/main.c @@ -225,8 +225,7 @@ userinit(void) kstrdup(&p->text, "*init*"); kstrdup(&p->user, eve); - p->fpstate = FPinit; - fpoff(); + procsetup(p); /* * Kernel Stack @@ -585,6 +584,24 @@ procsetup(Proc*p) { p->fpstate = FPinit; fpoff(); + + memset(p->gdt, 0, sizeof(p->gdt)); + p->ldt = nil; + p->nldt = 0; +} + +void +procfork(Proc *p) +{ + /* inherit user descriptors */ + memmove(p->gdt, up->gdt, sizeof(p->gdt)); + + /* copy local descriptor table */ + if(up->ldt != nil && up->nldt > 0){ + p->ldt = malloc(sizeof(Segdesc) * up->nldt); + memmove(p->ldt, up->ldt, sizeof(Segdesc) * up->nldt); + p->nldt = up->nldt; + } } void |