diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2021-02-21 13:39:12 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2021-02-21 13:40:39 +0200 |
commit | 79c0f7dfb063b5d29dc4547d37efbcb86a89fdac (patch) | |
tree | ebbc32b22b31e675ebb5b992a20d569d3bfa8b9e /src/kernel.cc | |
parent | Add IDT (diff) | |
download | kernel.cpp-79c0f7dfb063b5d29dc4547d37efbcb86a89fdac.tar.xz |
Call global constructors
Diffstat (limited to 'src/kernel.cc')
-rw-r--r-- | src/kernel.cc | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/kernel.cc b/src/kernel.cc index 7aaaa37..37773e1 100644 --- a/src/kernel.cc +++ b/src/kernel.cc @@ -15,16 +15,26 @@ #include "idt.h" #include "serial.h" +SerialPort serial0; +CGA video0; + +typedef void (*constructor)(); + extern "C" { + +constructor start_ctors; +constructor end_ctors; +void kernel_constructors() { + for (constructor* i = &start_ctors; i != &end_ctors; ++i) (*i)(); +} + void dump_multiboot(uint32_t mb_magic, uint32_t mb_addr); void dump_gdt(); void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t mb_addr) { - SerialPort s0; - if (s0.self_check()) Console::set(&s0); + if (serial0.self_check()) Console::set(&serial0); - CGA terminal; - Console::set(&terminal); + Console::set(&video0); printk("Hello, kernel World!\n"); |