summaryrefslogtreecommitdiffhomepage
path: root/Private/KernelKit/PEFSharedObject.hxx
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-05 21:10:18 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-05 21:10:18 +0200
commitf95d8bf159d10b5a9521dcaa0bc37aa0e9dfc02b (patch)
treebf8186f1a0521a64983bb0bca4f7b54883542195 /Private/KernelKit/PEFSharedObject.hxx
parent5a903c1d8f80ca8d7bc5fbea0aea710ce0133f9d (diff)
MHR-23: Add run_format.sh, kernel patches.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/KernelKit/PEFSharedObject.hxx')
-rw-r--r--Private/KernelKit/PEFSharedObject.hxx158
1 files changed, 89 insertions, 69 deletions
diff --git a/Private/KernelKit/PEFSharedObject.hxx b/Private/KernelKit/PEFSharedObject.hxx
index 185310ee..6176c31d 100644
--- a/Private/KernelKit/PEFSharedObject.hxx
+++ b/Private/KernelKit/PEFSharedObject.hxx
@@ -15,78 +15,98 @@
#include <KernelKit/PEFCodeManager.hxx>
#include <NewKit/Defines.hpp>
-namespace NewOS {
-/// @brief Pure implementation, missing method/function handler.
-extern "C" void __mh_purecall(void);
+namespace NewOS
+{
+ /// @brief Pure implementation, missing method/function handler.
+ extern "C" void __mh_purecall(void);
-/**
+ /**
* @brief Shared Library class
* Load library from this class
*/
-class SharedObject final {
- public:
- struct SharedObjectTrait final {
- VoidPtr fImageObject;
- VoidPtr fImageEntrypointOffset;
- };
-
- public:
- explicit SharedObject() = default;
- ~SharedObject() = default;
-
- public:
- NEWOS_COPY_DEFAULT(SharedObject);
-
- private:
- SharedObjectTrait *fMounted{nullptr};
-
- public:
- SharedObjectTrait **GetAddressOf() { return &fMounted; }
-
- SharedObjectTrait *Get() { return fMounted; }
-
- public:
- void Mount(SharedObjectTrait *to_mount) {
- if (!to_mount || !to_mount->fImageObject) return;
-
- fMounted = to_mount;
-
- if (fLoader && to_mount) {
- delete fLoader;
- fLoader = nullptr;
- }
-
- if (!fLoader) {
- fLoader = new PEFLoader(fMounted->fImageObject);
- }
- }
-
- void Unmount() {
- if (fMounted) fMounted = nullptr;
- };
-
- template <typename SymbolType>
- SymbolType Load(const char *symbol_name, SizeT len, Int32 kind) {
- if (symbol_name == nullptr || *symbol_name == 0) return nullptr;
- if (len > kPathLen || len < 1) return nullptr;
-
- auto ret =
- reinterpret_cast<SymbolType>(fLoader->FindSymbol(symbol_name, kind));
-
- if (!ret) {
- if (kind == kPefCode) return (VoidPtr)__mh_purecall;
-
- return nullptr;
- }
-
- return ret;
- }
-
- private:
- PEFLoader *fLoader{nullptr};
-};
-
-typedef SharedObject *SharedObjectPtr;
-} // namespace NewOS
+ class SharedObject final
+ {
+ public:
+ struct SharedObjectTrait final
+ {
+ VoidPtr fImageObject;
+ VoidPtr fImageEntrypointOffset;
+ };
+
+ public:
+ explicit SharedObject() = default;
+ ~SharedObject() = default;
+
+ public:
+ NEWOS_COPY_DEFAULT(SharedObject);
+
+ private:
+ SharedObjectTrait* fMounted{nullptr};
+
+ public:
+ SharedObjectTrait** GetAddressOf()
+ {
+ return &fMounted;
+ }
+
+ SharedObjectTrait* Get()
+ {
+ return fMounted;
+ }
+
+ public:
+ void Mount(SharedObjectTrait* to_mount)
+ {
+ if (!to_mount || !to_mount->fImageObject)
+ return;
+
+ fMounted = to_mount;
+
+ if (fLoader && to_mount)
+ {
+ delete fLoader;
+ fLoader = nullptr;
+ }
+
+ if (!fLoader)
+ {
+ fLoader = new PEFLoader(fMounted->fImageObject);
+ }
+ }
+
+ void Unmount()
+ {
+ if (fMounted)
+ fMounted = nullptr;
+ };
+
+ template <typename SymbolType>
+ SymbolType Load(const char* symbol_name, SizeT len, Int32 kind)
+ {
+ if (symbol_name == nullptr || *symbol_name == 0)
+ return nullptr;
+ if (len > kPathLen || len < 1)
+ return nullptr;
+
+ auto ret =
+ reinterpret_cast<SymbolType>(fLoader->FindSymbol(symbol_name, kind));
+
+ if (!ret)
+ {
+ if (kind == kPefCode)
+ return (VoidPtr)__mh_purecall;
+
+ return nullptr;
+ }
+
+ return ret;
+ }
+
+ private:
+ PEFLoader* fLoader{nullptr};
+ };
+
+ typedef SharedObject* SharedObjectPtr;
+} // namespace NewOS
#endif /* ifndef __KERNELKIT_SHARED_OBJECT_HXX__ */