aboutsummaryrefslogtreecommitdiff
path: root/libk
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2021-02-22 09:59:58 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2021-02-22 09:59:58 +0200
commitfb9d73ff32de7c83552707622512be0ef1db241c (patch)
tree2187542a85c998c43952ecf39c8f9598ba8f6929 /libk
parentKconfig (diff)
downloadkernel.cpp-fb9d73ff32de7c83552707622512be0ef1db241c.tar.xz
Enable interrupts
Diffstat (limited to 'libk')
-rw-r--r--libk/makefile3
-rw-r--r--libk/stdlib/abort.cc15
-rw-r--r--libk/stdlib/console.cc12
3 files changed, 17 insertions, 13 deletions
diff --git a/libk/makefile b/libk/makefile
index 0f75e5a..966caae 100644
--- a/libk/makefile
+++ b/libk/makefile
@@ -1,3 +1,4 @@
-CXX_OBJ += libk/string/string.o libk/string/integerview.o libk/stdlib/console.o
+CXX_OBJ += libk/string/string.o libk/string/integerview.o \
+ libk/stdlib/abort.o libk/stdlib/console.o
CXX_TEST_OBJ += libk/types/test.o libk/string/test.o
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();
+}
diff --git a/libk/stdlib/console.cc b/libk/stdlib/console.cc
index a234e6b..c076297 100644
--- a/libk/stdlib/console.cc
+++ b/libk/stdlib/console.cc
@@ -13,15 +13,3 @@ void Console::set(Console* ptr) {
Iterator<Console*> Console::begin() {
return Iterator<Console*>(global_console, last_console);
}
-
-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
- */
- while (true) {
- asm volatile("nop");
- }
- __builtin_unreachable();
-}