diff --git a/include/zipr_impl.h b/include/zipr_impl.h index 9ebbcda2b2de7e454e9e7ebe2cae636f29db72a4..c4194c3b6a07689a73cab681fe202487f1a9257f 100644 --- a/include/zipr_impl.h +++ b/include/zipr_impl.h @@ -475,6 +475,8 @@ class ZiprImpl_t : public Zipr_t RangeAddress_t bss_needed; bool use_stratafier_mode; + libIRDB::DataScoopSet_t m_zipr_scoops; + ZiprPluginManager_t plugman; std::map<libIRDB::Instruction_t*, diff --git a/src/utils.cpp b/src/utils.cpp index 67ad3977c18afde7d6701d848c9dfe0b31988736..af396ad949e8ba1f2890b740276a510ec60807e8 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -8,7 +8,7 @@ void PrintStat(std::ostream &out, std::string description, double value) out << description << ": " << std::dec << value << std::endl; } -size_t CALLBACK_TRAMPOLINE_SIZE=9; +size_t CALLBACK_TRAMPOLINE_SIZE=10; size_t TRAMPOLINE_SIZE=5; size_t SHORT_PIN_SIZE=2; size_t LONG_PIN_SIZE=5; @@ -108,7 +108,7 @@ size_t DetermineWorstCaseInsnSize(Instruction_t* insn, bool account_for_jump) default: { required_size=insn->GetDataBits().size(); - if (insn->GetCallback()!="") required_size+=CALLBACK_TRAMPOLINE_SIZE; + if (insn->GetCallback()!="") required_size=CALLBACK_TRAMPOLINE_SIZE; break; } } diff --git a/src/zipr.cpp b/src/zipr.cpp index 023e9c6b13b87700ab115577a0c1513785672aca..c55873daf1678967128bf10d0b7c08d6ee92f108 100644 --- a/src/zipr.cpp +++ b/src/zipr.cpp @@ -499,6 +499,7 @@ void ZiprImpl_t::CreateExecutableScoops(const std::map<RangeAddress_t, int> &ord m_firp->GetDataScoops().insert(text_scoop); cout<<"Adding scoop "<<text_scoop->GetName()<<hex<<" at "<<hex<<text_start->GetVirtualOffset()<<" - "<<text_end->GetVirtualOffset()<<endl; + m_zipr_scoops.insert(text_scoop); memory_space.AddFreeRange(Range_t(text_start->GetVirtualOffset(),text_end->GetVirtualOffset()), true); } } @@ -623,7 +624,6 @@ void ZiprImpl_t::FindFreeRanges(const std::string &name) RangeAddress_t new_free_page=page_round_up(max_addr); - memory_space.AddFreeRange(Range_t(new_free_page,(RangeAddress_t)-1), true); if (m_verbose) printf("Adding (mysterious) free range 0x%p to EOF\n", (void*)new_free_page); @@ -4149,8 +4149,8 @@ void ZiprImpl_t::dump_map() void ZiprImpl_t::UpdateScoops() { for( - DataScoopSet_t::iterator it=m_firp->GetDataScoops().begin(); - it!=m_firp->GetDataScoops().end(); + DataScoopSet_t::iterator it=m_zipr_scoops.begin(); + it!=m_zipr_scoops.end(); ) { DataScoop_t* scoop=*it; @@ -4160,6 +4160,7 @@ void ZiprImpl_t::UpdateScoops() ++it; continue; } + assert(m_zipr_scoops.find(scoop)!=m_zipr_scoops.end()); virtual_offset_t first_valid_address=0; virtual_offset_t last_valid_address=0;