From f483455798b025cc10b97957f4c5100bd217a58d Mon Sep 17 00:00:00 2001 From: whh8b <whh8b@git.zephyr-software.com> Date: Fri, 16 Oct 2015 19:10:44 +0000 Subject: [PATCH] Update 'main' zipr for new options. --- include/zipr_all.h | 1 - include/zipr_impl.h | 34 ++++++++-- include/zipr_mem_space.h | 11 +-- src/memory_space.cpp | 9 ++- src/zipr.cpp | 141 +++++++++++++++++++++++++++------------ src/zipr_stats.cpp | 4 +- test/MemorySpace.cpp | 36 +++------- 7 files changed, 151 insertions(+), 85 deletions(-) diff --git a/include/zipr_all.h b/include/zipr_all.h index d4f119f..d705355 100644 --- a/include/zipr_all.h +++ b/include/zipr_all.h @@ -54,7 +54,6 @@ using namespace Zipr_SDK; #include <plugin_man.h> #include <zipr_impl.h> #include <zipr_optimizations.h> -#include <zipr_opts.h> #include <zipr_stats.h> }; diff --git a/include/zipr_impl.h b/include/zipr_impl.h index e03d9b9..9667eca 100644 --- a/include/zipr_impl.h +++ b/include/zipr_impl.h @@ -31,26 +31,37 @@ #ifndef zipr_impl_h #define zipr_impl_h -class ZiprOptions_t; +#include <random> +#include <climits> class Stats_t; class ZiprImpl_t : public Zipr_t { public: - ZiprImpl_t(libIRDB::FileIR_t* p_firp, ZiprOptions_t &p_opts) : + ZiprImpl_t(libIRDB::FileIR_t* p_firp, ZiprOptions_t *p_opts) : m_firp(p_firp), - m_opts(p_opts), m_stats(NULL), elfiop(new ELFIO::elfio), start_of_new_space(0), - memory_space(&p_opts), - plugman(&memory_space, elfiop, p_firp, (Zipr_SDK::Options_t*)&p_opts, &final_insn_locations) + memory_space(), + m_output_filename("output", "b.out"), + m_callbacks("callbacks"), + m_objcopy("objcopy", "/usr/bin/objcopy"), + m_replop("replop", false), + m_verbose("verbose", true), + m_variant("variant"), + m_architecture("architecture"), + random_int_distribution(1,INT_MAX), + m_seed("seed", random_int_distribution(random_generator)) { bss_needed=0; use_stratafier_mode=false; + p_opts->AddNamespace(RegisterOptions(p_opts->Namespace("global"))); + plugman = ZiprPluginManager_t(&memory_space, elfiop, p_firp, p_opts, &final_insn_locations); + // init pinned addresses map. - RecordPinnedInsnAddrs(); + //RecordPinnedInsnAddrs(); }; void CreateBinaryFile(const std::string &name); @@ -60,11 +71,11 @@ class ZiprImpl_t : public Zipr_t Zipr_SDK::RangeAddress_t PlopWithTarget(libIRDB::Instruction_t* insn, Zipr_SDK::RangeAddress_t at); Zipr_SDK::RangeAddress_t PlopWithCallback(libIRDB::Instruction_t* insn, Zipr_SDK::RangeAddress_t at); + ZiprOptionsNamespace_t *RegisterOptions(ZiprOptionsNamespace_t *); private: // data for the stuff we're rewriting. libIRDB::FileIR_t* m_firp; - ZiprOptions_t& m_opts; Stats_t *m_stats; Zipr_SDK::RangeAddress_t _PlopInstruction(libIRDB::Instruction_t*, Zipr_SDK::RangeAddress_t); @@ -147,6 +158,15 @@ class ZiprImpl_t : public Zipr_t ZiprPluginManager_t plugman; std::map<libIRDB::Instruction_t*,DLFunctionHandle_t> plopping_plugins; + + // Options + ZiprStringOption_t m_output_filename, m_callbacks, m_objcopy; + ZiprBooleanOption_t m_replop, m_verbose; + ZiprIntegerOption_t m_variant, m_architecture, m_seed; + + // For default seed generation. + std::default_random_engine random_generator; + std::uniform_int_distribution<int> random_int_distribution; }; #endif diff --git a/include/zipr_mem_space.h b/include/zipr_mem_space.h index ef32e44..a99c128 100644 --- a/include/zipr_mem_space.h +++ b/include/zipr_mem_space.h @@ -31,17 +31,16 @@ #ifndef memory_space_h #define memory_space_h -class ZiprOptions_t; - // a memory space _is_ a map of range addres to char, with additional functionality. class ZiprMemorySpace_t : public MemorySpace_t { public: - ZiprMemorySpace_t(ZiprOptions_t *opts) : - free_ranges(), m_opts(opts), max_plopped(0), min_plopped(-1) + ZiprMemorySpace_t() : + free_ranges(), max_plopped(0), min_plopped(-1), m_verbose("verbose") { } + // range operatations void SplitFreeRange(RangeAddress_t addr); void MergeFreeRange(RangeAddress_t addr); @@ -83,14 +82,16 @@ class ZiprMemorySpace_t : public MemorySpace_t RangeAddress_t GetMinPlopped() const { return min_plopped; } RangeAddress_t GetMaxPlopped() const { return max_plopped; } + ZiprOptionsNamespace_t *RegisterOptions(ZiprOptionsNamespace_t*); + protected: RangeSet_t free_ranges; // keep ordered // std::set<Range_t, Range_tCompare> free_ranges; // keep ordered - ZiprOptions_t *m_opts; private: RangeAddress_t max_plopped; RangeAddress_t min_plopped; + ZiprBooleanOption_t m_verbose; }; #endif diff --git a/src/memory_space.cpp b/src/memory_space.cpp index 9ab4b38..b409e29 100644 --- a/src/memory_space.cpp +++ b/src/memory_space.cpp @@ -31,6 +31,11 @@ using namespace zipr; using namespace std; +ZiprOptionsNamespace_t *ZiprMemorySpace_t::RegisterOptions(ZiprOptionsNamespace_t *global) { + global->AddOption(&m_verbose); + return NULL; +} + void ZiprMemorySpace_t::SplitFreeRange(RangeAddress_t addr) { RangeSet_t::iterator it=FindFreeRange(addr); @@ -89,7 +94,7 @@ void ZiprMemorySpace_t::MergeFreeRange(RangeAddress_t addr) * one byte smaller! */ Range_t nnr(addr, r.GetEnd()); - if(m_opts != NULL && m_opts->GetVerbose()) + if (m_verbose) { printf("Expanded range:\n"); printf("from: %p to %p\n", (void*)r.GetStart(), (void*)r.GetEnd()); @@ -114,7 +119,7 @@ void ZiprMemorySpace_t::MergeFreeRange(RangeAddress_t addr) * bigger */ Range_t nnr(r.GetStart(), addr); - if(m_opts != NULL && m_opts->GetVerbose()) + if (m_verbose) { printf("Expanded range:\n"); printf("from: %p to %p\n", (void*)r.GetStart(), (void*)r.GetEnd()); diff --git a/src/zipr.cpp b/src/zipr.cpp index a96afe9..0ce5c42 100644 --- a/src/zipr.cpp +++ b/src/zipr.cpp @@ -67,6 +67,36 @@ static std::ifstream::pos_type filesize(const char* filename) return in.tellg(); } +ZiprOptionsNamespace_t *ZiprImpl_t::RegisterOptions(ZiprOptionsNamespace_t *global) +{ + ZiprOptionsNamespace_t *zipr_namespace = new ZiprOptionsNamespace_t("zipr"); + + m_variant.SetRequired(true); + + m_verbose.SetDescription("Enable verbose output"); + m_variant.SetDescription("Variant ID."); + m_output_filename.SetDescription("Output file name."); + m_architecture.SetDescription("Override default system " + "architecture detection"); + m_replop.SetDescription("Replop all dollops."); + m_objcopy.SetDescription("Set the path of objcopy to use."); + m_callbacks.SetDescription("Set the path of the file " + "which contains any required callbacks."); + m_seed.SetDescription("Seed the random number generator with this value."); + + zipr_namespace->AddOption(&m_output_filename); + zipr_namespace->AddOption(&m_callbacks); + zipr_namespace->AddOption(&m_architecture); + zipr_namespace->AddOption(&m_replop); + zipr_namespace->AddOption(&m_objcopy); + zipr_namespace->AddOption(&m_seed); + + global->AddOption(&m_variant); + global->AddOption(&m_verbose); + + zipr_namespace->MergeNamespace(memory_space.RegisterOptions(global)); + return zipr_namespace; +} void ZiprImpl_t::CreateBinaryFile(const std::string &name) { @@ -91,6 +121,22 @@ void ZiprImpl_t::CreateBinaryFile(const std::string &name) } #endif + if (m_architecture == 0) + { + if (m_verbose) + cout << "Doing architecture autodetection." << endl; + m_architecture.SetValue(libIRDB::FileIR_t::GetArchitectureBitWidth()); + if (m_verbose) + cout << "Autodetected to " << (int)m_architecture << endl; + } + + /* + * Take the seed and initialize the random number + * generator. + */ + std::srand((unsigned)m_seed); + if (m_verbose) + cout << "Seeded the random number generator with " << m_seed << "." << endl; // create ranges, including extra range that's def. big enough. FindFreeRanges(name); @@ -105,10 +151,13 @@ void ZiprImpl_t::CreateBinaryFile(const std::string &name) // Emit instruction immediately? + //TODO: Reenable after option parsing is fixed. +#if 0 if (m_opts.IsEnabledOptimization(Optimizations_t::OptimizationFallthroughPinned)) { OptimizePinnedFallthroughs(); } +#endif PreReserve2ByteJumpTargets(); @@ -254,7 +303,7 @@ void ZiprImpl_t::FindFreeRanges(const std::string &name) RangeAddress_t start=sec->get_address(); RangeAddress_t end=sec->get_size()+start-1; - if(m_opts.GetVerbose()) + if (m_verbose) printf("Section %s:\n", sec->get_name().c_str()); #ifdef CGC @@ -299,11 +348,11 @@ void ZiprImpl_t::FindFreeRanges(const std::string &name) } - if(m_opts.GetVerbose()) + if (m_verbose) printf("max_addr is %p, end is %p\n", (void*)max_addr, (void*)end); if(start && end>max_addr) { - if(m_opts.GetVerbose()) + if (m_verbose) printf("new max_addr is %p\n", (void*)max_addr); max_addr=end; } @@ -316,7 +365,7 @@ void ZiprImpl_t::FindFreeRanges(const std::string &name) { assert(start>last_end); last_end=end; - if(m_opts.GetVerbose()) + if (m_verbose) printf("Adding free range 0x%p to 0x%p\n", (void*)start,(void*)end); memory_space.AddFreeRange(Range_t(start,end)); } @@ -367,7 +416,7 @@ void ZiprImpl_t::FindFreeRanges(const std::string &name) #endif memory_space.AddFreeRange(Range_t(new_free_page,(RangeAddress_t)-1)); - if(m_opts.GetVerbose()) + if (m_verbose) printf("Adding (mysterious) free range 0x%p to EOF\n", (void*)new_free_page); start_of_new_space=new_free_page; } @@ -508,7 +557,7 @@ bool ZiprImpl_t::ShouldPinImmediately(Instruction_t *upinsn) * x+1 should become the entire lock command. */ { - if(m_opts.GetVerbose()) + if (m_verbose) cout<<"Using pin_at_next_byte special case, addrs="<< upinsn_ibta->GetVirtualOffset()<<","<< pin_at_next_byte->GetAddress()->GetVirtualOffset()<<endl; @@ -570,7 +619,7 @@ void ZiprImpl_t::OptimizePinnedFallthroughs() (up_insn->GetCallback()=="") && (!up_insn->GetTarget())) { - if (m_opts.GetVerbose()) + if (m_verbose) { cout<<"Emitting pinned instruction (0x"<<std::hex<<up_ibta->GetVirtualOffset()<< ") with pinned fallthrough next.\n"; } @@ -626,13 +675,13 @@ void ZiprImpl_t::PreReserve2ByteJumpTargets() */ for(int size=5;size>0;size-=3) { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Looking for %d-byte jump targets to pre-reserve.\n", size); for(int i=120;i>=-120;i--) { if(memory_space.AreBytesFree(addr+i,size)) { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Found location for 2-byte->%d-byte conversion " "(%p-%p)->(%p-%p) (orig: %p)\n", size, @@ -706,7 +755,7 @@ void ZiprImpl_t::ReservePinnedInstructions() */ if(ShouldPinImmediately(upinsn)) { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Final pinning %p-%p. fid=%d\n", (void*)addr, (void*)(addr+upinsn->GetDataBits().size()-1), upinsn->GetAddress()->GetFileID()); for(unsigned int i=0;i<upinsn->GetDataBits().size();i++) @@ -718,7 +767,7 @@ void ZiprImpl_t::ReservePinnedInstructions() continue; } - if (m_opts.GetVerbose()) { + if (m_verbose) { printf("Working two byte pinning decision at %p for:\n", (void*)addr); printf("%s\n", upinsn->GetComment().c_str()); @@ -726,7 +775,7 @@ void ZiprImpl_t::ReservePinnedInstructions() if (FindPinnedInsnAtAddr(addr+1)) { - if (m_opts.GetVerbose()) + if (m_verbose) printf("Cannot fit two byte pin; Using workaround.\n"); UnresolvedPinned_t cup = UnresolvedPinned_t(up.GetInstruction()); char push_bytes[]={(char)0x68,(char)0x00, /* We do not actually write */ @@ -780,7 +829,7 @@ void ZiprImpl_t::ReservePinnedInstructions() addr += sizeof(push_bytes) + lea_bytes_size; - if (m_opts.GetVerbose()) + if (m_verbose) printf("Advanced addr to %p\n", (void*)addr); /* @@ -791,7 +840,7 @@ void ZiprImpl_t::ReservePinnedInstructions() cup.SetUpdatedAddress(addr); two_byte_pins.insert(cup); } else { - if(m_opts.GetVerbose()) + if (m_verbose) { printf("Can fit two-byte pin (%p-%p). fid=%d\n", (void*)addr, @@ -841,7 +890,7 @@ void ZiprImpl_t::ExpandPinnedInstructions() bool can_update=memory_space.AreBytesFree(addr+2,sizeof(bytes)-2); if(can_update) { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Found %p can be updated to 5-byte jmp\n", (void*)addr); memory_space.PlopJump(addr); @@ -862,7 +911,7 @@ void ZiprImpl_t::ExpandPinnedInstructions() else { ++it; - if(m_opts.GetVerbose()) + if (m_verbose) printf("Found %p can NOT be updated to 5-byte jmp\n", (void*)addr); m_stats->total_2byte_pins++; m_stats->total_trampolines++; @@ -906,7 +955,7 @@ void ZiprImpl_t::Fix2BytePinnedInstructions() if (up.GetRange().Is5ByteRange()) { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Using previously reserved spot of 2-byte->5-byte conversion " "(%p-%p)->(%p-%p) (orig: %p)\n", (void*)addr, @@ -946,7 +995,7 @@ void ZiprImpl_t::Fix2BytePinnedInstructions() assert(!memory_space.IsByteFree(up.GetRange().GetStart()+i)); } - if(m_opts.GetVerbose()) + if (m_verbose) printf("Patching 2 byte to 2 byte: %p to %p (orig: %p)\n", (void*)addr, (void*)up.GetRange().GetStart(), @@ -1001,7 +1050,7 @@ void ZiprImpl_t::OptimizePinnedInstructions() } else { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Converting 5-byte pinned jump at %p-%p to patch to %d:%s\n", (void*)addr,(void*)(addr+4), uu.GetInstruction()->GetBaseID(), d.CompleteInstr); m_stats->total_tramp_space+=5; @@ -1110,7 +1159,7 @@ int ZiprImpl_t::_DetermineWorstCaseInsnSize(Instruction_t* insn) else worst_case_size = DetermineWorstCaseInsnSize(insn); - if (m_opts.GetVerbose()) + if (m_verbose) cout << "Worst case size: " << worst_case_size << endl; return worst_case_size; @@ -1193,7 +1242,7 @@ void ZiprImpl_t::ProcessUnpinnedInstruction(const UnresolvedUnpinned_t &uu, cons RangeAddress_t cur_addr=r.GetStart(); Instruction_t* cur_insn=uu.GetInstruction(); - if(m_opts.GetVerbose()) + if (m_verbose) printf("Starting dollop with free range %p-%p\n", (void*)cur_addr, (void*)fr_end); @@ -1216,9 +1265,10 @@ void ZiprImpl_t::ProcessUnpinnedInstruction(const UnresolvedUnpinned_t &uu, cons //if (false) if ((to_addr=final_insn_locations[cur_insn]) != 0) { - if(m_opts.GetNoReplop()) + //if(m_opts.GetNoReplop()) + if (!m_replop) { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Fallthrough loop detected. " "Emitting jump from %p to %p.\n", (void*)cur_addr, @@ -1232,19 +1282,19 @@ void ZiprImpl_t::ProcessUnpinnedInstruction(const UnresolvedUnpinned_t &uu, cons } else { - if (m_opts.GetVerbose()) + if (m_verbose) printf("Fallthrough loop detected " "but we are replopping at " "user command.\n"); } } - if(m_opts.GetVerbose()) + if (m_verbose) printf("Emitting %d:%s at %p until ", id, d.CompleteInstr, (void*)cur_addr); cur_addr=_PlopInstruction(cur_insn,cur_addr); - if(m_opts.GetVerbose()) + if (m_verbose) printf("%p\n", (void*)cur_addr); cur_insn=cur_insn->GetFallthrough(); insn_count++; @@ -1267,7 +1317,7 @@ void ZiprImpl_t::ProcessUnpinnedInstruction(const UnresolvedUnpinned_t &uu, cons m_stats->total_dollop_instructions+=insn_count; m_stats->total_dollop_space+=(cur_addr-fr_start); - if(m_opts.GetVerbose()) + if (m_verbose) printf("Ending dollop. size=%d, %s. space_remaining=%lld, req'd=%d\n", insn_count, truncated, (long long)(fr_end-cur_addr), cur_insn ? _DetermineWorstCaseInsnSize(cur_insn) : -1 ); } @@ -1286,7 +1336,7 @@ void ZiprImpl_t::AskPluginsAboutPlopping() { ZiprPluginInterface_t *zipr_plopping_plugin = dynamic_cast<ZiprPluginInterface_t*>(plopping_plugin); - if (m_opts.GetVerbose()) + if (m_verbose) cout << zipr_plopping_plugin->ToString() << " will plop this instruction!" << endl; @@ -1311,7 +1361,7 @@ void ZiprImpl_t::PlopTheUnpinnedInstructions() int id=uu.GetInstruction()->GetBaseID(); RangeAddress_t at=p.GetAddress(); - if(m_opts.GetVerbose()) + if (m_verbose) printf("Processing patch from %d:%s@%p\n",id,d.CompleteInstr,(void*)at); // process the instruction. @@ -1359,7 +1409,7 @@ void ZiprImpl_t::ApplyPatches(Instruction_t* to_insn) Patch_t p=mit->second; RangeAddress_t from_addr=p.GetAddress(); - if(m_opts.GetVerbose()) + if (m_verbose) printf("Found a patch for %p -> %p (%d:%s)\n", (void*)from_addr, (void*)to_addr, id,d.CompleteInstr); // Patch instruction @@ -1386,7 +1436,7 @@ void ZiprImpl_t::PatchInstruction(RangeAddress_t from_addr, Instruction_t* to_in std::map<Instruction_t*,RangeAddress_t>::iterator it=final_insn_locations.find(to_insn); if(it==final_insn_locations.end()) { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Instruction cannot be patch yet, as target is unknown.\n"); patch_list.insert(pair<const UnresolvedUnpinned_t,Patch_t>(uu,thepatch)); @@ -1395,7 +1445,7 @@ void ZiprImpl_t::PatchInstruction(RangeAddress_t from_addr, Instruction_t* to_in { RangeAddress_t to_addr=final_insn_locations[to_insn]; assert(to_addr!=0); - if(m_opts.GetVerbose()) + if (m_verbose) printf("Found a patch for %p -> %p\n", (void*)from_addr, (void*)to_addr); // Apply Patch ApplyPatch(from_addr, to_addr); @@ -1417,7 +1467,7 @@ RangeAddress_t ZiprImpl_t::_PlopInstruction(Instruction_t* insn,RangeAddress_t a RangeAddress_t placed_address = 0; ZiprPluginInterface_t *zpi = dynamic_cast<ZiprPluginInterface_t*>(handle); updated_addr = zpi->PlopInstruction(insn, addr, placed_address, this); - if (m_opts.GetVerbose()) + if (m_verbose) cout << "Placed address: " << std::hex << placed_address << endl; final_insn_locations[insn] = placed_address; } @@ -1695,7 +1745,7 @@ void ZiprImpl_t::FillSection(section* sec, FILE* fexe) RangeAddress_t start=sec->get_address(); RangeAddress_t end=sec->get_size()+start; - if(m_opts.GetVerbose()) + if (m_verbose) printf("Dumping addrs %p-%p\n", (void*)start, (void*)end); for(RangeAddress_t i=start;i<end;i++) { @@ -1708,7 +1758,7 @@ void ZiprImpl_t::FillSection(section* sec, FILE* fexe) fwrite(&b,1,1,fexe); if(i-start<200)// keep verbose output short enough. { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Writing byte %#2x at %p, fileoffset=%x\n", ((unsigned)b)&0xff, (void*)i, file_off); } @@ -1801,7 +1851,7 @@ void ZiprImpl_t::OutputBinaryFile(const string &name) } if(i-start_of_new_space<200)// keep verbose output short enough. { - if(m_opts.GetVerbose()) + if (m_verbose) printf("Writing byte %#2x at %p, fileoffset=%llx\n", ((unsigned)b)&0xff, (void*)i, (long long)(i-start_of_new_space)); } @@ -1816,7 +1866,9 @@ void ZiprImpl_t::OutputBinaryFile(const string &name) void ZiprImpl_t::PrintStats() { - m_stats->PrintStats(m_opts, cout); + /* TODO: + */ + //m_stats->PrintStats(m_opts, cout); } template < typename T > std::string to_hex_string( const T& n ) @@ -1880,7 +1932,8 @@ void ZiprImpl_t::InsertNewSegmentIntoExe(string rewritten_file, string bin_to_ad if(use_stratafier_mode) { string objcopy_cmd = "", stratafier_cmd = "", sstrip_cmd; - objcopy_cmd= m_opts.GetObjcopyPath() + string(" --add-section .strata=")+bin_to_add+" "+ + //objcopy_cmd= m_opts.GetObjcopyPath() + string(" --add-section .strata=")+bin_to_add+" "+ + objcopy_cmd= string(m_objcopy) + string(" --add-section .strata=")+bin_to_add+" "+ string("--change-section-address .strata=")+to_string(sec_start)+" "+ string("--set-section-flags .strata=alloc,code ")+" "+ // --set-start $textoffset // set-start not needed, as we aren't changing the entry point. @@ -1901,7 +1954,8 @@ void ZiprImpl_t::InsertNewSegmentIntoExe(string rewritten_file, string bin_to_ad stratafier_cmd="$STRATAFIER/move_segheaders"; #endif - if (m_opts.GetArchitecture() == 64) { + //if (m_opts.GetArchitecture() == 64) { + if (m_architecture == 64) { stratafier_cmd += "64"; } // stratafier_cmd += " " + rewritten_file+ " " + rewritten_file +".addseg"; @@ -2012,7 +2066,8 @@ string ZiprImpl_t::AddCallbacksToNewSegment(const string& tmpname, RangeAddress_ { const RangeAddress_t callback_start_addr=GetCallbackStartAddr(); - if(m_opts.GetCallbackFileName() == "" ) + //if(m_opts.GetCallbackFileName() == "" ) + if(m_callbacks == "" ) return tmpname; string tmpname2=tmpname+"2"; string tmpname3=tmpname+"3"; @@ -2026,7 +2081,8 @@ string ZiprImpl_t::AddCallbacksToNewSegment(const string& tmpname, RangeAddress_ objcopy -O binary /home/jdh8d/umbrella/uvadev.peasoup/zipr_install/bin/callbacks.exe b.out.to_insert2 */ - string cmd= m_opts.GetObjcopyPath() + string(" -O binary ")+ m_opts.GetCallbackFileName()+string(" ")+tmpname2; + //string cmd= m_opts.GetObjcopyPath() + string(" -O binary ")+ m_opts.GetCallbackFileName()+string(" ")+tmpname2; + string cmd= string(m_objcopy) + string(" -O binary ")+string(m_callbacks)+string(" ")+tmpname2; #endif printf("Attempting: %s\n", cmd.c_str()); if(-1 == system(cmd.c_str())) @@ -2119,7 +2175,8 @@ RangeAddress_t ZiprImpl_t::FindCallbackAddress(RangeAddress_t end_of_new_space, if(callback_addrs.find(callback)==callback_addrs.end()) { - RangeAddress_t addr=getSymbolAddress(m_opts.GetCallbackFileName(),callback); + //RangeAddress_t addr=getSymbolAddress(m_opts.GetCallbackFileName(),callback); + RangeAddress_t addr=getSymbolAddress(m_callbacks,callback); if(addr!=0) { diff --git a/src/zipr_stats.cpp b/src/zipr_stats.cpp index c0da8be..7714a00 100644 --- a/src/zipr_stats.cpp +++ b/src/zipr_stats.cpp @@ -51,7 +51,9 @@ void Stats_t::PrintStats(ZiprOptions_t &opts, std::ostream &out) /* * Optimizations */ - if(opts.IsEnabledOptimization(Optimizations_t::OptimizationFallthroughPinned)) + //if(opts.IsEnabledOptimization(Optimizations_t::OptimizationFallthroughPinned)) + // TODO + if (false) { PrintStat(out, "Optimization: FallthroughPinned hit rate", (double)Hits[Optimizations_t::OptimizationFallthroughPinned]/ diff --git a/test/MemorySpace.cpp b/test/MemorySpace.cpp index fe4395c..74c5023 100644 --- a/test/MemorySpace.cpp +++ b/test/MemorySpace.cpp @@ -38,9 +38,7 @@ printf(" fail\n"); \ bool TestSplitMemorySpace() { - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(500, 600)); @@ -54,9 +52,7 @@ bool TestSplitMemorySpace() bool TestBinarySearchMaxRange() { std::set<Range_t>::iterator foundRange; - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(256, (RangeAddress_t)-1)); m.SplitFreeRange(336); @@ -79,9 +75,7 @@ bool TestBinarySearchMaxRange() bool TestBinarySearch() { std::set<Range_t>::iterator foundRange; - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(256, 512)); m.SplitFreeRange(300); @@ -144,9 +138,7 @@ bool TestBinarySearch() } bool TestSort() { - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(256, 512)); m.SplitFreeRange(300); @@ -167,9 +159,7 @@ bool TestSort() bool TestInsertRemoveFreeRange() { - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(256, 512)); m.AddFreeRange(Range_t(513, 1024)); m.AddFreeRange(Range_t(1025, 4096)); @@ -188,9 +178,7 @@ bool TestInsertRemoveFreeRange() bool TestMergeFreeRange() { - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(256, 512)); m.SplitFreeRange(300); @@ -238,9 +226,7 @@ bool TestMergeFreeRange() bool TestClearAllIteratively() { Range_t removableRange; - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(256, 512)); m.AddFreeRange(Range_t(513, 1024)); @@ -260,9 +246,7 @@ bool TestClearAllIteratively() bool TestEraseOneByter() { Range_t removableRange; - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(512, 512)); m.AddFreeRange(Range_t(256, 300)); @@ -274,9 +258,7 @@ bool TestEraseOneByter() bool TestClearSomeIteratively() { Range_t removableRange; - ZiprOptions_t opts; - opts.SetVerbose(true); - ZiprMemorySpace_t m(&opts); + ZiprMemorySpace_t m; m.AddFreeRange(Range_t(512, 512)); m.AddFreeRange(Range_t(513, 1024)); -- GitLab