GDT setup question
Posted: Tue Feb 05, 2008 11:44 pm
Is this a valid gdt setup? The system did not crash though.
Code: Select all
unsigned long test_data[65536];
int gdt_setup(void) {
unsigned long test_data_size = sizeof(test_data);
gdata.limit = (sizeof(struct gdt_item) * 3) - 1;
gdata.base = (unsigned long) &gdt;
gdt_set(0,0,0,0,0);
gdt_set(1, 0, 0xFFFFFFFF, 0x9A, 0xCF); //0x08 - CS
gdt_set(2, 0, 0xFFFFFFFF, 0x92, 0xCF); //0x10 - DS
gdt_set(3, test_data, test_data_size, 0x42, 0xCF); //0x18 ..
gdt_sync();
return 0;
}
gdt_sync:
cli
lgdt (gdata)
mov $0x10, %ax
mov %ax, %ds
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
mov %ax, %ss
ljmp $8, $flush2
flush2: ret