summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/main.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-07-12 15:46:22 +0200
committercinap_lenrek <cinap_lenrek@localhost>2011-07-12 15:46:22 +0200
commitc6c2e04d4a700fe3982a4a72e768c69d6ace08a6 (patch)
treed64dc55189b55da8c7d01be1c981dda6dcab76dd /sys/src/9/pc/main.c
parentb429f72eaedff27b43c4ac951cea62f574e6fb23 (diff)
segdesc: add /dev/^(ldt gdt) support
Diffstat (limited to 'sys/src/9/pc/main.c')
-rw-r--r--sys/src/9/pc/main.c21
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