[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
This commit is contained in:
Justin C. Miller
2020-05-23 12:40:47 -07:00
parent 75641a4394
commit fc3d919f25

View File

@@ -33,6 +33,7 @@ extern "C" {
extern void __kernel_assert(const char *, unsigned, const char *); extern void __kernel_assert(const char *, unsigned, const char *);
extern kutil::heap_allocator g_kernel_heap; extern kutil::heap_allocator g_kernel_heap;
using namespace kernel;
class test_observer : class test_observer :
public kobject::observer public kobject::observer
@@ -69,16 +70,20 @@ init_console()
} }
void 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); while (waiting);
kutil::assert_set_callback(__kernel_assert); kutil::assert_set_callback(__kernel_assert);
init_console();
gdt_init(); gdt_init();
interrupts_init(); interrupts_init();
cpu_id cpu;
cpu.validate();
/* /*
memory_initialize( memory_initialize(
header->scratch_pages, header->scratch_pages,
@@ -94,7 +99,6 @@ kernel_main(kernel::args::header *header)
header->frame_buffer_length); header->frame_buffer_length);
} }
init_console();
log::debug(logs::boot, " jsix header is at: %016lx", header); log::debug(logs::boot, " jsix header is at: %016lx", header);
log::debug(logs::boot, " Framebuffer is at: %016lx", header->frame_buffer); 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, "ACPI root table is at: %016lx", header->acpi_table);
log::debug(logs::boot, "Runtime service is at: %016lx", header->runtime); log::debug(logs::boot, "Runtime service is at: %016lx", header->runtime);
cpu_id cpu;
cpu.validate();
initrd::disk ird(header->initrd, heap); initrd::disk ird(header->initrd, heap);
log::info(logs::boot, "initrd loaded with %d files.", ird.files().count()); log::info(logs::boot, "initrd loaded with %d files.", ird.files().count());
for (auto &f : ird.files()) for (auto &f : ird.files())