X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fcore%2FInformationManager.cxx;fp=src%2Fcore%2FInformationManager.cxx;h=e1571892349336ab5d0cc94f1d64104d64428d68;hp=5a70dee6a54041951a4461723a85f40714caf518;hb=546b89382dd61b664c216ad7668ec783f0ad094c;hpb=099f1e8222109bf7397eff6da0c511a07906c9cd diff --git a/src/core/InformationManager.cxx b/src/core/InformationManager.cxx index 5a70dee..e157189 100644 --- a/src/core/InformationManager.cxx +++ b/src/core/InformationManager.cxx @@ -4,6 +4,7 @@ #include "core/Function.hxx" #include "core/BasicBlock.hxx" #include "core/Comment.hxx" +#include "core/events/NewFunctionEvent.hxx" #include "gui/qt.hxx" #include @@ -119,10 +120,6 @@ void InformationManager::save(const std::string& filename) { zip.close(); } -void InformationManager::signal_new_function(Function* fun) { -} - - /* ******************************* * Accessors for the Functions map @@ -189,7 +186,13 @@ std::map::const_iterator InformationManager::endInter */ Function* InformationManager::newFunction(uint64_t address) { - Function* fun = new Function(address, this); + Function* fun = new Function(address, false, this); + functions.insert(std::make_pair(address, fun)); + return fun; +} + +Function* InformationManager::newDynamicFunction(uint64_t address) { + Function* fun = new Function(address, true, this); functions.insert(std::make_pair(address, fun)); return fun; } @@ -201,11 +204,15 @@ BasicBlock* InformationManager::newBasicBlock(uint64_t address) { } Comment* InformationManager::newGlobalComment(uint64_t address) { - return NULL; + Comment* comment = new Comment(address, this); + comments.insert(std::make_pair(address, comment)); + return comment; } Comment* InformationManager::newLocalComment(uint64_t address, Function* f) { - return NULL; + Comment* comment = new Comment(address, this); + comments.insert(std::make_pair(address, comment)); + return comment; } void InformationManager::finishFunction(Function* fun) { @@ -214,10 +221,11 @@ void InformationManager::finishFunction(Function* fun) { BasicBlock* bl = b.second; blocks.insert(std::make_pair(bl->getStartAddress(), bl)); } - new_function_signal(fun); + NewFunctionEvent event(fun->getStartAddress(), fun); + dispatch(&event); } -void InformationManager::finishBasicBlock(BasicBlock* b) { +void InformationManager::finishBasicBlock(BasicBlock*) { } void InformationManager::finnishComment(Comment* c) { @@ -234,5 +242,12 @@ void InformationManager::deleteBasicBlock(BasicBlock* b) { } void InformationManager::deleteComment(Comment* c) { + auto range = comments.equal_range(c->getAddress()); + for (auto it = range.first; it != range.second; ++it) { + if (it->second == c) { + comments.erase(it); + break; + } + } delete c; }