summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-01-18 12:00:30 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2026-01-18 12:00:30 +0100
commit2e1b939a6a571e7437c5a0365f16879a224b862a (patch)
tree340e30c1a357c035f664caa353a119c8eeff6f8a
parentdd3cc6b2e26043ff5b58223bea79d46ec43d3f93 (diff)
feat: codebase improvements of Nectar.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--src/CompilerKit/src/Assemblers/Assembler+64x0.cc5
-rw-r--r--src/CompilerKit/src/Assemblers/Assembler+AMD64.cc7
-rw-r--r--src/CompilerKit/src/Assemblers/Assembler+ARM64.cc5
-rw-r--r--src/CompilerKit/src/Assemblers/Assembler+PowerPC.cc5
-rw-r--r--src/CompilerKit/src/CodeGenerator+AssemblyFactory.cc2
-rw-r--r--src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc4
-rw-r--r--src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc146
-rw-r--r--src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc47
-rw-r--r--src/CompilerKit/src/Preprocessor/Preprocessor+Generic.cc54
9 files changed, 124 insertions, 151 deletions
diff --git a/src/CompilerKit/src/Assemblers/Assembler+64x0.cc b/src/CompilerKit/src/Assemblers/Assembler+64x0.cc
index 5067c23..911fd27 100644
--- a/src/CompilerKit/src/Assemblers/Assembler+64x0.cc
+++ b/src/CompilerKit/src/Assemblers/Assembler+64x0.cc
@@ -25,11 +25,6 @@
#include <CompilerKit/Detail/64x0.h>
#include <CompilerKit/PEF.h>
#include <CompilerKit/Utilities/Compiler.h>
-#include <algorithm>
-#include <filesystem>
-#include <fstream>
-#include <iostream>
-#include <vector>
/////////////////////
diff --git a/src/CompilerKit/src/Assemblers/Assembler+AMD64.cc b/src/CompilerKit/src/Assemblers/Assembler+AMD64.cc
index ade375c..f1736cc 100644
--- a/src/CompilerKit/src/Assemblers/Assembler+AMD64.cc
+++ b/src/CompilerKit/src/Assemblers/Assembler+AMD64.cc
@@ -31,13 +31,6 @@
#include <CompilerKit/AST.h>
#include <CompilerKit/Detail/AMD64.h>
#include <CompilerKit/PEF.h>
-#include <algorithm>
-#include <cstdlib>
-#include <filesystem>
-#include <fstream>
-#include <iostream>
-#include <vector>
-
/////////////////////
// ANSI ESCAPE CODES
diff --git a/src/CompilerKit/src/Assemblers/Assembler+ARM64.cc b/src/CompilerKit/src/Assemblers/Assembler+ARM64.cc
index fa1d3b5..fd06d4e 100644
--- a/src/CompilerKit/src/Assemblers/Assembler+ARM64.cc
+++ b/src/CompilerKit/src/Assemblers/Assembler+ARM64.cc
@@ -25,11 +25,6 @@
#include <CompilerKit/ErrorID.h>
#include <CompilerKit/PEF.h>
#include <CompilerKit/Utilities/Assembler.h>
-#include <algorithm>
-#include <filesystem>
-#include <fstream>
-#include <iostream>
-#include <vector>
/////////////////////
diff --git a/src/CompilerKit/src/Assemblers/Assembler+PowerPC.cc b/src/CompilerKit/src/Assemblers/Assembler+PowerPC.cc
index 830fba1..8f6119c 100644
--- a/src/CompilerKit/src/Assemblers/Assembler+PowerPC.cc
+++ b/src/CompilerKit/src/Assemblers/Assembler+PowerPC.cc
@@ -25,11 +25,6 @@
#include <CompilerKit/ErrorID.h>
#include <CompilerKit/PEF.h>
#include <CompilerKit/Utilities/Assembler.h>
-#include <algorithm>
-#include <filesystem>
-#include <fstream>
-#include <iostream>
-#include <vector>
/////////////////////
diff --git a/src/CompilerKit/src/CodeGenerator+AssemblyFactory.cc b/src/CompilerKit/src/CodeGenerator+AssemblyFactory.cc
index 2e95bd0..1a9067b 100644
--- a/src/CompilerKit/src/CodeGenerator+AssemblyFactory.cc
+++ b/src/CompilerKit/src/CodeGenerator+AssemblyFactory.cc
@@ -8,7 +8,7 @@
/**
* @file AssemblyFactory.cc
* @author Amlal El Mahrouss (amlal@nekernel.org)
- * @brief Nectar Assembly API
+ * @brief Nectar Code Generation API
* @version 0.0.3
* @copyright Copyright (c) 2024-2025 Amlal El Mahrouss
*
diff --git a/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc b/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc
index 9dbb4f6..720fdee 100644
--- a/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc
+++ b/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc
@@ -22,10 +22,6 @@
#include <CompilerKit/PEF.h>
#include <CompilerKit/UUID.h>
#include <CompilerKit/Utilities/Compiler.h>
-#include <csignal>
-#include <cstdlib>
-#include <filesystem>
-#include <set>
/* NeKernel NECTAR Compiler Driver. */
/* This is part of the CompilerKit. */
diff --git a/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc b/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc
index 9b9d8ad..f87e2fc 100644
--- a/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc
+++ b/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc
@@ -16,8 +16,6 @@
#include <CompilerKit/PEF.h>
#include <CompilerKit/UUID.h>
#include <CompilerKit/Utilities/Compiler.h>
-#include <filesystem>
-#include <map>
#define kMachODefaultOutput \
{ "a.out" }
@@ -40,7 +38,7 @@ static bool kDuplicateSymbols = false;
static bool kIsDylib = false;
static Int64 kMachODefaultStackSz = 0;
-static CompilerKit::STLString kLinkerStart = "_main";
+static CompilerKit::STLString kLinkerStart = "__ImageStart";
/* object code and list. */
static std::vector<CompilerKit::STLString> kObjectList;
@@ -49,16 +47,16 @@ static std::vector<CompilerKit::Detail::Blob> kDataBytes;
/* symbol table */
static std::vector<nlist_64> kSymbolTable;
-static std::vector<char> kStringTable;
-static std::map<CompilerKit::STLString, uint64_t> kSymbolOffsets;
+static std::vector<Char> kStringTable;
+static std::map<CompilerKit::STLString, UInt64> kSymbolOffsets;
/// @brief Structure to hold section information from AE records
struct SectionInfo {
CompilerKit::STLString name;
- uint32_t kind;
- std::vector<char> bytes;
- uint64_t address;
- uint64_t size;
+ UInt32 kind;
+ std::vector<Char> bytes;
+ UInt64 address;
+ UInt64 size;
};
/// @brief Extract clean symbol name from AE record name
@@ -67,7 +65,7 @@ static CompilerKit::STLString ExtractSymbolName(const CompilerKit::STLString& ae
CompilerKit::STLString name = aeName;
// Remove section prefixes/suffixes
- const char* sections[] = {".code64", ".data64", ".zero64", "$"};
+ const Char* sections[] = {".code64", ".data64", ".zero64", "$"};
for (const auto& sec : sections) {
size_t pos;
@@ -88,16 +86,16 @@ static CompilerKit::STLString ExtractSymbolName(const CompilerKit::STLString& ae
}
/// @brief Add a symbol to the symbol table
-static uint32_t AddSymbol(const CompilerKit::STLString& name, uint8_t type, uint8_t sect,
- uint64_t value) {
+static UInt32 AddSymbol(const CompilerKit::STLString& name, uint8_t type, uint8_t sect,
+ UInt64 value) {
// Add name to string table (offset 0 is reserved for empty string)
if (kStringTable.empty()) {
kStringTable.push_back('\0'); // First byte is null
}
- uint32_t strOffset = static_cast<uint32_t>(kStringTable.size());
+ UInt32 strOffset = static_cast<UInt32>(kStringTable.size());
- for (char c : name) {
+ for (Char c : name) {
kStringTable.push_back(c);
}
kStringTable.push_back('\0');
@@ -113,7 +111,7 @@ static uint32_t AddSymbol(const CompilerKit::STLString& name, uint8_t type, uint
kSymbolTable.push_back(sym);
kSymbolOffsets[name] = value;
- return static_cast<uint32_t>(kSymbolTable.size() - 1);
+ return static_cast<UInt32>(kSymbolTable.size() - 1);
}
/// @brief Nectar 64-bit Mach-O Linker.
@@ -293,7 +291,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
delete[] raw_ae_records;
// Read the actual code bytes
- std::vector<char> bytes;
+ std::vector<Char> bytes;
bytes.resize(hdr.fCodeSize);
reader_protocol.fFilePtr.seekg(std::streamsize(hdr.fStartCode));
@@ -323,8 +321,8 @@ NECTAR_MODULE(DynamicLinker64MachO) {
}
// Calculate sizes
- uint64_t textSize = 0;
- uint64_t dataSize = 0;
+ UInt64 textSize = 0;
+ UInt64 dataSize = 0;
for (auto& blob : kTextBytes) {
textSize += blob.mBlob.size();
@@ -346,29 +344,29 @@ NECTAR_MODULE(DynamicLinker64MachO) {
using namespace CompilerKit::MachO;
- uint32_t numCommands = 8; // __PAGEZERO, LC_BUILD_VERSION, __TEXT, __LINKEDIT, LC_LOAD_DYLINKER,
+ UInt32 numCommands = 8; // __PAGEZERO, LC_BUILD_VERSION, __TEXT, __LINKEDIT, LC_LOAD_DYLINKER,
// LC_UUID, LC_SYMTAB, LC_DYSYMTAB
if (!kIsDylib) {
numCommands += 1; // LC_MAIN
}
- uint32_t dataSegCmdSize =
+ UInt32 dataSegCmdSize =
kDataBytes.size() > 0 ? sizeof(segment_command_64) + sizeof(section_64) : 0;
if (dataSegCmdSize > 0) ++numCommands; // __DATA segment
- uint32_t sizeOfCmds = 0;
- uint32_t headerSize = sizeof(mach_header_64);
- uint32_t pageZeroSize = sizeof(segment_command_64);
- uint32_t textSegCmdSize = sizeof(segment_command_64) + sizeof(section_64);
- uint32_t buildCmdSize = sizeof(build_version_command);
- uint32_t mainCmdSize = sizeof(entry_point_command);
- uint32_t uuidCmdSize = sizeof(uuid_command);
- uint32_t symtabCmdSize = sizeof(symtab_command);
- uint32_t dysymtabCmdSize = sizeof(dysymtab_command);
- uint32_t linkeditCmdSize = sizeof(segment_command_64); // No sections
- uint32_t dylinkerCmdSize =
+ UInt32 sizeOfCmds = 0;
+ UInt32 headerSize = sizeof(mach_header_64);
+ UInt32 pageZeroSize = sizeof(segment_command_64);
+ UInt32 textSegCmdSize = sizeof(segment_command_64) + sizeof(section_64);
+ UInt32 buildCmdSize = sizeof(build_version_command);
+ UInt32 mainCmdSize = sizeof(entry_point_command);
+ UInt32 uuidCmdSize = sizeof(uuid_command);
+ UInt32 symtabCmdSize = sizeof(symtab_command);
+ UInt32 dysymtabCmdSize = sizeof(dysymtab_command);
+ UInt32 linkeditCmdSize = sizeof(segment_command_64); // No sections
+ UInt32 dylinkerCmdSize =
(sizeof(dylinker_command) + 13 + 1 + 7) & ~7; // "/usr/lib/dyld" + padding to 8-byte align
sizeOfCmds = pageZeroSize + textSegCmdSize + dataSegCmdSize + buildCmdSize + uuidCmdSize +
@@ -376,25 +374,25 @@ NECTAR_MODULE(DynamicLinker64MachO) {
if (!kIsDylib) sizeOfCmds += mainCmdSize;
- uint64_t headerAndCmdsSize = headerSize + sizeOfCmds;
- uint64_t textFileOffset = AlignToPage(headerAndCmdsSize);
- uint64_t textVMAddr = kDefaultBaseAddress;
- uint64_t textSegmentSize = AlignToPage(textSize > 0 ? textSize : kPageSize);
- uint64_t textVMSize = textFileOffset + textSegmentSize; // __TEXT includes header
+ UInt64 headerAndCmdsSize = headerSize + sizeOfCmds;
+ UInt64 textFileOffset = AlignToPage(headerAndCmdsSize);
+ UInt64 textVMAddr = kDefaultBaseAddress;
+ UInt64 textSegmentSize = AlignToPage(textSize > 0 ? textSize : kPageSize);
+ UInt64 textVMSize = textFileOffset + textSegmentSize; // __TEXT includes header
- uint64_t dataFileOffset = textFileOffset + textSegmentSize;
- uint64_t dataVMAddr = textVMAddr + textVMSize;
- uint64_t dataSegmentSize = dataSize > 0 ? AlignToPage(dataSize) : 0; // 0 if no data
+ UInt64 dataFileOffset = textFileOffset + textSegmentSize;
+ UInt64 dataVMAddr = textVMAddr + textVMSize;
+ UInt64 dataSegmentSize = dataSize > 0 ? AlignToPage(dataSize) : 0; // 0 if no data
// __LINKEDIT segment comes after data segment (or __TEXT if no data)
- uint64_t linkeditFileOffset =
+ UInt64 linkeditFileOffset =
dataSegmentSize > 0 ? dataFileOffset + dataSegmentSize : textFileOffset + textSegmentSize;
- uint64_t linkeditVMAddr =
+ UInt64 linkeditVMAddr =
dataSegmentSize > 0 ? dataVMAddr + dataSegmentSize : textVMAddr + textVMSize;
- uint64_t symtabFileOffset = linkeditFileOffset;
- uint64_t strtabFileOffset = symtabFileOffset + (kSymbolTable.size() * sizeof(nlist_64));
- uint64_t linkeditFileSize = (kSymbolTable.size() * sizeof(nlist_64)) + kStringTable.size();
- uint64_t linkeditVMSize = AlignToPage(linkeditFileSize > 0 ? linkeditFileSize : 1);
+ UInt64 symtabFileOffset = linkeditFileOffset;
+ UInt64 strtabFileOffset = symtabFileOffset + (kSymbolTable.size() * sizeof(nlist_64));
+ UInt64 linkeditFileSize = (kSymbolTable.size() * sizeof(nlist_64)) + kStringTable.size();
+ UInt64 linkeditVMSize = AlignToPage(linkeditFileSize > 0 ? linkeditFileSize : 1);
// Write Mach-O header
mach_header_64 header{};
@@ -408,7 +406,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
header.flags = MH_NOUNDEFS | MH_DYLDLINK | MH_TWOLEVEL | MH_PIE;
header.reserved = 0;
- output_fc.write(reinterpret_cast<const char*>(&header), sizeof(header));
+ output_fc.write(reinterpret_cast<const Char*>(&header), sizeof(header));
if (kVerbose) {
kConsoleOut << "Wrote Mach-O header, ncmds: " << numCommands << "\n";
@@ -427,7 +425,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
pageZeroSegment.nsects = 0;
pageZeroSegment.flags = 0;
- output_fc.write(reinterpret_cast<const char*>(&pageZeroSegment), sizeof(pageZeroSegment));
+ output_fc.write(reinterpret_cast<const Char*>(&pageZeroSegment), sizeof(pageZeroSegment));
build_version_command build = {.cmd = LC_BUILD_VERSION,
.cmdsize = sizeof(build_version_command),
@@ -436,7 +434,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
.sdk = (11 << 16), // macOS 11.0
.ntools = 0};
- output_fc.write(reinterpret_cast<const char*>(&build), sizeof(build));
+ output_fc.write(reinterpret_cast<const Char*>(&build), sizeof(build));
if (kVerbose) {
kConsoleOut << "Wrote LC_BUILD_VERSION, platform: macOS, minos: 11.0, sdk: 11.0\n";
@@ -457,7 +455,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
textSegment.nsects = 1;
textSegment.flags = 0;
- output_fc.write(reinterpret_cast<const char*>(&textSegment), sizeof(textSegment));
+ output_fc.write(reinterpret_cast<const Char*>(&textSegment), sizeof(textSegment));
// Write __text section header
section_64 textSection{};
@@ -465,7 +463,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
CopySegmentName(textSection.segname, kSegmentText);
textSection.addr = textVMAddr + textFileOffset; // Section is at offset within segment
textSection.size = textSize;
- textSection.offset = static_cast<uint32_t>(textFileOffset);
+ textSection.offset = static_cast<UInt32>(textFileOffset);
textSection.align = kSectionAlign;
textSection.reloff = 0;
textSection.nreloc = 0;
@@ -474,7 +472,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
textSection.reserved2 = 0;
textSection.reserved3 = 0;
- output_fc.write(reinterpret_cast<const char*>(&textSection), sizeof(textSection));
+ output_fc.write(reinterpret_cast<const Char*>(&textSection), sizeof(textSection));
if (kVerbose) {
kConsoleOut << "Wrote __TEXT segment, vmaddr: 0x" << std::hex << textVMAddr << std::dec << "\n";
@@ -496,7 +494,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
dataSegment.flags = 0;
if (dataSegCmdSize > 0)
- output_fc.write(reinterpret_cast<const char*>(&dataSegment), sizeof(dataSegment));
+ output_fc.write(reinterpret_cast<const Char*>(&dataSegment), sizeof(dataSegment));
// Write __data section header
section_64 dataSection{};
@@ -504,7 +502,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
CopySegmentName(dataSection.segname, kSegmentData);
dataSection.addr = dataVMAddr;
dataSection.size = dataSize;
- dataSection.offset = static_cast<uint32_t>(dataFileOffset);
+ dataSection.offset = static_cast<UInt32>(dataFileOffset);
dataSection.align = kSectionAlign;
dataSection.reloff = 0;
dataSection.nreloc = 0;
@@ -514,7 +512,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
dataSection.reserved3 = 0;
if (dataSegCmdSize > 0)
- output_fc.write(reinterpret_cast<const char*>(&dataSection), sizeof(dataSection));
+ output_fc.write(reinterpret_cast<const Char*>(&dataSection), sizeof(dataSection));
if (kVerbose) {
kConsoleOut << "Wrote __DATA segment, vmaddr: 0x" << std::hex << dataVMAddr << std::dec << "\n";
@@ -535,7 +533,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
linkeditSegment.nsects = 0;
linkeditSegment.flags = 0;
- output_fc.write(reinterpret_cast<const char*>(&linkeditSegment), sizeof(linkeditSegment));
+ output_fc.write(reinterpret_cast<const Char*>(&linkeditSegment), sizeof(linkeditSegment));
if (kVerbose) {
kConsoleOut << "Wrote __LINKEDIT segment, vmaddr: 0x" << std::hex << linkeditVMAddr << std::dec
@@ -544,8 +542,8 @@ NECTAR_MODULE(DynamicLinker64MachO) {
}
// Write LC_LOAD_DYLINKER command
- const char* dyldPath = "/usr/lib/dyld";
- std::vector<char> dylinkerCmd(dylinkerCmdSize, 0);
+ const Char* dyldPath = "/usr/lib/dyld";
+ std::vector<Char> dylinkerCmd(dylinkerCmdSize, 0);
dylinker_command* dylinker = reinterpret_cast<dylinker_command*>(dylinkerCmd.data());
dylinker->cmd = LC_LOAD_DYLINKER;
dylinker->cmdsize = dylinkerCmdSize;
@@ -565,7 +563,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
// entryoff is relative to __TEXT segment file offset
entryCommand.entryoff = textFileOffset + entryCommand.entryoff;
- output_fc.write(reinterpret_cast<const char*>(&entryCommand), sizeof(entryCommand));
+ output_fc.write(reinterpret_cast<const Char*>(&entryCommand), sizeof(entryCommand));
if (kVerbose) {
kConsoleOut << "Wrote LC_MAIN, entryoff: 0x" << std::hex << entryCommand.entryoff << std::dec
@@ -586,7 +584,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
auto uuidBytes = generatedUuid.as_bytes();
std::memcpy(uuidCmd.uuid, uuidBytes.data(), 16);
- output_fc.write(reinterpret_cast<const char*>(&uuidCmd), sizeof(uuidCmd));
+ output_fc.write(reinterpret_cast<const Char*>(&uuidCmd), sizeof(uuidCmd));
if (kVerbose) {
kConsoleOut << "Wrote LC_UUID\n";
@@ -596,12 +594,12 @@ NECTAR_MODULE(DynamicLinker64MachO) {
symtab_command symtabCmd{};
symtabCmd.cmd = LC_SYMTAB;
symtabCmd.cmdsize = sizeof(symtab_command);
- symtabCmd.symoff = static_cast<uint32_t>(symtabFileOffset);
- symtabCmd.nsyms = static_cast<uint32_t>(kSymbolTable.size());
- symtabCmd.stroff = static_cast<uint32_t>(strtabFileOffset);
- symtabCmd.strsize = static_cast<uint32_t>(kStringTable.size());
+ symtabCmd.symoff = static_cast<UInt32>(symtabFileOffset);
+ symtabCmd.nsyms = static_cast<UInt32>(kSymbolTable.size());
+ symtabCmd.stroff = static_cast<UInt32>(strtabFileOffset);
+ symtabCmd.strsize = static_cast<UInt32>(kStringTable.size());
- output_fc.write(reinterpret_cast<const char*>(&symtabCmd), sizeof(symtabCmd));
+ output_fc.write(reinterpret_cast<const Char*>(&symtabCmd), sizeof(symtabCmd));
if (kVerbose) {
kConsoleOut << "Wrote LC_SYMTAB, nsyms: " << symtabCmd.nsyms
@@ -616,28 +614,28 @@ NECTAR_MODULE(DynamicLinker64MachO) {
// All symbols are local for now
dysymtabCmd.ilocalsym = 0;
- dysymtabCmd.nlocalsym = static_cast<uint32_t>(kSymbolTable.size());
+ dysymtabCmd.nlocalsym = static_cast<UInt32>(kSymbolTable.size());
// External symbols start after locals
- dysymtabCmd.iextdefsym = static_cast<uint32_t>(kSymbolTable.size());
+ dysymtabCmd.iextdefsym = static_cast<UInt32>(kSymbolTable.size());
dysymtabCmd.nextdefsym = 0;
// Undefined symbols
- dysymtabCmd.iundefsym = static_cast<uint32_t>(kSymbolTable.size());
+ dysymtabCmd.iundefsym = static_cast<UInt32>(kSymbolTable.size());
dysymtabCmd.nundefsym = 0;
- output_fc.write(reinterpret_cast<const char*>(&dysymtabCmd), sizeof(dysymtabCmd));
+ output_fc.write(reinterpret_cast<const Char*>(&dysymtabCmd), sizeof(dysymtabCmd));
if (kVerbose) {
kConsoleOut << "Wrote LC_DYSYMTAB\n";
}
// Pad to text section offset
- uint64_t currentPos = output_fc.tellp();
- uint64_t padding = textFileOffset - currentPos;
+ UInt64 currentPos = output_fc.tellp();
+ UInt64 padding = textFileOffset - currentPos;
if (padding > 0) {
- std::vector<char> zeros(padding, 0);
+ std::vector<Char> zeros(padding, 0);
output_fc.write(zeros.data(), zeros.size());
}
@@ -651,7 +649,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
padding = dataFileOffset - currentPos;
if (padding > 0) {
- std::vector<char> zeros(padding, 0);
+ std::vector<Char> zeros(padding, 0);
output_fc.write(zeros.data(), zeros.size());
}
@@ -665,13 +663,13 @@ NECTAR_MODULE(DynamicLinker64MachO) {
padding = symtabFileOffset - currentPos;
if (padding > 0) {
- std::vector<char> zeros(padding, 0);
+ std::vector<Char> zeros(padding, 0);
output_fc.write(zeros.data(), zeros.size());
}
// Write symbol table (nlist_64 entries)
for (auto& sym : kSymbolTable) {
- output_fc.write(reinterpret_cast<const char*>(&sym), sizeof(nlist_64));
+ output_fc.write(reinterpret_cast<const Char*>(&sym), sizeof(nlist_64));
}
if (kVerbose) {
diff --git a/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc b/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc
index 0729d7b..ea513c5 100644
--- a/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc
+++ b/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc
@@ -16,17 +16,18 @@
#include <CompilerKit/PEF.h>
#include <CompilerKit/UUID.h>
#include <CompilerKit/Utilities/Compiler.h>
-#include <filesystem>
-#define kPefNoCpu (0U)
-#define kPefNoSubCpu (0U)
-#define kPefDefaultOutput \
+#define kLinkerPefNoCpu (0U)
+#define kLinkerPefNoSubCpu (0U)
+#define kLinkerPefDefaultOutput \
{ "a" kPefExt }
-#define kLinkerVersionStr "Nectar 64-Bit Linker (Preferred Executable Format)"
+#define kLinkerVersionStr "Nectar 64-Bit Linker (NeKernel PEF)"
#define kLinkerDefaultOrigin kPefBaseOrigin
+
#define kLinkerId (0x5046FF)
+
#define kLinkerAbiContainer "__PEFContainer:ABI:"
#define kLinkerGuidContainer "__PEFContainer:GUID:"
@@ -40,24 +41,24 @@
<< "ld64: " \
<< "\e[0;97m")
-enum {
+enum struct ABIType : Int32 {
kABITypeNull = 0,
kABITypeStart = 0x1010, /* The start of ABI list. */
kABITypeNE = 0x5046, /* PF (NeKernel.org's PEF ABI) */
kABITypeInvalid = 0xFFFF,
};
-static CompilerKit::STLString kOutput = kPefDefaultOutput;
-static Int32 kAbi = kABITypeNE;
-static Int32 kSubArch = kPefNoSubCpu;
+static CompilerKit::STLString kOutput = kLinkerPefDefaultOutput;
+static ABIType kAbi = ABIType::kABITypeNE;
+static Int32 kSubArch = kLinkerPefNoSubCpu;
static Int32 kArch = CompilerKit::kPefArchInvalid;
static bool kFatBinaryEnable = false;
static bool kStartFound = false;
static bool kDuplicateSymbols = false;
/* ld64 is to be found, mld is to be found at runtime. */
-static const Char* kLdDefineSymbol = ":UndefinedSymbol:";
-static const Char* kLdDynamicSym = ":RuntimeSymbol:";
+static const Char* kLinkerDefineSymbol = ":UndefinedSymbol:";
+static const Char* kLinkerDynamicSym = ":RuntimeSymbol:";
static CompilerKit::STLString kLinkerStart = kPefStart;
@@ -202,7 +203,7 @@ NECTAR_MODULE(DynamicLinker64PEF) {
pef_container.Kind = is_executable ? CompilerKit::kPefKindExec : CompilerKit::kPefKindDylib;
pef_container.SubCpu = kSubArch;
pef_container.Linker = kLinkerId; // Amlal El Mahrouss Linker
- pef_container.Abi = kAbi; // Multi-Processor UX ABI
+ pef_container.Abi = static_cast<Int32>(kAbi); // Multi-Processor UX ABI
pef_container.Magic[0] = kPefMagic[kFatBinaryEnable ? 2 : 0];
pef_container.Magic[1] = kPefMagic[1];
pef_container.Magic[2] = kPefMagic[kFatBinaryEnable ? 0 : 2];
@@ -292,7 +293,7 @@ NECTAR_MODULE(DynamicLinker64PEF) {
cmd_hdr_name.find(kPefZero64) == CompilerKit::STLString::npos) {
if (cmd_hdr_name.find(kLinkerStart) == CompilerKit::STLString::npos &&
*command_header.Name == 0) {
- if (cmd_hdr_name.find(kLdDefineSymbol) != CompilerKit::STLString::npos) {
+ if (cmd_hdr_name.find(kLinkerDefineSymbol) != CompilerKit::STLString::npos) {
goto ld_mark_header;
} else {
continue;
@@ -327,7 +328,7 @@ NECTAR_MODULE(DynamicLinker64PEF) {
delete[] raw_ae_records;
raw_ae_records = nullptr;
- std::vector<char> bytes;
+ std::vector<Char> bytes;
bytes.resize(hdr.fCodeSize);
reader_protocol.fFilePtr.seekg(std::streamsize(hdr.fStartCode));
@@ -367,9 +368,9 @@ NECTAR_MODULE(DynamicLinker64PEF) {
for (auto& command_hdr : command_headers) {
// check if this symbol needs to be resolved.
- if (CompilerKit::STLString(command_hdr.Name).find(kLdDefineSymbol) !=
+ if (CompilerKit::STLString(command_hdr.Name).find(kLinkerDefineSymbol) !=
CompilerKit::STLString::npos &&
- CompilerKit::STLString(command_hdr.Name).find(kLdDynamicSym) ==
+ CompilerKit::STLString(command_hdr.Name).find(kLinkerDynamicSym) ==
CompilerKit::STLString::npos) {
if (kVerbose) kConsoleOut << "Found undefined symbol: " << command_hdr.Name << "\n";
@@ -392,10 +393,10 @@ NECTAR_MODULE(DynamicLinker64PEF) {
it != not_found.end()) {
CompilerKit::STLString symbol_imp = *it;
- if (symbol_imp.find(kLdDefineSymbol) == CompilerKit::STLString::npos) continue;
+ if (symbol_imp.find(kLinkerDefineSymbol) == CompilerKit::STLString::npos) continue;
// erase the lookup prefix.
- symbol_imp.erase(0, symbol_imp.find(kLdDefineSymbol) + strlen(kLdDefineSymbol));
+ symbol_imp.erase(0, symbol_imp.find(kLinkerDefineSymbol) + strlen(kLinkerDefineSymbol));
// demangle everything.
while (symbol_imp.find('$') != CompilerKit::STLString::npos)
@@ -406,7 +407,7 @@ NECTAR_MODULE(DynamicLinker64PEF) {
for (auto& command_hdr : command_headers) {
if (CompilerKit::STLString(command_hdr.Name).find(symbol_imp) !=
CompilerKit::STLString::npos &&
- CompilerKit::STLString(command_hdr.Name).find(kLdDefineSymbol) ==
+ CompilerKit::STLString(command_hdr.Name).find(kLinkerDefineSymbol) ==
CompilerKit::STLString::npos) {
CompilerKit::STLString undefined_symbol = command_hdr.Name;
auto result_of_sym = undefined_symbol.substr(undefined_symbol.find(symbol_imp));
@@ -551,9 +552,9 @@ NECTAR_MODULE(DynamicLinker64PEF) {
// And check for any duplications
for (size_t commandHeaderIndex = 0UL; commandHeaderIndex < command_headers.size();
++commandHeaderIndex) {
- if (CompilerKit::STLString(command_headers[commandHeaderIndex].Name).find(kLdDefineSymbol) !=
+ if (CompilerKit::STLString(command_headers[commandHeaderIndex].Name).find(kLinkerDefineSymbol) !=
CompilerKit::STLString::npos &&
- CompilerKit::STLString(command_headers[commandHeaderIndex].Name).find(kLdDynamicSym) ==
+ CompilerKit::STLString(command_headers[commandHeaderIndex].Name).find(kLinkerDynamicSym) ==
CompilerKit::STLString::npos) {
// ignore :UndefinedSymbol: headers, they do not contain code.
continue;
@@ -597,9 +598,9 @@ NECTAR_MODULE(DynamicLinker64PEF) {
if (sub_command_header_index == commandHeaderIndex) continue;
if (CompilerKit::STLString(command_headers[sub_command_header_index].Name)
- .find(kLdDefineSymbol) != CompilerKit::STLString::npos &&
+ .find(kLinkerDefineSymbol) != CompilerKit::STLString::npos &&
CompilerKit::STLString(command_headers[sub_command_header_index].Name)
- .find(kLdDynamicSym) == CompilerKit::STLString::npos) {
+ .find(kLinkerDynamicSym) == CompilerKit::STLString::npos) {
if (kVerbose) {
kConsoleOut << "Ignoring :UndefinedSymbol: headers...\n";
}
diff --git a/src/CompilerKit/src/Preprocessor/Preprocessor+Generic.cc b/src/CompilerKit/src/Preprocessor/Preprocessor+Generic.cc
index 7b3c219..ab6a9fa 100644
--- a/src/CompilerKit/src/Preprocessor/Preprocessor+Generic.cc
+++ b/src/CompilerKit/src/Preprocessor/Preprocessor+Generic.cc
@@ -20,8 +20,8 @@
/// @file Preprocessor+Generic.cc
/// @brief Nectar Preprocessor.
-typedef Int32 (*bpp_parser_fn_t)(CompilerKit::STLString& line, std::ifstream& hdr_file,
- std::ofstream& pp_out);
+typedef Int32 (*pp_parser_fn_t)(CompilerKit::STLString& line, std::ifstream& hdr_file,
+ std::ofstream& pp_out);
/////////////////////////////////////////////////////////////////////////////////////////
@@ -41,7 +41,7 @@ enum {
kCount = 6,
};
-struct bpp_macro_condition final {
+struct pp_macro_condition final {
int32_t fType;
CompilerKit::STLString fTypeName;
@@ -51,7 +51,7 @@ struct bpp_macro_condition final {
}
};
-struct bpp_macro final {
+struct pp_macro final {
std::vector<CompilerKit::STLString> fArgs;
CompilerKit::STLString fName;
CompilerKit::STLString fValue;
@@ -68,21 +68,21 @@ struct bpp_macro final {
} // namespace Detail
static std::vector<CompilerKit::STLString> kFiles;
-static std::vector<Detail::bpp_macro> kMacros;
+static std::vector<Detail::pp_macro> kMacros;
static std::vector<CompilerKit::STLString> kIncludes;
static CompilerKit::STLString kWorkingDir = "";
/////////////////////////////////////////////////////////////////////////////////////////
-// @name bpp_parse_if_condition
+// @name pp_parse_if_condition
// @brief parse #if condition
/////////////////////////////////////////////////////////////////////////////////////////
-int32_t bpp_parse_if_condition(Detail::bpp_macro_condition& cond, Detail::bpp_macro& macro,
- bool& inactive_code, bool& defined,
- CompilerKit::STLString& macro_str) {
+int32_t pp_parse_if_condition(Detail::pp_macro_condition& cond, Detail::pp_macro& macro,
+ bool& inactive_code, bool& defined,
+ CompilerKit::STLString& macro_str) {
if (cond.fType == Detail::kEqual) {
auto pos = macro_str.find(macro.fName);
if (pos == CompilerKit::STLString::npos) return 0;
@@ -241,12 +241,12 @@ std::vector<CompilerKit::STLString> kAllIncludes;
/////////////////////////////////////////////////////////////////////////////////////////
-// @name bpp_parse_file
+// @name pp_parse_file
// @brief parse file to preprocess it.
/////////////////////////////////////////////////////////////////////////////////////////
-void bpp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) {
+void pp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) {
CompilerKit::STLString hdr_line;
CompilerKit::STLString line_after_include;
@@ -423,7 +423,7 @@ void bpp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) {
}
}
- Detail::bpp_macro macro;
+ Detail::pp_macro macro;
macro.fArgs = args;
macro.fName = macro_key;
@@ -548,7 +548,7 @@ void bpp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) {
hdr_line.find("if") != CompilerKit::STLString::npos) {
inactive_code = true;
- std::vector<Detail::bpp_macro_condition> bpp_macro_condition_list = {
+ std::vector<Detail::pp_macro_condition> pp_macro_condition_list = {
{
.fType = Detail::kEqual,
.fTypeName = "==",
@@ -577,12 +577,12 @@ void bpp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) {
int32_t good_to_go = 0;
- for (auto& macro_condition : bpp_macro_condition_list) {
+ for (auto& macro_condition : pp_macro_condition_list) {
if (hdr_line.find(macro_condition.fTypeName) != CompilerKit::STLString::npos) {
for (auto& found_macro : kMacros) {
if (hdr_line.find(found_macro.fName) != CompilerKit::STLString::npos) {
- good_to_go = bpp_parse_if_condition(macro_condition, found_macro, inactive_code,
- defined, hdr_line);
+ good_to_go = pp_parse_if_condition(macro_condition, found_macro, inactive_code,
+ defined, hdr_line);
break;
}
@@ -727,7 +727,7 @@ void bpp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) {
open = true;
- bpp_parse_file(header, pp_out);
+ pp_parse_file(header, pp_out);
break;
}
@@ -740,7 +740,7 @@ void bpp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) {
if (!header.is_open()) throw std::runtime_error("cppdrv: no such include file: " + path);
- bpp_parse_file(header, pp_out);
+ pp_parse_file(header, pp_out);
}
} else {
std::cerr << ("cppdrv: unknown pre-processor directive, " + hdr_line) << "\n";
@@ -763,49 +763,49 @@ NECTAR_MODULE(GenericPreprocessorMain) {
bool skip = false;
bool double_skip = false;
- Detail::bpp_macro macro_1;
+ Detail::pp_macro macro_1;
macro_1.fName = "__true";
macro_1.fValue = "1";
kMacros.push_back(macro_1);
- Detail::bpp_macro macro_unreachable;
+ Detail::pp_macro macro_unreachable;
macro_unreachable.fName = "__unreachable";
macro_unreachable.fValue = "__compilerkit_unreachable";
kMacros.push_back(macro_unreachable);
- Detail::bpp_macro macro_unused;
+ Detail::pp_macro macro_unused;
macro_unused.fName = "__unused";
macro_unused.fValue = "__compilerkit_unused";
kMacros.push_back(macro_unused);
- Detail::bpp_macro macro_0;
+ Detail::pp_macro macro_0;
macro_0.fName = "__false";
macro_0.fValue = "0";
kMacros.push_back(macro_0);
- Detail::bpp_macro macro_nectar;
+ Detail::pp_macro macro_nectar;
macro_nectar.fName = "__NECTAR__";
macro_nectar.fValue = "1";
kMacros.push_back(macro_nectar);
- Detail::bpp_macro macro_lang;
+ Detail::pp_macro macro_lang;
macro_lang.fName = "__ncpp";
macro_lang.fValue = "202601L";
kMacros.push_back(macro_lang);
- Detail::bpp_macro macro_nil;
+ Detail::pp_macro macro_nil;
macro_nil.fName = "nil";
macro_nil.fValue = "0";
@@ -880,7 +880,7 @@ NECTAR_MODULE(GenericPreprocessorMain) {
if (is_string) macro_value += "\"";
- Detail::bpp_macro macro;
+ Detail::pp_macro macro;
macro.fName = macro_key;
macro.fValue = macro_value;
@@ -903,7 +903,7 @@ NECTAR_MODULE(GenericPreprocessorMain) {
std::ifstream file_descriptor(file);
std::ofstream file_descriptor_pp(file + ".pp");
- bpp_parse_file(file_descriptor, file_descriptor_pp);
+ pp_parse_file(file_descriptor, file_descriptor_pp);
}
return NECTAR_SUCCESS;