mirror of
https://github.com/valentderah/totk-pc-recomp.git
synced 2026-11-11 09:51:02 +00:00
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>
41 lines
2.0 KiB
C
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)
|