diff --git a/include/zipr_impl.h b/include/zipr_impl.h index 8406fbd48ed2482352f891815ad1eb0642963438..f4a340db087a51ad46557ce3936170669ffd43b1 100644 --- a/include/zipr_impl.h +++ b/include/zipr_impl.h @@ -396,7 +396,8 @@ class ZiprImpl_t : public Zipr_t // support RangeAddress_t extend_section(ELFIO::section *sec,ELFIO::section *next_sec); - void dump_map(); + void dump_scoop_map(); + void dump_instruction_map(); public: diff --git a/src/elfwrite.cpp b/src/elfwrite.cpp index 22a3ce7ac7fc14d9d514218eae901690dfd78b97..e65edb080fa2f82361b0257e94d8f2e096ac25df 100644 --- a/src/elfwrite.cpp +++ b/src/elfwrite.cpp @@ -229,7 +229,8 @@ template <class T_Elf_Ehdr, class T_Elf_Phdr, class T_Elf_Addr, class T_Elf_Shdr void ElfWriterImpl<T_Elf_Ehdr,T_Elf_Phdr,T_Elf_Addr, T_Elf_Shdr, T_Elf_Sym, T_Elf_Rel, T_Elf_Rela, T_Elf_Dyn>::LoadEhdr(FILE* fin) { fseek(fin,0,SEEK_SET); - fread(&ehdr,sizeof(ehdr), 1, fin); + auto res=fread(&ehdr,sizeof(ehdr), 1, fin); + assert(res==1); }; template <class T_Elf_Ehdr, class T_Elf_Phdr, class T_Elf_Addr, class T_Elf_Shdr, class T_Elf_Sym, class T_Elf_Rel, class T_Elf_Rela, class T_Elf_Dyn> @@ -239,7 +240,8 @@ void ElfWriterImpl<T_Elf_Ehdr,T_Elf_Phdr,T_Elf_Addr,T_Elf_Shdr, T_Elf_Sym, T_Elf phdrs.resize(ehdr.e_phnum); for(unsigned int i=0;i<phdrs.size();i++) { - fread(&phdrs[i], sizeof(phdrs[i]), 1, fin); + auto res=fread(&phdrs[i], sizeof(phdrs[i]), 1, fin); + assert(res==1); } }; diff --git a/src/zipr.cpp b/src/zipr.cpp index c76d1f8581fb770b1a6c67d6a6e19d1e057f3da7..d37d0e8975d24ab0a652d8f56d45af957508a1b3 100644 --- a/src/zipr.cpp +++ b/src/zipr.cpp @@ -3806,7 +3806,8 @@ void ZiprImpl_t::OutputBinaryFile(const string &name) delete ew; string chmod_cmd=string("chmod +x "); chmod_cmd=chmod_cmd+elfwriter_filename; - system(chmod_cmd.c_str()); + auto res=system(chmod_cmd.c_str()); + assert(res!=-1); } @@ -3819,7 +3820,8 @@ void ZiprImpl_t::PrintStats() // and dump a map file of where we placed instructions. maybe guard with an option. // default to dumping to zipr.map - dump_map(); + dump_scoop_map(); + dump_instruction_map(); } @@ -4096,9 +4098,6 @@ void ZiprImpl_t::UpdateCallbacks() RangeSet_t::iterator range_it=memory_space.FindFreeRange((RangeAddress_t) -1); assert(memory_space.IsValidRange(range_it)); - RangeAddress_t end_of_new_space=range_it->GetStart(); - RangeAddress_t start_addr=GetCallbackStartAddr(); - set<std::pair<DollopEntry_t*,RangeAddress_t> >::iterator it, it_end; for(it=unpatched_callbacks.begin(), it_end=unpatched_callbacks.end(); @@ -4134,10 +4133,28 @@ void ZiprImpl_t::UpdateCallbacks() } } -void ZiprImpl_t::dump_map() +void ZiprImpl_t::dump_scoop_map() { + string filename="scoop.map"; // parameterize later. + std::ofstream ofs(filename.c_str(), ios_base::out); + ofs <<left<<setw(10)<<"ID" + <<left<<setw(10)<<"StartAddr" + <<left<<setw(10)<<"Size" + <<left<<setw(10)<<"Perms" + <<left<<setw(10)<<"Name"<<endl; -// std::map<libIRDB::Instruction_t*,RangeAddress_t> final_insn_locations + for(const auto &scoop : m_firp->GetDataScoops()) + { + ofs << hex << setw(10)<<scoop->GetBaseID() + <<hex<<left<<setw(10)<<scoop->GetStart()->GetVirtualOffset() + <<hex<<left<<setw(10)<< scoop->GetSize() + <<hex<<left<<setw(10)<< scoop->getRawPerms() + <<hex<<left<<setw(10)<< scoop->GetName() + << endl; + } +} +void ZiprImpl_t::dump_instruction_map() +{ string filename="zipr.map"; // parameterize later. std::ofstream ofs(filename.c_str(), ios_base::out); @@ -4164,9 +4181,6 @@ void ZiprImpl_t::dump_map() } - - - } void ZiprImpl_t::UpdateScoops()