4 void set_gdt(void *addr, uint16_t limit);
7 static struct desc gdt[NUM_SEG] __attribute__((aligned(8)));
11 desc_seg(gdt, SEG_NULL, 0, 0, 0);
12 desc_seg(gdt + SEL_KCODE, SEG_CODE, 0, 0xffffffff, 0);
13 desc_seg(gdt + SEL_KDATA, SEG_DATA, 0, 0xffffffff, 0);
15 set_gdt(gdt, sizeof gdt - 1);
17 setup_selectors(selector(SEL_KCODE, 0), selector(SEL_KDATA, 0));
20 uint16_t selector(int idx, int rpl)
22 return (idx << 3) | (rpl & 3);