x86: Add 64-bit entries to the GDT
At present it is not possible to execution 64-bit code without installing an entire new Global Descriptor Table. This is inconvenient since kvm does not seem to like switching into long mode with a new table. It isn't actually necessary, since we can just extend the existing table. Add some new entries to this effect. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -160,6 +160,9 @@ void arch_setup_gd(gd_t *new_gd)
|
||||
|
||||
gdt_addr[X86_GDT_ENTRY_16BIT_FLAT_CS] = GDT_ENTRY(0x809b, 0, 0xfffff);
|
||||
gdt_addr[X86_GDT_ENTRY_16BIT_FLAT_DS] = GDT_ENTRY(0x8093, 0, 0xfffff);
|
||||
gdt_addr[X86_GDT_ENTRY_64BIT_CS] = GDT_ENTRY(0xaf9b, 0, 0xfffff);
|
||||
gdt_addr[X86_GDT_ENTRY_64BIT_TS1] = GDT_ENTRY(0x8980, 0, 0xfffff);
|
||||
gdt_addr[X86_GDT_ENTRY_64BIT_TS2] = 0;
|
||||
|
||||
load_gdt(gdt_addr, X86_GDT_NUM_ENTRIES);
|
||||
load_ds(X86_GDT_ENTRY_32BIT_DS);
|
||||
|
@@ -18,7 +18,10 @@
|
||||
#define X86_GDT_ENTRY_16BIT_DS 6
|
||||
#define X86_GDT_ENTRY_16BIT_FLAT_CS 7
|
||||
#define X86_GDT_ENTRY_16BIT_FLAT_DS 8
|
||||
#define X86_GDT_NUM_ENTRIES 9
|
||||
#define X86_GDT_ENTRY_64BIT_CS 9
|
||||
#define X86_GDT_ENTRY_64BIT_TS1 10
|
||||
#define X86_GDT_ENTRY_64BIT_TS2 11
|
||||
#define X86_GDT_NUM_ENTRIES 12
|
||||
|
||||
#define X86_GDT_SIZE (X86_GDT_NUM_ENTRIES * X86_GDT_ENTRY_SIZE)
|
||||
|
||||
|
Reference in New Issue
Block a user