summaryrefslogtreecommitdiff
path: root/Kernel/Library/Assertions.h
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Library/Assertions.h')
-rw-r--r--Kernel/Library/Assertions.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/Kernel/Library/Assertions.h b/Kernel/Library/Assertions.h
new file mode 100644
index 0000000000..aa0094f5e2
--- /dev/null
+++ b/Kernel/Library/Assertions.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/Platform.h>
+
+#define __STRINGIFY_HELPER(x) #x
+#define __STRINGIFY(x) __STRINGIFY_HELPER(x)
+
+[[noreturn]] void __assertion_failed(char const* msg, char const* file, unsigned line, char const* func);
+#define VERIFY(expr) \
+ do { \
+ if (!static_cast<bool>(expr)) [[unlikely]] \
+ __assertion_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ } while (0)
+
+#define VERIFY_NOT_REACHED() __assertion_failed("not reached", __FILE__, __LINE__, __PRETTY_FUNCTION__)
+
+extern "C" {
+[[noreturn]] void _abort();
+[[noreturn]] void abort();
+}
+
+#define TODO() __assertion_failed("TODO", __FILE__, __LINE__, __PRETTY_FUNCTION__)
+#define TODO_AARCH64() __assertion_failed("TODO_AARCH64", __FILE__, __LINE__, __PRETTY_FUNCTION__)
+
+#define VERIFY_INTERRUPTS_DISABLED() VERIFY(!(Processor::are_interrupts_enabled()))
+#define VERIFY_INTERRUPTS_ENABLED() VERIFY(Processor::are_interrupts_enabled())