aboutsummaryrefslogtreecommitdiff
path: root/src/kernel.cc
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2021-02-21 13:39:12 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2021-02-21 13:40:39 +0200
commit79c0f7dfb063b5d29dc4547d37efbcb86a89fdac (patch)
treeebbc32b22b31e675ebb5b992a20d569d3bfa8b9e /src/kernel.cc
parentAdd IDT (diff)
downloadkernel.cpp-79c0f7dfb063b5d29dc4547d37efbcb86a89fdac.tar.xz
Call global constructors
Diffstat (limited to 'src/kernel.cc')
-rw-r--r--src/kernel.cc18
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");