From fc3d919f250499d41e7af495bee876a76c673181 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Sat, 23 May 2020 12:40:47 -0700 Subject: [PATCH] [kernel] Fix initial kernel_main triple-fault At some point, `init_console()` ended up not being before the first usage of some `log::` functions, which were jumping off into garbage. Tags: initialization boot --- src/kernel/main.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/kernel/main.cpp b/src/kernel/main.cpp index 9fddd55..d147464 100644 --- a/src/kernel/main.cpp +++ b/src/kernel/main.cpp @@ -33,6 +33,7 @@ extern "C" { extern void __kernel_assert(const char *, unsigned, const char *); extern kutil::heap_allocator g_kernel_heap; +using namespace kernel; class test_observer : public kobject::observer @@ -69,16 +70,20 @@ init_console() } void -kernel_main(kernel::args::header *header) +kernel_main(args::header *header) { - bool waiting = header && (header->mode == kernel::args::mode::debug); + bool waiting = header && (header->mode == args::mode::debug); while (waiting); kutil::assert_set_callback(__kernel_assert); + init_console(); gdt_init(); interrupts_init(); + cpu_id cpu; + cpu.validate(); + /* memory_initialize( header->scratch_pages, @@ -94,7 +99,6 @@ kernel_main(kernel::args::header *header) header->frame_buffer_length); } - init_console(); log::debug(logs::boot, " jsix header is at: %016lx", header); log::debug(logs::boot, " Framebuffer is at: %016lx", header->frame_buffer); @@ -103,9 +107,6 @@ kernel_main(kernel::args::header *header) log::debug(logs::boot, "ACPI root table is at: %016lx", header->acpi_table); log::debug(logs::boot, "Runtime service is at: %016lx", header->runtime); - cpu_id cpu; - cpu.validate(); - initrd::disk ird(header->initrd, heap); log::info(logs::boot, "initrd loaded with %d files.", ird.files().count()); for (auto &f : ird.files())