load my own fking GDT woop
This commit is contained in:
parent
eb42be6dc4
commit
026e6d0e1a
|
|
@ -42,6 +42,8 @@ void stivale2_main(struct stivale2_struct *info) {
|
|||
);
|
||||
printf("PAGE TABLE AT: %x\n", cr3);
|
||||
|
||||
loadgdt();
|
||||
|
||||
struct gdt_ptr pGDT;
|
||||
__asm__ __volatile__("sgdt %0" : : "m"(pGDT) : "memory");
|
||||
printf("GDT: %x (%d)\n", pGDT.base, pGDT.limit);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
section .rodata
|
||||
align 8
|
||||
gdt64:
|
||||
dq 0
|
||||
.code: equ $-gdt64
|
||||
.codesys: equ $-gdt64
|
||||
dq (1<<44) | (1<<47) | (1<<41) | (1<<43) | (1<<53)
|
||||
.data: equ $ - gdt64
|
||||
.datasys: equ $-gdt64
|
||||
dq (1<<44) | (1<<47) | (1<<41)
|
||||
.codeusr: equ $-gdt64
|
||||
dq (1<<44) | (1<<47) | (1<<41) | (1<<43) | (1<<53) | (3<<45)
|
||||
.datausr: equ $-gdt64
|
||||
dq (1<<44) | (1<<47) | (1<<41) | (3<<45)
|
||||
.pointer:
|
||||
dw .pointer - gdt64 - 1
|
||||
dq gdt64
|
||||
|
|
@ -13,4 +18,18 @@ section .text
|
|||
global loadgdt
|
||||
loadgdt:
|
||||
lgdt [gdt64.pointer]
|
||||
|
||||
; now what I tried unsuccessfully:
|
||||
|
||||
mov rax, gdt64.codesys;
|
||||
push rax
|
||||
mov rax, loadgdtdone
|
||||
push rax ; function to execute next
|
||||
retfq ; far return (pops address and code segment)
|
||||
loadgdtdone:
|
||||
mov ax, gdt64.datasys
|
||||
mov ss, ax
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
ret
|
||||
Loading…
Reference in New Issue