feature: print_stack working (dont use opti flags, else the stack is broken)
This commit is contained in:
13
src/debug/print_stack.c
Normal file
13
src/debug/print_stack.c
Normal file
@ -0,0 +1,13 @@
|
||||
#include "debug.h"
|
||||
#include "kprintf.h"
|
||||
|
||||
void print_stack(void)
|
||||
{
|
||||
struct stackframe *stack =
|
||||
(struct stackframe *)__builtin_frame_address(0);
|
||||
|
||||
while (stack) {
|
||||
kprintf(0, "stack->ebp: %d\n", stack->ebp);
|
||||
stack = stack->ebp;
|
||||
}
|
||||
}
|
@ -34,10 +34,10 @@ static void set_gdt_entry_value(uint8_t *target, uint32_t base, uint32_t limit,
|
||||
target[6] |= (granularity << 4);
|
||||
}
|
||||
|
||||
void initGdt(void)
|
||||
void init_gdt(void)
|
||||
{
|
||||
gdtr->size = 8 * GDT_SIZE - 1;
|
||||
gdtr->base = (uint32_t)&gdt_entries;
|
||||
gdtr->base = (uint32_t)&gdt_entries[0];
|
||||
|
||||
set_gdt_entry_value(gdt_entries + 0x00, 0, 0, 0, 0); // Null segment
|
||||
|
||||
@ -58,7 +58,7 @@ void initGdt(void)
|
||||
GDT_ACCESS_A_ACCESSED,
|
||||
GDT_FLAG_32BIT_MODE | GDT_FLAG_PAGE_MODE); // Kernel data
|
||||
set_gdt_entry_value(
|
||||
gdt_entries + 0x18, 0, 0x0,
|
||||
gdt_entries + 0x18, 0, 0xFFFFF,
|
||||
GDT_ACCESS_P_VALID | GDT_ACCESS_DPL_KERNEL_MODE |
|
||||
GDT_ACCESS_S_CODE_OR_DATA | GDT_ACCESS_E_NOT_EXECUTABLE |
|
||||
GDT_ACCESS_DC_CONFORM |
|
||||
|
@ -24,6 +24,6 @@ void kernel_main(void)
|
||||
/* Initialize terminal interface */
|
||||
terminal_initialize();
|
||||
|
||||
initGdt();
|
||||
init_gdt();
|
||||
shell_init();
|
||||
}
|
||||
|
@ -29,6 +29,8 @@ static CMD_TOK find_command(char *line)
|
||||
command = POWEROFF;
|
||||
else if (!strcmp(line, "halt"))
|
||||
command = HALT;
|
||||
else if (!strcmp(line, "stack"))
|
||||
command = STACK;
|
||||
else if (!strcmp(line, "echo"))
|
||||
command = ECHO;
|
||||
else if (!strcmp(line, "color"))
|
||||
@ -95,6 +97,9 @@ void shell_init(void)
|
||||
case HALT:
|
||||
halt();
|
||||
break;
|
||||
case STACK:
|
||||
print_stack();
|
||||
break;
|
||||
case ECHO:
|
||||
kprintf(0, "echoing\n");
|
||||
break;
|
||||
|
@ -27,8 +27,8 @@ void reboot(void)
|
||||
} while (check_flag(tmp, KBD_BIT_UDATA));
|
||||
outb(KBD_INTERFACE, KBD_RESET); /* pulse CPU reset line */
|
||||
loop:
|
||||
asm volatile("hlt"); /* if that didn't work, halt the CPU */
|
||||
goto loop; /* if a NMI is received, halt again */
|
||||
asm volatile("hlt");
|
||||
goto loop;
|
||||
}
|
||||
|
||||
void halt(void)
|
||||
|
Reference in New Issue
Block a user