From: Christoph Egger Date: Fri, 20 Feb 2015 16:03:45 +0000 (+0100) Subject: Move Function/BasicBlock to core and clean up includes X-Git-Tag: v0.1~102 X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=commitdiff_plain;h=32e87746db981882b95aceddde79ef12034a3405 Move Function/BasicBlock to core and clean up includes Function and BasicBlock are considered part od the Data Model and part of the core. Move them there. Also remove lots of #include from the headers and replace them by forward declarations. This should make compilation units smaller and remove the huge number of users for each header -- speeding up compilation and making users explicitely include stuff they use. --- diff --git a/src/core/BasicBlock.hxx b/src/core/BasicBlock.hxx new file mode 100644 index 0000000..b3e5a89 --- /dev/null +++ b/src/core/BasicBlock.hxx @@ -0,0 +1,54 @@ +#ifndef INCLUDE__BasicBlock_hxx +#define INCLUDE__BasicBlock_hxx + +#include +#include +#include + +class BasicBlock { +public: + BasicBlock() { + next_blocks[0] = 0; + next_blocks[1] = 0; + } + + uint64_t getStartAddress() const { + return start_address; + } + + uint64_t getEndAddress() const { + return end_address; + } + + uint64_t getNextBlock(size_t index) const { + assert(index < 2); + return next_blocks[index]; + } + + void setNextBlock(size_t index, uint64_t address) { + assert(index < 2); + next_blocks[index] = address; + } + + void setStartAddress(uint64_t address) { + start_address = address; + } + + void setEndAddress(uint64_t address) { + end_address = address; + } + + std::string getName() { + std::stringstream s; + s << "BLOCK_" << std::hex << start_address << '_' << end_address; + return s.str(); + } + +private: + uint64_t start_address; + uint64_t end_address; + + uint64_t next_blocks[2]; +}; + +#endif diff --git a/src/core/Function.hxx b/src/core/Function.hxx new file mode 100644 index 0000000..3c8f799 --- /dev/null +++ b/src/core/Function.hxx @@ -0,0 +1,35 @@ +#ifndef INCLUDE__Function_hxx +#define INCLUDE__Function_hxx + +#include +#include "BasicBlock.hxx" + +class Function { +public: + Function(const std::string& name, uint64_t start_address) + : name(name) + , start_address(start_address) { + } + + uint64_t getStartAddress() const { + return start_address; + } + + std::string getName() const { + return name; + } + + void addBasicBlock(BasicBlock* block) { + _blocks.insert(std::make_pair(block->getStartAddress(), block)); + } + + std::map& blocks() { + return _blocks; + } +private: + std::string name; + uint64_t start_address; + std::map _blocks; +}; + +#endif diff --git a/src/core/InformationManager.cxx b/src/core/InformationManager.cxx index 0907cf9..7c1c5de 100644 --- a/src/core/InformationManager.cxx +++ b/src/core/InformationManager.cxx @@ -1,8 +1,11 @@ #include "InformationManager.hxx" #include "disassembler/llvm/LLVMDisassembler.hxx" +#include "core/Function.hxx" +#include "core/BasicBlock.hxx" + #include "gui/qt.hxx" -#include "quazip/quazip.h" -#include "quazip/quazipfile.h" +#include +#include void InformationManager::reset(const std::string& filename) { disassembler.reset(createLLVMDisassembler(filename, this)); diff --git a/src/core/InformationManager.hxx b/src/core/InformationManager.hxx index 4e1b318..f8e4f04 100644 --- a/src/core/InformationManager.hxx +++ b/src/core/InformationManager.hxx @@ -8,6 +8,7 @@ class Disassembler; class Function; +class BasicBlock; class QString; diff --git a/src/disassembler/BasicBlock.hxx b/src/disassembler/BasicBlock.hxx deleted file mode 100644 index b3e5a89..0000000 --- a/src/disassembler/BasicBlock.hxx +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef INCLUDE__BasicBlock_hxx -#define INCLUDE__BasicBlock_hxx - -#include -#include -#include - -class BasicBlock { -public: - BasicBlock() { - next_blocks[0] = 0; - next_blocks[1] = 0; - } - - uint64_t getStartAddress() const { - return start_address; - } - - uint64_t getEndAddress() const { - return end_address; - } - - uint64_t getNextBlock(size_t index) const { - assert(index < 2); - return next_blocks[index]; - } - - void setNextBlock(size_t index, uint64_t address) { - assert(index < 2); - next_blocks[index] = address; - } - - void setStartAddress(uint64_t address) { - start_address = address; - } - - void setEndAddress(uint64_t address) { - end_address = address; - } - - std::string getName() { - std::stringstream s; - s << "BLOCK_" << std::hex << start_address << '_' << end_address; - return s.str(); - } - -private: - uint64_t start_address; - uint64_t end_address; - - uint64_t next_blocks[2]; -}; - -#endif diff --git a/src/disassembler/Disassembler.hxx b/src/disassembler/Disassembler.hxx index dbc140e..4feeddf 100644 --- a/src/disassembler/Disassembler.hxx +++ b/src/disassembler/Disassembler.hxx @@ -4,9 +4,9 @@ #include #include -#include "disassembler/BasicBlock.hxx" -#include "disassembler/Function.hxx" -#include "core/InformationManager.hxx" +class Function; +class BasicBlock; +class InformationManager; class Disassembler { public: diff --git a/src/disassembler/Function.hxx b/src/disassembler/Function.hxx deleted file mode 100644 index 57833ba..0000000 --- a/src/disassembler/Function.hxx +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef INCLUDE__Function_hxx -#define INCLUDE__Function_hxx - -#include "disassembler/BasicBlock.hxx" -#include - -class Function { -public: - Function(const std::string& name, uint64_t start_address) - : name(name) - , start_address(start_address) { - } - - uint64_t getStartAddress() const { - return start_address; - } - - std::string getName() const { - return name; - } - - void addBasicBlock(BasicBlock* block) { - _blocks.insert(std::make_pair(block->getStartAddress(), block)); - } - - std::map& blocks() { - return _blocks; - } -private: - std::string name; - uint64_t start_address; - std::map _blocks; -}; - -#endif diff --git a/src/disassembler/llvm/LLVMBasicBlock.hxx b/src/disassembler/llvm/LLVMBasicBlock.hxx index 0949f70..15826aa 100644 --- a/src/disassembler/llvm/LLVMBasicBlock.hxx +++ b/src/disassembler/llvm/LLVMBasicBlock.hxx @@ -1,7 +1,7 @@ #ifndef INCLUDE__LLVMBasicBlock_hxx #define INCLUDE__LLVMBasicBlock_hxx -#include "disassembler/BasicBlock.hxx" +#include "core/BasicBlock.hxx" class Disassembler; diff --git a/src/disassembler/llvm/LLVMDisassembler.cxx b/src/disassembler/llvm/LLVMDisassembler.cxx index 5652cfb..3147796 100644 --- a/src/disassembler/llvm/LLVMDisassembler.cxx +++ b/src/disassembler/llvm/LLVMDisassembler.cxx @@ -1,6 +1,7 @@ #include "disassembler/llvm/LLVMDisassembler.hxx" #include "disassembler/llvm/LLVMBasicBlock.hxx" #include "disassembler/llvm/LLVMFunction.hxx" +#include "core/InformationManager.hxx" #include #include diff --git a/src/disassembler/llvm/LLVMDisassembler.hxx b/src/disassembler/llvm/LLVMDisassembler.hxx index 95e961f..2291e20 100644 --- a/src/disassembler/llvm/LLVMDisassembler.hxx +++ b/src/disassembler/llvm/LLVMDisassembler.hxx @@ -8,11 +8,11 @@ #include "include_llvm.hxx" #include "disassembler/Disassembler.hxx" -#include "disassembler/BasicBlock.hxx" -#include "disassembler/Function.hxx" -#include "disassembler/llvm/LLVMBasicBlock.hxx" -#include "disassembler/llvm/LLVMFunction.hxx" +class Function; +class BasicBlock; +class LLVMFunction; +class LLVMBasicBlock; Disassembler * createLLVMDisassembler(const std::string& filename, InformationManager* manager); diff --git a/src/disassembler/llvm/LLVMFunction.hxx b/src/disassembler/llvm/LLVMFunction.hxx index 0bdb1dc..e28b958 100644 --- a/src/disassembler/llvm/LLVMFunction.hxx +++ b/src/disassembler/llvm/LLVMFunction.hxx @@ -1,7 +1,7 @@ #ifndef INCLUDE__LLVMFunction_hxx #define INCLUDE__LLVMFunction_hxx -#include "disassembler/Function.hxx" +#include "core/Function.hxx" class LLVMFunction : public Function { public: diff --git a/src/gui/Mainwindow.cxx b/src/gui/Mainwindow.cxx index 03910a1..4d6e2c0 100644 --- a/src/gui/Mainwindow.cxx +++ b/src/gui/Mainwindow.cxx @@ -1,7 +1,10 @@ #include "Mainwindow.hxx" #include "qt.hxx" #include "disassembler/llvm/LLVMDisassembler.hxx" - +#include "core/Function.hxx" +#include "core/BasicBlock.hxx" +#include "core/InformationManager.hxx" +#include "widgets/ScriptingDock.hxx" #include "widgets/CFGScene.hxx" #include "dialogs/NewFunctionDialog.hxx" #include "dialogs/SimpleStringDialog.hxx" diff --git a/src/gui/Mainwindow.hxx b/src/gui/Mainwindow.hxx index 0962efd..8cf1fad 100644 --- a/src/gui/Mainwindow.hxx +++ b/src/gui/Mainwindow.hxx @@ -13,10 +13,11 @@ #include -#include "disassembler/Disassembler.hxx" -#include "widgets/BasicBlockWidget.hxx" -#include "widgets/ScriptingDock.hxx" -#include "core/InformationManager.hxx" +class Disassembler; +class Function; +class InformationManager; +class BasicBlockWidget; +class ScriptingDock; class Mainwindow : public QMainWindow { Q_OBJECT diff --git a/src/gui/widgets/BasicBlockWidget.cxx b/src/gui/widgets/BasicBlockWidget.cxx index fbf4370..b9a1b14 100644 --- a/src/gui/widgets/BasicBlockWidget.cxx +++ b/src/gui/widgets/BasicBlockWidget.cxx @@ -1,6 +1,7 @@ #include "BasicBlockWidget.hxx" #include "gui/Mainwindow.hxx" #include "gui/dialogs/SimpleStringDialog.hxx" +#include "core/BasicBlock.hxx" class CustomQGraphicsTextItem : public QObject, public QGraphicsTextItem { public: diff --git a/src/gui/widgets/BasicBlockWidget.hxx b/src/gui/widgets/BasicBlockWidget.hxx index 5d23d9b..2c9cec3 100644 --- a/src/gui/widgets/BasicBlockWidget.hxx +++ b/src/gui/widgets/BasicBlockWidget.hxx @@ -2,7 +2,6 @@ #define INCLUDE__BasicBlockWidget_hxx #include "gui/qt.hxx" -#include "disassembler/BasicBlock.hxx" #include #include #include @@ -10,6 +9,7 @@ #include class Mainwindow; +class BasicBlock; class BasicBlockWidget : public QObject, public QGraphicsItem {