hw_x86_64: Move GDT into mtc region

The GDT must be visible for non-core threads too.
This commit is contained in:
Reto Buerki 2015-02-26 16:21:21 +01:00 committed by Christian Helmuth
parent bf5118fe54
commit ec028ea06f
2 changed files with 41 additions and 40 deletions

View File

@ -136,43 +136,3 @@
.quad 0
.quad 0x20018f
.fill 510, 8, 0x0
/*******************************************
** Global Descriptor Table **
** See Intel SDM Vol. 3A, section 3.5.1. **
*******************************************/
.align 4
.space 2
_gdt_ptr:
.word _gdt_end - _gdt_start - 1 /* limit */
.long _gdt_start /* base address */
.align 8
_gdt_start:
/* Null descriptor */
.quad 0
/* 64-bit code segment descriptor */
.long 0
/* GDTE_LONG | GDTE_PRESENT | GDTE_CODE | GDTE_NON_SYSTEM */
.long 0x209800
/* 64-bit data segment descriptor */
.long 0
/* GDTE_LONG | GDTE_PRESENT | GDTE_TYPE_DATA_A | GDTE_TYPE_DATA_W | GDTE_NON_SYSTEM */
.long 0x209300
/* 64-bit user code segment descriptor */
.long 0
/* GDTE_LONG | GDTE_PRESENT | GDTE_CODE | GDTE_NON_SYSTEM */
.long 0x20f800
/* 64-bit user data segment descriptor */
.long 0
/* GDTE_LONG | GDTE_PRESENT | GDTE_TYPE_DATA_A | GDTE_TYPE_DATA_W | GDTE_NON_SYSTEM */
.long 0x20f300
/* Task segment descriptor */
.long 0x01000068
/* GDTE_PRESENT | GDTE_SYS_TSS */
.long 0x893a
.long 0
.long 0
_gdt_end:

View File

@ -247,6 +247,47 @@
_mt_idt:
.space 1 << MIN_PAGE_SIZE_LOG2
/******************************************
** Global Descriptor Table (GDT) **
** See Intel SDM Vol. 3A, section 3.5.1 **
******************************************/
.align 4
.space 2
.global _gdt_ptr
_gdt_ptr:
.word _gdt_end - _gdt_start - 1 /* limit */
.long _gdt_start /* base address */
.align 8
_gdt_start:
/* Null descriptor */
.quad 0
/* 64-bit code segment descriptor */
.long 0
/* GDTE_LONG | GDTE_PRESENT | GDTE_CODE | GDTE_NON_SYSTEM */
.long 0x209800
/* 64-bit data segment descriptor */
.long 0
/* GDTE_LONG | GDTE_PRESENT | GDTE_TYPE_DATA_A | GDTE_TYPE_DATA_W | GDTE_NON_SYSTEM */
.long 0x209300
/* 64-bit user code segment descriptor */
.long 0
/* GDTE_LONG | GDTE_PRESENT | GDTE_CODE | GDTE_NON_SYSTEM */
.long 0x20f800
/* 64-bit user data segment descriptor */
.long 0
/* GDTE_LONG | GDTE_PRESENT | GDTE_TYPE_DATA_A | GDTE_TYPE_DATA_W | GDTE_NON_SYSTEM */
.long 0x20f300
/* Task segment descriptor */
.long 0x01000068
/* GDTE_PRESENT | GDTE_SYS_TSS */
.long 0x893a
.long 0
.long 0
_gdt_end:
/* end of the mode transition code */
.global _mt_end
_mt_end: