summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-31 16:15:14 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-31 16:15:14 +0200
commitab50405003c88095d38102e5223fcd52783441db (patch)
tree1872dccd81ee7e2e26b55271e80848ebcf6594d6 /dev
parent0baeaa7bd4ed71f150124c4808827e1903983a8e (diff)
[IMP] Add StackReserve header, for scheduler.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev')
-rw-r--r--dev/ndkdll/Sources/Linker.cxx30
1 files changed, 23 insertions, 7 deletions
diff --git a/dev/ndkdll/Sources/Linker.cxx b/dev/ndkdll/Sources/Linker.cxx
index 68e2aab..c9a9184 100644
--- a/dev/ndkdll/Sources/Linker.cxx
+++ b/dev/ndkdll/Sources/Linker.cxx
@@ -49,6 +49,9 @@
#define kLinkerId 0x5046FF
#define kLinkerAbiContainer "Container:Abi:"
+/// @brief PEF stack size symbol.
+#define kLinkerStackSizeSymbol "SizeOfReserveStack"
+
enum
{
eABIStart = 0x1010, /* Invalid ABI start of ABI list. */
@@ -74,6 +77,8 @@ static const char* kLdDynamicSym = ":RuntimeSymbol:";
static std::vector<std::string> kObjectList;
static std::vector<char> kObjectBytes;
+static uintptr_t kMIBCount = 8;
+
#define kPrintF printf
#define kLinkerSplash() kPrintF(kWhite kLinkerVersion, kDistVersion)
@@ -105,7 +110,7 @@ NDK_MODULE(ZKALinkerMain)
return 0;
}
- else if (StringCompare(argv[i], "/Ver") == 0)
+ else if (StringCompare(argv[i], "/VER") == 0)
{
kLinkerSplash();
return 0;
@@ -116,37 +121,37 @@ NDK_MODULE(ZKALinkerMain)
continue;
}
- else if (StringCompare(argv[i], "/64x0") == 0)
+ else if (StringCompare(argv[i], "/64X0") == 0)
{
kArch = NDK::kPefArch64000;
continue;
}
- else if (StringCompare(argv[i], "/amd64") == 0)
+ else if (StringCompare(argv[i], "/AMD64") == 0)
{
kArch = NDK::kPefArchAMD64;
continue;
}
- else if (StringCompare(argv[i], "/32x0") == 0)
+ else if (StringCompare(argv[i], "/32X0") == 0)
{
kArch = NDK::kPefArch32000;
continue;
}
- else if (StringCompare(argv[i], "/power64") == 0)
+ else if (StringCompare(argv[i], "/POWER64") == 0)
{
kArch = NDK::kPefArchPowerPC;
continue;
}
- else if (StringCompare(argv[i], "/arm64") == 0)
+ else if (StringCompare(argv[i], "/ARM64") == 0)
{
kArch = NDK::kPefArchARM64;
continue;
}
- else if (StringCompare(argv[i], "/Verbose") == 0)
+ else if (StringCompare(argv[i], "/VERBOSE") == 0)
{
kVerbose = true;
@@ -558,6 +563,17 @@ NDK_MODULE(ZKALinkerMain)
commandHdrsList.push_back(abiHeader);
+
+ NDK::PEFCommandHeader stackHeader{0};
+
+ stackHeader.Cpu = kArch;
+ stackHeader.Flags = 0;
+ stackHeader.Size = sizeof(uintptr_t);
+ stackHeader.Offset = (kMIBCount * 1024 * 1024);
+ memcpy(stackHeader.Name, kLinkerStackSizeSymbol, strlen(kLinkerStackSizeSymbol));
+
+ commandHdrsList.push_back(stackHeader);
+
NDK::PEFCommandHeader uuidHeader{};
std::random_device rd;