summaryrefslogtreecommitdiffhomepage
path: root/src/kernel/KernelKit/IDylibObject.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-23 21:06:27 -0500
committerGitHub <noreply@github.com>2025-11-23 21:06:27 -0500
commit23040fad647634c08697451fc22ee2ca999629c8 (patch)
tree72888f88c7728c82f3f6df1f4f70591de15eab36 /src/kernel/KernelKit/IDylibObject.h
parente5cc7351f0577b54c528fb827a7c7e6306c3e843 (diff)
parent83d870e58457a1d335a1d9b9966a6a1887cc297b (diff)
Merge pull request #81 from nekernel-org/dev
feat! breaking changes on kernel sources.
Diffstat (limited to 'src/kernel/KernelKit/IDylibObject.h')
-rw-r--r--src/kernel/KernelKit/IDylibObject.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/kernel/KernelKit/IDylibObject.h b/src/kernel/KernelKit/IDylibObject.h
new file mode 100644
index 00000000..ef6b96db
--- /dev/null
+++ b/src/kernel/KernelKit/IDylibObject.h
@@ -0,0 +1,45 @@
+/*
+ * ========================================================
+ *
+ * Kernel
+ * Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
+ *
+ * ========================================================
+ */
+
+#pragma once
+
+#include <CompilerKit/CompilerKit.h>
+#include <NeKit/Defines.h>
+
+#define NE_DYLIB_OBJECT : public IDylibObject
+
+namespace Kernel {
+class IDylibObject;
+
+/// @brief Dylib class object. A handle to a shared library.
+class IDylibObject {
+ public:
+ explicit IDylibObject() = default;
+ virtual ~IDylibObject() = default;
+
+ struct DylibTraits final {
+ VoidPtr ImageObject{nullptr};
+ VoidPtr ImageEntrypointOffset{nullptr};
+
+ VoidPtr Image() const { return ImageObject; }
+ Bool IsValid() const { return ImageObject && ImageEntrypointOffset; }
+ };
+
+ NE_COPY_DEFAULT(IDylibObject)
+
+ virtual DylibTraits** GetAddressOf() = 0;
+ virtual DylibTraits* Get() = 0;
+
+ virtual Void Mount(DylibTraits* to_mount) = 0;
+ virtual Void Unmount() = 0;
+};
+
+/// @brief Pure implementation, missing method/function handler.
+EXTERN_C void __ne_pure_call(void);
+} // namespace Kernel