diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-06 09:14:11 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-06 09:14:11 +0100 |
| commit | 5339d016c07bf717ee388f4feb73544087324af0 (patch) | |
| tree | 94be6f67ed626091f24aee24ec3b3be03d01e4e7 /KernelKit/CodeManager.hpp | |
git: port from mercurial repo.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'KernelKit/CodeManager.hpp')
| -rw-r--r-- | KernelKit/CodeManager.hpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/KernelKit/CodeManager.hpp b/KernelKit/CodeManager.hpp new file mode 100644 index 00000000..61b609c6 --- /dev/null +++ b/KernelKit/CodeManager.hpp @@ -0,0 +1,74 @@ +/* +* ======================================================== +* +* hCore +* Copyright Mahrouss Logic, all rights reserved. +* +* ======================================================== +*/ + +#ifndef _INC_CODE_MANAGER_ +#define _INC_CODE_MANAGER_ + +#include <KernelKit/PEF.hpp> +#include <NewKit/ErrorOr.hpp> +#include <NewKit/String.hpp> + +namespace hCore +{ + /// + /// \name PEFLoader + /// PEF container format implementation. + /// + class PEFLoader : public Loader + { + PEFLoader() = delete; + + public: + explicit PEFLoader(const char* path); + ~PEFLoader() override; + + public: + HCORE_COPY_DEFAULT(PEFLoader); + + public: + typedef void(*MainKind)(void); + + public: + const char* Path() override; + const char* Format() override; + const char* MIME() override; + + public: + ErrorOr<VoidPtr> LoadStart() override; + VoidPtr FindSymbol(const char* name, Int32 kind) override; + + public: + bool IsLoaded() noexcept; + + private: + Ref<StringView> fPath; + VoidPtr fCachedBlob; + bool fBad; + + }; + + namespace Utils + { + /// \brief Much like Mac OS's UPP. + /// It cover other architecture code. + /// PowerPC <-> AMD64 for example. + typedef struct UniversalProcedureTable + { + public: + Char symbolName[kPefNameLen]; + VoidPtr symbolPtr; + SizeT symbolArchitecture; + + } UniversalProcedureTableType; + + bool execute_from_image(PEFLoader& exec); + } +} + +#endif // ifndef _INC_CODE_MANAGER_ |
