diff options
Diffstat (limited to 'Kernel/Library/Assertions.h')
-rw-r--r-- | Kernel/Library/Assertions.h | 32 |
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()) |