]> code.bitgloo.com Git - clyne/osdev.git/commitdiff
compile with wall,extra,error,pedantic
authorClyne Sullivan <clyne@bitgloo.com>
Mon, 30 Sep 2024 14:59:59 +0000 (10:59 -0400)
committerClyne Sullivan <clyne@bitgloo.com>
Mon, 30 Sep 2024 14:59:59 +0000 (10:59 -0400)
Makefile
boot.cpp
gdt.cpp
idt.cpp
kernel.cpp
keyboard.cpp
memory.cpp
multiboot.cpp
tasking.cpp

index 284f931e0fc3b75a6a45c52845ca3fb800397ecb..728ead610a591f2736d58d6b955998bbacc1f04c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
-CXXFLAGS := -m32 -ggdb -g3 -O0 -fno-pic -fno-rtti -fno-exceptions -std=c++23
+CXXFLAGS := -m32 -ggdb -g3 -O1 -fno-pic -fno-rtti -fno-exceptions -std=c++23 \
+            -Wall -Wextra -pedantic -Werror
 LDFLAGS := $(CXXFLAGS) -T link.ld -static -nostdlib -fno-use-cxa-atexit
 
 CXXFILES := acpi.cpp \
index 1c46b63ac3c3cd0522a9d8caaa818cb0210a4ba5..6b1da6a220b094a9fe9cad846e9200c1f4ef9fe3 100644 (file)
--- a/boot.cpp
+++ b/boot.cpp
@@ -1,10 +1,20 @@
 #include <array>
 #include <cstdint>
+#include <span>
 
+extern void (*__init_array_start)();
+extern void (*__init_array_end)();
 extern void kernel_main();
 
 alignas(16)
-std::array<std::uint8_t, 16384> stack;
+static std::array<std::uint8_t, 16384> stack;
+
+static void init_array()
+{
+    std::span initArray (&__init_array_start, &__init_array_end);
+    for (auto& fn : initArray)
+        fn();
+}
 
 extern "C"
 __attribute__((naked))
@@ -16,16 +26,7 @@ void _start()
         mov %0, %%esp
     )" :: "i" (stack.data() + stack.size()));
 
-    extern std::uint32_t __init_array_start;
-    extern std::uint32_t __init_array_end;
-
-    auto it = &__init_array_start;
-    while (it < &__init_array_end) {
-        auto fn = reinterpret_cast<void (*)()>(*it);
-        fn();
-        ++it;
-    }
-
+    init_array();
     kernel_main();
 
     asm volatile("cli");
diff --git a/gdt.cpp b/gdt.cpp
index 383d1a4104e74d66cb2624b51d66d03b6e6168d4..24d974bb3ebd517454169c88b43cff2705d68b69 100644 (file)
--- a/gdt.cpp
+++ b/gdt.cpp
@@ -24,7 +24,7 @@ struct TSSEntry
     std::uint32_t prevTSS;
     std::uint32_t esp0;
     std::uint32_t ss0;
-    std::uint32_t unused[23];
+    std::uint32_t unused[23] = {};
 } __attribute__((packed));
 
 static TSSEntry tss = {
diff --git a/idt.cpp b/idt.cpp
index 8c4a796bb431b392189d1c42beb6321ca5b92086..5380c9e62adb29dfc546179d2331186caf0d4a6d 100644 (file)
--- a/idt.cpp
+++ b/idt.cpp
@@ -19,9 +19,9 @@ static constexpr std::uint8_t TrapGate32 = 0xF;
 struct idt_entry_bits {
     std::uint32_t offset_low             : 16;
     std::uint32_t segment_selector       : 16;
-    std::uint32_t rsvd                   :  8;
+    std::uint32_t rsvd                   :  8 = 0;
     std::uint32_t gate_type              :  4;
-    std::uint32_t rsvd2                  :  1;
+    std::uint32_t rsvd2                  :  1 = 0;
     std::uint32_t dpl                    :  2;
     std::uint32_t present                :  1;
     std::uint32_t offset_high            : 16;
index 350a11e07b37b207fa528ac0206b4e7961db8db0..ae3f153dd36fbb90c7a731d7379e68220cbf0f9c 100644 (file)
@@ -95,7 +95,7 @@ void abort()
 }
 
 extern "C"
-int __cxa_atexit(void (*func)(void *), void *arg, void *dso_handle)
+int __cxa_atexit(void (*)(void *), void *, void *)
 {
     return 0;
 }
index db7743c0162165c15fcd0b638a56df8991bb5abf..48dad02930308737308e958e58308491b67673d5 100644 (file)
@@ -26,11 +26,11 @@ static const std::array<char, 0x59> ScanCodeSet1 {{
     K_F11, K_F12
 }};
 
-static constexpr bool isReleased(auto ch) {
+static inline bool isReleased(auto ch) {
     return ch & 0x80;
 }
 
-static constexpr auto keycode(auto ch) {
+static inline auto keycode(auto ch) {
     return ch & 0x7F;
 }
 
@@ -38,7 +38,7 @@ void keyboard_initialize()
 {
     keyboardBuffer = CircularBuffer<char>(128);
 
-    idt_register_callback(33, [](auto& regs) {
+    idt_register_callback(33, [](auto&) {
         const std::uint8_t kc = keyboardPort;
 
         if (!isReleased(kc)) {
index 710701d8934e94d26ebbc5ac93477eb65c27f564..108c240c27d56ef593b220dcfc7949b5da0ef728 100644 (file)
@@ -85,12 +85,23 @@ void *operator new[](std::size_t size)
     return memory_alloc(size);
 }
 
-void operator delete(void *ptr)
+void operator delete(void *)
 {
 
 }
 
-void operator delete[](void *ptr)
+void operator delete[](void *)
 {
 
 }
+
+void operator delete(void *, std::size_t)
+{
+
+}
+
+void operator delete[](void *, std::size_t)
+{
+
+}
+
index 719bb5c9c5075125bc8497d10fdb1294fd383cff..46c505b6ed75e9aac5ebf9141b482a84301aeddb 100644 (file)
@@ -13,6 +13,7 @@ struct multiboot2_tag
     std::uint32_t data[1];
 } __attribute__((packed));
 
+template<int N>
 struct multiboot2
 {
     static constexpr std::uint32_t MAGIC    = 0xE85250D6;
@@ -21,20 +22,16 @@ struct multiboot2
     static constexpr std::uint32_t CHECKSUM = -(MAGIC + FLAGS + LENGTH);
 
     alignas(8)
-    std::uint32_t magic;
-    std::uint32_t flags;
-    std::uint32_t length;
-    std::uint32_t checksum;
+    std::uint32_t magic = MAGIC;
+    std::uint32_t flags = FLAGS;
+    std::uint32_t length = LENGTH;
+    std::uint32_t checksum = CHECKSUM;
 
-    multiboot2_tag tags[];
+    multiboot2_tag tags[N];
 } __attribute__((packed));
 
 __attribute__((section(".multiboot2")))
 multiboot2 multibootHeader = {
-    .magic = multiboot2::MAGIC,
-    .flags = multiboot2::FLAGS,
-    .length = multiboot2::LENGTH,
-    .checksum = multiboot2::CHECKSUM,
     .tags = {
         {
             1, 0, sizeof(multiboot2_tag) + sizeof(std::uint32_t),
index 97dd51a0ec5c7abc72a445cd7c66928efa31cb80..1b78011705bb65f48fdfccf6a61279b113f9c764 100644 (file)
@@ -21,7 +21,7 @@ struct Task
 static std::array<Task, 4> tasks;
 static int current = -1;
 
-void schedule(const Registers& regs)
+void schedule(const Registers&)
 {
     if (current < 0)
         return;
@@ -32,7 +32,7 @@ void schedule(const Registers& regs)
     )" : "=m" (tasks[current].esp), "=m" (tasks[current].ebp));
 
     do {
-        if (++current >= tasks.size())
+        if (++current >= static_cast<int>(tasks.size()))
             current = 0;
     } while (tasks[current].state == Task::Invalid || tasks[current].state == Task::Staging);
 
@@ -61,13 +61,13 @@ void tasking_initialize()
 
 bool tasking_spawn(void (*entry)(), unsigned ssize)
 {
-    int i = -1;
+    unsigned i;
     for (i = 0; i < tasks.size(); ++i) {
         if (tasks[i].state == Task::Invalid)
             break;
     }
 
-    if (i < 0)
+    if (i >= tasks.size())
         return false;
 
     tasks[i].state = Task::Staging;