summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2024-10-26 21:55:26 +0200
committerAmlal <amlal.elmahrouss@icloud.com>2024-10-26 21:55:26 +0200
commitd2682692ba4b5261335f8fe61c91d34b19fc6e6c (patch)
tree77379dbc797d1dbd53b387386148b137af175c75
parent6dcf5b87da65de2254d6102f567183eaeca03088 (diff)
FIX: Improved kernel code and finding the root cause of the GPF and Double Fault.
(Mostly includes KernelKit changes, also CompilerKit has changed regarding versioning) Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
-rw-r--r--dev/zba/src/BootFileReader.cc4
-rw-r--r--dev/zka/CompilerKit/Version.h4
-rw-r--r--dev/zka/KernelKit/Defines.h6
-rw-r--r--dev/zka/KernelKit/FileMgr.h71
-rw-r--r--dev/zka/KernelKit/UserProcessScheduler.h21
-rw-r--r--dev/zka/src/HardwareThreadScheduler.cc3
-rw-r--r--dev/zka/src/NeFS+FileMgr.cc4
-rw-r--r--dev/zka/src/PEFCodeMgr.cc2
-rw-r--r--dev/zka/src/User.cc13
-rw-r--r--dev/zka/src/UserProcessScheduler.cc3
10 files changed, 67 insertions, 64 deletions
diff --git a/dev/zba/src/BootFileReader.cc b/dev/zba/src/BootFileReader.cc
index ab5d53ee..b5866d5a 100644
--- a/dev/zba/src/BootFileReader.cc
+++ b/dev/zba/src/BootFileReader.cc
@@ -133,9 +133,9 @@ Void Boot::BFileReader::ReadAll(SizeT readUntil, SizeT chunkToRead, UIntPtr out_
EfiFileInfo newPtrInfo;
UInt32 szInfo = 0;
- EfiGUID cFileInfoGUID = EFI_FILE_INFO_GUID;
+ EfiGUID kFileInfoGUID = EFI_FILE_INFO_GUID;
- if (mFile->GetInfo(mFile, &cFileInfoGUID, &szInfo, &newPtrInfo) == kEfiOk)
+ if (mFile->GetInfo(mFile, &kFileInfoGUID, &szInfo, &newPtrInfo) == kEfiOk)
{
if (newPtrInfo.FileSize < readUntil)
readUntil = newPtrInfo.FileSize;
diff --git a/dev/zka/CompilerKit/Version.h b/dev/zka/CompilerKit/Version.h
index 460fe2ee..1a4608b0 100644
--- a/dev/zka/CompilerKit/Version.h
+++ b/dev/zka/CompilerKit/Version.h
@@ -3,5 +3,5 @@
#pragma once
/// <COMMIT NUMBER>.<YEAR>.<PROGRAM VERSION>
-#define BOOTLOADER_VERSION "930.2024.1"
-#define KERNEL_VERSION "930.2024.1"
+#define BOOTLOADER_VERSION "1010.2024.110"
+#define KERNEL_VERSION "1010.2024.110"
diff --git a/dev/zka/KernelKit/Defines.h b/dev/zka/KernelKit/Defines.h
index 48befc8e..ff214b15 100644
--- a/dev/zka/KernelKit/Defines.h
+++ b/dev/zka/KernelKit/Defines.h
@@ -8,4 +8,8 @@
#include <NewKit/Defines.h>
-#define KERNELKIT_VERSION "1.02"
+#define KERNELKIT_VERSION "1.0.2"
+#define KERNELKIT_VERSION_BCD 0x01020
+
+class UserProcessScheduler;
+class UserProcess;
diff --git a/dev/zka/KernelKit/FileMgr.h b/dev/zka/KernelKit/FileMgr.h
index af302a64..8b7636e2 100644
--- a/dev/zka/KernelKit/FileMgr.h
+++ b/dev/zka/KernelKit/FileMgr.h
@@ -23,6 +23,11 @@
#include <FSKit/NeFS.h>
#endif // __FSKIT_INCLUDES_NEFS__
+#ifdef __FSKIT_INCLUDES_HPFS__
+#include <FSKit/HPFS.h>
+#endif // __FSKIT_INCLUDES_HPFS__
+
+
#include <CompilerKit/CompilerKit.h>
#include <HintKit/CompilerHint.h>
#include <KernelKit/LPC.h>
@@ -35,21 +40,21 @@
/// @brief Filesystem manager, abstraction over mounted filesystem.
/// Works like the VFS or IFS.
-#define cRestrictR "r"
-#define cRestrictRB "rb"
-#define cRestrictW "w"
-#define cRestrictWB "rw"
-#define cRestrictRWB "rwb"
+#define kRestrictR "r"
+#define kRestrictRB "rb"
+#define kRestrictW "w"
+#define kRestrictWB "rw"
+#define kRestrictRWB "rwb"
-#define cRestrictMax 5
+#define kRestrictMax (5U)
#define node_cast(PTR) reinterpret_cast<Kernel::NodePtr>(PTR)
/**
@note Refer to first enum.
*/
-#define cFileOpsCount 4
-#define cFileMimeGeneric "n-application-kind/all"
+#define kFileOpsCount (4U)
+#define kFileMimeGeneric "n-application-kind/all"
/** @brief invalid position. (n-pos) */
#define kNPos (SizeT)(-1);
@@ -58,14 +63,14 @@ namespace Kernel
{
enum
{
- cFileWriteAll = 100,
- cFileReadAll = 101,
- cFileReadChunk = 102,
- cFileWriteChunk = 103,
- cFileIOCnt = (cFileWriteChunk - cFileWriteAll) + 1,
+ kFileWriteAll = 100,
+ kFileReadAll = 101,
+ kFileReadChunk = 102,
+ kFileWriteChunk = 103,
+ kFileIOCnt = (kFileWriteChunk - kFileWriteAll) + 1,
// file flags
- cFileFlagRsrc = 104,
- cFileFlagData = 105,
+ kFileFlagRsrc = 104,
+ kFileFlagData = 105,
};
typedef VoidPtr NodePtr;
@@ -219,7 +224,7 @@ namespace Kernel
if (man)
{
- man->Write(fFile, data, cFileWriteAll);
+ man->Write(fFile, data, kFileWriteAll);
return ErrorOr<Int64>(0);
}
@@ -238,7 +243,7 @@ namespace Kernel
if (man)
{
- VoidPtr ret = man->Read(fFile, cFileReadAll, 0);
+ VoidPtr ret = man->Read(fFile, kFileReadAll, 0);
return ret;
}
@@ -260,7 +265,7 @@ namespace Kernel
if (man)
{
- man->Write(fName, fFile, data, cFileWriteAll);
+ man->Write(fName, fFile, data, kFileWriteAll);
return ErrorOr<Int64>(0);
}
@@ -279,7 +284,7 @@ namespace Kernel
if (man)
{
- VoidPtr ret = man->Read(fName, fFile, cFileReadAll, 0);
+ VoidPtr ret = man->Read(fName, fFile, kFileReadAll, 0);
return ret;
}
@@ -299,7 +304,7 @@ namespace Kernel
if (man)
{
man->Seek(fFile, offset);
- auto ret = man->Read(fFile, cFileReadChunk, sz);
+ auto ret = man->Read(fFile, kFileReadChunk, sz);
return ret;
}
@@ -320,7 +325,7 @@ namespace Kernel
if (man)
{
man->Seek(fFile, offset);
- man->Write(fFile, data, sz, cFileReadChunk);
+ man->Write(fFile, data, sz, kFileReadChunk);
}
}
@@ -352,7 +357,7 @@ namespace Kernel
private:
NodePtr fFile{nullptr};
Int32 fFileRestrict{};
- const Char* fMime{cFileMimeGeneric};
+ const Char* fMime{kFileMimeGeneric};
};
using FileStreamUTF8 = FileStream<Char>;
@@ -375,35 +380,35 @@ namespace Kernel
Int32 fMappedTo;
};
- const SizeT cRestrictCount = cRestrictMax;
- const RESTRICT_MAP cRestrictList[] = {
+ const SizeT kRestrictCount = kRestrictMax;
+ const RESTRICT_MAP kRestrictList[] = {
{
- .fRestrict = cRestrictR,
+ .fRestrict = kRestrictR,
.fMappedTo = eRestrictRead,
},
{
- .fRestrict = cRestrictRB,
+ .fRestrict = kRestrictRB,
.fMappedTo = eRestrictReadBinary,
},
{
- .fRestrict = cRestrictRWB,
+ .fRestrict = kRestrictRWB,
.fMappedTo = eRestrictReadWriteBinary,
},
{
- .fRestrict = cRestrictW,
+ .fRestrict = kRestrictW,
.fMappedTo = eRestrictWrite,
},
{
- .fRestrict = cRestrictWB,
+ .fRestrict = kRestrictWB,
.fMappedTo = eRestrictReadWrite,
}};
- for (SizeT index = 0; index < cRestrictCount; ++index)
+ for (SizeT index = 0; index < kRestrictCount; ++index)
{
- if (rt_string_cmp(restrict_type, cRestrictList[index].fRestrict,
- rt_string_len(cRestrictList[index].fRestrict)) == 0)
+ if (rt_string_cmp(restrict_type, kRestrictList[index].fRestrict,
+ rt_string_len(kRestrictList[index].fRestrict)) == 0)
{
- fFileRestrict = cRestrictList[index].fMappedTo;
+ fFileRestrict = kRestrictList[index].fMappedTo;
break;
}
}
diff --git a/dev/zka/KernelKit/UserProcessScheduler.h b/dev/zka/KernelKit/UserProcessScheduler.h
index c819b708..2a525ee7 100644
--- a/dev/zka/KernelKit/UserProcessScheduler.h
+++ b/dev/zka/KernelKit/UserProcessScheduler.h
@@ -35,13 +35,13 @@ namespace Kernel
class UserProcessScheduler;
class UserProcessHelper;
- //! @brief UserProcess identifier.
+ //! @brief Local Process identifier.
typedef Int64 ProcessID;
- //! @brief UserProcess name length.
+ //! @brief Local Process name length.
inline constexpr SizeT kProcessLen = 256U;
- //! @brief UserProcess status enum.
+ //! @brief Local Process status enum.
enum class ProcessStatusKind : Int32
{
kStarting,
@@ -138,10 +138,8 @@ namespace Kernel
~UserProcess() = default;
- ZKA_COPY_DEFAULT(UserProcess)
-
public:
- const UInt32& GetExitCode() noexcept;
+ ZKA_COPY_DEFAULT(UserProcess)
public:
Char Name[kProcessLen] = {"Process"};
@@ -151,16 +149,9 @@ namespace Kernel
AffinityKind Affinity{AffinityKind::kStandard};
ProcessStatusKind Status{ProcessStatusKind::kDead};
UInt8* StackReserve{nullptr};
-
- //! @brief Code Image.
ImagePtr Image{nullptr};
-
SizeT StackSize{kSchedMaxStackSz};
-
- //! @brief Shared library handle, reserved for kExectuableDLLKind types of executables only.
IPEFDLLObject* PefDLLDelegate{nullptr};
-
- // Memory usage.
SizeT MemoryCursor{0};
SizeT MemoryLimit{kSchedMaxMemoryLimit};
@@ -211,8 +202,10 @@ namespace Kernel
///! @brief Wakes up threads.
Void Wake(const bool wakeup = false);
- // UserProcess getters.
public:
+ //! @brief Gets the local exit code.
+ const UInt32& GetExitCode() noexcept;
+
///! @brief Get the process's name
///! @example 'C Runtime Library'
const Char* GetProcessName() noexcept;
diff --git a/dev/zka/src/HardwareThreadScheduler.cc b/dev/zka/src/HardwareThreadScheduler.cc
index c1d06531..ddfd0ee7 100644
--- a/dev/zka/src/HardwareThreadScheduler.cc
+++ b/dev/zka/src/HardwareThreadScheduler.cc
@@ -41,6 +41,7 @@ namespace Kernel
}
//! @brief is the thread busy?
+ //! @return whether the thread is busy or not.
Bool HardwareThread::IsBusy() noexcept
{
STATIC Int64 busy_timer = 0U;
@@ -51,6 +52,8 @@ namespace Kernel
fBusy = No;
}
+ ++busy_timer;
+
return fBusy;
}
diff --git a/dev/zka/src/NeFS+FileMgr.cc b/dev/zka/src/NeFS+FileMgr.cc
index dcc9c3b2..858b4ee0 100644
--- a/dev/zka/src/NeFS+FileMgr.cc
+++ b/dev/zka/src/NeFS+FileMgr.cc
@@ -172,7 +172,7 @@ namespace Kernel
ZKA_UNUSED(flags);
if ((reinterpret_cast<NFS_CATALOG_STRUCT*>(node))->Kind == kNeFSCatalogKindFile)
- fImpl->WriteCatalog(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), (flags & cFileFlagRsrc ? true : false), data, size,
+ fImpl->WriteCatalog(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), (flags & kFileFlagRsrc ? true : false), data, size,
name);
}
@@ -190,7 +190,7 @@ namespace Kernel
ZKA_UNUSED(flags);
if ((reinterpret_cast<NFS_CATALOG_STRUCT*>(node))->Kind == kNeFSCatalogKindFile)
- return fImpl->ReadCatalog(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), (flags & cFileFlagRsrc ? true : false), sz,
+ return fImpl->ReadCatalog(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), (flags & kFileFlagRsrc ? true : false), sz,
name);
return nullptr;
diff --git a/dev/zka/src/PEFCodeMgr.cc b/dev/zka/src/PEFCodeMgr.cc
index 44c14b42..7065cdda 100644
--- a/dev/zka/src/PEFCodeMgr.cc
+++ b/dev/zka/src/PEFCodeMgr.cc
@@ -55,7 +55,7 @@ namespace Kernel
PEFLoader::PEFLoader(const Char* path)
: fCachedBlob(nullptr), fBad(false), fFatBinary(false)
{
- fFile.New(const_cast<Char*>(path), cRestrictRB);
+ fFile.New(const_cast<Char*>(path), kRestrictRB);
fPath = StringBuilder::Construct(path).Leak();
auto cPefHeader = "PEF_CONTAINER";
diff --git a/dev/zka/src/User.cc b/dev/zka/src/User.cc
index 80a14041..55ef0c60 100644
--- a/dev/zka/src/User.cc
+++ b/dev/zka/src/User.cc
@@ -11,15 +11,14 @@
*/
#include <KernelKit/User.h>
-
#include <KernelKit/LPC.h>
#include <NewKit/Stop.h>
#include <KernelKit/FileMgr.h>
#include <KernelKit/UserProcessScheduler.h>
#include <KernelKit/Heap.h>
-#define cStdUser (0xCEEF)
-#define cSuperUser (0xECCF)
+#define kStdUserType (0xCEEF)
+#define kSuperUserType (0xECCF)
/// BUGS: 0
@@ -35,19 +34,19 @@ namespace Kernel
if (!password || !user)
return -1;
- kcout << "Constructing password...\r";
+ kcout << "Hashing password...\r";
for (Size i_pass = 0; i_pass < length; ++i_pass)
{
- Char cur_chr = in_password[i_pass];
+ Char& cur_chr = in_password[i_pass];
if (cur_chr == 0)
break;
- password[i_pass] = cur_chr + (user->IsStdUser() ? cStdUser : cSuperUser);
+ password[i_pass] = cur_chr + (user->IsStdUser() ? kStdUserType : kSuperUserType);
}
- kcout << "Done constructing password...\r";
+ kcout << "Done hashing password!\r";
return 0;
}
diff --git a/dev/zka/src/UserProcessScheduler.cc b/dev/zka/src/UserProcessScheduler.cc
index 844afa5d..090faf32 100644
--- a/dev/zka/src/UserProcessScheduler.cc
+++ b/dev/zka/src/UserProcessScheduler.cc
@@ -451,8 +451,7 @@ namespace Kernel
}
else
{
- if (process.Status == ProcessStatusKind::kRunning)
- --process.PTime;
+ --process.PTime;
}
}