From a78dcf50f512f7bbdb6b49cb969f4d64a09bc607 Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Wed, 8 Apr 2026 17:07:02 +0200 Subject: [PATCH 1/3] shutdown automatically when main() is defined --- src/kernel/service_stub.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/kernel/service_stub.cpp b/src/kernel/service_stub.cpp index 215a67e48..e35e2b9a5 100644 --- a/src/kernel/service_stub.cpp +++ b/src/kernel/service_stub.cpp @@ -81,6 +81,8 @@ void Service::start(const std::string& cmd) int exit_status = main(argc, argv); INFO("main","returned with status %d", exit_status); #endif + + os::shutdown(); } __attribute__((weak)) From 94658af0faba25bc05d6736f56c48a485c8f0b13 Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Wed, 8 Apr 2026 17:09:34 +0200 Subject: [PATCH 2/3] update minimal example to use modern c++ --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index da86c42ab..deb19cc80 100755 --- a/README.md +++ b/README.md @@ -49,10 +49,10 @@ IncludeOS can currently not be built on macOS or Windows. A minimal IncludeOS "hello world" looks like a regular C++ program: ```c++ -#include +#include int main(){ - std::cout << "Hello world\n"; + std::println("Hello world"); } ``` From 60a929f8981b0220d07787df81de0e5e50b5c385 Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Wed, 8 Apr 2026 18:01:42 +0200 Subject: [PATCH 3/3] permit shutting down and rebooting without kernel linking --- src/kernel/kernel.cpp | 10 ---------- src/kernel/os.cpp | 11 +++++++++++ test/misc/lest_util/os_mock.cpp | 1 - 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index a6bfe1fdc..e882e74d0 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -85,16 +85,6 @@ void os::register_plugin(Plugin delg, const char* name){ plugins.emplace_back(delg, name); } -extern void __arch_reboot(); -void os::reboot() noexcept -{ - __arch_reboot(); -} -void os::shutdown() noexcept -{ - kernel::state().running = false; -} - void kernel::post_start() { // Enable timestamps (if present) diff --git a/src/kernel/os.cpp b/src/kernel/os.cpp index 2b27762b2..e1fed908a 100644 --- a/src/kernel/os.cpp +++ b/src/kernel/os.cpp @@ -16,6 +16,7 @@ #include #include +#include bool os::is_booted() noexcept { return kernel::is_booted(); @@ -24,6 +25,16 @@ const char* os::arch() noexcept { return Arch::name; } +void os::reboot() noexcept +{ + __arch_reboot(); +} + +void os::shutdown() noexcept +{ + kernel::state().running = false; +} + os::Panic_action os::panic_action() noexcept { return kernel::panic_action(); } diff --git a/test/misc/lest_util/os_mock.cpp b/test/misc/lest_util/os_mock.cpp index e2576be7f..708d3e443 100644 --- a/test/misc/lest_util/os_mock.cpp +++ b/test/misc/lest_util/os_mock.cpp @@ -89,7 +89,6 @@ void kprint(const char* str) //void os::default_stdout(const char*, size_t) {} void os::event_loop() {} void os::halt() noexcept {} -void os::reboot() noexcept {} void __x86_init_paging(void*){}; namespace x86 {