diff --git a/SConscript b/SConscript index ebd2350527cca62ad0dee397b55b0abb6203d1f3..b792b28d0b2aef5df3d6f1fa204f3849146e2291 100644 --- a/SConscript +++ b/SConscript @@ -2,6 +2,8 @@ import shutil import os import tarfile +(sysname, nodename, release, version, machine)=os.uname() + Import('env') if 'do_cgc' in env and int(env['do_cgc']) == 1: @@ -21,4 +23,6 @@ SConscript(sectrans_sconscript, variant_dir='scons_build/irdb_libs') #print 'env=' #print env.Dump() SConscript("src/SConscript", variant_dir='scons_build/zipr') -SConscript("test/SConscript") + +if sysname != "SunOS": + SConscript("test/SConscript") diff --git a/SConstruct b/SConstruct index e3dfced0835d99fd13b89a3b4b77abf223b51e3a..8a9014f2ce68df8f0578b9f413c8691a9f42cdcc 100644 --- a/SConstruct +++ b/SConstruct @@ -1,13 +1,15 @@ import os import sys +(sysname, nodename, release, version, machine)=os.uname() + env=Environment() # default build options -env.Replace(CFLAGS="-fPIC -fPIE ") -env.Replace(CXXFLAGS="-fPIC -fPIE ") -env.Replace(LINKFLAGS="-fPIC -fPIE ") +env.Replace(CFLAGS=" -fPIC ") +env.Replace(CXXFLAGS=" -fPIC ") +env.Replace(LINKFLAGS=" -fPIC ") # parse arguments env.Replace(SECURITY_TRANSFORMS_HOME=os.environ['SECURITY_TRANSFORMS_HOME']) @@ -30,26 +32,21 @@ else: env.Append(CXXFLAGS=" -O3") env.Append(LINKFLAGS=" -O3") -# set 32/64 bit build properly -#print "env[64bit]="+str(env['do_64bit_build']) -#if env['do_64bit_build'] is None: -# print 'Defaulting to default compilation size.' -#elif int(env['do_64bit_build']) == 1: -# print 'Using 64-bit compilation size.' -# env.Append(CFLAGS=" -m64") -# env.Append(CXXFLAGS=" -m64") -# env.Append(LINKFLAGS=" -m64") -# env.Append(SHLINKFLAGS=" -m64") -#else: -# print 'Using 32-bit compilation size.' -# env.Append(CFLAGS=" -m32") -# env.Append(CXXFLAGS=" -m32") -# env.Append(LINKFLAGS=" -m32") -# env.Append(SHLINKFLAGS=" -m32") - env['build_appfw']=0 env['build_tools']=0 +# add extra flag for solaris. +if sysname == "SunOS": + env.Append(LINKFLAGS=" -L/opt/csw/lib -DSOLARIS ") + env.Append(CFLAGS=" -I/opt/csw/include -DSOLARIS ") + env.Append(CXXFLAGS=" -I/opt/csw/include -DSOLARIS ") +else: + env.Append(CFLAGS=" -fPIE ") + env.Append(CXXFLAGS=" -fPIE ") + env.Append(LINKFLAGS=" -fPIE ") + + + Export('env') SConscript("SConscript", variant_dir='build') diff --git a/include/zipr_mem_space.h b/include/zipr_mem_space.h index 8cedb8902def83f753264bfd75b5c41048772c40..ef32e449b27eea854ce51751907b0347c916e677 100644 --- a/include/zipr_mem_space.h +++ b/include/zipr_mem_space.h @@ -45,7 +45,7 @@ class ZiprMemorySpace_t : public MemorySpace_t // range operatations void SplitFreeRange(RangeAddress_t addr); void MergeFreeRange(RangeAddress_t addr); - std::set<Range_t>::iterator FindFreeRange(RangeAddress_t addr); + RangeSet_t::iterator FindFreeRange(RangeAddress_t addr); Range_t GetFreeRange(int size); void AddFreeRange(Range_t newRange); void RemoveFreeRange(Range_t newRange); @@ -53,7 +53,7 @@ class ZiprMemorySpace_t : public MemorySpace_t // queries about free areas. bool AreBytesFree(RangeAddress_t addr, int num_bytes); bool IsByteFree(RangeAddress_t addr); - bool IsValidRange(std::set<Range_t>::iterator it); + bool IsValidRange(RangeSet_t::iterator it); int GetRangeCount(); @@ -84,7 +84,8 @@ class ZiprMemorySpace_t : public MemorySpace_t RangeAddress_t GetMaxPlopped() const { return max_plopped; } protected: - std::set<Range_t, Range_tCompare> free_ranges; // keep ordered + RangeSet_t free_ranges; // keep ordered + // std::set<Range_t, Range_tCompare> free_ranges; // keep ordered ZiprOptions_t *m_opts; private: diff --git a/src/SConscript b/src/SConscript index f527148a76af7fa54c098e947c485aab007f0655..ce0504265082e03683feb3855ee593bc56507d7e 100644 --- a/src/SConscript +++ b/src/SConscript @@ -1,5 +1,8 @@ import os +(sysname, nodename, release, version, machine)=os.uname() + + Import('env') myenv=env myenv.Replace(SECURITY_TRANSFORMS_HOME=os.environ['SECURITY_TRANSFORMS_HOME']) @@ -46,8 +49,11 @@ libpath=''' $SECURITY_TRANSFORMS_HOME/lib ''' -myenv.Append(CCFLAGS=" -Wall ") -myenv.Append(LINKFLAGS=" -Wl,-E ") # export all symbols +if sysname=="SunOS": + myenv.Append(LINKFLAGS=" -xldscope=global ") # export all symbols +else: + myenv.Append(CCFLAGS=" -Wall ") + myenv.Append(LINKFLAGS=" -Wl,-E ") # export all symbols myenv=myenv.Clone(CPPPATH=Split(cpppath), LIBS=Split(libs), LIBPATH=Split(libpath)) diff --git a/src/zipr.cpp b/src/zipr.cpp index 5f41237e015115cbfb9adc0b947370c13421e199..a96afe993b8b2c8187c0034b2fde9c73e17f1c13 100644 --- a/src/zipr.cpp +++ b/src/zipr.cpp @@ -988,7 +988,7 @@ void ZiprImpl_t::OptimizePinnedInstructions() UnresolvedUnpinned_t uu(up.GetInstruction()); Patch_t thepatch(addr,UncondJump_rel32); - patch_list.insert(pair<UnresolvedUnpinned_t,Patch_t>(uu,thepatch)); + patch_list.insert(pair<const UnresolvedUnpinned_t,Patch_t>(uu,thepatch)); memory_space.PlopJump(addr); DISASM d; @@ -1255,7 +1255,7 @@ void ZiprImpl_t::ProcessUnpinnedInstruction(const UnresolvedUnpinned_t &uu, cons // the 'fragment' we are translating into the elf section. UnresolvedUnpinned_t uu(cur_insn); Patch_t thepatch(cur_addr,UncondJump_rel32); - patch_list.insert(pair<UnresolvedUnpinned_t,Patch_t>(uu,thepatch)); + patch_list.insert(pair<const UnresolvedUnpinned_t,Patch_t>(uu,thepatch)); memory_space.PlopJump(cur_addr); truncated="truncated due to lack of space."; m_stats->total_tramp_space+=5; @@ -1389,7 +1389,7 @@ void ZiprImpl_t::PatchInstruction(RangeAddress_t from_addr, Instruction_t* to_in if(m_opts.GetVerbose()) printf("Instruction cannot be patch yet, as target is unknown.\n"); - patch_list.insert(pair<UnresolvedUnpinned_t,Patch_t>(uu,thepatch)); + patch_list.insert(pair<const UnresolvedUnpinned_t,Patch_t>(uu,thepatch)); } else { @@ -1786,7 +1786,7 @@ void ZiprImpl_t::OutputBinaryFile(const string &name) perror( "void ZiprImpl_t::OutputBinaryFile(const string &name)"); // first byte of this range is the last used byte. - std::set<Range_t>::iterator it=memory_space.FindFreeRange((RangeAddress_t) -1); + RangeSet_t::iterator it=memory_space.FindFreeRange((RangeAddress_t) -1); assert(memory_space.IsValidRange(it)); RangeAddress_t end_of_new_space=it->GetStart(); @@ -2026,8 +2026,7 @@ 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=string("objcopy -O binary ")+ m_opts.GetCallbackFileName()+string(" ")+tmpname2; - + string cmd= m_opts.GetObjcopyPath() + string(" -O binary ")+ m_opts.GetCallbackFileName()+string(" ")+tmpname2; #endif printf("Attempting: %s\n", cmd.c_str()); if(-1 == system(cmd.c_str())) @@ -2137,7 +2136,7 @@ RangeAddress_t ZiprImpl_t::FindCallbackAddress(RangeAddress_t end_of_new_space, void ZiprImpl_t::UpdateCallbacks() { // first byte of this range is the last used byte. - set<Range_t>::iterator it=memory_space.FindFreeRange((RangeAddress_t) -1); + RangeSet_t::iterator it=memory_space.FindFreeRange((RangeAddress_t) -1); assert(memory_space.IsValidRange(it)); RangeAddress_t end_of_new_space=it->GetStart();