diff --git a/.gitattributes b/.gitattributes index 270c41045d7460c1238c1e4f0906a303d7d66f7e..ab735a6804d7a829d2ca67b11f19ec3247a63179 100644 --- a/.gitattributes +++ b/.gitattributes @@ -25,8 +25,8 @@ src/plugin_man.cpp -text src/zipr.cpp -text src/zipr_options.cpp -text src/zipr_stats.cpp -text -test/Makefile.in -text test/MemorySpace.cpp -text +test/SConstruct -text test/dylib/Makefile -text test/dylib/dylib.c -text test/dylib/dylib.h -text diff --git a/SConscript b/SConscript index 27c259be2a66b9d3e1335947cb2f9b39000a331d..ebd2350527cca62ad0dee397b55b0abb6203d1f3 100644 --- a/SConscript +++ b/SConscript @@ -21,5 +21,4 @@ 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") diff --git a/include/zipr_mem_space.h b/include/zipr_mem_space.h index 7fae66c58c69df1ce328ab82333499f4db04858e..8cedb8902def83f753264bfd75b5c41048772c40 100644 --- a/include/zipr_mem_space.h +++ b/include/zipr_mem_space.h @@ -48,6 +48,7 @@ class ZiprMemorySpace_t : public MemorySpace_t std::set<Range_t>::iterator FindFreeRange(RangeAddress_t addr); Range_t GetFreeRange(int size); void AddFreeRange(Range_t newRange); + void RemoveFreeRange(Range_t newRange); // queries about free areas. bool AreBytesFree(RangeAddress_t addr, int num_bytes); diff --git a/src/memory_space.cpp b/src/memory_space.cpp index aa4a89d8b73981bd698f1a78be63d0d33dd97e24..a803c77b2b6477ee731363af04b613431b143e57 100644 --- a/src/memory_space.cpp +++ b/src/memory_space.cpp @@ -198,6 +198,11 @@ void ZiprMemorySpace_t::AddFreeRange(Range_t newRange) { free_ranges.insert(Range_t(newRange.GetStart(), newRange.GetEnd())); } +void ZiprMemorySpace_t::RemoveFreeRange(Range_t oldRange) +{ + free_ranges.erase(Range_t(oldRange.GetStart(), oldRange.GetEnd())); +} + int ZiprMemorySpace_t::GetRangeCount() { return free_ranges.size(); diff --git a/src/zipr.cpp b/src/zipr.cpp index 789c8a056bfeb432ce14965efac662c2cd338967..b44b3667ecf78ce28ecf3b7562cdc3bb02525f35 100644 --- a/src/zipr.cpp +++ b/src/zipr.cpp @@ -1527,7 +1527,7 @@ RangeAddress_t Zipr_t::PlopWithTarget(Instruction_t* insn, RangeAddress_t at) void Zipr_t::RewritePCRelOffset(RangeAddress_t from_addr,RangeAddress_t to_addr, int insn_length, int offset_pos) { - int new_offset=to_addr-from_addr-insn_length; + int new_offset=((unsigned int)to_addr)-((unsigned int)from_addr)-((unsigned int)insn_length); memory_space[from_addr+offset_pos+0]=(new_offset>>0)&0xff; memory_space[from_addr+offset_pos+1]=(new_offset>>8)&0xff; diff --git a/test/Makefile.in b/test/Makefile.in deleted file mode 100644 index 668d5c90883986f307afa4b69cb9355c71ee3de9..0000000000000000000000000000000000000000 --- a/test/Makefile.in +++ /dev/null @@ -1,39 +0,0 @@ - -INC=-I../include -I../third_party/ELFIO/elfio-2.2 -I$(SECURITY_TRANSFORMS_HOME)/include -I$(SECURITY_TRANSFORMS_HOME)/libIRDB/include -I$(SECURITY_TRANSFORMS_HOME)/beaengine/include -I${SECURITY_TRANSFORMS_HOME}/tools/transforms/ - - - -SRCS=MemorySpace.cpp ../src/zipr_options.cpp ../src/memory_space.cpp -OBJS=$(subst .cpp,.o, $(SRCS)) -EXE=MemoryTest.exe - -CXX=@CXX@ -CXXFLAGS=@CXXFLAGS@ @OPTIMIZE@ -LDFLAGS=-L$(SECURITY_TRANSFORMS_HOME)/lib -Wl,-E -LIBS=-lIRDB-core -lBeaEngine_s_d -lpqxx -lpq - - - - -all: $(EXE) - --include $(OBJS:.o=.d) - -$(EXE): $(OBJS) - g++ $(LDFLAGS) $(OBJS) $(LIBS) -o $@ - -%.o: %.cpp - $(CXX) -c $(CXXFLAGS) $*.cpp -o $@ - @# - @# build dependencies -- http://scottmcpeak.com/autodepend/autodepend.html - @# - $(CXX) -MM $(CXXFLAGS) $*.cpp > $*.d - @cp -f $*.d $*.d.tmp - @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $*.d - @rm -f $*.d.tmp - - - - -clean: - rm -f $(OBJS) $(EXE) *.d *.o diff --git a/test/MemorySpace.cpp b/test/MemorySpace.cpp index 302e97dee683dd5de5ce344ef89cd3a9047df14a..fce502c59f41a7eb6880dbc1f5f6b341ce86b968 100644 --- a/test/MemorySpace.cpp +++ b/test/MemorySpace.cpp @@ -164,6 +164,28 @@ bool TestSort() return true; } + +bool TestInsertRemoveFreeRange() +{ + ZiprOptions_t opts; + opts.SetVerbose(true); + ZiprMemorySpace_t m(&opts); + m.AddFreeRange(Range_t(256, 512)); + m.AddFreeRange(Range_t(513, 1024)); + m.AddFreeRange(Range_t(1025, 4096)); + m.PrintMemorySpace(cout); + if (m.GetRangeCount() != 3) + return false; + m.RemoveFreeRange(Range_t(513, 1024)); + if (m.GetRangeCount() != 2) + return false; + m.PrintMemorySpace(cout); + m.RemoveFreeRange(Range_t(256, 512)); + m.RemoveFreeRange(Range_t(1025, 4096)); + m.PrintMemorySpace(cout); + return (m.GetRangeCount() == 0); +} + bool TestMergeFreeRange() { ZiprOptions_t opts; @@ -220,4 +242,5 @@ int main(int argc, char *argv[]) INVOKE(TestSort); INVOKE(TestBinarySearch); INVOKE(TestBinarySearchMaxRange); + INVOKE(TestInsertRemoveFreeRange); } diff --git a/test/SConstruct b/test/SConstruct new file mode 100644 index 0000000000000000000000000000000000000000..c0dd68a00d406b0148a93709cf916ad6d05f282c --- /dev/null +++ b/test/SConstruct @@ -0,0 +1,6 @@ + + + +env=Environment() +Export('env') +SConscript("SConscript")