From 4d5e159608d2966dc6d6ef359fa0813bd5f61d21 Mon Sep 17 00:00:00 2001 From: bdr7fv <bdr7fv@git.zephyr-software.com> Date: Wed, 5 Sep 2012 16:39:11 +0000 Subject: [PATCH] Fixed some tabbing issues in core/fileir.hpp, added signature for fileir destructor in fileir.hpp. Implement fileir destructor in fileir.cpp. Multiple calls to generate spri no longer eat memory. Former-commit-id: 532c38b749c51e49bfe065590013fe66124d3152 --- libIRDB/include/core/fileir.hpp | 55 +++++++++++++++++---------------- libIRDB/src/core/fileir.cpp | 23 ++++++++++++++ 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/libIRDB/include/core/fileir.hpp b/libIRDB/include/core/fileir.hpp index ef1f42f12..0b13a180e 100644 --- a/libIRDB/include/core/fileir.hpp +++ b/libIRDB/include/core/fileir.hpp @@ -5,19 +5,20 @@ // (i.e., and unmodified Variant) or a modified variant. class FileIR_t : public BaseObj_t { - public: + public: - // Create a Variant from the database - FileIR_t(const VariantID_t &newprogid, File_t* fid=NULL); + // Create a Variant from the database + FileIR_t(const VariantID_t &newprogid, File_t* fid=NULL); + ~FileIR_t(); - // DB operations - void WriteToDB(); + // DB operations + void WriteToDB(); - // accessors and mutators in one - std::set<Function_t*>& GetFunctions() { return funcs; } - std::set<Instruction_t*>& GetInstructions() { return insns; } - std::set<AddressID_t*>& GetAddresses() { return addrs; } - std::set<Relocation_t*>& GetRelocations() { return relocs; } + // accessors and mutators in one + std::set<Function_t*>& GetFunctions() { return funcs; } + std::set<Instruction_t*>& GetInstructions() { return insns; } + std::set<AddressID_t*>& GetAddresses() { return addrs; } + std::set<Relocation_t*>& GetRelocations() { return relocs; } // generate the spri rules into the output file, fout. void GenerateSPRI(std::ostream &fout); @@ -42,7 +43,7 @@ class FileIR_t : public BaseObj_t //removes the mapping for orig->assembly from the map. void ChangeRegistryKey(Instruction_t* orig, Instruction_t* updated); - private: + private: #define ASM_REG_MAX_SIZE 500000 typedef std::map<Instruction_t*,std::string> registry_type; @@ -52,29 +53,29 @@ class FileIR_t : public BaseObj_t registry_type assembly_registry; - void ReadFromDB(); //accesses DB + void ReadFromDB(); //accesses DB - std::set<Function_t*> funcs; - std::set<Instruction_t*> insns; - std::set<AddressID_t*> addrs; - std::set<Relocation_t*> relocs; - VariantID_t progid; + std::set<Function_t*> funcs; + std::set<Instruction_t*> insns; + std::set<AddressID_t*> addrs; + std::set<Relocation_t*> relocs; + VariantID_t progid; File_t* fileptr; std::map<db_id_t,AddressID_t*> ReadAddrsFromDB(); std::map<db_id_t,Function_t*> ReadFuncsFromDB - ( - std::map<db_id_t,AddressID_t*> &addrMap - ); + ( + std::map<db_id_t,AddressID_t*> &addrMap + ); std::map<db_id_t,Instruction_t*> ReadInsnsFromDB - ( - std::map<db_id_t,Function_t*> &funcMap, - std::map<db_id_t,AddressID_t*> &addrMap - ) ; + ( + std::map<db_id_t,Function_t*> &funcMap, + std::map<db_id_t,AddressID_t*> &addrMap + ) ; void ReadRelocsFromDB - ( - std::map<db_id_t,Instruction_t*> &insnMap - ); + ( + std::map<db_id_t,Instruction_t*> &insnMap + ); diff --git a/libIRDB/src/core/fileir.cpp b/libIRDB/src/core/fileir.cpp index 114691298..19731f509 100644 --- a/libIRDB/src/core/fileir.cpp +++ b/libIRDB/src/core/fileir.cpp @@ -43,6 +43,29 @@ FileIR_t::FileIR_t(const VariantID_t &newprogid, File_t* fid) : BaseObj_t(NULL) ReadFromDB(); } + +FileIR_t::~FileIR_t() +{ + for(std::set<Function_t*>::const_iterator i=funcs.begin(); i!=funcs.end(); ++i) + { + delete *i; + } + + for(std::set<Instruction_t*>::const_iterator i=insns.begin(); i!=insns.end(); ++i) + { + delete *i; + } + + for(std::set<AddressID_t*>::const_iterator i=addrs.begin(); i!=addrs.end(); ++i) + { + delete *i; + } + + for(std::set<Relocation_t*>::const_iterator i=relocs.begin(); i!=relocs.end(); ++i) + { + delete *i; + } +} // DB operations void FileIR_t::ReadFromDB() -- GitLab