Browse Source

new: 简单的warn assert

fslongjin 2 years ago
parent
commit
a1c843cd3a
3 changed files with 26 additions and 1 deletions
  1. 2 1
      .vscode/settings.json
  2. 10 0
      kernel/common/compiler.h
  3. 14 0
      kernel/debug/bug.h

+ 2 - 1
.vscode/settings.json

@@ -107,7 +107,8 @@
         "libm.h": "c",
         "ahci.h": "c",
         "slab.h": "c",
-        "boot_info.h": "c"
+        "boot_info.h": "c",
+        "pci.h": "c"
     },
     "C_Cpp.errorSquiggles": "Enabled",
     "esbonio.sphinx.confDir": ""

+ 10 - 0
kernel/common/compiler.h

@@ -0,0 +1,10 @@
+#pragma once
+
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+
+#ifndef barrier
+// 内存屏障
+#define barrier() __asm__ __volatile__("" :: \
+                                           : "memory");
+#endif

+ 14 - 0
kernel/debug/bug.h

@@ -0,0 +1,14 @@
+#pragma once
+#include <common/compiler.h>
+#include <common/kprint.h>
+
+/**
+ * @brief 当condition为true时输出警告信息
+ * 
+ */
+#define WARN_ON(condition) ({                                   \
+    int __ret_warn_on = !!(condition);                          \
+    if (unlikely(__ret_warn_on))                                \
+        kwarn("Assertion failed at %s:%d", __FILE__, __LINE__); \
+    unlikely(__ret_warn_on);                                    \
+})