diff options
author | kib <kib@FreeBSD.org> | 2009-04-01 12:53:01 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2009-04-01 12:53:01 +0000 |
commit | d2c67f9684a76233c58b569abc3a56c24f6a64db (patch) | |
tree | a85cf0bbb16ef5df509627582d65c573b28ebf49 /sys/amd64/include/segments.h | |
parent | e81c32aa375c3dc4b0c34a23684314b46616d249 (diff) | |
download | FreeBSD-src-d2c67f9684a76233c58b569abc3a56c24f6a64db.zip FreeBSD-src-d2c67f9684a76233c58b569abc3a56c24f6a64db.tar.gz |
Add separate gdt descriptors for %fs and %gs on amd64.
Reorder amd64 gdt descriptors so that user-accessible selectors are the
same as on i386. At least Wine hard-codes this into the binary.
In collaboration with: pho
Reviewed by: jhb
Diffstat (limited to 'sys/amd64/include/segments.h')
-rw-r--r-- | sys/amd64/include/segments.h | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/sys/amd64/include/segments.h b/sys/amd64/include/segments.h index 8ff3a0f..cab7554 100644 --- a/sys/amd64/include/segments.h +++ b/sys/amd64/include/segments.h @@ -212,15 +212,19 @@ struct region_descriptor { * Entries in the Global Descriptor Table (GDT) */ #define GNULL_SEL 0 /* Null Descriptor */ -#define GCODE_SEL 1 /* Kernel Code Descriptor */ -#define GDATA_SEL 2 /* Kernel Data Descriptor */ -#define GUCODE32_SEL 3 /* User 32 bit code Descriptor */ -#define GUDATA_SEL 4 /* User 32/64 bit Data Descriptor */ -#define GUCODE_SEL 5 /* User 64 bit Code Descriptor */ -#define GPROC0_SEL 6 /* TSS for entering kernel etc */ -/* slot 7 is second half of GPROC0_SEL */ -#define GUGS32_SEL 8 /* User 32 bit GS Descriptor */ -#define NGDT 9 +#define GNULL2_SEL 1 /* Null Descriptor */ +#define GUFS32_SEL 2 /* User 32 bit %fs Descriptor */ +#define GUGS32_SEL 3 /* User 32 bit %gs Descriptor */ +#define GCODE_SEL 4 /* Kernel Code Descriptor */ +#define GDATA_SEL 5 /* Kernel Data Descriptor */ +#define GUCODE32_SEL 6 /* User 32 bit code Descriptor */ +#define GUDATA_SEL 7 /* User 32/64 bit Data Descriptor */ +#define GUCODE_SEL 8 /* User 64 bit Code Descriptor */ +#define GPROC0_SEL 9 /* TSS for entering kernel etc */ +/* slot 10 is second half of GPROC0_SEL */ +#define GUSERLDT_SEL 11 /* LDT */ +/* slot 11 is second half of GUSERLDT_SEL */ +#define NGDT 13 #ifdef _KERNEL extern struct user_segment_descriptor gdt[]; |