feature: print_stack working (dont use opti flags, else the stack is broken)

This commit is contained in:
2024-09-17 11:10:41 +02:00
parent 963bf46b62
commit a02931a165
10 changed files with 53 additions and 25 deletions

8
headers/debug.h Normal file
View File

@ -0,0 +1,8 @@
#pragma once
#include <stdint.h>
struct stackframe {
struct stackframe *ebp;
uint32_t eip;
};

View File

@ -3,30 +3,30 @@
#include <stdint.h>
#define GDT_ADDRESS 0x00000800
#define GDT_SIZE 7
#define GDT_SIZE 7
// https://wiki.osdev.org/Global_Descriptor_Table#GDTR
struct gdt_descriptor {
uint16_t size;
uint32_t base;
uint16_t size;
uint32_t base;
} __attribute__((packed));
void initGdt();
void init_gdt();
#define GDT_FLAG_64BIT_MODE 0b0010
#define GDT_FLAG_32BIT_MODE 0b0100
#define GDT_FLAG_PAGE_MODE 0b1000
#define GDT_FLAG_BYTE_MODE 0b1000
#define GDT_FLAG_PAGE_MODE 0b1000
#define GDT_FLAG_BYTE_MODE 0b1000
#define GDT_ACCESS_P_VALID 0b10000000
#define GDT_ACCESS_DPL_KERNEL_MODE 0b00000000
#define GDT_ACCESS_DPL_USER_MODE 0b01100000
#define GDT_ACCESS_S_CODE_OR_DATA 0b00010000
#define GDT_ACCESS_S_SYSTEM_SEGMENT 0b00010000
#define GDT_ACCESS_E_EXECUTABLE 0b00001000
#define GDT_ACCESS_E_NOT_EXECUTABLE 0b00000000
#define GDT_ACCESS_DC_CONFORM 0b00000100 // TODO UNDERSTAND THIS BIT
#define GDT_ACCESS_DC_NOT_CONFORM 0b00000000
#define GDT_ACCESS_P_VALID 0b10000000
#define GDT_ACCESS_DPL_KERNEL_MODE 0b00000000
#define GDT_ACCESS_DPL_USER_MODE 0b01100000
#define GDT_ACCESS_S_CODE_OR_DATA 0b00010000
#define GDT_ACCESS_S_SYSTEM_SEGMENT 0b00010000
#define GDT_ACCESS_E_EXECUTABLE 0b00001000
#define GDT_ACCESS_E_NOT_EXECUTABLE 0b00000000
#define GDT_ACCESS_DC_CONFORM 0b00000100 // TODO UNDERSTAND THIS BIT
#define GDT_ACCESS_DC_NOT_CONFORM 0b00000000
#define GDT_ACCESS_RW_READABLE_FOR_CODE_WRITABLE_FOR_DATA 0b00000010
#define GDT_ACCESS_A_ACCESSED 0b00000001
#define GDT_ACCESS_A_NOT_ACCESSED 0b00000000
#define GDT_ACCESS_A_ACCESSED 0b00000001
#define GDT_ACCESS_A_NOT_ACCESSED 0b00000000

View File

@ -48,6 +48,7 @@ typedef enum {
REBOOT,
POWEROFF,
HALT,
STACK,
ECHO,
COLOR,
MERDELLA,
@ -57,3 +58,4 @@ typedef enum {
void reboot(void);
void halt(void);
void shell_init(void);
void print_stack(void);