summaryrefslogtreecommitdiff
path: root/architecture.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-08-29 23:48:01 -0400
committerRusty Wagner <rusty@vector35.com>2015-08-29 23:48:01 -0400
commitc0e76778ad4149565de0f2729c6c36464fb522f0 (patch)
treebfb6d430a59933f48a879f6fca6534d03237b0f6 /architecture.cpp
parent00c92fcf81f6144a35936855b5cc47c945fae321 (diff)
Implement part of the Python API to register new architectures
Diffstat (limited to 'architecture.cpp')
-rw-r--r--architecture.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/architecture.cpp b/architecture.cpp
index ae4dd225..e4d3e4f0 100644
--- a/architecture.cpp
+++ b/architecture.cpp
@@ -47,6 +47,13 @@ Architecture::Architecture(const string& name): m_nameForRegister(name)
}
+void Architecture::InitCallback(void* ctxt, BNArchitecture* obj)
+{
+ Architecture* arch = (Architecture*)ctxt;
+ arch->m_arch = obj;
+}
+
+
BNEndianness Architecture::GetEndiannessCallback(void* ctxt)
{
Architecture* arch = (Architecture*)ctxt;
@@ -179,10 +186,10 @@ void Architecture::FreeRegisterListCallback(void*, uint32_t* regs)
}
-BNRegisterInfo Architecture::GetRegisterInfoCallback(void* ctxt, uint32_t reg)
+void Architecture::GetRegisterInfoCallback(void* ctxt, uint32_t reg, BNRegisterInfo* result)
{
Architecture* arch = (Architecture*)ctxt;
- return arch->GetRegisterInfo(reg);
+ *result = arch->GetRegisterInfo(reg);
}
@@ -273,6 +280,7 @@ void Architecture::Register(Architecture* arch)
{
BNCustomArchitecture callbacks;
callbacks.context = arch;
+ callbacks.init = InitCallback;
callbacks.getEndianness = GetEndiannessCallback;
callbacks.getAddressSize = GetAddressSizeCallback;
callbacks.getDefaultIntegerSize = GetDefaultIntegerSizeCallback;
@@ -298,7 +306,7 @@ void Architecture::Register(Architecture* arch)
callbacks.alwaysBranch = AlwaysBranchCallback;
callbacks.invertBranch = InvertBranchCallback;
callbacks.skipAndReturnValue = SkipAndReturnValueCallback;
- arch->m_arch = BNRegisterArchitecture(arch->m_nameForRegister.c_str(), &callbacks);
+ BNRegisterArchitecture(arch->m_nameForRegister.c_str(), &callbacks);
}