summaryrefslogtreecommitdiff
path: root/architecture.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2018-01-18 20:15:04 -0500
committerPeter LaFosse <peter@vector35.com>2018-03-23 17:10:06 -0400
commit82204e9fc38a480e0f53514d92b68df7783fee0a (patch)
treeb4cb83912e16464906edfdf70b5306f5891565bc /architecture.cpp
parente20cbad0fa12471d939fbdaaa1e815b38d66d0dc (diff)
Allow flag roles to be dependent on semantic class
Diffstat (limited to 'architecture.cpp')
-rw-r--r--architecture.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/architecture.cpp b/architecture.cpp
index 64314031..168c1397 100644
--- a/architecture.cpp
+++ b/architecture.cpp
@@ -318,10 +318,10 @@ uint32_t* Architecture::GetAllSemanticFlagGroupsCallback(void* ctxt, size_t* cou
}
-BNFlagRole Architecture::GetFlagRoleCallback(void* ctxt, uint32_t flag)
+BNFlagRole Architecture::GetFlagRoleCallback(void* ctxt, uint32_t flag, uint32_t semClass)
{
Architecture* arch = (Architecture*)ctxt;
- return arch->GetFlagRole(flag);
+ return arch->GetFlagRole(flag, semClass);
}
@@ -781,7 +781,7 @@ vector<uint32_t> Architecture::GetAllSemanticFlagGroups()
}
-BNFlagRole Architecture::GetFlagRole(uint32_t)
+BNFlagRole Architecture::GetFlagRole(uint32_t, uint32_t)
{
return SpecialFlagRole;
}
@@ -820,8 +820,7 @@ uint32_t Architecture::GetSemanticClassForFlagWriteType(uint32_t)
size_t Architecture::GetFlagWriteLowLevelIL(BNLowLevelILOperation op, size_t size, uint32_t flagWriteType,
uint32_t flag, BNRegisterOrConstant* operands, size_t operandCount,LowLevelILFunction& il)
{
- (void)flagWriteType;
- BNFlagRole role = GetFlagRole(flag);
+ BNFlagRole role = GetFlagRole(flag, GetSemanticClassForFlagWriteType(flagWriteType));
return BNGetDefaultArchitectureFlagWriteLowLevelIL(m_object, op, size, role, operands,
operandCount, il.GetObject());
}
@@ -835,15 +834,17 @@ size_t Architecture::GetDefaultFlagWriteLowLevelIL(BNLowLevelILOperation op, siz
}
-ExprId Architecture::GetFlagConditionLowLevelIL(BNLowLevelILFlagCondition cond, uint32_t, LowLevelILFunction& il)
+ExprId Architecture::GetFlagConditionLowLevelIL(BNLowLevelILFlagCondition cond,
+ uint32_t semClass, LowLevelILFunction& il)
{
- return BNGetDefaultArchitectureFlagConditionLowLevelIL(m_object, cond, il.GetObject());
+ return BNGetDefaultArchitectureFlagConditionLowLevelIL(m_object, cond, semClass, il.GetObject());
}
-ExprId Architecture::GetDefaultFlagConditionLowLevelIL(BNLowLevelILFlagCondition cond, LowLevelILFunction& il)
+ExprId Architecture::GetDefaultFlagConditionLowLevelIL(BNLowLevelILFlagCondition cond,
+ uint32_t semClass, LowLevelILFunction& il)
{
- return BNGetDefaultArchitectureFlagConditionLowLevelIL(m_object, cond, il.GetObject());
+ return BNGetDefaultArchitectureFlagConditionLowLevelIL(m_object, cond, semClass, il.GetObject());
}
@@ -1333,9 +1334,9 @@ vector<uint32_t> CoreArchitecture::GetAllSemanticFlagGroups()
}
-BNFlagRole CoreArchitecture::GetFlagRole(uint32_t flag)
+BNFlagRole CoreArchitecture::GetFlagRole(uint32_t flag, uint32_t semClass)
{
- return BNGetArchitectureFlagRole(m_object, flag);
+ return BNGetArchitectureFlagRole(m_object, flag, semClass);
}