summaryrefslogtreecommitdiff
path: root/platform/efi/platform_efi.cpp
diff options
context:
space:
mode:
authorBrandon Miller <brandon@vector35.com>2025-05-08 15:08:10 -0400
committerBrandon Miller <brandon@vector35.com>2025-05-08 15:08:10 -0400
commit5147249a644f611a801aada7645b7a993fc8e314 (patch)
tree3a18e50df5ae9edcf31f3545a7f27774021c76a1 /platform/efi/platform_efi.cpp
parentf7e831ab40a5031cec9186096a90d94735080ed7 (diff)
Implement EFI resolver as a module workflow
Diffstat (limited to 'platform/efi/platform_efi.cpp')
-rw-r--r--platform/efi/platform_efi.cpp113
1 files changed, 19 insertions, 94 deletions
diff --git a/platform/efi/platform_efi.cpp b/platform/efi/platform_efi.cpp
index 9f9840b2..d3ba74e2 100644
--- a/platform/efi/platform_efi.cpp
+++ b/platform/efi/platform_efi.cpp
@@ -20,7 +20,6 @@ public:
Ref<CallingConvention> cc;
m_idtr = arch->GetRegisterByName("idtr");
-
cc = arch->GetCallingConventionByName("cdecl");
if (cc)
{
@@ -58,19 +57,7 @@ public:
virtual void BinaryViewInit(BinaryView* view) override
{
- if (!m_idtrtype)
- m_idtrtype = Type::NamedType(QualifiedName("IDTR32"), GetTypeByName(QualifiedName("IDTR32")));
-
- auto ctx = PluginCommandContext();
- ctx.binaryView = view;
- auto commandList = PluginCommand::GetValidList(ctx);
- for (auto command : commandList)
- {
- if (command.GetName() == "EFI Resolver\\Resolve EFI Types And Protocols")
- {
- command.Execute(ctx);
- }
- }
+ m_idtrtype = Type::NamedType(QualifiedName("IDTR32"), GetTypeByName(QualifiedName("IDTR32")));
}
virtual Ref<Type> GetGlobalRegisterType(uint32_t reg) override
@@ -95,7 +82,6 @@ public:
Ref<CallingConvention> cc;
m_idtr = arch->GetRegisterByName("idtr");
-
cc = arch->GetCallingConventionByName("cdecl");
if (cc)
{
@@ -133,19 +119,7 @@ public:
virtual void BinaryViewInit(BinaryView* view) override
{
- if (!m_idtrtype)
- m_idtrtype = Type::NamedType(QualifiedName("IDTR32"), GetTypeByName(QualifiedName("IDTR32")));
-
- auto ctx = PluginCommandContext();
- ctx.binaryView = view;
- auto commandList = PluginCommand::GetValidList(ctx);
- for (auto command : commandList)
- {
- if (command.GetName() == "EFI Resolver\\Resolve EFI Types And Protocols")
- {
- command.Execute(ctx);
- }
- }
+ m_idtrtype = Type::NamedType(QualifiedName("IDTR32"), GetTypeByName(QualifiedName("IDTR32")));
}
virtual Ref<Type> GetGlobalRegisterType(uint32_t reg) override
@@ -191,19 +165,7 @@ public:
virtual void BinaryViewInit(BinaryView* view) override
{
- if (!m_idtrtype)
- m_idtrtype = Type::NamedType(QualifiedName("IDTR64"), GetTypeByName(QualifiedName("IDTR64")));
-
- auto ctx = PluginCommandContext();
- ctx.binaryView = view;
- auto commandList = PluginCommand::GetValidList(ctx);
- for (auto command : commandList)
- {
- if (command.GetName() == "EFI Resolver\\Resolve EFI Types And Protocols")
- {
- command.Execute(ctx);
- }
- }
+ m_idtrtype = Type::NamedType(QualifiedName("IDTR64"), GetTypeByName(QualifiedName("IDTR64")));
}
virtual Ref<Type> GetGlobalRegisterType(uint32_t reg) override
@@ -249,19 +211,7 @@ public:
virtual void BinaryViewInit(BinaryView* view) override
{
- if (!m_idtrtype)
- m_idtrtype = Type::NamedType(QualifiedName("IDTR64"), GetTypeByName(QualifiedName("IDTR64")));
-
- auto ctx = PluginCommandContext();
- ctx.binaryView = view;
- auto commandList = PluginCommand::GetValidList(ctx);
- for (auto command : commandList)
- {
- if (command.GetName() == "EFI Resolver\\Resolve EFI Types And Protocols")
- {
- command.Execute(ctx);
- }
- }
+ m_idtrtype = Type::NamedType(QualifiedName("IDTR64"), GetTypeByName(QualifiedName("IDTR64")));
}
virtual Ref<Type> GetGlobalRegisterType(uint32_t reg) override
@@ -324,26 +274,6 @@ public:
}
}
- virtual void BinaryViewInit(BinaryView* view) override
- {
- if (!m_tpidrel0type)
- m_tpidrel0type = Type::NamedType(QualifiedName("EFI_PEI_SERVICES"),
- Type::PointerType(view->GetDefaultArchitecture(),
- Type::PointerType(
- view->GetDefaultArchitecture(), GetTypeByName(QualifiedName("EFI_PEI_SERVICES")))));
-
- auto ctx = PluginCommandContext();
- ctx.binaryView = view;
- auto commandList = PluginCommand::GetValidList(ctx);
- for (auto command : commandList)
- {
- if (command.GetName() == "EFI Resolver\\Resolve EFI Types And Protocols")
- {
- command.Execute(ctx);
- }
- }
- }
-
static Ref<Platform> Recognize(BinaryView* view, Metadata* metadata)
{
Ref<Metadata> subsystem = metadata->Get("Subsystem");
@@ -354,6 +284,13 @@ public:
return nullptr;
}
+ virtual void BinaryViewInit(BinaryView* view) override
+ {
+ m_tpidrel0type = Type::NamedType(QualifiedName("EFI_PEI_SERVICES"),
+ Type::PointerType(GetArchitecture(),
+ Type::PointerType(GetArchitecture(), GetTypeByName(QualifiedName("EFI_PEI_SERVICES")))));
+ }
+
virtual Ref<Type> GetGlobalRegisterType(uint32_t reg) override
{
if (reg == m_tpidrel0)
@@ -384,26 +321,6 @@ public:
}
}
- virtual void BinaryViewInit(BinaryView* view) override
- {
- if (!m_tpidrel0type)
- m_tpidrel0type = Type::NamedType(QualifiedName("EFI_PEI_SERVICES"),
- Type::PointerType(view->GetDefaultArchitecture(),
- Type::PointerType(
- view->GetDefaultArchitecture(), GetTypeByName(QualifiedName("EFI_PEI_SERVICES")))));
-
- auto ctx = PluginCommandContext();
- ctx.binaryView = view;
- auto commandList = PluginCommand::GetValidList(ctx);
- for (auto command : commandList)
- {
- if (command.GetName() == "EFI Resolver\\Resolve EFI Types And Protocols")
- {
- command.Execute(ctx);
- }
- }
- }
-
static Ref<Platform> Recognize(BinaryView* view, Metadata* metadata)
{
Ref<Metadata> subsystem = metadata->Get("Subsystem");
@@ -414,6 +331,14 @@ public:
return nullptr;
}
+ virtual void BinaryViewInit(BinaryView* view) override
+ {
+ m_tpidrel0type = Type::NamedType(QualifiedName("EFI_PEI_SERVICES"),
+ Type::PointerType(GetArchitecture(),
+ Type::PointerType(
+ GetArchitecture(), GetTypeByName(QualifiedName("EFI_PEI_SERVICES")))));
+ }
+
virtual Ref<Type> GetGlobalRegisterType(uint32_t reg) override
{
if (reg == m_tpidrel0)