summaryrefslogtreecommitdiffhomepage
path: root/dev/LibCompiler/src/DynamicLinkerELF.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-01-09 13:12:48 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-01-09 13:12:48 +0100
commitac2debcd00dd78ad77f58d0c448862b76619ea61 (patch)
tree7a3b4201b7c60febcd08cdb99e97aa426302535c /dev/LibCompiler/src/DynamicLinkerELF.cc
parent4b0be5c40cab48a256f68c1e41b6af3d93512c61 (diff)
ADD: Minor improvements and refactors.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/LibCompiler/src/DynamicLinkerELF.cc')
-rw-r--r--dev/LibCompiler/src/DynamicLinkerELF.cc85
1 files changed, 85 insertions, 0 deletions
diff --git a/dev/LibCompiler/src/DynamicLinkerELF.cc b/dev/LibCompiler/src/DynamicLinkerELF.cc
new file mode 100644
index 0000000..7dd3440
--- /dev/null
+++ b/dev/LibCompiler/src/DynamicLinkerELF.cc
@@ -0,0 +1,85 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024 Theater Quality Corp, all rights reserved
+
+ @file DynamicLinker64PEF.cc
+ @brief: C++ 64-Bit PEF Linker.
+
+------------------------------------------- */
+
+/// @author EL Mahrouss Amlal (amlel)
+/// @brief TQ 64-bit PEF Linker.
+/// Last Rev: Sat Feb 24 CET 2024
+/// @note Do not look up for anything with .code64/.data64/.zero64!
+/// It will be loaded when the program loader will start the image.
+
+//! Toolchain Kit.
+#include <LibCompiler/Defines.h>
+
+#include <LibCompiler/NFC/ErrorID.h>
+
+//! Assembler Kit
+#include <LibCompiler/AAL/AssemblyInterface.h>
+
+//! Preferred Executable Format
+#include <LibCompiler/NFC/XCOFF.h>
+#include <LibCompiler/UUID.h>
+
+//! Release macros.
+#include <LibCompiler/Version.h>
+
+//! Advanced Executable Object Format.
+#include <LibCompiler/NFC/AE.h>
+#include <cstdint>
+
+#define kLinkerVersionStr "TQ 64-Bit Linker (ELF) %s, (c) Theater Quality Corp. 2024, all rights reserved.\n"
+
+#define MemoryCopy(DST, SRC, SZ) memcpy(DST, SRC, SZ)
+#define StringCompare(DST, SRC) strcmp(DST, SRC)
+
+#define kPefNoCpu 0U
+#define kPefNoSubCpu 0U
+
+#define kWhite "\e[0;97m"
+
+#define kStdOut (std::cout << kWhite << "ld64: ")
+
+#define kLinkerDefaultOrigin kPefBaseOrigin
+#define kLinkerId (0x5046FF)
+#define kLinkerAbiContainer "Container:ABI:"
+
+/// @brief PEF stack size symbol.
+#define kLinkerStackSizeSymbol "SizeOfReserveStack"
+
+namespace Detail
+{
+struct DynamicLinkerBlob final
+{
+ std::vector<CharType> mBlob{}; // PEF code/bss/data blob.
+ UIntPtr mObjOffset{0UL}; // the offset of the PEF container header..
+};
+}
+
+static Bool kFatBinaryEnable = false;
+static Bool kStartFound = false;
+static Bool kDuplicateSymbols = false;
+static Bool kVerbose = false;
+
+/* object code and list. */
+static std::vector<LibCompiler::String> kObjectList;
+static std::vector<Detail::DynamicLinkerBlob> kObjectBytes;
+
+static uintptr_t kMIBCount = 8;
+static uintptr_t kByteCount = 1024;
+
+#define kPrintF printf
+#define kLinkerSplash() kPrintF(kWhite kLinkerVersionStr, kDistVersion)
+
+/// @brief ZKA 64-bit Linker.
+/// @note This linker is made for XCOFF executable, thus ZKA based OSes.
+LIBCOMPILER_MODULE(DynamicLinker64XCOFF)
+{
+ return EXIT_SUCCESS;
+}
+
+// Last rev 13-1-24