blob: b55da493ae272d8f7735a3ac21180224d9e3157e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include "arch/video/vga/text.hpp"
namespace teachos::arch::exception_handling
{
auto assert(bool condition, char const * message) -> void
{
if (condition)
{
return;
}
video::vga::text::write("Assert failed: ", video::vga::text::common_attributes::green_on_black);
video::vga::text::write(message, video::vga::text::common_attributes::green_on_black);
for (;;)
{
// Trick the compiler into thinking the variable is changes at run time,
// to prevent the while loop being optimized away
// See
// https://stackoverflow.com/questions/9495856/how-to-prevent-g-from-optimizing-out-a-loop-controlled-by-a-variable-that-can
// for more information.
asm volatile("" : "+g"(condition));
}
}
} // namespace teachos::arch::exception_handling
|