summaryrefslogtreecommitdiffhomepage
path: root/Private/Source/CodeManager.cxx
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-31 19:36:16 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-31 19:36:16 +0100
commit8621867b0e4b38dedc8556e6c483e3575d776af0 (patch)
treeae8e9d271db301dc3f9433b909cd80636a8196e5 /Private/Source/CodeManager.cxx
parent8f7904569a60721cfd051a359dd17cc86ea67cfe (diff)
Kernel: Many improvements done to the kernel and it's HAL and protocols.
Will implement BFileReader on next commit. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/Source/CodeManager.cxx')
-rw-r--r--Private/Source/CodeManager.cxx137
1 files changed, 0 insertions, 137 deletions
diff --git a/Private/Source/CodeManager.cxx b/Private/Source/CodeManager.cxx
deleted file mode 100644
index 8804d1ca..00000000
--- a/Private/Source/CodeManager.cxx
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * ========================================================
- *
- * HCore
- * Copyright Mahrouss Logic, all rights reserved.
- *
- * ========================================================
- */
-
-#include <KernelKit/CodeManager.hpp>
-#include <KernelKit/DebugOutput.hpp>
-#include <KernelKit/FileManager.hpp>
-#include <KernelKit/ProcessManager.hpp>
-#include <NewKit/Defines.hpp>
-#include <NewKit/ErrorID.hpp>
-#include <NewKit/KernelHeap.hpp>
-#include <NewKit/OwnPtr.hpp>
-#include <NewKit/RuntimeCheck.hpp>
-#include <NewKit/String.hpp>
-
-namespace HCore {
-namespace Detail {
-UInt32 rt_get_pef_platform(void) noexcept {
-#ifdef __32x0__
- return kPefArch32x0;
-#elif defined(__64x0__)
- return kPefArch64x0;
-#elif defined(__x86_64__)
- return kPefArchAMD64;
-#else
- return kPefArchInvalid;
-#endif // __POWER || __x86_64__
-}
-} // namespace Detail
-
-PEFLoader::PEFLoader(const VoidPtr blob) : fCachedBlob(nullptr) {
- fCachedBlob = blob;
- fBad = false;
-
- MUST_PASS(fCachedBlob);
-}
-
-PEFLoader::PEFLoader(const char *path) : fCachedBlob(nullptr), fBad(false) {
- OwnPtr<FileStream<char>> file;
-
- file.New(const_cast<Char *>(path));
-
- if (StringBuilder::Equals(file->MIME(), this->MIME())) {
- fPath = StringBuilder::Construct(path).Leak();
-
- fCachedBlob = file->ReadAll();
-
- PEFContainer *container = reinterpret_cast<PEFContainer *>(fCachedBlob);
-
- auto fFree = [&]() -> void {
- kcout << "CodeManager: Warning: Bad executable, program will not be "
- "started!\n";
- fBad = true;
-
- ke_delete_ke_heap(fCachedBlob);
-
- fCachedBlob = nullptr;
- };
-
- if (container->Cpu == Detail::rt_get_pef_platform() &&
- container->Magic[0] == kPefMagic[0] &&
- container->Magic[1] == kPefMagic[1] &&
- container->Magic[2] == kPefMagic[2] && container->Abi == kPefAbi) {
- if (container->Kind != kPefKindObject &&
- container->Kind != kPefKindDebug) {
- kcout << "CodeManager: Info: Good executable. can proceed.\n";
- return;
- }
- }
-
- fFree();
- }
-}
-
-PEFLoader::~PEFLoader() {
- if (fCachedBlob) ke_delete_ke_heap(fCachedBlob);
-}
-
-VoidPtr PEFLoader::FindSymbol(const char *name, Int32 kind) {
- if (!fCachedBlob || fBad) return nullptr;
-
- PEFContainer *container = reinterpret_cast<PEFContainer *>(fCachedBlob);
-
- PEFCommandHeader *container_header = reinterpret_cast<PEFCommandHeader *>(
- (UIntPtr)fCachedBlob + sizeof(PEFContainer));
-
- for (SizeT index = 0; index < container->Count; ++index) {
- kcout << "Iterating over container at index: "
- << StringBuilder::FromInt("%", index)
- << ", name: " << container_header->Name << "\n";
-
- if (StringBuilder::Equals(container_header->Name, name)) {
- kcout << "Found potential container, checking for validity.\n";
-
- if (container_header->Kind == kind)
- return static_cast<UIntPtr *>(fCachedBlob) + container_header->Offset;
-
- continue;
- }
- }
-
- return nullptr;
-}
-
-ErrorOr<VoidPtr> PEFLoader::LoadStart() {
- if (auto sym = this->FindSymbol("__start", kPefCode); sym)
- return ErrorOr<VoidPtr>(sym);
-
- return ErrorOr<VoidPtr>(H_EXEC_ERROR);
-}
-
-bool PEFLoader::IsLoaded() noexcept { return !fBad && fCachedBlob; }
-
-namespace Utils {
-bool execute_from_image(PEFLoader &exec) noexcept {
- auto errOrStart = exec.LoadStart();
-
- if (errOrStart.Error() != 0) return false;
-
- Process proc(errOrStart.Leak().Leak());
- Ref<Process> refProc = proc;
-
- return ProcessManager::Shared().Leak().Add(refProc);
-}
-} // namespace Utils
-
-const char *PEFLoader::Path() { return fPath.Leak().CData(); }
-
-const char *PEFLoader::Format() { return "PEF"; }
-
-const char *PEFLoader::MIME() { return "application/x-exec"; }
-} // namespace HCore