aboutsummaryrefslogtreecommitdiff
path: root/libk/stdlib/abort.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libk/stdlib/abort.cc')
-rw-r--r--libk/stdlib/abort.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/libk/stdlib/abort.cc b/libk/stdlib/abort.cc
new file mode 100644
index 0000000..56ca7ee
--- /dev/null
+++ b/libk/stdlib/abort.cc
@@ -0,0 +1,15 @@
+#include "stdlib.h"
+
+void abort() {
+ /*
+ * On gcc, a 'while(true) {}' will infinitely loop
+ * but clang will optimize it away on -O2 if it's empty
+ * therefore, add no-op
+ */
+
+ asm volatile("cli");
+ while (true) {
+ asm volatile("hlt");
+ }
+ __builtin_unreachable();
+}