stos: Add kernel knotting impl

Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
Chloe M.
2026-06-23 05:36:10 +00:00
parent d2596979a2
commit 81d5f13a30
4 changed files with 136 additions and 1 deletions
+51
View File
@@ -0,0 +1,51 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: Fucks and knots the kernel
* Author: Chloe M.
*/
.text
.globl KeKnot
KeKnot:
/*
* When we are called here, the kernel is to be fucked with
* the most love and care we can put out before we knot it
* and fill it with warm cum...
*/
cli /* Don't get interrupted */
cld /* Just in case */
/*
* We don't want another processor to attempt to fuck the kernel
* while we are already knotting it to avoid it becoming too
* cumdrunk and misbehaving further. If another processor attempts
* to do so, knot and lock them hard, because that's what needy
* cores get :3
*/
mov $1, %rax /* Prepare the lock */
xchg %rax, MpLock /* Ah!~ Fuck~ @.@ */
or %rax, %rax /* Are we another core? */
jnz 1f
/*
* The kernel is being extra needy and may or may not have
* kicked its paws into its stack. It's okay little kernel,
* we'll give you a new stack that's safe and cozy to lay in
* before the knotting begins!
*/
lea KnotStackTop(%rip), %rsp
call KiKnot /* Enter the main knot handler */
1: mfence /* Drain those caches~ */
.Lock:
cli /* Don't get interrupted */
hlt /* Get knotted >:3 */
jmp .Lock
.section .data
MpLock: .quad 0
KnotStack: .fill 4096, 1, 0
KnotStackTop:
+34
View File
@@ -0,0 +1,34 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: Fucks and knots the kernel
* Author: Chloe M.
*/
#ifndef _KE_KNOT_H_
#define _KE_KNOT_H_ 1
#include <stdef.h>
/*
* Valid knot reasons
*
* @KNOT_MISC: Misc. reason
* @KNOT_UNBOUND_RSRC: Unbounded resource
*/
typedef enum {
KNOT_MISC,
KNOT_UNBOUND_RSRC
} KNOT_REASON;
/*
* Fuck and knot the kernel if it is misbehaving
*
* @Reason: Reason of knotting
* @Fmt: Format string
* @<...>: Variadic arguments
*/
VOID KeKnot(KNOT_REASON Reason, const char *Fmt, ...);
#endif /* !_KE_KNOT_H_ */
+2 -1
View File
@@ -9,7 +9,8 @@
.SILENT: .SILENT:
include ../../mk/stos.mk include ../../mk/stos.mk
CFILES = $(shell find ../init -name "*.c") CFILES = $(shell ls)
CFILES += $(shell find ../init -name "*.c")
CFILES += $(shell find ../xt -name "*.c") CFILES += $(shell find ../xt -name "*.c")
CFILES += $(shell find ../lib -name "*.c") CFILES += $(shell find ../lib -name "*.c")
CFILES += $(shell find ../drivers -name "*.c") CFILES += $(shell find ../drivers -name "*.c")
+49
View File
@@ -0,0 +1,49 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: Fucks and knots the kernel
* Author: Chloe M.
*/
#include <drivers/bootvid/fbio.h>
#include <ex/trace.h>
#include <ke/knot.h>
#define KNOT_REASON(Reason) \
((Reason) >= NELEM(ReasonTable)) \
? ReasonTable[0] \
: ReasonTable[(Reason)]
/* Reason lookup table */
static const CHAR *ReasonTable[] = {
[KNOT_MISC] = "unspecified reason",
[KNOT_UNBOUND_RSRC] = "unbounded resource"
};
/* Globals */
static CHAR KnotBuf[256];
static va_list Ap;
static BOOTCONS_ATTR KnotAttr = {
.Background = 0x000080,
.Foreground = 0xFFFFFF
};
static CHAR KnotMessage[] = {
"SystemPaw DR has ran into a wittle issue and the kernel pilot kitty\n"
"has suspended the CPU to prevent damage to your machine.\n\n"
"Press and hold the power button until the screen blanks.\n\n"
};
VOID
KiKnot(KNOT_REASON Reason, const CHAR *Fmt, ...)
{
va_start(Ap, Fmt);
FmtPrintf(KnotBuf, sizeof(KnotBuf), Fmt, Ap);
BootVidInitCons(&KnotAttr);
TRACE("\033[H\033[2J");
TRACE(KnotMessage);
TRACE("knot: %s", KnotBuf);
TRACE("reason: %s\n", KNOT_REASON(Reason));
}