summaryrefslogtreecommitdiff
path: root/view/sharedcache
diff options
context:
space:
mode:
Diffstat (limited to 'view/sharedcache')
-rw-r--r--view/sharedcache/core/SharedCacheView.cpp10
-rw-r--r--view/sharedcache/workflow/ObjCActivity.cpp17
-rw-r--r--view/sharedcache/workflow/SharedCacheWorkflow.cpp25
3 files changed, 36 insertions, 16 deletions
diff --git a/view/sharedcache/core/SharedCacheView.cpp b/view/sharedcache/core/SharedCacheView.cpp
index 49c1c846..b226e302 100644
--- a/view/sharedcache/core/SharedCacheView.cpp
+++ b/view/sharedcache/core/SharedCacheView.cpp
@@ -241,11 +241,11 @@ bool SharedCacheView::Init()
Ref<Settings> programSettings = Settings::Instance();
auto previousWorkflow = programSettings->Get<std::string>("analysis.workflows.functionWorkflow", this);
- // If we are a new file (not a database) lets go ahead and set the function workflow.
- // We do not set the workflow on database as the user might have changed it in load options prior.
- // We also need to update usages of `core.function.dsc` to `core.function.sharedCache`
- if (!GetFile()->IsBackedByDatabase() || previousWorkflow == "core.function.dsc")
- programSettings->Set("analysis.workflows.functionWorkflow", "core.function.sharedCache", this);
+ // Earlier versions of the shared cache plug-in used a named workflow rather than
+ // modifying `core.function.metaAnalysis`. Update reference to those older workflow
+ // names to `core.function.metaAnalysis`.
+ if (previousWorkflow == "core.function.dsc" || previousWorkflow == "core.function.sharedCache")
+ programSettings->Set("analysis.workflows.functionWorkflow", "core.function.metaAnalysis", this);
}
if (m_parseOnly)
diff --git a/view/sharedcache/workflow/ObjCActivity.cpp b/view/sharedcache/workflow/ObjCActivity.cpp
index cc1b2256..f3efbccd 100644
--- a/view/sharedcache/workflow/ObjCActivity.cpp
+++ b/view/sharedcache/workflow/ObjCActivity.cpp
@@ -7,8 +7,21 @@ using namespace BinaryNinja;
void ObjCActivity::Register(Workflow &workflow)
{
- workflow.RegisterActivity(new Activity("core.analysis.objc.adjustCallType", &AdjustCallType));
- workflow.Insert("core.function.analyzeTailCalls", "core.analysis.objc.adjustCallType");
+ workflow.RegisterActivity(new Activity(R"({
+ "name": "core.analysis.sharedCache.objc.adjustCallType",
+ "eligibility": {
+ "predicates": [
+ {
+ "type": "viewType",
+ "operator": "in",
+ "value": [
+ "DSCView"
+ ]
+ }
+ ]
+ }
+ })", &AdjustCallType));
+ workflow.Insert("core.function.analyzeTailCalls", "core.analysis.sharedCache.objc.adjustCallType");
}
std::vector<std::string> splitSelector(const std::string& selector) {
diff --git a/view/sharedcache/workflow/SharedCacheWorkflow.cpp b/view/sharedcache/workflow/SharedCacheWorkflow.cpp
index dcccfe74..71160e44 100644
--- a/view/sharedcache/workflow/SharedCacheWorkflow.cpp
+++ b/view/sharedcache/workflow/SharedCacheWorkflow.cpp
@@ -365,21 +365,28 @@ void AnalyzeFunction(Ref<AnalysisContext> ctx)
void SharedCacheWorkflow::Register()
{
- Ref<Workflow> workflow = Workflow::Instance("core.function.baseAnalysis")->Clone("core.function.sharedCache");
+ Ref<Workflow> workflow = Workflow::Instance("core.function.metaAnalysis")->Clone("core.function.metaAnalysis");
// Register and insert activities here.
ObjCActivity::Register(*workflow);
- workflow->RegisterActivity(new Activity("core.analysis.sharedCache.analysis", &AnalyzeFunction));
+ workflow->RegisterActivity(new Activity(R"({
+ "name": "core.analysis.sharedCache.analysis",
+ "eligibility": {
+ "predicates": [
+ {
+ "type": "viewType",
+ "operator": "in",
+ "value": [
+ "DSCView"
+ ]
+ }
+ ]
+ }
+ })", &AnalyzeFunction));
std::vector<std::string> inserted = { "core.analysis.sharedCache.analysis" };
workflow->Insert("core.function.analyzeTailCalls", inserted);
- static constexpr auto WORKFLOW_DESCRIPTION = R"({
- "title": "Shared Cache Workflow",
- "description": "Shared Cache Workflow",
- "capabilities": []
- })";
-
- Workflow::RegisterWorkflow(workflow, WORKFLOW_DESCRIPTION);
+ Workflow::RegisterWorkflow(workflow);
}
extern "C"