mirror of
https://github.com/JannisHeydemann/BoredOS.git
synced 2026-05-30 02:16:58 +00:00
FEAT: Verbose boot
This commit is contained in:
@@ -212,7 +212,7 @@ process_t* process_create_elf(const char* filepath, const char* args_str) {
|
||||
size_t elf_load_size = 0;
|
||||
uint64_t entry_point = elf_load(filepath, new_proc->pml4_phys, &elf_load_size);
|
||||
if (entry_point == 0) {
|
||||
serial_write("[PROCESS] Failed to load ELF: ");
|
||||
serial_write("[PROC] Failed to load ELF: ");
|
||||
serial_write(filepath);
|
||||
serial_write("\n");
|
||||
// We technically leak the page table here, but let's ignore cleanup for now
|
||||
@@ -371,7 +371,7 @@ process_t* process_create_elf(const char* filepath, const char* args_str) {
|
||||
current_process[0]->next = new_proc;
|
||||
spinlock_release_irqrestore(&runqueue_lock, rflags);
|
||||
|
||||
serial_write("[PROCESS] Spawned ELF Executable: ");
|
||||
serial_write("[PROC] Exec: ");
|
||||
serial_write(filepath);
|
||||
serial_write("\n");
|
||||
return new_proc;
|
||||
|
||||
@@ -37,10 +37,13 @@ static uint32_t read_lapic_id(void) {
|
||||
}
|
||||
|
||||
uint32_t smp_this_cpu_id(void) {
|
||||
if (total_cpus <= 1) return 0;
|
||||
if (total_cpus <= 1 || !cpu_states) return 0;
|
||||
|
||||
// Use GS-based self-pointer to get the structure first
|
||||
cpu_state_t *state;
|
||||
cpu_state_t *state = NULL;
|
||||
// Safely check GS:0. If GS is not set or base is 0, this should be handled carefully.
|
||||
// In BoredOS, if GS is not set, this might still fault depending on address space.
|
||||
// However, the cpu_states check above covers the most likely early-boot failure.
|
||||
asm volatile("movq %%gs:0, %0" : "=r"(state) : : "memory");
|
||||
if (state) return state->cpu_id;
|
||||
|
||||
|
||||
@@ -203,12 +203,14 @@ static uint64_t syscall_handler_inner(registers_t *regs) {
|
||||
|
||||
if (cmd == GUI_CMD_WINDOW_CREATE) {
|
||||
extern void serial_write(const char *str);
|
||||
serial_write("Kernel: GUI_CMD_WINDOW_CREATE\n");
|
||||
|
||||
const char *title = (const char *)arg2;
|
||||
|
||||
serial_write("[WM] CreateWindow: ");
|
||||
serial_write(title ? title : "Unknown");
|
||||
serial_write("\n");
|
||||
uint64_t *u_params = (uint64_t *)arg3;
|
||||
if (!u_params) {
|
||||
serial_write("Kernel: Error - params is NULL\n");
|
||||
serial_write("[WM] Error - params is NULL\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -216,14 +218,14 @@ static uint64_t syscall_handler_inner(registers_t *regs) {
|
||||
uint64_t params[4];
|
||||
for (int i = 0; i < 4; i++) params[i] = u_params[i];
|
||||
|
||||
serial_write("Kernel: Window params copied.\n");
|
||||
// params verified
|
||||
|
||||
Window *win = kmalloc(sizeof(Window));
|
||||
if (!win) {
|
||||
serial_write("Kernel: Error - kmalloc failed for Window\n");
|
||||
serial_write("[WM] Error - kmalloc failed for Window\n");
|
||||
return 0;
|
||||
}
|
||||
serial_write("Kernel: Window allocated.\n");
|
||||
// win allocated
|
||||
|
||||
extern void mem_memset(void *dest, int val, size_t len);
|
||||
mem_memset(win, 0, sizeof(Window));
|
||||
@@ -240,11 +242,8 @@ static uint64_t syscall_handler_inner(registers_t *regs) {
|
||||
kernel_title[i] = title[i];
|
||||
}
|
||||
kernel_title[title_len] = '\0';
|
||||
serial_write("Kernel: Title copied: ");
|
||||
serial_write(kernel_title);
|
||||
serial_write("\n");
|
||||
} else {
|
||||
serial_write("Kernel: Warning - kernel_title kmalloc failed\n");
|
||||
serial_write("[WM] Warning: kernel_title kmalloc failed\n");
|
||||
}
|
||||
|
||||
// Basic initialization
|
||||
@@ -254,7 +253,7 @@ static uint64_t syscall_handler_inner(registers_t *regs) {
|
||||
win->w = (int)params[2];
|
||||
win->h = (int)params[3];
|
||||
|
||||
serial_write("Kernel: Init win dims.\n");
|
||||
// dims ready
|
||||
|
||||
// Sanity checks for dimensions
|
||||
if (win->w <= 0 || win->w > 4096) win->w = 400;
|
||||
@@ -268,7 +267,7 @@ static uint64_t syscall_handler_inner(registers_t *regs) {
|
||||
win->font = NULL;
|
||||
win->lock = SPINLOCK_INIT;
|
||||
|
||||
serial_write("Kernel: Dims initialized.\n");
|
||||
// ready
|
||||
|
||||
size_t pixel_size = 0;
|
||||
// Safe allocation
|
||||
@@ -283,7 +282,7 @@ static uint64_t syscall_handler_inner(registers_t *regs) {
|
||||
win->comp_pixels = kmalloc(pixel_size);
|
||||
}
|
||||
|
||||
serial_write("Kernel: Buffers allocated.\n");
|
||||
// buffs ok
|
||||
|
||||
if (win->pixels) {
|
||||
extern void mem_memset(void *dest, int val, size_t len);
|
||||
@@ -294,7 +293,7 @@ static uint64_t syscall_handler_inner(registers_t *regs) {
|
||||
mem_memset(win->comp_pixels, 0, pixel_size);
|
||||
}
|
||||
|
||||
serial_write("Kernel: Buffers cleared.\n");
|
||||
serial_write("[WM] Buffers ready\n");
|
||||
|
||||
// Set callbacks
|
||||
win->paint = user_window_paint;
|
||||
@@ -800,7 +799,7 @@ static uint64_t syscall_handler_inner(registers_t *regs) {
|
||||
Window *win = (Window *)arg2;
|
||||
if (win) {
|
||||
extern void serial_write(const char *str);
|
||||
serial_write("Kernel: Setting window resizable to ");
|
||||
serial_write("[WM] Resizable: ");
|
||||
serial_write(arg3 ? "true\n" : "false\n");
|
||||
win->resizable = (arg3 != 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user