From 529c1e2a80439c6f1e3759e4c6e29688d1fb373d Mon Sep 17 00:00:00 2001 From: Quinten Kock Date: Mon, 7 Dec 2020 23:07:42 +0100 Subject: [PATCH] make printing GDT work on both x86 --- kernel/src/arch/i386/entry-stivale2.c | 3 ++- kernel/src/arch/x86/gdt.c | 10 ++++++++++ kernel/src/arch/x86/gdt.h | 7 +++++++ kernel/src/arch/x86_64/entry-stivale2.c | 9 +-------- kernel/src/arch/x86_64/gdt.h | 8 +------- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/kernel/src/arch/i386/entry-stivale2.c b/kernel/src/arch/i386/entry-stivale2.c index 7ccd523..0a8a0db 100644 --- a/kernel/src/arch/i386/entry-stivale2.c +++ b/kernel/src/arch/i386/entry-stivale2.c @@ -18,7 +18,6 @@ struct stivale2_header header2 = { void stivale2_main(struct stivale2_struct *info) { parse_stivale2(info); - print_stivale2_memmap(info); uint32_t* cr3; __asm__ __volatile__ ( @@ -29,5 +28,7 @@ void stivale2_main(struct stivale2_struct *info) { ); printf("PAGE TABLE AT: %x\n", cr3); + print_gdt(); + kmain(); } diff --git a/kernel/src/arch/x86/gdt.c b/kernel/src/arch/x86/gdt.c index e1c97db..a6fee8a 100644 --- a/kernel/src/arch/x86/gdt.c +++ b/kernel/src/arch/x86/gdt.c @@ -30,3 +30,13 @@ void print_gdt_ent(uint64_t* ent) { if(flags & 0x8) putchar('G'); if(flags & 0x1) putchar('z'); } + +void print_gdt() { + struct gdt_ptr pGDT; + __asm__ __volatile__("sgdt %0" : : "m"(pGDT) : "memory"); + printf("GDT: %x (%d)\n", pGDT.base, pGDT.limit); + for(int i = 0; i < (pGDT.limit+1)/8; i++) { + uint64_t *gdt_ent = pGDT.base + 8*i; + printf("GDT %d: ", i); print_gdt_ent(gdt_ent); putchar('\n'); + } +} \ No newline at end of file diff --git a/kernel/src/arch/x86/gdt.h b/kernel/src/arch/x86/gdt.h index 9ca6416..eddfab8 100644 --- a/kernel/src/arch/x86/gdt.h +++ b/kernel/src/arch/x86/gdt.h @@ -1,3 +1,10 @@ #include +struct gdt_ptr +{ + uint16_t limit; + uint64_t base; +} __attribute__((packed)); + void print_gdt_ent(uint64_t* ent); +void print_gdt(); diff --git a/kernel/src/arch/x86_64/entry-stivale2.c b/kernel/src/arch/x86_64/entry-stivale2.c index c609aad..c800e35 100644 --- a/kernel/src/arch/x86_64/entry-stivale2.c +++ b/kernel/src/arch/x86_64/entry-stivale2.c @@ -3,7 +3,6 @@ #include #include -#include #include #include @@ -42,13 +41,7 @@ void stivale2_main(struct stivale2_struct *info) { ); printf("PAGE TABLE AT: %x\n", cr3); - struct gdt_ptr pGDT; - __asm__ __volatile__("sgdt %0" : : "m"(pGDT) : "memory"); - printf("GDT: %x (%d)\n", pGDT.base, pGDT.limit); - for(int i = 0; i < (pGDT.limit+1)/8; i++) { - uint64_t *gdt_ent = pGDT.base + 8*i; - printf("GDT %d: ", i); print_gdt_ent(gdt_ent); putchar('\n'); - } + print_gdt(); char *argv[3] = {"stivale2", info->bootloader_brand, info->bootloader_version}; kmain(3, argv); diff --git a/kernel/src/arch/x86_64/gdt.h b/kernel/src/arch/x86_64/gdt.h index d908147..14ae27c 100644 --- a/kernel/src/arch/x86_64/gdt.h +++ b/kernel/src/arch/x86_64/gdt.h @@ -1,9 +1,3 @@ -#include - -struct gdt_ptr -{ - uint16_t limit; - uint64_t base; -} __attribute__((packed)); +#include void loadgdt();