summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/cpp_style.md10
-rw-r--r--include/GenericsLibrary/nrt.nc2
-rw-r--r--src/CompilerKit/src/Compilers/README.md5
-rw-r--r--src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc20
-rw-r--r--src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc4
5 files changed, 29 insertions, 12 deletions
diff --git a/doc/cpp_style.md b/doc/cpp_style.md
new file mode 100644
index 0000000..67f9800
--- /dev/null
+++ b/doc/cpp_style.md
@@ -0,0 +1,10 @@
+# Nectar C++ Style Guide:
+
+## Abstract:
+
+Nectar uses the Google C++ Style. But applied to low-level systems. We use C++20 and later throughout all of our stack. As we keep iterating over time we will amend this document.
+
+## Privilege Templates and ZOA over C with Classes.
+
+Nectar doesn't limit itself to a C++ paradigm, as we may find fitting solutions by exploring other patterns.
+
diff --git a/include/GenericsLibrary/nrt.nc b/include/GenericsLibrary/nrt.nc
index 446ce94..9d0c640 100644
--- a/include/GenericsLibrary/nrt.nc
+++ b/include/GenericsLibrary/nrt.nc
@@ -5,6 +5,8 @@
extern main;
+//@ The main entrypoint is an external symbol defined by the user program.
+//@ You may also define it as a library and then write your own main wrapper over it.
let _start()
{
return main();
diff --git a/src/CompilerKit/src/Compilers/README.md b/src/CompilerKit/src/Compilers/README.md
index c3c17d4..95cb450 100644
--- a/src/CompilerKit/src/Compilers/README.md
+++ b/src/CompilerKit/src/Compilers/README.md
@@ -4,7 +4,8 @@ The current status of Nectar's frontends.
## Current Status:
+The following status of each frontend to be implemented for Nectar.
+
- Nectar (Implemented)
-- C++ (Not implemented)
-- C (Not implemented)
+
diff --git a/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc b/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc
index 7d0bbc3..f44dcc8 100644
--- a/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc
+++ b/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc
@@ -19,6 +19,8 @@
#include <CompilerKit/UUID.h>
#include <CompilerKit/Utilities/Compiler.h>
+#define kLatestOSX (15)
+
#define kMachODefaultEntrypoint "_main"
#define kMachODefaultOutput {"a" kMachOExt}
@@ -47,7 +49,7 @@ static std::vector<CompilerKit::STLString> kObjectList;
static std::vector<CompilerKit::Detail::Blob> kTextBytes;
static std::vector<CompilerKit::Detail::Blob> kDataBytes;
-/* symbol table */
+/* @brief symbol tables */
static std::vector<nlist_64> kSymbolTable;
static std::vector<Char> kStringTable;
static std::map<CompilerKit::STLString, UInt64> kSymbolOffsets;
@@ -61,6 +63,8 @@ struct SectionInfo {
UInt64 size;
};
+using SectionInfoVec = std::vector<SectionInfo>;
+
/// @brief Extract clean symbol name from AE record name
/// AE format: ".code64$symbolname" or "symbolname.code64"
static CompilerKit::STLString macho_extract_symbol_name(const CompilerKit::STLString& aeName) {
@@ -116,7 +120,7 @@ static UInt32 macho_add_symbol(const CompilerKit::STLString& name, uint8_t type,
return static_cast<UInt32>(kSymbolTable.size() - 1);
}
-/// @brief Nectar 64-bit Mach-O Linker.
+/// @brief Nectar 64-bit Mach-O Linker.
/// @note This linker outputs Mach-O executables for macOS/iOS.
NECTAR_MODULE(DynamicLinker64MachO) {
CompilerKit::install_signal(SIGSEGV, CompilerKit::Detail::drvi_crash_handler);
@@ -124,7 +128,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
/**
* @brief parse flags and trigger options.
*/
- for (size_t linker_arg = 1; linker_arg < argc; ++linker_arg) {
+ for (size_t linker_arg{1}; linker_arg < argc; ++linker_arg) {
if (std::strcmp(argv[linker_arg], "-help") == 0) {
kLinkerSplash();
@@ -186,7 +190,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
continue;
} else {
if (argv[linker_arg][0] == '-') {
- kConsoleOut << "unknown flag: " << argv[linker_arg] << "\n";
+ kConsoleOut << "unknown option: " << argv[linker_arg] << "\n";
return EXIT_FAILURE;
}
@@ -214,7 +218,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
}
}
- std::vector<SectionInfo> sections;
+ SectionInfoVec sections;
CompilerKit::Utils::AEReadableProtocol reader_protocol{};
entry_point_command entryCommand{};
@@ -371,7 +375,7 @@ NECTAR_MODULE(DynamicLinker64MachO) {
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
+ (strlen(dylinker_command) + 13 + 1 + 7) & ~7; // "/usr/lib/dyld" + padding to 8-byte align
sizeOfCmds = pageZeroSize + textSegCmdSize + dataSegCmdSize + buildCmdSize + uuidCmdSize +
symtabCmdSize + dysymtabCmdSize + linkeditCmdSize + dylinkerCmdSize;
@@ -434,8 +438,8 @@ NECTAR_MODULE(DynamicLinker64MachO) {
build_version_command build = {.cmd = LC_BUILD_VERSION,
.cmdsize = sizeof(build_version_command),
.platform = PLATFORM_MACOS,
- .minos = (11 << 16), // macOS 11.0
- .sdk = (11 << 16), // macOS 11.0
+ .minos = (kLatestOSX << 16), // macOS 11.0
+ .sdk = (kLatestOSX << 16), // macOS 11.0
.ntools = 0};
output_fc.write(reinterpret_cast<const Char*>(&build), sizeof(build));
diff --git a/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc b/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc
index 5cbbba6..6be6c58 100644
--- a/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc
+++ b/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc
@@ -160,7 +160,7 @@ NECTAR_MODULE(DynamicLinker64PEF) {
continue;
} else {
if (argv[linker_arg][0] == '-') {
- kConsoleOut << "unknown flag: " << argv[linker_arg] << "\n";
+ kConsoleOut << "unknown option: " << argv[linker_arg] << "\n";
return EXIT_FAILURE;
}
@@ -605,7 +605,7 @@ NECTAR_MODULE(DynamicLinker64PEF) {
kConsoleOut << "Ignoring :UndefinedSymbol: headers...\n";
}
- // ignore :UndefinedSymbol: headers, they do not contain code.
+ // Let's ignore :UndefinedSymbol: headers, they do not contain code.
continue;
}