diff --git a/unpin.cpp b/unpin.cpp index a9cacb64bba364b4843d44b00d1815bec99b0647..ff6ee69ab7fdabbec6baa2b0985fe9c824f96d80 100644 --- a/unpin.cpp +++ b/unpin.cpp @@ -113,13 +113,14 @@ ZiprOptionsNamespace_t *Unpin_t::RegisterOptions(ZiprOptionsNamespace_t *global) return unpin_ns; } +// CAN BE DELETED, left in just for stats? (Would speed up zipr step to delete) void Unpin_t::DoUnpin() { DoUnpinForScoops(); DoUnpinForFixedCalls(); } - +// CAN BE DELETED, left in just for stats? // scan instructions and process instruction relocs that can be unpinned. void Unpin_t::DoUnpinForFixedCalls() { @@ -157,28 +158,7 @@ void Unpin_t::DoUnpinForFixedCalls() // safe cast and check. Instruction_t* wrt_insn=dynamic_cast<Instruction_t*>(reloc->GetWRT()); assert(wrt_insn); - if(should_cfi_pin(wrt_insn)) - continue; - - // leave this for debugging I guess? - if(wrt_insn->GetIndirectBranchTargetAddress() && wrt_insn->GetIndirectBranchTargetAddress()->GetVirtualOffset()!=0) - { - cout<<"Unpin::Found "<<reloc->GetType()<<" relocation for pinned insn at "<<hex<< - wrt_insn->GetIndirectBranchTargetAddress()->GetVirtualOffset()<<endl; - } - else - { - cout<<"Unpin::Warn: unpin found non-IBTA to unpin. probably it's unpinned twice. continuing anyhow."<<endl; - } - - PlacementQueue_t* pq=zo->GetPlacementQueue(); - assert(pq); - - // create a new dollop for the unpinned IBT - // and add it to the placement queue. - Dollop_t *newDoll=zo->GetDollopManager()->AddNewDollops(wrt_insn); - pq->insert(std::pair<Dollop_t*,RangeAddress_t>(newDoll, 0)); - + unpins++; insn_unpins++; if(m_max_unpins != -1 && unpins>=m_max_unpins) @@ -192,6 +172,7 @@ void Unpin_t::DoUnpinForFixedCalls() } +// CAN BE DELETED, left in just for stats? void Unpin_t::DoUnpinForScoops() { if(m_max_unpins != -1 && unpins>=m_max_unpins) @@ -223,43 +204,10 @@ void Unpin_t::DoUnpinForScoops() // safe cast and check. assert(insn); - // leave this for debugging I guess? - if(insn->GetIndirectBranchTargetAddress() && insn->GetIndirectBranchTargetAddress()->GetVirtualOffset()!=0) - { - cout<<"Unpin::Found data_to_insn_ptr relocation for pinned insn:" - <<hex<<insn->GetBaseID()<<":" <<insn->getDisassembly()<<" at " - <<hex<< insn->GetIndirectBranchTargetAddress()->GetVirtualOffset()<<endl; - } - else - { - cout<<"Unpin::Warn: unpin found non-IBTA to unpin for insn:" - <<hex<<insn->GetBaseID()<<":" <<insn->getDisassembly() - <<". probably it's unpinned twice. continuing anyhow."<<endl; - } - - bool found=should_cfi_pin(insn); - - /* don't unpin if we found one */ - if(found) - { - cout<<"Unpin::Not unpinning because CFI is requesting a nonce."<<endl; - missed_unpins++; - } - else - { - PlacementQueue_t* pq=zo->GetPlacementQueue(); - assert(pq); - - // create a new dollop for the unpinned IBT - // and add it to the placement queue. - Dollop_t *newDoll=zo->GetDollopManager()->AddNewDollops(insn); - pq->insert(std::pair<Dollop_t*,RangeAddress_t>(newDoll, 0)); - - unpins++; - scoop_unpins++; - if(m_max_unpins != -1 && unpins>=m_max_unpins) - return; - } + unpins++; + scoop_unpins++; + if(m_max_unpins != -1 && unpins>=m_max_unpins) + return; } } }