From 8e2c5be703036cea64c404b395e2d046ebf583aa Mon Sep 17 00:00:00 2001
From: jdh8d <jdh8d@git.zephyr-software.com>
Date: Tue, 1 Sep 2015 23:43:50 +0000
Subject: [PATCH] Updates for solaris

---
 SConscript               |  6 +++++-
 SConstruct               | 37 +++++++++++++++++--------------------
 include/zipr_mem_space.h |  7 ++++---
 src/SConscript           | 10 ++++++++--
 src/zipr.cpp             | 13 ++++++-------
 5 files changed, 40 insertions(+), 33 deletions(-)

diff --git a/SConscript b/SConscript
index ebd2350..b792b28 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 e3dfced..8a9014f 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 8cedb89..ef32e44 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 f527148..ce05042 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 5f41237..a96afe9 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();
-- 
GitLab