diff options
| author | Bruce Evans <bde@FreeBSD.org> | 1994-11-15 14:12:55 +0000 |
|---|---|---|
| committer | Bruce Evans <bde@FreeBSD.org> | 1994-11-15 14:12:55 +0000 |
| commit | b0d1e6de0489d10ae88a69cdc6a8223848577aa2 (patch) | |
| tree | cf0fa9c96ed56bbcc99a4b2a1f459b86ec6775d6 | |
| parent | dc4de4ca23abfc5744e5a7ec633bf32a376eba54 (diff) | |
Notes
| -rw-r--r-- | sys/amd64/amd64/machdep.c | 16 | ||||
| -rw-r--r-- | sys/amd64/include/segments.h | 8 | ||||
| -rw-r--r-- | sys/i386/i386/machdep.c | 16 | ||||
| -rw-r--r-- | sys/i386/include/segments.h | 8 |
4 files changed, 32 insertions, 16 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index c2aa6be02f5b..4a3f0bd61796 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.90 1994/11/14 14:19:55 bde Exp $ + * $Id: machdep.c,v 1.91 1994/11/14 14:23:54 bde Exp $ */ #include "npx.h" @@ -160,8 +160,6 @@ extern int pager_map_size; #define offsetof(type, member) ((size_t)(&((type *)0)->member)) -static union descriptor ldt[NLDT]; /* local descriptor table */ - void cpu_startup() { @@ -932,15 +930,18 @@ cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p) * Initialize segments & interrupt table */ +int currentldt; +int _default_ldt; union descriptor gdt[NGDT]; /* global descriptor table */ struct gate_descriptor idt[NIDT]; /* interrupt descriptor table */ +union descriptor ldt[NLDT]; /* local descriptor table */ struct i386tss tss, panic_tss; extern struct user *proc0paddr; /* software prototypes -- in more palatable form */ -static struct soft_segment_descriptor gdt_segs[] = { +struct soft_segment_descriptor gdt_segs[] = { /* GNULL_SEL 0 Null Descriptor */ { 0x0, /* segment base address */ 0x0, /* length */ @@ -1087,7 +1088,8 @@ struct soft_segment_descriptor ldt_segs[] = { 1, /* segment descriptor present */ 0, 0, 1, /* default 32 vs 16 bit size */ - 1 /* limit granularity (byte/page units)*/ } }; + 1 /* limit granularity (byte/page units)*/ }, +}; void setidt(idx, func, typ, dpl) @@ -1245,7 +1247,9 @@ init386(first) r_idt.rd_base = (int) idt; lidt(&r_idt); - lldt(GSEL(GLDT_SEL, SEL_KPL)); + _default_ldt = GSEL(GLDT_SEL, SEL_KPL); + lldt(_default_ldt); + currentldt = _default_ldt; #ifdef DDB kdb_init(); diff --git a/sys/amd64/include/segments.h b/sys/amd64/include/segments.h index 356880f0fccb..63025996fbfb 100644 --- a/sys/amd64/include/segments.h +++ b/sys/amd64/include/segments.h @@ -35,11 +35,11 @@ * SUCH DAMAGE. * * from: @(#)segments.h 7.1 (Berkeley) 5/9/91 - * $Id: segments.h,v 1.5 1994/10/01 02:56:08 davidg Exp $ + * $Id: segments.h,v 1.6 1994/11/14 14:18:15 bde Exp $ */ #ifndef _MACHINE_SEGMENTS_H_ -#define _MACHINE_SEGMENTS_H_ 1 +#define _MACHINE_SEGMENTS_H_ /* * 386 Segmentation Data Structures and definitions @@ -231,8 +231,12 @@ struct region_descriptor { #define NLDT (LUDATA_SEL + 1) #ifdef KERNEL +extern int currentldt; +extern int _default_ldt; extern union descriptor gdt[NGDT]; +extern struct soft_segment_descriptor gdt_segs[]; extern struct gate_descriptor idt[NIDT]; +extern union descriptor ldt[NLDT]; void lgdt __P((struct region_descriptor *rdp)); void lidt __P((struct region_descriptor *rdp)); diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index c2aa6be02f5b..4a3f0bd61796 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.90 1994/11/14 14:19:55 bde Exp $ + * $Id: machdep.c,v 1.91 1994/11/14 14:23:54 bde Exp $ */ #include "npx.h" @@ -160,8 +160,6 @@ extern int pager_map_size; #define offsetof(type, member) ((size_t)(&((type *)0)->member)) -static union descriptor ldt[NLDT]; /* local descriptor table */ - void cpu_startup() { @@ -932,15 +930,18 @@ cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p) * Initialize segments & interrupt table */ +int currentldt; +int _default_ldt; union descriptor gdt[NGDT]; /* global descriptor table */ struct gate_descriptor idt[NIDT]; /* interrupt descriptor table */ +union descriptor ldt[NLDT]; /* local descriptor table */ struct i386tss tss, panic_tss; extern struct user *proc0paddr; /* software prototypes -- in more palatable form */ -static struct soft_segment_descriptor gdt_segs[] = { +struct soft_segment_descriptor gdt_segs[] = { /* GNULL_SEL 0 Null Descriptor */ { 0x0, /* segment base address */ 0x0, /* length */ @@ -1087,7 +1088,8 @@ struct soft_segment_descriptor ldt_segs[] = { 1, /* segment descriptor present */ 0, 0, 1, /* default 32 vs 16 bit size */ - 1 /* limit granularity (byte/page units)*/ } }; + 1 /* limit granularity (byte/page units)*/ }, +}; void setidt(idx, func, typ, dpl) @@ -1245,7 +1247,9 @@ init386(first) r_idt.rd_base = (int) idt; lidt(&r_idt); - lldt(GSEL(GLDT_SEL, SEL_KPL)); + _default_ldt = GSEL(GLDT_SEL, SEL_KPL); + lldt(_default_ldt); + currentldt = _default_ldt; #ifdef DDB kdb_init(); diff --git a/sys/i386/include/segments.h b/sys/i386/include/segments.h index 356880f0fccb..63025996fbfb 100644 --- a/sys/i386/include/segments.h +++ b/sys/i386/include/segments.h @@ -35,11 +35,11 @@ * SUCH DAMAGE. * * from: @(#)segments.h 7.1 (Berkeley) 5/9/91 - * $Id: segments.h,v 1.5 1994/10/01 02:56:08 davidg Exp $ + * $Id: segments.h,v 1.6 1994/11/14 14:18:15 bde Exp $ */ #ifndef _MACHINE_SEGMENTS_H_ -#define _MACHINE_SEGMENTS_H_ 1 +#define _MACHINE_SEGMENTS_H_ /* * 386 Segmentation Data Structures and definitions @@ -231,8 +231,12 @@ struct region_descriptor { #define NLDT (LUDATA_SEL + 1) #ifdef KERNEL +extern int currentldt; +extern int _default_ldt; extern union descriptor gdt[NGDT]; +extern struct soft_segment_descriptor gdt_segs[]; extern struct gate_descriptor idt[NIDT]; +extern union descriptor ldt[NLDT]; void lgdt __P((struct region_descriptor *rdp)); void lidt __P((struct region_descriptor *rdp)); |
