Files
totk-pc-recomp/runtime/kernel.h
T
Valiantsin DzerakhandClaude Opus 5.5 659a2fa75f Let totk.ini set free_cores again and say loudly that the game crashes with it
Reverts dafc35f: free_cores = 1 in totk.ini lifts the virtual core gate again, as in 0.2.8. The mode stays as an
experiment, and every place a player meets it says the game crashes: totk.ini.example, a WARNING line in the start log,
and a line under every crash report and FATAL while the gate is off (kern_free_cores_note), so a log from #212 names
the cause at once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 10:10:09 +03:00

41 lines
2.0 KiB
C

// Kernel internals shared by kernel.c, svc.c and the kernel probe (kernel_probe.c). Not part of the host.h contract.
#pragma once
#include "host.h"
// Horizon kernel results (module 1).
#define KERN_R_OUT_OF_RESOURCE 0xCE01u
#define KERN_R_INVALID_STATE_MEM 0xD401u
#define KERN_R_BAD_HANDLE 0xE401u
#define KERN_R_TIMEOUT 0xEA01u
#define KERN_R_CANCELLED 0xEC01u
#define KERN_R_INVALID_ENUM 0xF001u
#define KERN_R_BAD_STATE 0xFA01u
#define KERN_H_CURRENT_THREAD 0xFFFF8000u
#define KERN_WAITERS_BIT 0x40000000u
// Fiber overrides, linked as HOST_OVERRIDE entries in kernel.c.
#define KERN_SYM_INITIALIZE_FIBER "_ZN2nn2os15InitializeFiberEPNS0_9FiberTypeEPFS2_PvES3_S3_mi"
#define KERN_SYM_FINALIZE_FIBER "_ZN2nn2os13FinalizeFiberEPNS0_9FiberTypeE"
#define KERN_SYM_SWITCH_TO_FIBER "_ZN2nn2os13SwitchToFiberEPNS0_9FiberTypeE"
#define KERN_SYM_GET_CURRENT_FIBER "_ZN2nn2os15GetCurrentFiberEv"
void kern_fiber_initialize(Cpu *c);
void kern_fiber_finalize(Cpu *c);
void kern_fiber_switch(Cpu *c);
void kern_fiber_current(Cpu *c);
uint64_t kern_threads_created(void);
// The guest frame-pointer chain from c->x[29] to stderr.
void kern_backtrace(const Cpu *c);
// ---- probe support
enum { KERN_WAIT_NONE, KERN_WAIT_LOCK, KERN_WAIT_CONDVAR, KERN_WAIT_ADDRESS, KERN_WAIT_SYNC };
#define KERN_THREAD_EXITED 100
int kern_thread_state(uint32_t handle); // KERN_WAIT_*, KERN_THREAD_EXITED, or -1 for a bad handle
void kern_core_stats(int *held_now, int *held_max); // virtual-core holders now and the most ever at once
void kern_core_stats_reset(void);
extern volatile int kern_test_cv_old_order; // WaitProcessWideKeyAtomic: release the lock before setting
// the key (MNG's pre-fix order, the negative control)
extern void (*volatile kern_test_cv_hook)(void); // called right after the lock release, holding the kernel lock
extern void (*volatile svc_test_exit_hook)(unsigned code); // svc 0x07 calls it instead of ExitProcess (probes)