From 342e27527797d5dd6f0ba3baa23c0bbc786892e1 Mon Sep 17 00:00:00 2001
From: Amlal El Mahrouss
Date: Wed, 11 Mar 2026 05:51:25 +0100
Subject: [CHORE] ARM64 port improvements, POSIXKit additions, and
SysChk/BootNet improvements.
Signed-off-by: Amlal El Mahrouss
---
README.md | 44 +++++++++++++++-----------
scripts/modules_ahci_arm64.sh | 11 +++++++
scripts/modules_ahci_x64.sh | 4 +--
scripts/release_ahci_arm64.sh | 16 ++++++++++
src/boot/BootKit/BootKit.h | 8 ++---
src/boot/README.md | 11 +++++++
src/boot/amd64-ci.make | 2 +-
src/boot/amd64-desktop.make | 2 +-
src/boot/arm64-desktop.make | 2 +-
src/boot/modules/BootNet/.hgkeep | 0
src/boot/modules/BootNet/README.md | 5 +++
src/boot/modules/BootNet/arm64.json | 35 +++++++++++++++++++++
src/boot/modules/SysChk/.hgkeep | 0
src/boot/modules/SysChk/README.md | 5 +++
src/boot/modules/SysChk/SysChk.cpp | 6 ++--
src/boot/modules/SysChk/arm64-ahci-epm.json | 49 +++++++++++++++++++++++++++++
src/boot/modules/SysChk/arm64.json | 26 ---------------
src/boot/src/HEL/AMD64/BootPlatform.cpp | 20 +++---------
src/boot/src/HEL/ARM64/BootEFI.cpp | 27 ++--------------
src/boot/src/HEL/ARM64/BootPlatform.cpp | 6 ++--
src/libPOSIXWrapper/POSIXKit/unistd.h | 6 ++++
21 files changed, 187 insertions(+), 98 deletions(-)
create mode 100755 scripts/modules_ahci_arm64.sh
create mode 100755 scripts/release_ahci_arm64.sh
create mode 100644 src/boot/README.md
delete mode 100644 src/boot/modules/BootNet/.hgkeep
create mode 100644 src/boot/modules/BootNet/README.md
create mode 100644 src/boot/modules/BootNet/arm64.json
delete mode 100644 src/boot/modules/SysChk/.hgkeep
create mode 100644 src/boot/modules/SysChk/README.md
create mode 100644 src/boot/modules/SysChk/arm64-ahci-epm.json
delete mode 100644 src/boot/modules/SysChk/arm64.json
diff --git a/README.md b/README.md
index 0e9d7dc5..ef43c68a 100644
--- a/README.md
+++ b/README.md
@@ -12,16 +12,6 @@
-## Helping:
-
-Love our work? Give us a star!
-
-
-
-## Community:
-
-Join our [Discord](https://discord.gg/uD76Qweght), we're quite active and open for contributors!
-
## Getting Started:
### **Requirements**:
@@ -48,17 +38,35 @@ cd nekernel
---
+## Love our work?
+
+Give us a star on GitHub!
+
+
+
+## Community:
+
+Join our [Discord](https://discord.gg/uD76Qweght), we're quite active and open for contributors!
+
## Structure
-- `src/kernel/` — Core kernel source (scheduling, memory, VFS, drivers)
-- `src/boot/` — Bootloader, platform bring-up, and early system code
-- `src/libDDK/` — Driver Development Kit (DDK) and sample drivers
+- `src/kernel/` — Hybrid Kernel sources (SwapKit, KernelKit, SMP, Memory, FileMgr)
+- `src/boot/` — Bootloader and Boot modules sources (BootKit, modules, EFI/NeBoot bring-up)
+- `src/libDDK/` — Driver Development Kit (DDK)
- `src/libSystem/` — Userland system call interface and runtime
-- `src/launch/` — NeKernel Launch System
-- `src/libMsg/` — NeKernel OpenMSG framework
-- `public/tools/` — CLI tools (mkfs, fsck, open, manual, etc.)
+- `src/launch/` — NeKernel Launch System.
+- `src/libMsg/` — NeKernel OpenMSG framework.
+- `public/tools/` — CLI tools (mkfs, chk, open, manual, etc.)
- `public/frameworks/` — Userland frameworks (CoreFoundation, DiskImage, etc.)
-- `doc/` — Specifications, design docs, and diagrams
+- `doc/` — Specifications, design docs, requirements, and diagrams.
+
+---
+
+## Design Rationale:
+
+The sources are designed to be modular and gracefully error when needed.
+
+Modern C/C++ is also used to implement the system, alongside assembly stubs in the HAL.
---
@@ -111,6 +119,6 @@ NeKernel is licensed under the [Apache-2.0 License](LICENSE).
- © 2023-2026 Amlal El Mahrouss & Ne.org Authors. Licensed under the Apache 2.0 license.
+ © 2022-2026 Amlal El Mahrouss & Ne.org Authors. Licensed under the Apache 2.0 license.
diff --git a/scripts/modules_ahci_arm64.sh b/scripts/modules_ahci_arm64.sh
new file mode 100755
index 00000000..9ec84d6f
--- /dev/null
+++ b/scripts/modules_ahci_arm64.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# LOG HISTORY:
+# 03/25/25: Add 'disk' build step.
+# 04/05/25: Improve and fix script.
+
+cd src/boot/modules/SysChk
+nebuild arm64-ahci-epm.json
+cd ../
+cd BootNet
+nebuild arm64.json
diff --git a/scripts/modules_ahci_x64.sh b/scripts/modules_ahci_x64.sh
index aabb00bd..c9b8bd3e 100755
--- a/scripts/modules_ahci_x64.sh
+++ b/scripts/modules_ahci_x64.sh
@@ -5,7 +5,7 @@
# 04/05/25: Improve and fix script.
cd src/boot/modules/SysChk
-nebuild amd64-ahci-epm.json
+nebuild amd64-ahci-gpt.json
cd ../
cd BootNet
-nebuild amd64.json
\ No newline at end of file
+nebuild amd64.json
diff --git a/scripts/release_ahci_arm64.sh b/scripts/release_ahci_arm64.sh
new file mode 100755
index 00000000..7cb17300
--- /dev/null
+++ b/scripts/release_ahci_arm64.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+export AHCI_SUPPORT=1
+export ATA_PIO_SUPPORT=
+export ATA_DMA_SUPPORT=
+export DEBUG_SUPPORT=
+
+cd src/kernel
+make -f arm64-desktop.make all
+cd ../boot
+make -f arm64-desktop.make all
+make -f arm64-desktop.make disk
+cd ../../
+./tools/kimg.py ./src/boot/src/nekernel-esp.img ./src/boot/src/root
+cd src/boot
+make -f arm64-desktop.make -j 8 run-efi-arm64
diff --git a/src/boot/BootKit/BootKit.h b/src/boot/BootKit/BootKit.h
index 1d0686ae..980588e5 100644
--- a/src/boot/BootKit/BootKit.h
+++ b/src/boot/BootKit/BootKit.h
@@ -276,12 +276,12 @@ inline Boolean BDiskFormatFactory::Format(const Char* part_name) {
StrLen(kEPMMagic));
fDiskDev.Leak().mBase = kEPMBootBlockLba; // always always resies at zero block.
- fDiskDev.Leak().mSize = sizeof(EPM_PART_BLOCK);
+ fDiskDev.Leak().mSize = sizeof(EPM_PART_BLOCK);
fDiskDev.Write((Char*) epm_boot, sizeof(EPM_PART_BLOCK));
BootTextWriter writer;
- writer.Write(L"BootZ: Drive is EPM formatted.\r");
+ writer.Write(L"BootZ: Drive is now EPM formatted.\r");
#elif defined(BOOTZ_GPT_SUPPORT)
NE_UNUSED(part_name);
@@ -317,12 +317,12 @@ inline Boolean BDiskFormatFactory::Format(const Char* part_name) {
SetMem(gpt_part->Reserved2, 0, kSectorAlignGPT_PartTbl);
fDiskDev.Leak().mBase = kGPTPartitionTableLBA; // always always resies at zero block.
+
fDiskDev.Leak().mSize = sizeof(GPT_PARTITION_TABLE);
-
fDiskDev.Write((Char*) gpt_part, sizeof(GPT_PARTITION_TABLE));
BootTextWriter writer;
- writer.Write(L"BootZ: Drive is GPT formatted.\r");
+ writer.Write(L"BootZ: Drive is now GPT formatted.\r");
#else
NE_UNUSED(part_name);
#endif
diff --git a/src/boot/README.md b/src/boot/README.md
new file mode 100644
index 00000000..2468efe6
--- /dev/null
+++ b/src/boot/README.md
@@ -0,0 +1,11 @@
+# The BootZ Bootloader
+
+A multi-platform bootloader written in C++ with modules support.
+
+## Design Rationale:
+
+BootZ like NeKernel is designed to be modular and production-ready.
+
+BootZ reads a `kernel` image before trying to run it. If it fails to find one, it will summon a `bootnet` module.
+
+Error Handling is very important as well, that's why we try before commiting (see BootKit.h)
diff --git a/src/boot/amd64-ci.make b/src/boot/amd64-ci.make
index 845892fd..28017bf3 100644
--- a/src/boot/amd64-ci.make
+++ b/src/boot/amd64-ci.make
@@ -67,7 +67,7 @@ REM_FLAG=-f
FLAG_ASM=-f win64
FLAG_GNU=-fshort-wchar -Wall -Wpedantic -Wextra -Werror -D__EFI_x86_64__ -mno-red-zone -D__NEKERNEL__ -D__BOOTZ__ \
-DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DEBUG_MACRO) $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \
- -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_API__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT
+ -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_API__ -DBOOTZ_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT
BOOTLOADER=ne_bootz
KERNEL=ne_kernel
diff --git a/src/boot/amd64-desktop.make b/src/boot/amd64-desktop.make
index 658ef516..0854db60 100644
--- a/src/boot/amd64-desktop.make
+++ b/src/boot/amd64-desktop.make
@@ -69,7 +69,7 @@ REM_FLAG=-f
FLAG_ASM=-f win64
FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -D__nekernel_allow_non_nekernel_pe -Wall -Wpedantic -Wextra -mno-red-zone -D__NEKERNEL__ -D__BOOTZ__ -DBOOTZ_VEPM_SUPPORT \
-DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \
- -std=c++20 -DBOOTZ_GPT_SUPPORT -D__HAVE_NE_API__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -Wl,--disable-reloc-section
+ -std=c++20 -DBOOTZ_GPT_SUPPORT -D__HAVE_NE_API__ -DBOOTZ_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -Wl,--disable-reloc-section
BOOTLOADER=ne_bootz
KERNEL=ne_kernel
diff --git a/src/boot/arm64-desktop.make b/src/boot/arm64-desktop.make
index bd380327..55004175 100644
--- a/src/boot/arm64-desktop.make
+++ b/src/boot/arm64-desktop.make
@@ -45,7 +45,7 @@ REM_FLAG=-f
FLAG_ASM=-f win64
FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno-rtti -fno-exceptions -I./ \
-target aarch64-unknown-windows \
- -std=c++20 -DBOOTZ_EPM_SUPPORT -D__nekernel_allow_non_nekernel_pe -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTZ_STANDALONE__ -D__NEKERNEL__ -D__BOOTZ__ -D__HAVE_NE_API__ -D__NE__ -I../ -I../kernel
+ -std=c++20 -DBOOTZ_EPM_SUPPORT -D__nekernel_allow_non_nekernel_pe -DBOOTZ_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTZ_STANDALONE__ -D__NEKERNEL__ -D__BOOTZ__ -D__HAVE_NE_API__ -D__NE__ -I../ -I../kernel
BOOT_LOADER=ne_bootz
KERNEL=ne_kernel
diff --git a/src/boot/modules/BootNet/.hgkeep b/src/boot/modules/BootNet/.hgkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/boot/modules/BootNet/README.md b/src/boot/modules/BootNet/README.md
new file mode 100644
index 00000000..9c013d6f
--- /dev/null
+++ b/src/boot/modules/BootNet/README.md
@@ -0,0 +1,5 @@
+# BootNet
+
+This module network boots a copy of `ne_kernel` via its NetBoot protocol.
+
+This is for EFI modules only, as the NeBoot firmware already supports it.
diff --git a/src/boot/modules/BootNet/arm64.json b/src/boot/modules/BootNet/arm64.json
new file mode 100644
index 00000000..f939083e
--- /dev/null
+++ b/src/boot/modules/BootNet/arm64.json
@@ -0,0 +1,35 @@
+{
+ "compiler_path": "x86_64-w64-mingw32-g++",
+ "compiler_std": "c++20",
+ "headers_path": [
+ "../",
+ "../../",
+ "../../../kernel",
+ "../../../",
+ "./"
+ ],
+ "sources_path": [
+ "*.cpp",
+ "*.S",
+ "../../src/HEL/ARM64/*.cpp",
+ "../../src/HEL/ARM64/*.S",
+ "../../src/*.cpp"
+ ],
+ "output_name": "net.efi",
+ "compiler_flags": [
+ "-nostdlib",
+ "-std=c++20",
+ "-fno-rtti",
+ "-fno-exceptions",
+ "-Wl,--subsystem=17,--image-base,0x10000000,-e,BootNetModuleMain"
+ ],
+ "cpp_macros": [
+ "__BOOTZ__",
+ "__BOOTZ_STANDALONE__",
+ "__NE_ARM64__",
+ "__nekernel_max_cores=8 ",
+ "kBootNetVersionHighest=0x0100",
+ "kBootNetVersionLowest=0x0100",
+ "kBootNetEFIVersion=0x0100"
+ ]
+}
diff --git a/src/boot/modules/SysChk/.hgkeep b/src/boot/modules/SysChk/.hgkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/boot/modules/SysChk/README.md b/src/boot/modules/SysChk/README.md
new file mode 100644
index 00000000..9c5a25e2
--- /dev/null
+++ b/src/boot/modules/SysChk/README.md
@@ -0,0 +1,5 @@
+# SysChk
+
+This module repairs an EPM or GPT partition after it's been damaged by tampering.
+
+This is for EFI only, as NeBoot support is not planned yet.
diff --git a/src/boot/modules/SysChk/SysChk.cpp b/src/boot/modules/SysChk/SysChk.cpp
index c7217504..09522b98 100644
--- a/src/boot/modules/SysChk/SysChk.cpp
+++ b/src/boot/modules/SysChk/SysChk.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org)
+// 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/ne-foss-org/nekernel
@@ -28,9 +28,11 @@ EXTERN_C Int32 SysChkModuleMain(Kernel::HEL::BootInfoHeader* handover) {
Boot::BDiskFormatFactory partition_factory;
#elif defined(__AHCI__)
Boot::BDiskFormatFactory partition_factory;
+#elif defined(__NVME__)
+ Boot::BDiskFormatFactory partition_factory;
#endif
- if (!partition_factory.IsPartitionValid()) return kEfiFail;
+ if (partition_factory.IsPartitionValid()) return kEfiOk;
return partition_factory.Format(kMachineModel);
}
diff --git a/src/boot/modules/SysChk/arm64-ahci-epm.json b/src/boot/modules/SysChk/arm64-ahci-epm.json
new file mode 100644
index 00000000..d73f90c3
--- /dev/null
+++ b/src/boot/modules/SysChk/arm64-ahci-epm.json
@@ -0,0 +1,49 @@
+{
+ "compiler_path": "clang++",
+ "compiler_std": "c++20",
+ "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"],
+ "sources_path": [
+ "*.cpp",
+ "*.S",
+ "../../src/HEL/ARM64/BootSATA.cpp",
+ "../../src/HEL/ARM64/BootPlatform.cpp",
+ "../../src/HEL/ARM64/BootAPI.S",
+ "../../src/BootTextWriter.cpp",
+ "../../src/BootSupport.cpp",
+ "../../src/New+Delete.cpp",
+ "../../../kernel/HALKit/ARM64/PCI/*.cpp",
+ "../../../kernel/HALKit/ARM64/Storage/*.cpp",
+ "../../../kernel/src/Storage/*.cpp",
+ "../../../kernel/src/Network/*.cpp",
+ "../../../kernel/HALKit/ARM64/*.cpp",
+ "../../../kernel/HALKit/ARM64/*.s",
+ "../../../kernel/src/*.cpp"
+ ],
+ "output_name": "chk.efi",
+ "compiler_flags": [
+ "-ffreestanding",
+ "-nostdlib",
+ "-std=c++20",
+ "-fno-rtti",
+ "-fno-exceptions",
+ "-fuse-ld=lld",
+ "-Wl,-subsystem:efi_application,-entry:BootloaderMain",
+ "-target aarch64-unknown-windows"
+ ],
+ "cpp_macros": [
+ "__NEOSKRNL__",
+ "__BOOTZ__",
+ "__BOOTZ_STANDALONE__",
+ "__NE_ARM64__",
+ "__SYSCHK__",
+ "BOOTZ_EPM_SUPPORT",
+ "__nekernel_max_cores=8",
+ "__nekernel_dma_best_align=8",
+ "__nekernel_dma_pool_start=0x1000000",
+ "__nekernel_dma_pool_size=0x1000000",
+ "__nekernel_halkit_include_processor=\"\"",
+ "kChkVersionHighest=0x0100",
+ "kChkVersionLowest=0x0100",
+ "kChkVersion=0x0100"
+ ]
+}
diff --git a/src/boot/modules/SysChk/arm64.json b/src/boot/modules/SysChk/arm64.json
deleted file mode 100644
index 2a04c772..00000000
--- a/src/boot/modules/SysChk/arm64.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "compiler_path": "clang++",
- "compiler_std": "c++20",
- "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"],
- "sources_path": ["*.cpp", "*.S", "../../src/HEL/ARM64/*.cpp", "../../src/HEL/ARM64/*.S", "../../src/*.cpp"],
- "output_name": "chk.efi",
- "compiler_flags": [
- "-ffreestanding",
- "-nostdlib",
- "-std=c++20",
- "-fno-rtti",
- "-fno-exceptions",
- "-fuse-ld=lld",
- "-Wl,-subsystem:efi_application,-entry:BootloaderMain",
- "-target aarch64-unknown-windows"
- ],
- "cpp_macros": [
- "__NEOSKRNL__",
- "__BOOTZ__",
- "__BOOTZ_STANDALONE__",
- "__NE_ARM64__",
- "kChkVersionHighest=0x0100",
- "kChkVersionLowest=0x0100",
- "kChkVersion=0x0100"
- ]
-}
diff --git a/src/boot/src/HEL/AMD64/BootPlatform.cpp b/src/boot/src/HEL/AMD64/BootPlatform.cpp
index ea55625b..b8cdea2b 100644
--- a/src/boot/src/HEL/AMD64/BootPlatform.cpp
+++ b/src/boot/src/HEL/AMD64/BootPlatform.cpp
@@ -12,24 +12,14 @@
using namespace Boot;
-EXTERN_C void rt_halt() {
- asm volatile("hlt");
-}
+EXTERN_C void rt_halt() { asm volatile("hlt"); }
-EXTERN_C void rt_cli() {
- asm volatile("cli");
-}
+EXTERN_C void rt_cli() { asm volatile("cli"); }
-EXTERN_C void rt_sti() {
- asm volatile("sti");
-}
+EXTERN_C void rt_sti() { asm volatile("sti"); }
-EXTERN_C void rt_cld() {
- asm volatile("cld");
-}
+EXTERN_C void rt_cld() { asm volatile("cld"); }
-EXTERN_C void rt_std() {
- asm volatile("std");
-}
+EXTERN_C void rt_std() { asm volatile("std"); }
#endif // __BOOTZ_STANDALONE__
diff --git a/src/boot/src/HEL/ARM64/BootEFI.cpp b/src/boot/src/HEL/ARM64/BootEFI.cpp
index 872ddbab..cf27287f 100644
--- a/src/boot/src/HEL/ARM64/BootEFI.cpp
+++ b/src/boot/src/HEL/ARM64/BootEFI.cpp
@@ -15,14 +15,6 @@
#include
#include
-#ifndef kExpectedWidth
-#define kExpectedWidth (800)
-#endif
-
-#ifndef kExpectedHeight
-#define kExpectedHeight (600)
-#endif
-
/** Graphics related. */
STATIC EfiGraphicsOutputProtocol* kGop = nullptr;
@@ -44,20 +36,7 @@ STATIC Bool boot_init_fb() {
kGopStride = 4;
- for (SizeT i = 0; i < kGop->Mode->MaxMode; ++i) {
- EfiGraphicsOutputProtocolModeInformation* infoPtr = nullptr;
- UInt32 sz = 0U;
-
- kGop->QueryMode(kGop, i, &sz, &infoPtr);
-
- if (infoPtr->HorizontalResolution == kExpectedWidth &&
- infoPtr->VerticalResolution == kExpectedHeight) {
- kGop->SetMode(kGop, i);
- return Yes;
- }
- }
-
- return No;
+ return Yes;
}
EXTERN EfiBootServices* BS;
@@ -71,7 +50,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa
kHandoverHeader = new HEL::BootInfoHeader();
-#ifdef ZBA_USE_FB
+#ifdef BOOTZ_USE_FB
if (!boot_init_fb()) return kEfiFail; ///! Init the GOP.
for (SizeT index_vt = 0; index_vt < sys_table->NumberOfTableEntries; ++index_vt) {
@@ -97,7 +76,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa
kHandoverHeader->f_GOP.f_PixelPerLine = kGop->Mode->Info->PixelsPerScanLine;
kHandoverHeader->f_GOP.f_PixelFormat = kGop->Mode->Info->PixelFormat;
kHandoverHeader->f_GOP.f_Size = kGop->Mode->FrameBufferSize;
-#endif // ZBA_USE_FB
+#endif // BOOTZ_USE_FB
// ------------------------------------------- //
// Grab MP services, extended to runtime. //
diff --git a/src/boot/src/HEL/ARM64/BootPlatform.cpp b/src/boot/src/HEL/ARM64/BootPlatform.cpp
index 0d1fb9d5..a6d619de 100644
--- a/src/boot/src/HEL/ARM64/BootPlatform.cpp
+++ b/src/boot/src/HEL/ARM64/BootPlatform.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org)
+// 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/ne-foss-org/nekernel
@@ -10,9 +10,7 @@
using namespace Boot;
-EXTERN_C void rt_halt() {
- while (Yes);
-}
+EXTERN_C void rt_halt() { while (Yes); }
EXTERN_C void rt_cli() {}
diff --git a/src/libPOSIXWrapper/POSIXKit/unistd.h b/src/libPOSIXWrapper/POSIXKit/unistd.h
index 0aae8e1c..cdaa6628 100644
--- a/src/libPOSIXWrapper/POSIXKit/unistd.h
+++ b/src/libPOSIXWrapper/POSIXKit/unistd.h
@@ -13,4 +13,10 @@
#define _POSIX_SOURCE __POSIX_SOURCE__
#define _XOPEN_SOURCE __XOPEN_SOURCE__
+IMPORT_C SInt64 write(SizeT count,
+ SInt32 fd, Void* data, SizeT sz);
+
+IMPORT_C SInt64 read(SizeT count,
+ SInt32 fd, Void* data, SizeT sz);
+
#endif // LIBPOSIX_POSIXKIT_UNISTD_H
--
cgit v1.2.3