summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc48
-rw-r--r--src/kernel/MACROS_MAP.md5
-rw-r--r--src/libSystem/src/SystemCalls.cc54
-rw-r--r--src/modules/CoreGfx/CoreGfx.h2
4 files changed, 79 insertions, 30 deletions
diff --git a/src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc b/src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc
index bb735ffb..7ee4a69c 100644
--- a/src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc
+++ b/src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc
@@ -26,26 +26,26 @@ STATIC void hal_int_send_eoi(UInt8 vector) {
/// @param rsp
EXTERN_C Kernel::Void int_handle_gpf(Kernel::UIntPtr rsp) {
auto process = Kernel::UserProcessScheduler::The().TheCurrentProcess();
- process.Leak().Crash();
+ process.Crash();
hal_int_send_eoi(13);
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Signal.SignalArg = rsp;
+ process.Signal.SignalID = SIGKILL;
+ process.Signal.Status = process.Status;
}
/// @brief Handle page fault.
/// @param rsp
EXTERN_C void int_handle_pf(Kernel::UIntPtr rsp) {
auto process = Kernel::UserProcessScheduler::The().TheCurrentProcess();
- process.Leak().Crash();
+ process.Crash();
hal_int_send_eoi(14);
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Signal.SignalArg = rsp;
+ process.Signal.SignalID = SIGKILL;
+ process.Signal.Status = process.Status;
}
/// @brief Handle scheduler interrupt.
@@ -67,28 +67,28 @@ EXTERN_C void int_handle_scheduler(Kernel::UIntPtr rsp) {
/// @param rsp
EXTERN_C void int_handle_math(Kernel::UIntPtr rsp) {
auto process = Kernel::UserProcessScheduler::The().TheCurrentProcess();
- process.Leak().Crash();
+ process.Crash();
hal_int_send_eoi(8);
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Signal.SignalArg = rsp;
+ process.Signal.SignalID = SIGKILL;
+ process.Signal.Status = process.Status;
}
/// @brief Handle any generic fault.
/// @param rsp
EXTERN_C void int_handle_generic(Kernel::UIntPtr rsp) {
auto process = Kernel::UserProcessScheduler::The().TheCurrentProcess();
- process.Leak().Crash();
+ process.Crash();
hal_int_send_eoi(30);
Kernel::kout << "Kernel: Generic Process Fault.\r";
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Signal.SignalArg = rsp;
+ process.Signal.SignalID = SIGKILL;
+ process.Signal.Status = process.Status;
Kernel::kout << "Kernel: SIGKILL status.\r";
}
@@ -98,25 +98,25 @@ EXTERN_C Kernel::Void int_handle_breakpoint(Kernel::UIntPtr rip) {
hal_int_send_eoi(3);
- process.Leak().Signal.SignalArg = rip;
- process.Leak().Signal.SignalID = SIGTRAP;
+ process.Signal.SignalArg = rip;
+ process.Signal.SignalID = SIGTRAP;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Signal.Status = process.Status;
- process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
+ process.Status = Kernel::ProcessStatusKind::kFrozen;
}
/// @brief Handle #UD fault.
/// @param rsp
EXTERN_C void int_handle_ud(Kernel::UIntPtr rsp) {
auto process = Kernel::UserProcessScheduler::The().TheCurrentProcess();
- process.Leak().Crash();
+ process.Crash();
hal_int_send_eoi(6);
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Signal.SignalArg = rsp;
+ process.Signal.SignalID = SIGKILL;
+ process.Signal.Status = process.Status;
}
/// @brief Enter syscall from assembly (libSystem only)
diff --git a/src/kernel/MACROS_MAP.md b/src/kernel/MACROS_MAP.md
deleted file mode 100644
index bae5aef1..00000000
--- a/src/kernel/MACROS_MAP.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# __nekernel: Configuration Macros of NeKernel.
-
-- `__nekernel_max_cores` -> Max SMP cores usable by NeKernel's scheduler.
-- `__nekernel_boot_core_index` -> Index of the boot core (0, 1, or 3)
-
diff --git a/src/libSystem/src/SystemCalls.cc b/src/libSystem/src/SystemCalls.cc
index 0574d7ba..2651fb28 100644
--- a/src/libSystem/src/SystemCalls.cc
+++ b/src/libSystem/src/SystemCalls.cc
@@ -6,6 +6,8 @@
#include <libSystem/SystemKit/Syscall.h>
#include <libSystem/SystemKit/System.h>
#include <libSystem/SystemKit/Verify.h>
+#include "hint/CompilerHint.h"
+#include "libSystem/SystemKit/Macros.h"
using namespace LibSystem;
@@ -148,6 +150,58 @@ IMPORT_C UInt64 IoTellFile(_Input Ref desc) {
return *ret;
}
+IMPORT_C SInt32 PrintRelease(_Input IORef buf) {
+ SInt32* ret = static_cast<SInt32*>(libsys_syscall_arg_2(SYSCALL_HASH("PrintRelease"), static_cast<VoidPtr>(buf)));
+ if (!ret) return -kErrorInvalidData;
+
+ return static_cast<SInt32>(*ret);
+}
+
+IMPORT_C IORef PrintCreate(Void) {
+ return static_cast<IORef>(libsys_syscall_arg_1(SYSCALL_HASH("PrintCreate")));
+}
+
+
+IMPORT_C VoidPtr MmCreateHeap(UInt64 initial_size, UInt32 max_size) {
+ return static_cast<VoidPtr>(libsys_syscall_arg_3(SYSCALL_HASH("MmCreateHeap"),
+ reinterpret_cast<VoidPtr>(&initial_size),
+ reinterpret_cast<VoidPtr>(&max_size)));
+}
+
+IMPORT_C SInt32 MmDestroyHeap(VoidPtr heap)
+{
+ auto ret = libsys_syscall_arg_2(SYSCALL_HASH("MmDestroyHeap"), static_cast<VoidPtr>(heap));
+ return *static_cast<SInt32*>(ret);
+}
+
+IMPORT_C SInt32 PrintIn(_Input IORef desc, const Char* fmt, ...) {
+ va_list args;
+ va_start(args, fmt);
+
+ auto buf = StrFmt(fmt, args);
+
+ va_end(args);
+
+ // if truncated, `needed` >= kBufferSz; we still send truncated buffer
+ auto ret_ptr = libsys_syscall_arg_3(SYSCALL_HASH("PrintIn"), static_cast<VoidPtr>(desc),
+ Verify::sys_safe_cast<Char, Void>(buf));
+
+ if (!ret_ptr) return -kErrorInvalidData;
+
+ auto ret = static_cast<const volatile SInt32*>(ret_ptr);
+
+ return *ret;
+}
+
+IMPORT_C IORef PrintGet(const Char* path) {
+ return static_cast<IORef>(libsys_syscall_arg_2(SYSCALL_HASH("PrintGet"),
+ Verify::sys_safe_cast<Char, Void>(path)));
+}
+
+IMPORT_C ErrRef ErrGetLastError(Void) {
+ return *static_cast<ErrRef*>(libsys_syscall_arg_1(SYSCALL_HASH("ErrGetLastError")));
+}
+
IMPORT_C SInt32 PrintOut(_Input IORef desc, const Char* fmt, ...) {
va_list args;
va_start(args, fmt);
diff --git a/src/modules/CoreGfx/CoreGfx.h b/src/modules/CoreGfx/CoreGfx.h
index 470dd510..c22aee38 100644
--- a/src/modules/CoreGfx/CoreGfx.h
+++ b/src/modules/CoreGfx/CoreGfx.h
@@ -11,7 +11,7 @@
#define cg_color(R, G, B) RGB(R, G, B)
-#define cg_get_clear_clr() RGB(0, 0, 0x80)
+#define cg_get_clear_clr() RGB(0, 0, 0)
#define cg_clear() kCGCursor = 0UL