summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-01-13 05:43:49 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2026-01-13 05:48:18 +0100
commitfaf73d5258b3c61ea1a84efa6bed543d6bfd5321 (patch)
tree6d77156202d11a378d326b25a82f4b8b41fe0200
parentd5263778065e62a4a20f3af236f6dde7bbb3afc4 (diff)
feat: kernel: API tweaks and new FMT specs for NeKernel.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--doc/specs/SPECIFICATION_FMT.md7
-rw-r--r--doc/specs/SPECIFICATION_MACROS.md4
-rw-r--r--public/tools/cc/src/CommandLine.cc2
-rw-r--r--public/tools/ld.dyn/src/CommandLine.cc5
-rw-r--r--public/tools/manual/src/CommandLine.cc36
-rw-r--r--public/tools/mgmt.oe/src/CommandLine.cc3
-rw-r--r--src/kernel/KernelKit/HeapMgr.h2
-rw-r--r--src/kernel/KernelKit/PCI/DMA.h2
-rw-r--r--src/kernel/KernelKit/PCI/IO.h2
-rw-r--r--src/kernel/KernelKit/ThreadLocalStorage.h2
-rw-r--r--src/kernel/KernelKit/UserProcessScheduler.h2
-rw-r--r--src/kernel/NeKit/Variant.h6
-rw-r--r--src/kernel/NeKit/Variant.inl13
-rw-r--r--src/kernel/NetworkKit/NetworkDevice.h2
-rw-r--r--src/kernel/src/BitMapMgr.cc6
-rw-r--r--src/kernel/src/PEFCodeMgr.cc9
-rw-r--r--src/libSystem/SystemKit/System.h4
-rw-r--r--src/libSystem/src/SystemCalls.cc5
18 files changed, 84 insertions, 28 deletions
diff --git a/doc/specs/SPECIFICATION_FMT.md b/doc/specs/SPECIFICATION_FMT.md
new file mode 100644
index 00000000..a101acbc
--- /dev/null
+++ b/doc/specs/SPECIFICATION_FMT.md
@@ -0,0 +1,7 @@
+===================================
+
+# 0: General Information:
+
+===================================
+
+- Formatted output/input should be [%s:n] where N is a real positive integer that is less or equal to the output's buffer size.
diff --git a/doc/specs/SPECIFICATION_MACROS.md b/doc/specs/SPECIFICATION_MACROS.md
index 3b5cdf2d..b26ee57c 100644
--- a/doc/specs/SPECIFICATION_MACROS.md
+++ b/doc/specs/SPECIFICATION_MACROS.md
@@ -6,7 +6,7 @@
===================================
-# NeKernel
+# 1: NeKernel/BootZ
===================================
@@ -16,7 +16,7 @@
===================================
-# KernelTest
+# 2: KernelTest
===================================
diff --git a/public/tools/cc/src/CommandLine.cc b/public/tools/cc/src/CommandLine.cc
index 62757c43..3ce8a29d 100644
--- a/public/tools/cc/src/CommandLine.cc
+++ b/public/tools/cc/src/CommandLine.cc
@@ -10,6 +10,6 @@
SInt32 main(SInt32 argc, Char* argv[]) {
PrintOut(nullptr,
- "cc: A C++ compiler to be installed.\rcc: This program is present as a placeholder.");
+ "cc: A C++ compiler is to be installed.\rcc: This program is present as a placeholder.");
return EXIT_FAILURE;
}
diff --git a/public/tools/ld.dyn/src/CommandLine.cc b/public/tools/ld.dyn/src/CommandLine.cc
index 45f707a9..b3774f85 100644
--- a/public/tools/ld.dyn/src/CommandLine.cc
+++ b/public/tools/ld.dyn/src/CommandLine.cc
@@ -8,7 +8,8 @@
/// @brief Library loader.
-#define DYNLIB_FLAG "-dyn"
+#define DYNLIB_FLAG "-e"
+#define DYNLIB_FLAG_ALT "-exec"
SInt32 _NeMain(SInt32 argc, Char* argv[]) {
LIBSYS_UNUSED(argc);
@@ -19,7 +20,7 @@ SInt32 _NeMain(SInt32 argc, Char* argv[]) {
"ld.dyn: © 2024-2025 Amlal El Mahrouss, Licensed under the Apache 2.0 license.\n");
for (SInt32 i = 1U; i < argc; ++i) {
- if (MmStrCmp(argv[i], DYNLIB_FLAG) == 0) {
+ if (MmStrCmp(argv[i], DYNLIB_FLAG) == 0 || MmStrCmp(argv[i], DYNLIB_FLAG_ALT) == 0) {
UIntPtr ret = RtlSpawnProcess(argv[i], 0, nullptr, nullptr, 0);
if (0 < ret) {
diff --git a/public/tools/manual/src/CommandLine.cc b/public/tools/manual/src/CommandLine.cc
index 8c75d565..9dc535bb 100644
--- a/public/tools/manual/src/CommandLine.cc
+++ b/public/tools/manual/src/CommandLine.cc
@@ -1,13 +1,45 @@
+// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org)
+// Licensed under the Apache License, Version 2.0 (see LICENSE file)
+// Official repository: https://github.com/nekernel-org/nekernel
+
+#include <libSystem/SystemKit/Err.h>
#include <libSystem/SystemKit/System.h>
SInt32 _NeMain(SInt32 argc, Char* argv[]) {
LIBSYS_UNUSED(argc);
LIBSYS_UNUSED(argv);
- if (argc < 2) {
- PrintOut(nullptr, "HELP: manual <tutorial_name>\n");
+ if (argc != 3) {
+ PrintOut(nullptr, "HELP: manual <tutorial_name> <output_name>\n");
return EXIT_FAILURE;
}
+ IORef fileHtml = IoOpenFile(argv[2], nullptr);
+
+ if (fileHtml) {
+ IORef printRef = PrintCreate();
+
+ PrintOut(printRef, "<HTML>");
+ PrintOut(printRef, "<PRE>");
+
+ IORef in = PrintGet(argv[1]);
+
+ MUST_PASS(in);
+
+ Char buf[1024] = {0};
+
+ while (PrintIn(printRef, "%s:1024", buf) == kErrorSuccess);
+
+ PrintRelease(in);
+
+ PrintOut(printRef, "</PRE>");
+ PrintOut(printRef, "</HTML>");
+
+ IoWriteFile(fileHtml, printRef, PrintSize(printRef));
+ PrintRelease(printRef);
+
+ IoCloseFile(fileHtml);
+ }
+
return EXIT_SUCCESS;
} \ No newline at end of file
diff --git a/public/tools/mgmt.oe/src/CommandLine.cc b/public/tools/mgmt.oe/src/CommandLine.cc
index ccff8c0e..445609d1 100644
--- a/public/tools/mgmt.oe/src/CommandLine.cc
+++ b/public/tools/mgmt.oe/src/CommandLine.cc
@@ -24,5 +24,8 @@ SInt32 _NeMain(SInt32 argc, Char* argv[]) {
/// access the jail then)
if (kJailSrv->fClient == nullptr) return EXIT_FAILURE;
+ ::PrintOut(nullptr, "Jail-Hash: %ul", kJailSrv->fJailHash);
+ ::PrintOut(nullptr, "Parent-ID: %ul", kJailSrv->fParentID);
+
return EXIT_FAILURE;
} \ No newline at end of file
diff --git a/src/kernel/KernelKit/HeapMgr.h b/src/kernel/KernelKit/HeapMgr.h
index 771ed181..272ce3fc 100644
--- a/src/kernel/KernelKit/HeapMgr.h
+++ b/src/kernel/KernelKit/HeapMgr.h
@@ -51,6 +51,6 @@ Int32 mm_set_ptr_flags(VoidPtr heap_ptr, UInt64 flags);
UInt64 mm_get_ptr_flags(VoidPtr heap_ptr);
} // namespace Kernel
-#include <KernelKit/HeapMgr.inl>
+#include "HeapMgr.inl"
#endif // !INC_KERNEL_HEAP_H
diff --git a/src/kernel/KernelKit/PCI/DMA.h b/src/kernel/KernelKit/PCI/DMA.h
index d0d4c25b..38854f31 100644
--- a/src/kernel/KernelKit/PCI/DMA.h
+++ b/src/kernel/KernelKit/PCI/DMA.h
@@ -71,6 +71,6 @@ class DMAFactory final {
};
} // namespace Kernel
-#include <KernelKit/PCI/DMA.inl>
+#include "DMA.inl"
#endif
diff --git a/src/kernel/KernelKit/PCI/IO.h b/src/kernel/KernelKit/PCI/IO.h
index 0f7b048f..c34f3e43 100644
--- a/src/kernel/KernelKit/PCI/IO.h
+++ b/src/kernel/KernelKit/PCI/IO.h
@@ -56,7 +56,7 @@ inline Array<UShort, Sz> make_ports(UShort base) {
} // namespace Kernel
#ifdef __NE_AMD64__
-#include <KernelKit/PCI/IOArray+AMD64.inl>
+#include "IOArray+AMD64.inl"
#else
#error Please provide platform specific code for the I/O
#endif // ifdef __NE_AMD64__
diff --git a/src/kernel/KernelKit/ThreadLocalStorage.h b/src/kernel/KernelKit/ThreadLocalStorage.h
index a69ba3d4..62b0abbc 100644
--- a/src/kernel/KernelKit/ThreadLocalStorage.h
+++ b/src/kernel/KernelKit/ThreadLocalStorage.h
@@ -59,7 +59,7 @@ EXTERN_C Kernel::Void rt_install_tib(THREAD_INFORMATION_BLOCK* TIB, THREAD_INFOR
/// @brief TLS check (syscall)
EXTERN_C Kernel::Bool tls_check_syscall_impl(Kernel::VoidPtr TIB);
-#include <KernelKit/ThreadLocalStorage.inl>
+#include "ThreadLocalStorage.inl"
// last rev 7/7/24
diff --git a/src/kernel/KernelKit/UserProcessScheduler.h b/src/kernel/KernelKit/UserProcessScheduler.h
index 126be648..2271002c 100644
--- a/src/kernel/KernelKit/UserProcessScheduler.h
+++ b/src/kernel/KernelKit/UserProcessScheduler.h
@@ -271,7 +271,7 @@ class UserProcessHelper final {
} // namespace Kernel
#include <KernelKit/ThreadLocalStorage.h>
-#include <KernelKit/UserProcessScheduler.inl>
+#include "UserProcessScheduler.inl"
////////////////////////////////////////////////////
// END
diff --git a/src/kernel/NeKit/Variant.h b/src/kernel/NeKit/Variant.h
index 41c5f942..2f4ce1ff 100644
--- a/src/kernel/NeKit/Variant.h
+++ b/src/kernel/NeKit/Variant.h
@@ -54,9 +54,7 @@ class Variant final {
RefAny Leak();
template <typename T>
- T* As() {
- return reinterpret_cast<T*>(fPtr);
- }
+ T* As();
VariantKind& Kind();
@@ -66,4 +64,6 @@ class Variant final {
};
} // namespace Kernel
+#include "Variant.inl"
+
#endif
diff --git a/src/kernel/NeKit/Variant.inl b/src/kernel/NeKit/Variant.inl
new file mode 100644
index 00000000..bad41d72
--- /dev/null
+++ b/src/kernel/NeKit/Variant.inl
@@ -0,0 +1,13 @@
+// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org)
+// Licensed under the Apache License, Version 2.0 (see LICENSE file)
+// Official repository: https://github.com/nekernel-org/nekernel
+
+#ifndef NEKIT_VARIANT_INL
+#define NEKIT_VARIANT_INL
+
+template <typename T>
+inline T* Kernel::Variant::As() {
+ return reinterpret_cast<T*>(fPtr);
+}
+
+#endif
diff --git a/src/kernel/NetworkKit/NetworkDevice.h b/src/kernel/NetworkKit/NetworkDevice.h
index 4f7c051d..31f62079 100644
--- a/src/kernel/NetworkKit/NetworkDevice.h
+++ b/src/kernel/NetworkKit/NetworkDevice.h
@@ -76,6 +76,6 @@ using DBGNetworkDevice = NetworkDevice;
using LTENetworkDevice = NetworkDevice;
} // namespace Kernel
-#include <NetworkKit/NetworkDevice.inl>
+#include "NetworkDevice.inl"
#endif // !__INC_NETWORK_DEVICE_H__
diff --git a/src/kernel/src/BitMapMgr.cc b/src/kernel/src/BitMapMgr.cc
index d15b2a75..40bbe837 100644
--- a/src/kernel/src/BitMapMgr.cc
+++ b/src/kernel/src/BitMapMgr.cc
@@ -52,6 +52,7 @@ namespace HAL {
kBitMapCursor += ptr_bit_set[kBitMapSizeIdx];
ptr_bit_set[kBitMapMagIdx] = 0UL;
+ ptr_bit_set[kBitMapSizeIdx] = 0UL;
ptr_bit_set[kBitMapUsedIdx] = No;
this->GetBitMapStatus(ptr_bit_set);
@@ -135,11 +136,6 @@ namespace HAL {
/// @brief Print Bitmap status
auto GetBitMapStatus(UIntPtr* ptr_bit_set) -> Void {
- if (!this->IsBitMap(ptr_bit_set)) {
- (Void)(kout << "Not a BitMap: " << hex_number((UIntPtr) ptr_bit_set) << kendl);
- return;
- }
-
(Void)(kout << "Magic: " << hex_number(ptr_bit_set[kBitMapMagIdx]) << kendl);
(Void)(kout << "Is Allocated? " << (ptr_bit_set[kBitMapUsedIdx] ? "YES" : "NO") << kendl);
(Void)(kout << "Size of BitMap (B): " << number(ptr_bit_set[kBitMapSizeIdx]) << kendl);
diff --git a/src/kernel/src/PEFCodeMgr.cc b/src/kernel/src/PEFCodeMgr.cc
index 79ec97e0..45471763 100644
--- a/src/kernel/src/PEFCodeMgr.cc
+++ b/src/kernel/src/PEFCodeMgr.cc
@@ -130,9 +130,8 @@ PEFLoader::PEFLoader(const Char* path) : fCachedBlob(nullptr), fFatBinary(false)
/// @brief PEF destructor.
/***********************************************************************************/
PEFLoader::~PEFLoader() {
- if (fCachedBlob) {
+ if (fCachedBlob.Leak().Leak()) {
mm_free_ptr(fCachedBlob.Leak().Leak());
- fFile.Reset();
}
}
@@ -296,13 +295,11 @@ ProcessID rtl_create_user_process(PEFLoader& exec,
auto symname = exec.FindSymbol(kPefNameSymbol, kPefData);
- if (!symname) {
+ if (!symname.Leak().Leak()) {
symname = ErrorOr<VoidPtr>{(VoidPtr) rt_alloc_string("USER_PROCESS_PEF")};
}
- if (!symname) {
- return -1;
- }
+ if (!symname.Leak().Leak()) return kSchedInvalidPID;
ProcessID id =
UserProcessScheduler::The().Spawn(reinterpret_cast<const Char*>(symname.Leak().Leak()),
diff --git a/src/libSystem/SystemKit/System.h b/src/libSystem/SystemKit/System.h
index 4e3cc264..a8cf05f2 100644
--- a/src/libSystem/SystemKit/System.h
+++ b/src/libSystem/SystemKit/System.h
@@ -324,7 +324,9 @@ IMPORT_C SInt32 PrintIn(IORef file /* nullptr to direct to stdout */, const Char
IMPORT_C IORef PrintCreate(Void);
-IMPORT_C SInt32 PrintRelease(IORef);
+IMPORT_C UInt64 PrintSize(IORef ref);
+
+IMPORT_C SInt32 PrintRelease(IORef ref);
IMPORT_C IORef PrintGet(const Char* path);
diff --git a/src/libSystem/src/SystemCalls.cc b/src/libSystem/src/SystemCalls.cc
index 0059d55d..07f5241b 100644
--- a/src/libSystem/src/SystemCalls.cc
+++ b/src/libSystem/src/SystemCalls.cc
@@ -217,3 +217,8 @@ IMPORT_C SInt32 PrintOut(_Input IORef desc, const Char* fmt, ...) {
return *ret;
}
+
+IMPORT_C UInt64 PrintSize(IORef ref) {
+ MUST_PASS(ref);
+ return *static_cast<UInt64*>(libsys_syscall_arg_2(SYSCALL_HASH("PrintSize"), ref));
+} \ No newline at end of file