diff options
| -rw-r--r-- | doc/cpp_style.md | 10 | ||||
| -rw-r--r-- | include/GenericsLibrary/nrt.nc | 2 | ||||
| -rw-r--r-- | src/CompilerKit/src/Compilers/README.md | 5 | ||||
| -rw-r--r-- | src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc | 20 | ||||
| -rw-r--r-- | src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc | 4 |
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; } |
