/* * Copyright (c) 2021, Nico Weber * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include extern "C" [[noreturn]] void halt(); extern "C" [[noreturn]] void init(); extern "C" [[noreturn]] void init() { auto& uart = Prekernel::UART::the(); uart.print_str("\r\nWelcome to Serenity OS!\r\n"); uart.print_str("Imagine this being your ideal operating system.\r\n"); uart.print_str("Observed deviations from that ideal are shortcomings of your imagination.\r\n\r\n"); u32 firmware_version = Prekernel::Mailbox::query_firmware_version(); uart.print_str("Firmware version: "); uart.print_num(firmware_version); uart.print_str("\r\n"); auto& timer = Prekernel::Timer::the(); u64 start_musec = 0; for (;;) { u64 now_musec; while ((now_musec = timer.microseconds_since_boot()) - start_musec < 1'000'000) ; start_musec = now_musec; uart.print_str("Timer: "); uart.print_num(now_musec); uart.print_str("\r\n"); } } // FIXME: Share this with the Intel Prekernel. extern size_t __stack_chk_guard; size_t __stack_chk_guard; extern "C" [[noreturn]] void __stack_chk_fail(); [[noreturn]] void halt() { for (;;) { asm volatile("wfi"); } } void __stack_chk_fail() { halt(); } [[noreturn]] void __assertion_failed(char const*, char const*, unsigned int, char const*) { halt(); }