Rename "SafeFunction" macro to "NoSecurityAnalysis"

This commit is contained in:
EnderIce2 2024-02-04 04:31:30 +02:00
parent 11221b205a
commit b0575ba4f2
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
31 changed files with 157 additions and 156 deletions

View File

@ -84,7 +84,7 @@ __naked __used __no_stack_protector void InitLimine()
asmv("jmp InitLimineAfterStack"); asmv("jmp InitLimineAfterStack");
} }
SafeFunction NIF void InitLimineAfterStack() nsa NIF void InitLimineAfterStack()
{ {
struct BootInfo binfo = {}; struct BootInfo binfo = {};
struct limine_bootloader_info_response *BootloaderInfoResponse = BootloaderInfoRequest.response; struct limine_bootloader_info_response *BootloaderInfoResponse = BootloaderInfoRequest.response;

View File

@ -38,14 +38,14 @@ union __attribute__((packed)) PageTableEntry
}; };
uint64_t raw; uint64_t raw;
__always_inline inline SafeFunction NIF void SetAddress(uintptr_t _Address) __always_inline inline nsa NIF void SetAddress(uintptr_t _Address)
{ {
_Address &= 0x000000FFFFFFFFFF; _Address &= 0x000000FFFFFFFFFF;
this->raw &= 0xFFF0000000000FFF; this->raw &= 0xFFF0000000000FFF;
this->raw |= (_Address << 12); this->raw |= (_Address << 12);
} }
__always_inline inline SafeFunction NIF uintptr_t GetAddress() { return (this->raw & 0x000FFFFFFFFFF000) >> 12; } __always_inline inline nsa NIF uintptr_t GetAddress() { return (this->raw & 0x000FFFFFFFFFF000) >> 12; }
}; };
struct __attribute__((packed)) PageTableEntryPtr struct __attribute__((packed)) PageTableEntryPtr
@ -72,14 +72,14 @@ union __attribute__((packed)) PageDirectoryEntry
}; };
uint64_t raw; uint64_t raw;
__always_inline inline SafeFunction NIF void SetAddress(uintptr_t _Address) __always_inline inline nsa NIF void SetAddress(uintptr_t _Address)
{ {
_Address &= 0x000000FFFFFFFFFF; _Address &= 0x000000FFFFFFFFFF;
this->raw &= 0xFFF0000000000FFF; this->raw &= 0xFFF0000000000FFF;
this->raw |= (_Address << 12); this->raw |= (_Address << 12);
} }
__always_inline inline SafeFunction NIF uintptr_t GetAddress() { return (this->raw & 0x000FFFFFFFFFF000) >> 12; } __always_inline inline nsa NIF uintptr_t GetAddress() { return (this->raw & 0x000FFFFFFFFFF000) >> 12; }
}; };
struct __attribute__((packed)) PageDirectoryEntryPtr struct __attribute__((packed)) PageDirectoryEntryPtr
@ -106,14 +106,14 @@ union __attribute__((packed)) PageDirectoryPointerTableEntry
}; };
uint64_t raw; uint64_t raw;
__always_inline inline SafeFunction NIF void SetAddress(uintptr_t _Address) __always_inline inline nsa NIF void SetAddress(uintptr_t _Address)
{ {
_Address &= 0x000000FFFFFFFFFF; _Address &= 0x000000FFFFFFFFFF;
this->raw &= 0xFFF0000000000FFF; this->raw &= 0xFFF0000000000FFF;
this->raw |= (_Address << 12); this->raw |= (_Address << 12);
} }
__always_inline inline SafeFunction NIF uintptr_t GetAddress() { return (this->raw & 0x000FFFFFFFFFF000) >> 12; } __always_inline inline nsa NIF uintptr_t GetAddress() { return (this->raw & 0x000FFFFFFFFFF000) >> 12; }
}; };
struct __attribute__((packed)) PageDirectoryPointerTableEntryPtr struct __attribute__((packed)) PageDirectoryPointerTableEntryPtr
@ -140,14 +140,14 @@ union __attribute__((packed)) PageMapLevel4
}; };
uint64_t raw; uint64_t raw;
__always_inline inline SafeFunction NIF void SetAddress(uintptr_t _Address) __always_inline inline nsa NIF void SetAddress(uintptr_t _Address)
{ {
_Address &= 0x000000FFFFFFFFFF; _Address &= 0x000000FFFFFFFFFF;
this->raw &= 0xFFF0000000000FFF; this->raw &= 0xFFF0000000000FFF;
this->raw |= (_Address << 12); this->raw |= (_Address << 12);
} }
__always_inline inline SafeFunction NIF uintptr_t GetAddress() { return (this->raw & 0x000FFFFFFFFFF000) >> 12; } __always_inline inline nsa NIF uintptr_t GetAddress() { return (this->raw & 0x000FFFFFFFFFF000) >> 12; }
}; };
struct PageTable4 struct PageTable4
@ -161,7 +161,7 @@ extern uintptr_t _kernel_start, _kernel_end;
__attribute__((section(".bootstrap.data"))) static PageTable4 *BPTable = (PageTable4 *)BootPageTable; __attribute__((section(".bootstrap.data"))) static PageTable4 *BPTable = (PageTable4 *)BootPageTable;
__attribute__((section(".bootstrap.data"))) static size_t BPT_Allocated = 0x4000; __attribute__((section(".bootstrap.data"))) static size_t BPT_Allocated = 0x4000;
__always_inline inline SafeFunction NIF void *RequestPage() __always_inline inline nsa NIF void *RequestPage()
{ {
void *Page = (void *)(BootPageTable + BPT_Allocated); void *Page = (void *)(BootPageTable + BPT_Allocated);
BPT_Allocated += 0x1000; BPT_Allocated += 0x1000;
@ -180,7 +180,7 @@ public:
uintptr_t PDPTEIndex = 0; uintptr_t PDPTEIndex = 0;
uintptr_t PDEIndex = 0; uintptr_t PDEIndex = 0;
uintptr_t PTEIndex = 0; uintptr_t PTEIndex = 0;
__always_inline inline SafeFunction NIF PageMapIndexer(uintptr_t VirtualAddress) __always_inline inline nsa NIF PageMapIndexer(uintptr_t VirtualAddress)
{ {
uintptr_t Address = VirtualAddress; uintptr_t Address = VirtualAddress;
Address >>= 12; Address >>= 12;
@ -194,7 +194,7 @@ public:
} }
}; };
__attribute__((section(".bootstrap.text"))) SafeFunction NIF void MB2_64_Map(void *VirtualAddress, void *PhysicalAddress, uint64_t Flags) __attribute__((section(".bootstrap.text"))) nsa NIF void MB2_64_Map(void *VirtualAddress, void *PhysicalAddress, uint64_t Flags)
{ {
PageMapIndexer Index = PageMapIndexer((uintptr_t)VirtualAddress); PageMapIndexer Index = PageMapIndexer((uintptr_t)VirtualAddress);
// Clear any flags that are not 1 << 0 (Present) - 1 << 5 (Accessed) because rest are for page table entries only // Clear any flags that are not 1 << 0 (Present) - 1 << 5 (Accessed) because rest are for page table entries only
@ -280,7 +280,7 @@ __attribute__((section(".bootstrap.text"))) SafeFunction NIF void MB2_64_Map(voi
: "memory"); : "memory");
} }
EXTERNC __attribute__((section(".bootstrap.text"))) SafeFunction NIF __attribute__((section(".bootstrap.text"))) void UpdatePageTable64() EXTERNC __attribute__((section(".bootstrap.text"))) nsa NIF __attribute__((section(".bootstrap.text"))) void UpdatePageTable64()
{ {
BPTable = (PageTable4 *)BootPageTable; BPTable = (PageTable4 *)BootPageTable;

View File

@ -120,7 +120,7 @@ namespace GlobalDescriptorTable
void *CPUStackPointer[MAX_CPU]; void *CPUStackPointer[MAX_CPU];
SafeFunction void Init(int Core) nsa void Init(int Core)
{ {
GDTEntries[Core] = GDTEntriesTemplate; GDTEntries[Core] = GDTEntriesTemplate;
gdt[Core] = gdt[Core] =
@ -194,7 +194,7 @@ namespace GlobalDescriptorTable
debug("Global Descriptor Table initialized"); debug("Global Descriptor Table initialized");
} }
SafeFunction void SetKernelStack(void *Stack) nsa void SetKernelStack(void *Stack)
{ {
long CPUID = GetCurrentCPU()->ID; long CPUID = GetCurrentCPU()->ID;
if (Stack != nullptr) if (Stack != nullptr)

View File

@ -46,9 +46,9 @@ std::atomic_bool CPUEnabled = false;
#pragma GCC diagnostic ignored "-Wmissing-field-initializers" #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
static __aligned(PAGE_SIZE) CPUData CPUs[MAX_CPU] = {0}; static __aligned(PAGE_SIZE) CPUData CPUs[MAX_CPU] = {0};
SafeFunction CPUData *GetCPU(long id) { return &CPUs[id]; } nsa CPUData *GetCPU(long id) { return &CPUs[id]; }
SafeFunction CPUData *GetCurrentCPU() nsa CPUData *GetCurrentCPU()
{ {
if (unlikely(!Interrupts::apic[0])) if (unlikely(!Interrupts::apic[0]))
return &CPUs[0]; /* No APIC means we are on the BSP. */ return &CPUs[0]; /* No APIC means we are on the BSP. */

View File

@ -155,7 +155,7 @@ namespace GlobalDescriptorTable
void *CPUStackPointer[MAX_CPU]; void *CPUStackPointer[MAX_CPU];
SafeFunction void Init(int Core) nsa void Init(int Core)
{ {
memcpy(&GDTEntries[Core], &GDTEntriesTemplate, sizeof(GlobalDescriptorTableEntries)); memcpy(&GDTEntries[Core], &GDTEntriesTemplate, sizeof(GlobalDescriptorTableEntries));
gdt[Core] = {.Length = sizeof(GlobalDescriptorTableEntries) - 1, .Entries = &GDTEntries[Core]}; gdt[Core] = {.Length = sizeof(GlobalDescriptorTableEntries) - 1, .Entries = &GDTEntries[Core]};
@ -253,7 +253,7 @@ namespace GlobalDescriptorTable
debug("Global Descriptor Table initialized"); debug("Global Descriptor Table initialized");
} }
SafeFunction void SetKernelStack(void *Stack) nsa void SetKernelStack(void *Stack)
{ {
stub; stub;
} }

View File

@ -43,9 +43,9 @@ std::atomic_bool CPUEnabled = false;
#pragma GCC diagnostic ignored "-Wmissing-field-initializers" #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
static __aligned(PAGE_SIZE) CPUData CPUs[MAX_CPU] = {0}; static __aligned(PAGE_SIZE) CPUData CPUs[MAX_CPU] = {0};
SafeFunction CPUData *GetCPU(long id) { return &CPUs[id]; } nsa CPUData *GetCPU(long id) { return &CPUs[id]; }
SafeFunction CPUData *GetCurrentCPU() nsa CPUData *GetCurrentCPU()
{ {
if (unlikely(!Interrupts::apic[0])) if (unlikely(!Interrupts::apic[0]))
return &CPUs[0]; /* No APIC means we are on the BSP. */ return &CPUs[0]; /* No APIC means we are on the BSP. */

View File

@ -42,79 +42,79 @@ static const char *PageFaultDescriptions[8] = {
"User process tried to write to a non-present page entry\n", "User process tried to write to a non-present page entry\n",
"User process tried to write a page and caused a protection fault\n"}; "User process tried to write a page and caused a protection fault\n"};
SafeFunction void DivideByZeroExceptionHandler(CPU::TrapFrame *Frame) nsa void DivideByZeroExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Divide by zero exception\n"); fixme("Divide by zero exception\n");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void DebugExceptionHandler(CPU::TrapFrame *Frame) nsa void DebugExceptionHandler(CPU::TrapFrame *Frame)
{ {
CrashHandler::EHPrint("Kernel triggered debug exception.\n"); CrashHandler::EHPrint("Kernel triggered debug exception.\n");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void NonMaskableInterruptExceptionHandler(CPU::TrapFrame *Frame) nsa void NonMaskableInterruptExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("NMI exception"); fixme("NMI exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void BreakpointExceptionHandler(CPU::TrapFrame *Frame) nsa void BreakpointExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Breakpoint exception"); fixme("Breakpoint exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void OverflowExceptionHandler(CPU::TrapFrame *Frame) nsa void OverflowExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Overflow exception"); fixme("Overflow exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void BoundRangeExceptionHandler(CPU::TrapFrame *Frame) nsa void BoundRangeExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Bound range exception"); fixme("Bound range exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void InvalidOpcodeExceptionHandler(CPU::TrapFrame *Frame) nsa void InvalidOpcodeExceptionHandler(CPU::TrapFrame *Frame)
{ {
CrashHandler::EHPrint("Kernel tried to execute an invalid opcode.\n"); CrashHandler::EHPrint("Kernel tried to execute an invalid opcode.\n");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void DeviceNotAvailableExceptionHandler(CPU::TrapFrame *Frame) nsa void DeviceNotAvailableExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Device not available exception"); fixme("Device not available exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void DoubleFaultExceptionHandler(CPU::TrapFrame *Frame) nsa void DoubleFaultExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Double fault exception"); fixme("Double fault exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void CoprocessorSegmentOverrunExceptionHandler(CPU::TrapFrame *Frame) nsa void CoprocessorSegmentOverrunExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Coprocessor segment overrun exception"); fixme("Coprocessor segment overrun exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void InvalidTSSExceptionHandler(CPU::TrapFrame *Frame) nsa void InvalidTSSExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Invalid TSS exception"); fixme("Invalid TSS exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void SegmentNotPresentExceptionHandler(CPU::TrapFrame *Frame) nsa void SegmentNotPresentExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Segment not present exception"); fixme("Segment not present exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void StackFaultExceptionHandler(CPU::TrapFrame *Frame) nsa void StackFaultExceptionHandler(CPU::TrapFrame *Frame)
{ {
CPU::x64::SelectorErrorCode SelCode = {.raw = Frame->ErrorCode}; CPU::x64::SelectorErrorCode SelCode = {.raw = Frame->ErrorCode};
#if defined(a64) #if defined(a64)
@ -129,7 +129,7 @@ SafeFunction void StackFaultExceptionHandler(CPU::TrapFrame *Frame)
CrashHandler::EHPrint("Error code: %#lx\n", Frame->ErrorCode); CrashHandler::EHPrint("Error code: %#lx\n", Frame->ErrorCode);
} }
SafeFunction void GeneralProtectionExceptionHandler(CPU::TrapFrame *Frame) nsa void GeneralProtectionExceptionHandler(CPU::TrapFrame *Frame)
{ {
CPU::x64::SelectorErrorCode SelCode = {.raw = Frame->ErrorCode}; CPU::x64::SelectorErrorCode SelCode = {.raw = Frame->ErrorCode};
// switch (SelCode.Table) // switch (SelCode.Table)
@ -156,7 +156,7 @@ SafeFunction void GeneralProtectionExceptionHandler(CPU::TrapFrame *Frame)
CrashHandler::EHPrint("Index: %#x\n", SelCode.Idx); CrashHandler::EHPrint("Index: %#x\n", SelCode.Idx);
} }
SafeFunction void PageFaultExceptionHandler(CPU::TrapFrame *Frame) nsa void PageFaultExceptionHandler(CPU::TrapFrame *Frame)
{ {
CPU::x64::PageFaultErrorCode params = {.raw = (uint32_t)Frame->ErrorCode}; CPU::x64::PageFaultErrorCode params = {.raw = (uint32_t)Frame->ErrorCode};
#if defined(a64) #if defined(a64)
@ -305,43 +305,43 @@ SafeFunction void PageFaultExceptionHandler(CPU::TrapFrame *Frame)
#endif #endif
} }
SafeFunction void x87FloatingPointExceptionHandler(CPU::TrapFrame *Frame) nsa void x87FloatingPointExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("x87 floating point exception"); fixme("x87 floating point exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void AlignmentCheckExceptionHandler(CPU::TrapFrame *Frame) nsa void AlignmentCheckExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Alignment check exception"); fixme("Alignment check exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void MachineCheckExceptionHandler(CPU::TrapFrame *Frame) nsa void MachineCheckExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Machine check exception"); fixme("Machine check exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void SIMDFloatingPointExceptionHandler(CPU::TrapFrame *Frame) nsa void SIMDFloatingPointExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("SIMD floating point exception"); fixme("SIMD floating point exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void VirtualizationExceptionHandler(CPU::TrapFrame *Frame) nsa void VirtualizationExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Virtualization exception"); fixme("Virtualization exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void SecurityExceptionHandler(CPU::TrapFrame *Frame) nsa void SecurityExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Security exception"); fixme("Security exception");
UNUSED(Frame); UNUSED(Frame);
} }
SafeFunction void UnknownExceptionHandler(CPU::TrapFrame *Frame) nsa void UnknownExceptionHandler(CPU::TrapFrame *Frame)
{ {
fixme("Unknown exception"); fixme("Unknown exception");
UNUSED(Frame); UNUSED(Frame);

View File

@ -51,13 +51,13 @@ namespace CrashHandler
int SBIdx = 255; int SBIdx = 255;
CrashKeyboardDriver *kbd; CrashKeyboardDriver *kbd;
SafeFunction void printfWrapper(char c, void *unused) nsa void printfWrapper(char c, void *unused)
{ {
Display->Print(c, SBIdx, true); Display->Print(c, SBIdx, true);
UNUSED(unused); UNUSED(unused);
} }
SafeFunction void EHPrint(const char *Format, ...) nsa void EHPrint(const char *Format, ...)
{ {
va_list args; va_list args;
va_start(args, Format); va_start(args, Format);
@ -65,7 +65,7 @@ namespace CrashHandler
va_end(args); va_end(args);
} }
SafeFunction void EHDumpData(void *Address, unsigned long Length) nsa void EHDumpData(void *Address, unsigned long Length)
{ {
EHPrint("-------------------------------------------------------------------------\n"); EHPrint("-------------------------------------------------------------------------\n");
Display->SetBuffer(SBIdx); Display->SetBuffer(SBIdx);
@ -101,7 +101,7 @@ namespace CrashHandler
Display->SetBuffer(SBIdx); Display->SetBuffer(SBIdx);
} }
SafeFunction char *TrimWhiteSpace(char *str) nsa char *TrimWhiteSpace(char *str)
{ {
char *end; char *end;
while (*str == ' ') while (*str == ' ')
@ -117,7 +117,7 @@ namespace CrashHandler
CRData crashdata{}; CRData crashdata{};
SafeFunction void DisplayTopOverlay() nsa void DisplayTopOverlay()
{ {
Video::ScreenBuffer *sb = Display->GetBuffer(SBIdx); Video::ScreenBuffer *sb = Display->GetBuffer(SBIdx);
Video::Font *f = Display->GetCurrentFont(); Video::Font *f = Display->GetCurrentFont();
@ -252,7 +252,7 @@ namespace CrashHandler
} }
} }
SafeFunction void DisplayBottomOverlay() nsa void DisplayBottomOverlay()
{ {
Video::ScreenBuffer *sb = Display->GetBuffer(SBIdx); Video::ScreenBuffer *sb = Display->GetBuffer(SBIdx);
Video::Font *f = Display->GetCurrentFont(); Video::Font *f = Display->GetCurrentFont();
@ -266,7 +266,7 @@ namespace CrashHandler
EHPrint("\eAAAAAA> \eFAFAFA"); EHPrint("\eAAAAAA> \eFAFAFA");
} }
SafeFunction void ArrowInput(uint8_t key) nsa void ArrowInput(uint8_t key)
{ {
switch (key) switch (key)
{ {
@ -337,7 +337,7 @@ namespace CrashHandler
Display->SetBuffer(SBIdx); Display->SetBuffer(SBIdx);
} }
SafeFunction void UserInput(char *Input) nsa void UserInput(char *Input)
{ {
SmartCriticalSection(UserInputLock); SmartCriticalSection(UserInputLock);
Display->ClearBuffer(SBIdx); Display->ClearBuffer(SBIdx);
@ -816,7 +816,7 @@ namespace CrashHandler
Display->SetBuffer(SBIdx); Display->SetBuffer(SBIdx);
} }
SafeFunction void StopAllCores() nsa void StopAllCores()
{ {
#if defined(a86) #if defined(a86)
/* FIXME: Can't send IPIs to other cores /* FIXME: Can't send IPIs to other cores
@ -862,7 +862,7 @@ namespace CrashHandler
#endif #endif
} }
SafeFunction inline bool Handle_x86_64(CPU::TrapFrame *Frame) nsa inline bool Handle_x86_64(CPU::TrapFrame *Frame)
{ {
#ifdef a64 #ifdef a64
trace("Exception at %#lx(%s)", Frame->rip, trace("Exception at %#lx(%s)", Frame->rip,
@ -960,7 +960,7 @@ namespace CrashHandler
return false; return false;
} }
SafeFunction inline bool Handle_x86_32(CPU::TrapFrame *Frame) nsa inline bool Handle_x86_32(CPU::TrapFrame *Frame)
{ {
#ifdef a32 #ifdef a32
trace("Exception at %#lx(%s)", Frame->eip, trace("Exception at %#lx(%s)", Frame->eip,
@ -1059,7 +1059,7 @@ namespace CrashHandler
return false; return false;
} }
SafeFunction inline void Print_x86_64(CPU::TrapFrame *Frame) nsa inline void Print_x86_64(CPU::TrapFrame *Frame)
{ {
#ifdef a64 #ifdef a64
CPU::x64::CR0 cr0 = CPU::x64::readcr0(); CPU::x64::CR0 cr0 = CPU::x64::readcr0();
@ -1132,7 +1132,7 @@ namespace CrashHandler
#endif #endif
} }
SafeFunction inline void Print_x86_32(CPU::TrapFrame *Frame) nsa inline void Print_x86_32(CPU::TrapFrame *Frame)
{ {
#ifdef a32 #ifdef a32
CPU::x32::CR0 cr0 = CPU::x32::readcr0(); CPU::x32::CR0 cr0 = CPU::x32::readcr0();
@ -1192,7 +1192,7 @@ namespace CrashHandler
#endif #endif
} }
SafeFunction void Handle(void *Data) nsa void Handle(void *Data)
{ {
// TODO: SUPPORT SMP // TODO: SUPPORT SMP
CPU::Interrupts(CPU::Disable); CPU::Interrupts(CPU::Disable);

View File

@ -236,7 +236,7 @@ namespace CrashHandler
int BackSpaceLimit = 0; int BackSpaceLimit = 0;
static char UserInputBuffer[1024]; static char UserInputBuffer[1024];
SafeFunction void CrashKeyboardDriver::OnInterruptReceived(CPU::TrapFrame *Frame) nsa void CrashKeyboardDriver::OnInterruptReceived(CPU::TrapFrame *Frame)
{ {
#if defined(a86) #if defined(a86)
UNUSED(Frame); UNUSED(Frame);

View File

@ -34,7 +34,7 @@
namespace CrashHandler namespace CrashHandler
{ {
SafeFunction void DisplayConsoleScreen(CRData data) nsa void DisplayConsoleScreen(CRData data)
{ {
EHPrint("TODO"); EHPrint("TODO");
UNUSED(data); UNUSED(data);

View File

@ -34,7 +34,7 @@
namespace CrashHandler namespace CrashHandler
{ {
SafeFunction void DisplayDetailsScreen(CRData data) nsa void DisplayDetailsScreen(CRData data)
{ {
if (data.Process) if (data.Process)
EHPrint("\e7981FCCurrent Process: %s(%ld)\n", EHPrint("\e7981FCCurrent Process: %s(%ld)\n",

View File

@ -44,7 +44,7 @@ static const char *PagefaultDescriptions[8] = {
namespace CrashHandler namespace CrashHandler
{ {
SafeFunction void DisplayMainScreen(CRData data) nsa void DisplayMainScreen(CRData data)
{ {
CPU::TrapFrame *Frame = data.Frame; CPU::TrapFrame *Frame = data.Frame;

View File

@ -35,7 +35,7 @@
namespace CrashHandler namespace CrashHandler
{ {
SafeFunction void DisplayStackFrameScreen(CRData data) nsa void DisplayStackFrameScreen(CRData data)
{ {
EHPrint("\eFAFAFATracing 10 frames..."); EHPrint("\eFAFAFATracing 10 frames...");
TraceFrames(data, 10, KernelSymbolTable, true); TraceFrames(data, 10, KernelSymbolTable, true);

View File

@ -34,7 +34,7 @@
namespace CrashHandler namespace CrashHandler
{ {
SafeFunction void DisplayTasksScreen(CRData data) nsa void DisplayTasksScreen(CRData data)
{ {
const char *StatusColor[] = { const char *StatusColor[] = {
"FF0000", // Unknown "FF0000", // Unknown

View File

@ -42,7 +42,7 @@ namespace CrashHandler
uintptr_t rip; uintptr_t rip;
}; };
SafeFunction void TraceFrames(CRData data, int Count, nsa void TraceFrames(CRData data, int Count,
SymbolResolver::Symbols *SymHandle, SymbolResolver::Symbols *SymHandle,
bool Kernel) bool Kernel)
{ {

View File

@ -32,7 +32,7 @@
#include "../../kernel.h" #include "../../kernel.h"
SafeFunction bool UserModeExceptionHandler(CPU::TrapFrame *Frame) nsa bool UserModeExceptionHandler(CPU::TrapFrame *Frame)
{ {
CPUData *CurCPU = GetCurrentCPU(); CPUData *CurCPU = GetCurrentCPU();
Tasking::PCB *CurProc = CurCPU->CurrentProcess; Tasking::PCB *CurProc = CurCPU->CurrentProcess;

View File

@ -37,7 +37,7 @@
#include "crashhandler.hpp" #include "crashhandler.hpp"
#include "../kernel.h" #include "../kernel.h"
extern "C" SafeFunction void ExceptionHandler(void *Data) extern "C" nsa void ExceptionHandler(void *Data)
{ {
CrashHandler::Handle(Data); CrashHandler::Handle(Data);
} }
@ -192,7 +192,7 @@ namespace Interrupts
#endif #endif
} }
SafeFunction void RemoveAll() nsa void RemoveAll()
{ {
forItr(itr, RegisteredEvents) forItr(itr, RegisteredEvents)
{ {
@ -280,7 +280,7 @@ namespace Interrupts
warn("IRQ%d not found.", InterruptNumber); warn("IRQ%d not found.", InterruptNumber);
} }
extern "C" SafeFunction void MainInterruptHandler(void *Data) extern "C" nsa void MainInterruptHandler(void *Data)
{ {
#if defined(a64) #if defined(a64)
CPU::x64::TrapFrame *Frame = (CPU::x64::TrapFrame *)Data; CPU::x64::TrapFrame *Frame = (CPU::x64::TrapFrame *)Data;

View File

@ -54,7 +54,7 @@ namespace UniversalAsynchronousReceiverTransmitter
/* TODO: Serial Port implementation needs reword. https://wiki.osdev.org/Serial_Ports */ /* TODO: Serial Port implementation needs reword. https://wiki.osdev.org/Serial_Ports */
SafeFunction NIF UART::UART(SerialPorts Port) nsa NIF UART::UART(SerialPorts Port)
{ {
#if defined(a86) #if defined(a86)
if (Port == COMNULL) if (Port == COMNULL)
@ -132,9 +132,9 @@ namespace UniversalAsynchronousReceiverTransmitter
#endif #endif
} }
SafeFunction NIF UART::~UART() {} nsa NIF UART::~UART() {}
SafeFunction NIF void UART::Write(uint8_t Char) nsa NIF void UART::Write(uint8_t Char)
{ {
if (!this->IsAvailable) if (!this->IsAvailable)
return; return;
@ -148,7 +148,7 @@ namespace UniversalAsynchronousReceiverTransmitter
e->OnSent(Char); e->OnSent(Char);
} }
SafeFunction NIF uint8_t UART::Read() nsa NIF uint8_t UART::Read()
{ {
if (!this->IsAvailable) if (!this->IsAvailable)
return 0; return 0;
@ -168,13 +168,13 @@ namespace UniversalAsynchronousReceiverTransmitter
} }
} }
SafeFunction NIF Events::Events(SerialPorts Port) nsa NIF Events::Events(SerialPorts Port)
{ {
this->Port = Port; this->Port = Port;
RegisteredEvents.push_back(this); RegisteredEvents.push_back(this);
} }
SafeFunction NIF Events::~Events() nsa NIF Events::~Events()
{ {
forItr(itr, RegisteredEvents) forItr(itr, RegisteredEvents)
{ {

View File

@ -139,7 +139,7 @@ namespace CPU
/** /**
* @brief Pause the CPU * @brief Pause the CPU
*/ */
SafeFunction static __always_inline inline void Pause(bool Loop = false) nsa static __always_inline inline void Pause(bool Loop = false)
{ {
do do
{ {
@ -154,7 +154,7 @@ namespace CPU
/** /**
* @brief Stop the CPU (infinite loop) * @brief Stop the CPU (infinite loop)
*/ */
SafeFunction __noreturn __used inline void Stop() nsa __noreturn __used inline void Stop()
{ {
#if defined(a86) #if defined(a86)
asmv("CPUStopLoop:\n" asmv("CPUStopLoop:\n"
@ -174,7 +174,7 @@ namespace CPU
/** /**
* @brief Halt the CPU * @brief Halt the CPU
*/ */
SafeFunction static __always_inline inline void Halt(bool Loop = false) nsa static __always_inline inline void Halt(bool Loop = false)
{ {
do do
{ {
@ -444,7 +444,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void lgdt(void *gdt) nsa static inline void lgdt(void *gdt)
{ {
#ifdef a32 #ifdef a32
asmv("lgdt (%0)" asmv("lgdt (%0)"
@ -455,7 +455,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void lidt(void *idt) nsa static inline void lidt(void *idt)
{ {
#ifdef a32 #ifdef a32
asmv("lidt (%0)" asmv("lidt (%0)"
@ -466,7 +466,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void ltr(uint16_t Segment) nsa static inline void ltr(uint16_t Segment)
{ {
#ifdef a32 #ifdef a32
asmv("ltr %0" asmv("ltr %0"
@ -477,7 +477,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void invlpg(void *Address) nsa static inline void invlpg(void *Address)
{ {
#ifdef a32 #ifdef a32
asmv("invlpg (%0)" asmv("invlpg (%0)"
@ -489,7 +489,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void fxsave(void *FXSaveArea) nsa static inline void fxsave(void *FXSaveArea)
{ {
#ifdef a32 #ifdef a32
if (!FXSaveArea) if (!FXSaveArea)
@ -504,7 +504,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void fxrstor(void *FXRstorArea) nsa static inline void fxrstor(void *FXRstorArea)
{ {
#ifdef a32 #ifdef a32
if (!FXRstorArea) if (!FXRstorArea)
@ -831,7 +831,7 @@ namespace CPU
uint8_t xmm[16][16]; uint8_t xmm[16][16];
} __packed __aligned(16); } __packed __aligned(16);
SafeFunction static inline void lgdt(void *gdt) nsa static inline void lgdt(void *gdt)
{ {
#ifdef a64 #ifdef a64
asmv("lgdt (%0)" asmv("lgdt (%0)"
@ -840,7 +840,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void lidt(void *idt) nsa static inline void lidt(void *idt)
{ {
#ifdef a64 #ifdef a64
asmv("lidt (%0)" asmv("lidt (%0)"
@ -849,7 +849,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void ltr(uint16_t Segment) nsa static inline void ltr(uint16_t Segment)
{ {
#ifdef a64 #ifdef a64
asmv("ltr %0" asmv("ltr %0"
@ -858,7 +858,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void invlpg(void *Address) nsa static inline void invlpg(void *Address)
{ {
#ifdef a64 #ifdef a64
asmv("invlpg (%0)" asmv("invlpg (%0)"
@ -877,7 +877,7 @@ namespace CPU
* @param ecx ECX * @param ecx ECX
* @param edx EDX * @param edx EDX
*/ */
SafeFunction static inline void cpuid(uint32_t Function, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) nsa static inline void cpuid(uint32_t Function, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
{ {
#ifdef a64 #ifdef a64
asmv("cpuid" asmv("cpuid"
@ -893,14 +893,14 @@ namespace CPU
* *
* @return uint32_t * @return uint32_t
*/ */
SafeFunction static inline uint32_t GetHighestLeaf() nsa static inline uint32_t GetHighestLeaf()
{ {
uint32_t eax, ebx, ecx, edx; uint32_t eax, ebx, ecx, edx;
cpuid(0x0, &eax, &ebx, &ecx, &edx); cpuid(0x0, &eax, &ebx, &ecx, &edx);
return eax; return eax;
} }
SafeFunction static inline void fxsave(void *FXSaveArea) nsa static inline void fxsave(void *FXSaveArea)
{ {
#ifdef a64 #ifdef a64
if (!FXSaveArea || FXSaveArea >= (char *)0xfffffffffffff000) if (!FXSaveArea || FXSaveArea >= (char *)0xfffffffffffff000)
@ -913,7 +913,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void fxrstor(void *FXRstorArea) nsa static inline void fxrstor(void *FXRstorArea)
{ {
#ifdef a64 #ifdef a64
if (!FXRstorArea || FXRstorArea >= (char *)0xfffffffffffff000) if (!FXRstorArea || FXRstorArea >= (char *)0xfffffffffffff000)

View File

@ -24,7 +24,7 @@ namespace CPU
{ {
namespace MemBar namespace MemBar
{ {
SafeFunction static inline void Barrier() nsa static inline void Barrier()
{ {
#if defined(a86) #if defined(a86)
asmv("" :: asmv("" ::
@ -35,7 +35,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void Fence() nsa static inline void Fence()
{ {
#if defined(a86) #if defined(a86)
asmv("mfence" :: asmv("mfence" ::
@ -46,7 +46,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void StoreFence() nsa static inline void StoreFence()
{ {
#if defined(a86) #if defined(a86)
asmv("sfence" :: asmv("sfence" ::
@ -57,7 +57,7 @@ namespace CPU
#endif #endif
} }
SafeFunction static inline void LoadFence() nsa static inline void LoadFence()
{ {
#if defined(a86) #if defined(a86)
asmv("lfence" :: asmv("lfence" ::

View File

@ -152,7 +152,7 @@ namespace CPU
uint32_t raw; uint32_t raw;
} CR8; } CR8;
#if defined(a32) #if defined(a32)
SafeFunction static inline CR0 readcr0() nsa static inline CR0 readcr0()
{ {
uint32_t Result = 0; uint32_t Result = 0;
asmv("mov %%cr0, %[Result]" asmv("mov %%cr0, %[Result]"
@ -160,7 +160,7 @@ namespace CPU
return (CR0){.raw = Result}; return (CR0){.raw = Result};
} }
SafeFunction static inline CR2 readcr2() nsa static inline CR2 readcr2()
{ {
uint32_t Result = 0; uint32_t Result = 0;
asmv("mov %%cr2, %[Result]" asmv("mov %%cr2, %[Result]"
@ -168,7 +168,7 @@ namespace CPU
return (CR2){.raw = Result}; return (CR2){.raw = Result};
} }
SafeFunction static inline CR3 readcr3() nsa static inline CR3 readcr3()
{ {
uint32_t Result = 0; uint32_t Result = 0;
asmv("mov %%cr3, %[Result]" asmv("mov %%cr3, %[Result]"
@ -176,7 +176,7 @@ namespace CPU
return (CR3){.raw = Result}; return (CR3){.raw = Result};
} }
SafeFunction static inline CR4 readcr4() nsa static inline CR4 readcr4()
{ {
uint32_t Result = 0; uint32_t Result = 0;
asmv("mov %%cr4, %[Result]" asmv("mov %%cr4, %[Result]"
@ -184,7 +184,7 @@ namespace CPU
return (CR4){.raw = Result}; return (CR4){.raw = Result};
} }
SafeFunction static inline CR8 readcr8() nsa static inline CR8 readcr8()
{ {
uint32_t Result = 0; uint32_t Result = 0;
asmv("mov %%cr8, %[Result]" asmv("mov %%cr8, %[Result]"
@ -192,7 +192,7 @@ namespace CPU
return (CR8){.raw = Result}; return (CR8){.raw = Result};
} }
SafeFunction static inline void writecr0(CR0 ControlRegister) nsa static inline void writecr0(CR0 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr0" asmv("mov %[ControlRegister], %%cr0"
: :
@ -200,7 +200,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writecr2(CR2 ControlRegister) nsa static inline void writecr2(CR2 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr2" asmv("mov %[ControlRegister], %%cr2"
: :
@ -208,7 +208,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writecr3(CR3 ControlRegister) nsa static inline void writecr3(CR3 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr3" asmv("mov %[ControlRegister], %%cr3"
: :
@ -216,7 +216,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writecr4(CR4 ControlRegister) nsa static inline void writecr4(CR4 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr4" asmv("mov %[ControlRegister], %%cr4"
: :
@ -224,7 +224,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writecr8(CR8 ControlRegister) nsa static inline void writecr8(CR8 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr8" asmv("mov %[ControlRegister], %%cr8"
: :

View File

@ -401,7 +401,7 @@ namespace CPU
}; };
#if defined(a32) #if defined(a32)
SafeFunction static inline uint64_t rdmsr(uint32_t msr) nsa static inline uint64_t rdmsr(uint32_t msr)
{ {
uint32_t Low, High; uint32_t Low, High;
asmv("rdmsr" asmv("rdmsr"
@ -411,7 +411,7 @@ namespace CPU
return ((uint64_t)Low) | (((uint64_t)High) << 32); return ((uint64_t)Low) | (((uint64_t)High) << 32);
} }
SafeFunction static inline void wrmsr(uint32_t msr, uint64_t Value) nsa static inline void wrmsr(uint32_t msr, uint64_t Value)
{ {
uint32_t Low = (uint32_t)Value, High = (uint32_t)(Value >> 32); uint32_t Low = (uint32_t)Value, High = (uint32_t)(Value >> 32);
asmv("wrmsr" asmv("wrmsr"

View File

@ -190,7 +190,7 @@ namespace CPU
} XCR0; } XCR0;
#if defined(a64) #if defined(a64)
SafeFunction static inline CR0 readcr0() nsa static inline CR0 readcr0()
{ {
uint64_t Result = 0; uint64_t Result = 0;
asmv("mov %%cr0, %[Result]" asmv("mov %%cr0, %[Result]"
@ -198,7 +198,7 @@ namespace CPU
return (CR0){.raw = Result}; return (CR0){.raw = Result};
} }
SafeFunction static inline CR2 readcr2() nsa static inline CR2 readcr2()
{ {
uint64_t Result = 0; uint64_t Result = 0;
asmv("mov %%cr2, %[Result]" asmv("mov %%cr2, %[Result]"
@ -206,7 +206,7 @@ namespace CPU
return (CR2){.raw = Result}; return (CR2){.raw = Result};
} }
SafeFunction static inline CR3 readcr3() nsa static inline CR3 readcr3()
{ {
uint64_t Result = 0; uint64_t Result = 0;
asmv("mov %%cr3, %[Result]" asmv("mov %%cr3, %[Result]"
@ -214,7 +214,7 @@ namespace CPU
return (CR3){.raw = Result}; return (CR3){.raw = Result};
} }
SafeFunction static inline CR4 readcr4() nsa static inline CR4 readcr4()
{ {
uint64_t Result = 0; uint64_t Result = 0;
asmv("mov %%cr4, %[Result]" asmv("mov %%cr4, %[Result]"
@ -222,7 +222,7 @@ namespace CPU
return (CR4){.raw = Result}; return (CR4){.raw = Result};
} }
SafeFunction static inline CR8 readcr8() nsa static inline CR8 readcr8()
{ {
uint64_t Result = 0; uint64_t Result = 0;
asmv("mov %%cr8, %[Result]" asmv("mov %%cr8, %[Result]"
@ -230,7 +230,7 @@ namespace CPU
return (CR8){.raw = Result}; return (CR8){.raw = Result};
} }
SafeFunction static inline XCR0 readxcr0() nsa static inline XCR0 readxcr0()
{ {
uint64_t Result = 0; uint64_t Result = 0;
asmv("xgetbv" asmv("xgetbv"
@ -240,7 +240,7 @@ namespace CPU
return (XCR0){.raw = Result}; return (XCR0){.raw = Result};
} }
SafeFunction static inline void writecr0(CR0 ControlRegister) nsa static inline void writecr0(CR0 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr0" asmv("mov %[ControlRegister], %%cr0"
: :
@ -248,7 +248,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writecr2(CR2 ControlRegister) nsa static inline void writecr2(CR2 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr2" asmv("mov %[ControlRegister], %%cr2"
: :
@ -256,7 +256,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writecr3(CR3 ControlRegister) nsa static inline void writecr3(CR3 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr3" asmv("mov %[ControlRegister], %%cr3"
: :
@ -264,7 +264,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writecr4(CR4 ControlRegister) nsa static inline void writecr4(CR4 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr4" asmv("mov %[ControlRegister], %%cr4"
: :
@ -272,7 +272,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writecr8(CR8 ControlRegister) nsa static inline void writecr8(CR8 ControlRegister)
{ {
asmv("mov %[ControlRegister], %%cr8" asmv("mov %[ControlRegister], %%cr8"
: :
@ -280,7 +280,7 @@ namespace CPU
: "memory"); : "memory");
} }
SafeFunction static inline void writexcr0(XCR0 ControlRegister) nsa static inline void writexcr0(XCR0 ControlRegister)
{ {
asmv("xsetbv" asmv("xsetbv"
: :

View File

@ -402,7 +402,7 @@ namespace CPU
}; };
#if defined(a64) #if defined(a64)
SafeFunction static inline uint64_t rdmsr(uint32_t msr) nsa static inline uint64_t rdmsr(uint32_t msr)
{ {
uint32_t Low, High; uint32_t Low, High;
asmv("rdmsr" asmv("rdmsr"
@ -412,7 +412,7 @@ namespace CPU
return ((uint64_t)Low) | (((uint64_t)High) << 32); return ((uint64_t)Low) | (((uint64_t)High) << 32);
} }
SafeFunction static inline void wrmsr(uint32_t msr, uint64_t Value) nsa static inline void wrmsr(uint32_t msr, uint64_t Value)
{ {
uint32_t Low = s_cst(uint32_t, Value), High = s_cst(uint32_t, Value >> 32); uint32_t Low = s_cst(uint32_t, Value), High = s_cst(uint32_t, Value >> 32);
asmv("wrmsr" asmv("wrmsr"

View File

@ -413,7 +413,8 @@ typedef uint48_t uint_fast48_t;
#define PUBLIC __visibility("default") #define PUBLIC __visibility("default")
#define PRIVATE __visibility("hidden") #define PRIVATE __visibility("hidden")
#define SafeFunction __no_stack_protector __no_sanitize_address __no_sanitize_undefined __no_address_safety_analysis __no_sanitize_thread #define NoSecurityAnalysis __no_stack_protector __no_sanitize_address __no_sanitize_undefined __no_address_safety_analysis __no_sanitize_thread
#define nsa NoSecurityAnalysis
#define NIF __no_instrument_function #define NIF __no_instrument_function

View File

@ -69,7 +69,7 @@ namespace UniversalAsynchronousReceiverTransmitter
* @brief Get the Registered Port object * @brief Get the Registered Port object
* @return SerialPorts * @return SerialPorts
*/ */
SafeFunction NIF SerialPorts GetRegisteredPort() { return this->Port; } nsa NIF SerialPorts GetRegisteredPort() { return this->Port; }
/** /**
* @brief Called when a character is sent. * @brief Called when a character is sent.

View File

@ -28,7 +28,7 @@ unsigned int Level = 0;
using namespace UniversalAsynchronousReceiverTransmitter; using namespace UniversalAsynchronousReceiverTransmitter;
UART com2(COM2); UART com2(COM2);
static inline SafeFunction NIF void profiler_uart_wrapper(char c, void *unused) static inline nsa NIF void profiler_uart_wrapper(char c, void *unused)
{ {
bool renable = EnableProfiler; bool renable = EnableProfiler;
EnableProfiler = false; EnableProfiler = false;
@ -38,7 +38,7 @@ static inline SafeFunction NIF void profiler_uart_wrapper(char c, void *unused)
EnableProfiler = true; EnableProfiler = true;
} }
EXTERNC SafeFunction NIF void __cyg_profile_func_enter(void *Function, void *CallSite) EXTERNC nsa NIF void __cyg_profile_func_enter(void *Function, void *CallSite)
{ {
if (!EnableProfiler) if (!EnableProfiler)
return; return;
@ -75,7 +75,7 @@ EXTERNC SafeFunction NIF void __cyg_profile_func_enter(void *Function, void *Cal
Wait = false; Wait = false;
} }
EXTERNC SafeFunction NIF void __cyg_profile_func_exit(void *Function, void *CallSite) EXTERNC nsa NIF void __cyg_profile_func_exit(void *Function, void *CallSite)
{ {
if (!EnableProfiler) if (!EnableProfiler)
return; return;

View File

@ -55,7 +55,7 @@ struct gcov_info
struct gcov_ctr_info counts[0]; struct gcov_ctr_info counts[0];
}; };
static inline SafeFunction NIF void gcov_uart_wrapper(char c, void *unused) static inline nsa NIF void gcov_uart_wrapper(char c, void *unused)
{ {
UART(COM2).Write(c); UART(COM2).Write(c);
UNUSED(unused); UNUSED(unused);
@ -63,25 +63,25 @@ static inline SafeFunction NIF void gcov_uart_wrapper(char c, void *unused)
// TODO: Implement // TODO: Implement
EXTERNC SafeFunction NIF void __gcov_init(gcov_info *p __unused) EXTERNC nsa NIF void __gcov_init(gcov_info *p __unused)
{ {
} }
EXTERNC SafeFunction NIF void __gcov_exit(void) EXTERNC nsa NIF void __gcov_exit(void)
{ {
} }
EXTERNC SafeFunction NIF void __gcov_flush(void) EXTERNC nsa NIF void __gcov_flush(void)
{ {
} }
EXTERNC SafeFunction NIF void __gcov_merge_add(gcov_type *counters, unsigned int n_counters) EXTERNC nsa NIF void __gcov_merge_add(gcov_type *counters, unsigned int n_counters)
{ {
UNUSED(counters); UNUSED(counters);
UNUSED(n_counters); UNUSED(n_counters);
} }
EXTERNC SafeFunction NIF void __gcov_merge_single(gcov_type *counters, unsigned int n_counters) EXTERNC nsa NIF void __gcov_merge_single(gcov_type *counters, unsigned int n_counters)
{ {
UNUSED(counters); UNUSED(counters);
UNUSED(n_counters); UNUSED(n_counters);

View File

@ -23,13 +23,13 @@
using namespace UniversalAsynchronousReceiverTransmitter; using namespace UniversalAsynchronousReceiverTransmitter;
static inline SafeFunction NIF void gprof_uart_wrapper(char c, void *unused) static inline nsa NIF void gprof_uart_wrapper(char c, void *unused)
{ {
UART(COM2).Write(c); UART(COM2).Write(c);
UNUSED(unused); UNUSED(unused);
} }
EXTERNC SafeFunction NIF void mcount(unsigned long frompc, unsigned long selfpc) EXTERNC nsa NIF void mcount(unsigned long frompc, unsigned long selfpc)
{ {
// TODO: Implement // TODO: Implement
/* https://docs.kernel.org/trace/ftrace-design.html */ /* https://docs.kernel.org/trace/ftrace-design.html */

View File

@ -106,7 +106,7 @@
#define wut_schedbg(m, ...) #define wut_schedbg(m, ...)
#endif #endif
extern "C" SafeFunction NIF void TaskingScheduler_OneShot(int TimeSlice) extern "C" nsa NIF void TaskingScheduler_OneShot(int TimeSlice)
{ {
if (TimeSlice == 0) if (TimeSlice == 0)
TimeSlice = Tasking::TaskPriority::Normal; TimeSlice = Tasking::TaskPriority::Normal;
@ -125,7 +125,7 @@ extern "C" SafeFunction NIF void TaskingScheduler_OneShot(int TimeSlice)
namespace Tasking namespace Tasking
{ {
#if defined(a86) #if defined(a86)
SafeFunction NIF bool Task::FindNewProcess(void *CPUDataPointer) nsa NIF bool Task::FindNewProcess(void *CPUDataPointer)
{ {
CPUData *CurrentCPU = (CPUData *)CPUDataPointer; CPUData *CurrentCPU = (CPUData *)CPUDataPointer;
fnp_schedbg("%d processes", ProcessList.size()); fnp_schedbg("%d processes", ProcessList.size());
@ -178,7 +178,7 @@ namespace Tasking
return false; return false;
} }
SafeFunction NIF bool Task::GetNextAvailableThread(void *CPUDataPointer) nsa NIF bool Task::GetNextAvailableThread(void *CPUDataPointer)
{ {
CPUData *CurrentCPU = (CPUData *)CPUDataPointer; CPUData *CurrentCPU = (CPUData *)CPUDataPointer;
@ -237,7 +237,7 @@ namespace Tasking
return false; return false;
} }
SafeFunction NIF bool Task::GetNextAvailableProcess(void *CPUDataPointer) nsa NIF bool Task::GetNextAvailableProcess(void *CPUDataPointer)
{ {
CPUData *CurrentCPU = (CPUData *)CPUDataPointer; CPUData *CurrentCPU = (CPUData *)CPUDataPointer;
@ -297,7 +297,7 @@ namespace Tasking
return false; return false;
} }
SafeFunction NIF bool Task::SchedulerSearchProcessThread(void *CPUDataPointer) nsa NIF bool Task::SchedulerSearchProcessThread(void *CPUDataPointer)
{ {
CPUData *CurrentCPU = (CPUData *)CPUDataPointer; CPUData *CurrentCPU = (CPUData *)CPUDataPointer;
@ -342,7 +342,7 @@ namespace Tasking
return false; return false;
} }
SafeFunction NIF void Task::UpdateProcessState() nsa NIF void Task::UpdateProcessState()
{ {
foreach (auto process in ProcessList) foreach (auto process in ProcessList)
{ {
@ -378,7 +378,7 @@ namespace Tasking
} }
} }
SafeFunction NIF void Task::WakeUpThreads() nsa NIF void Task::WakeUpThreads()
{ {
foreach (auto process in ProcessList) foreach (auto process in ProcessList)
{ {
@ -418,7 +418,7 @@ namespace Tasking
} }
} }
SafeFunction NIF void Task::CleanupTerminated() nsa NIF void Task::CleanupTerminated()
{ {
foreach (auto pcb in ProcessList) foreach (auto pcb in ProcessList)
{ {
@ -473,7 +473,7 @@ namespace Tasking
"SchedulerSearchProcessThread", "SchedulerSearchProcessThread",
}; };
SafeFunction NIF void OnScreenTaskManagerUpdate() nsa NIF void OnScreenTaskManagerUpdate()
{ {
TimeManager->Sleep(10, Time::Units::Milliseconds); TimeManager->Sleep(10, Time::Units::Milliseconds);
Video::ScreenBuffer *sb = Display->GetBuffer(0); Video::ScreenBuffer *sb = Display->GetBuffer(0);
@ -513,7 +513,7 @@ namespace Tasking
} }
#endif #endif
SafeFunction NIF void Task::Schedule(CPU::TrapFrame *Frame) nsa NIF void Task::Schedule(CPU::TrapFrame *Frame)
{ {
if (unlikely(StopScheduler)) if (unlikely(StopScheduler))
{ {
@ -725,37 +725,37 @@ namespace Tasking
CurrentCPU->CurrentProcess->PageTable->Update(); CurrentCPU->CurrentProcess->PageTable->Update();
} }
SafeFunction NIF void Task::OnInterruptReceived(CPU::TrapFrame *Frame) nsa NIF void Task::OnInterruptReceived(CPU::TrapFrame *Frame)
{ {
SmartCriticalSection(SchedulerLock); SmartCriticalSection(SchedulerLock);
this->Schedule(Frame); this->Schedule(Frame);
} }
#elif defined(aa64) #elif defined(aa64)
SafeFunction bool Task::FindNewProcess(void *CPUDataPointer) nsa bool Task::FindNewProcess(void *CPUDataPointer)
{ {
fixme("unimplemented"); fixme("unimplemented");
} }
SafeFunction bool Task::GetNextAvailableThread(void *CPUDataPointer) nsa bool Task::GetNextAvailableThread(void *CPUDataPointer)
{ {
fixme("unimplemented"); fixme("unimplemented");
} }
SafeFunction bool Task::GetNextAvailableProcess(void *CPUDataPointer) nsa bool Task::GetNextAvailableProcess(void *CPUDataPointer)
{ {
fixme("unimplemented"); fixme("unimplemented");
} }
SafeFunction bool Task::SchedulerSearchProcessThread(void *CPUDataPointer) nsa bool Task::SchedulerSearchProcessThread(void *CPUDataPointer)
{ {
fixme("unimplemented"); fixme("unimplemented");
} }
SafeFunction void Task::Schedule(CPU::TrapFrame *Frame) nsa void Task::Schedule(CPU::TrapFrame *Frame)
{ {
fixme("unimplemented"); fixme("unimplemented");
} }
SafeFunction void Task::OnInterruptReceived(CPU::TrapFrame *Frame) { this->Schedule(Frame); } nsa void Task::OnInterruptReceived(CPU::TrapFrame *Frame) { this->Schedule(Frame); }
#endif #endif
} }

View File

@ -61,7 +61,7 @@ namespace Tasking
#endif #endif
} }
SafeFunction bool Task::InvalidPCB(PCB *pcb) nsa bool Task::InvalidPCB(PCB *pcb)
{ {
if (!pcb) if (!pcb)
return true; return true;
@ -81,7 +81,7 @@ namespace Tasking
return false; return false;
} }
SafeFunction bool Task::InvalidTCB(TCB *tcb) nsa bool Task::InvalidTCB(TCB *tcb)
{ {
if (!tcb) if (!tcb)
return true; return true;
@ -101,7 +101,7 @@ namespace Tasking
return false; return false;
} }
SafeFunction bool Task::RemoveThread(TCB *Thread) nsa bool Task::RemoveThread(TCB *Thread)
{ {
debug("Thread \"%s\"(%d) removed from process \"%s\"(%d)", debug("Thread \"%s\"(%d) removed from process \"%s\"(%d)",
Thread->Name, Thread->ID, Thread->Parent->Name, Thread->Name, Thread->ID, Thread->Parent->Name,
@ -111,7 +111,7 @@ namespace Tasking
return true; return true;
} }
SafeFunction bool Task::RemoveProcess(PCB *Process) nsa bool Task::RemoveProcess(PCB *Process)
{ {
if (unlikely(InvalidPCB(Process))) if (unlikely(InvalidPCB(Process)))
return false; return false;
@ -131,7 +131,7 @@ namespace Tasking
return true; return true;
} }
SafeFunction void Task::UpdateUsage(TaskInfo *Info, TaskExecutionMode Mode, int Core) nsa void Task::UpdateUsage(TaskInfo *Info, TaskExecutionMode Mode, int Core)
{ {
UNUSED(Core); UNUSED(Core);
uint64_t CurrentTime = TimeManager->GetCounter(); uint64_t CurrentTime = TimeManager->GetCounter();