summaryrefslogtreecommitdiff
path: root/src/kernel/arch/i386/boot.s
diff options
context:
space:
mode:
authordzwdz2021-10-15 17:25:12 +0200
committerdzwdz2021-10-15 17:25:12 +0200
commit946313af5905ac3679c1f496f000ba077ce038f0 (patch)
treebfed3f993ae97c3a72a945382c8686ad0ad2b832 /src/kernel/arch/i386/boot.s
parentd994f9517785aeba4a07ec8c4aecf6d5d969ab97 (diff)
kernel: quit QEMU once there are no running processes left
Diffstat (limited to 'src/kernel/arch/i386/boot.s')
-rw-r--r--src/kernel/arch/i386/boot.s10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/kernel/arch/i386/boot.s b/src/kernel/arch/i386/boot.s
index 0101b40..9fd7d5d 100644
--- a/src/kernel/arch/i386/boot.s
+++ b/src/kernel/arch/i386/boot.s
@@ -7,6 +7,16 @@ _start:
push %ebx // address of the Multiboot struct
call kmain_early
+.global cpu_shutdown
+.type cpu_shutdown, @function
+cpu_shutdown:
+/* This quits QEMU. While I couldn't find this officially documented anywhere,
+ * it is used by QEMU in tests/tcg/i386/system/boot.S (as of commit 40d6ee), so
+ * I assume that this is safe-ish to use */
+ mov $0x604, %edx
+ mov $0x2000, %eax
+ outw %ax, %dx
+
.global halt_cpu
.type halt_cpu, @function
halt_cpu: