summaryrefslogtreecommitdiffhomepage
path: root/Private
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-17 14:02:25 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-17 14:02:59 +0100
commit0b8628827a66d532fdeb7a294ca74cd9d8de60c5 (patch)
tree4e464f3c4cef210547741e9ed3be78c3b2259f49 /Private
parent44cb9590d86a507b226a7157b1c8d10ee4a63bb4 (diff)
Kernel\PEFCodeManager: Format symbol according to type or return
nullptr. Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private')
-rw-r--r--Private/Source/PEFCodeManager.cxx26
1 files changed, 25 insertions, 1 deletions
diff --git a/Private/Source/PEFCodeManager.cxx b/Private/Source/PEFCodeManager.cxx
index 530667cf..563dc019 100644
--- a/Private/Source/PEFCodeManager.cxx
+++ b/Private/Source/PEFCodeManager.cxx
@@ -18,6 +18,8 @@
#include <NewKit/RuntimeCheck.hpp>
#include <NewKit/String.hpp>
+#include "KernelKit/PEF.hpp"
+
namespace HCore {
namespace Detail {
UInt32 rt_get_pef_platform(void) noexcept {
@@ -88,12 +90,34 @@ VoidPtr PEFLoader::FindSymbol(const char *name, Int32 kind) {
PEFCommandHeader *container_header = reinterpret_cast<PEFCommandHeader *>(
(UIntPtr)fCachedBlob + sizeof(PEFContainer));
+ ErrorOr<StringView> errOrSym;
+
+ switch (kind) {
+ case kPefCode: {
+ errOrSym = StringBuilder::Construct(".text");
+ break;
+ }
+ case kPefData: {
+ errOrSym = StringBuilder::Construct(".data");
+ break;
+ }
+ case kPefZero: {
+ errOrSym = StringBuilder::Construct(".page_zero");
+ break;
+ }
+ default:
+ return nullptr;
+ }
+
+ errOrSym.Leak().Leak() += name;
+
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)) {
+ if (StringBuilder::Equals(container_header->Name,
+ errOrSym.Leak().Leak().CData())) {
kcout << "Found potential container, checking for validity.\n";
if (container_header->Kind == kind)