Add static version of map wrappers and corresponding serializers.

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@714 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
SiyangXie@gmail.com 2010-10-15 20:36:31 +00:00
parent 361f24eac7
commit 08730fc9a6
21 changed files with 3205 additions and 46 deletions

View file

@ -119,6 +119,8 @@ src_libbreakpad_a_SOURCES = \
src/processor/linked_ptr.h \ src/processor/linked_ptr.h \
src/processor/logging.h \ src/processor/logging.h \
src/processor/logging.cc \ src/processor/logging.cc \
src/processor/map_serializers-inl.h \
src/processor/map_serializers.h \
src/processor/minidump.cc \ src/processor/minidump.cc \
src/processor/minidump_processor.cc \ src/processor/minidump_processor.cc \
src/processor/network_interface.h \ src/processor/network_interface.h \
@ -133,6 +135,8 @@ src_libbreakpad_a_SOURCES = \
src/processor/range_map-inl.h \ src/processor/range_map-inl.h \
src/processor/range_map.h \ src/processor/range_map.h \
src/processor/scoped_ptr.h \ src/processor/scoped_ptr.h \
src/processor/simple_serializer-inl.h \
src/processor/simple_serializer.h \
src/processor/simple_symbol_supplier.cc \ src/processor/simple_symbol_supplier.cc \
src/processor/simple_symbol_supplier.h \ src/processor/simple_symbol_supplier.h \
src/processor/windows_frame_info.h \ src/processor/windows_frame_info.h \
@ -149,10 +153,16 @@ src_libbreakpad_a_SOURCES = \
src/processor/stackwalker_sparc.h \ src/processor/stackwalker_sparc.h \
src/processor/stackwalker_x86.cc \ src/processor/stackwalker_x86.cc \
src/processor/stackwalker_x86.h \ src/processor/stackwalker_x86.h \
src/processor/static_address_map-inl.h \
src/processor/static_address_map.h \
src/processor/static_contained_range_map-inl.h \
src/processor/static_contained_range_map.h \
src/processor/static_map_iterator-inl.h \ src/processor/static_map_iterator-inl.h \
src/processor/static_map_iterator.h \ src/processor/static_map_iterator.h \
src/processor/static_map-inl.h \ src/processor/static_map-inl.h \
src/processor/static_map.h \ src/processor/static_map.h \
src/processor/static_range_map-inl.h \
src/processor/static_range_map.h \
src/processor/tokenize.cc \ src/processor/tokenize.cc \
src/processor/tokenize.h \ src/processor/tokenize.h \
src/processor/udp_network.cc \ src/processor/udp_network.cc \
@ -211,12 +221,16 @@ check_PROGRAMS += \
src/processor/contained_range_map_unittest \ src/processor/contained_range_map_unittest \
src/processor/disassembler_x86_unittest \ src/processor/disassembler_x86_unittest \
src/processor/exploitability_unittest \ src/processor/exploitability_unittest \
src/processor/map_serializers_unittest \
src/processor/minidump_processor_unittest \ src/processor/minidump_processor_unittest \
src/processor/minidump_unittest \ src/processor/minidump_unittest \
src/processor/network_source_line_resolver_unittest \ src/processor/network_source_line_resolver_unittest \
src/processor/network_source_line_resolver_server_unittest \ src/processor/network_source_line_resolver_server_unittest \
src/processor/network_source_line_server_unittest \ src/processor/network_source_line_server_unittest \
src/processor/static_address_map_unittest \
src/processor/static_contained_range_map_unittest \
src/processor/static_map_unittest \ src/processor/static_map_unittest \
src/processor/static_range_map_unittest \
src/processor/pathname_stripper_unittest \ src/processor/pathname_stripper_unittest \
src/processor/postfix_evaluator_unittest \ src/processor/postfix_evaluator_unittest \
src/processor/range_map_unittest \ src/processor/range_map_unittest \
@ -400,6 +414,20 @@ src_processor_disassembler_x86_unittest_LDADD = \
src/processor/disassembler_x86.o \ src/processor/disassembler_x86.o \
src/third_party/libdisasm/libdisasm.a src/third_party/libdisasm/libdisasm.a
src_processor_map_serializers_unittest_SOURCES = \
src/processor/map_serializers_unittest.cc \
src/testing/gtest/src/gtest-all.cc \
src/testing/src/gmock-all.cc
src_processor_map_serializers_unittest_CPPFLAGS = \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/testing/include \
-I$(top_srcdir)/src/testing/gtest/include \
-I$(top_srcdir)/src/testing/gtest \
-I$(top_srcdir)/src/testing
src_processor_map_serializers_unittest_LDADD = \
src/processor/logging.o \
src/processor/pathname_stripper.o
src_processor_minidump_processor_unittest_SOURCES = \ src_processor_minidump_processor_unittest_SOURCES = \
src/processor/minidump_processor_unittest.cc \ src/processor/minidump_processor_unittest.cc \
src/testing/gtest/src/gtest-all.cc \ src/testing/gtest/src/gtest-all.cc \
@ -528,6 +556,34 @@ src_processor_network_source_line_server_unittest_LDADD = \
src/processor/pathname_stripper.o \ src/processor/pathname_stripper.o \
src/processor/udp_network.o src/processor/udp_network.o
src_processor_static_address_map_unittest_SOURCES = \
src/processor/static_address_map_unittest.cc \
src/testing/gtest/src/gtest-all.cc \
src/testing/src/gmock-all.cc
src_processor_static_address_map_unittest_CPPFLAGS = \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/testing/include \
-I$(top_srcdir)/src/testing/gtest/include \
-I$(top_srcdir)/src/testing/gtest \
-I$(top_srcdir)/src/testing
src_processor_static_address_map_unittest_LDADD = \
src/processor/logging.o \
src/processor/pathname_stripper.o
src_processor_static_contained_range_map_unittest_SOURCES = \
src/processor/static_contained_range_map_unittest.cc \
src/testing/gtest/src/gtest-all.cc \
src/testing/src/gmock-all.cc
src_processor_static_contained_range_map_unittest_CPPFLAGS = \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/testing/include \
-I$(top_srcdir)/src/testing/gtest/include \
-I$(top_srcdir)/src/testing/gtest \
-I$(top_srcdir)/src/testing
src_processor_static_contained_range_map_unittest_LDADD = \
src/processor/logging.o \
src/processor/pathname_stripper.o
src_processor_static_map_unittest_SOURCES = \ src_processor_static_map_unittest_SOURCES = \
src/processor/static_map_unittest.cc \ src/processor/static_map_unittest.cc \
src/testing/gtest/src/gtest-all.cc \ src/testing/gtest/src/gtest-all.cc \
@ -542,6 +598,20 @@ src_processor_static_map_unittest_LDADD = \
src/processor/logging.o \ src/processor/logging.o \
src/processor/pathname_stripper.o src/processor/pathname_stripper.o
src_processor_static_range_map_unittest_SOURCES = \
src/processor/static_range_map_unittest.cc \
src/testing/gtest/src/gtest-all.cc \
src/testing/src/gmock-all.cc
src_processor_static_range_map_unittest_CPPFLAGS = \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/testing/include \
-I$(top_srcdir)/src/testing/gtest/include \
-I$(top_srcdir)/src/testing/gtest \
-I$(top_srcdir)/src/testing
src_processor_static_range_map_unittest_LDADD = \
src/processor/logging.o \
src/processor/pathname_stripper.o
src_processor_pathname_stripper_unittest_SOURCES = \ src_processor_pathname_stripper_unittest_SOURCES = \
src/processor/pathname_stripper_unittest.cc src/processor/pathname_stripper_unittest.cc
src_processor_pathname_stripper_unittest_LDADD = \ src_processor_pathname_stripper_unittest_LDADD = \

View file

@ -88,12 +88,16 @@ check_PROGRAMS = $(am__EXEEXT_3) $(am__EXEEXT_4) $(am__EXEEXT_5)
@DISABLE_PROCESSOR_FALSE@ src/processor/contained_range_map_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/contained_range_map_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/map_serializers_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_resolver_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_resolver_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_resolver_server_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_resolver_server_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_server_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_server_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_address_map_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_contained_range_map_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_map_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/static_map_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_range_map_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/postfix_evaluator_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/postfix_evaluator_unittest \
@DISABLE_PROCESSOR_FALSE@ src/processor/range_map_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/range_map_unittest \
@ -216,7 +220,9 @@ am__src_libbreakpad_a_SOURCES_DIST = \
src/processor/exploitability_win.h \ src/processor/exploitability_win.h \
src/processor/exploitability_win.cc src/processor/linked_ptr.h \ src/processor/exploitability_win.cc src/processor/linked_ptr.h \
src/processor/logging.h src/processor/logging.cc \ src/processor/logging.h src/processor/logging.cc \
src/processor/minidump.cc src/processor/minidump_processor.cc \ src/processor/map_serializers-inl.h \
src/processor/map_serializers.h src/processor/minidump.cc \
src/processor/minidump_processor.cc \
src/processor/network_interface.h \ src/processor/network_interface.h \
src/processor/network_source_line_resolver.cc \ src/processor/network_source_line_resolver.cc \
src/processor/network_source_line_server.cc \ src/processor/network_source_line_server.cc \
@ -227,6 +233,8 @@ am__src_libbreakpad_a_SOURCES_DIST = \
src/processor/postfix_evaluator.h \ src/processor/postfix_evaluator.h \
src/processor/process_state.cc src/processor/range_map-inl.h \ src/processor/process_state.cc src/processor/range_map-inl.h \
src/processor/range_map.h src/processor/scoped_ptr.h \ src/processor/range_map.h src/processor/scoped_ptr.h \
src/processor/simple_serializer-inl.h \
src/processor/simple_serializer.h \
src/processor/simple_symbol_supplier.cc \ src/processor/simple_symbol_supplier.cc \
src/processor/simple_symbol_supplier.h \ src/processor/simple_symbol_supplier.h \
src/processor/windows_frame_info.h \ src/processor/windows_frame_info.h \
@ -243,11 +251,17 @@ am__src_libbreakpad_a_SOURCES_DIST = \
src/processor/stackwalker_sparc.h \ src/processor/stackwalker_sparc.h \
src/processor/stackwalker_x86.cc \ src/processor/stackwalker_x86.cc \
src/processor/stackwalker_x86.h \ src/processor/stackwalker_x86.h \
src/processor/static_address_map-inl.h \
src/processor/static_address_map.h \
src/processor/static_contained_range_map-inl.h \
src/processor/static_contained_range_map.h \
src/processor/static_map_iterator-inl.h \ src/processor/static_map_iterator-inl.h \
src/processor/static_map_iterator.h \ src/processor/static_map_iterator.h \
src/processor/static_map-inl.h src/processor/static_map.h \ src/processor/static_map-inl.h src/processor/static_map.h \
src/processor/tokenize.cc src/processor/tokenize.h \ src/processor/static_range_map-inl.h \
src/processor/udp_network.cc src/processor/udp_network.h src/processor/static_range_map.h src/processor/tokenize.cc \
src/processor/tokenize.h src/processor/udp_network.cc \
src/processor/udp_network.h
@DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS = src/processor/basic_code_modules.$(OBJEXT) \ @DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS = src/processor/basic_code_modules.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.$(OBJEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.$(OBJEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.$(OBJEXT) \
@ -332,12 +346,16 @@ src_third_party_libdisasm_libdisasm_a_OBJECTS = \
@DISABLE_PROCESSOR_FALSE@ src/processor/contained_range_map_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/contained_range_map_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/map_serializers_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_resolver_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_resolver_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_resolver_server_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_resolver_server_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_server_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/network_source_line_server_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_address_map_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_contained_range_map_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_map_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/static_map_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_range_map_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/postfix_evaluator_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/postfix_evaluator_unittest$(EXEEXT) \
@DISABLE_PROCESSOR_FALSE@ src/processor/range_map_unittest$(EXEEXT) \ @DISABLE_PROCESSOR_FALSE@ src/processor/range_map_unittest$(EXEEXT) \
@ -502,6 +520,18 @@ src_processor_exploitability_unittest_OBJECTS = \
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_x86.o \ @DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_x86.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.o \ @DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.o \
@DISABLE_PROCESSOR_FALSE@ src/third_party/libdisasm/libdisasm.a @DISABLE_PROCESSOR_FALSE@ src/third_party/libdisasm/libdisasm.a
am__src_processor_map_serializers_unittest_SOURCES_DIST = \
src/processor/map_serializers_unittest.cc \
src/testing/gtest/src/gtest-all.cc \
src/testing/src/gmock-all.cc
@DISABLE_PROCESSOR_FALSE@am_src_processor_map_serializers_unittest_OBJECTS = src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT)
src_processor_map_serializers_unittest_OBJECTS = \
$(am_src_processor_map_serializers_unittest_OBJECTS)
@DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_DEPENDENCIES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
am__src_processor_minidump_dump_SOURCES_DIST = \ am__src_processor_minidump_dump_SOURCES_DIST = \
src/processor/minidump_dump.cc src/processor/minidump_dump.cc
@DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_dump_OBJECTS = src/processor/minidump_dump.$(OBJEXT) @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_dump_OBJECTS = src/processor/minidump_dump.$(OBJEXT)
@ -769,6 +799,29 @@ src_processor_stackwalker_x86_unittest_OBJECTS = \
$(am_src_processor_stackwalker_x86_unittest_OBJECTS) $(am_src_processor_stackwalker_x86_unittest_OBJECTS)
@DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_x86_unittest_DEPENDENCIES = \ @DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_x86_unittest_DEPENDENCIES = \
@DISABLE_PROCESSOR_FALSE@ src/libbreakpad.a @DISABLE_PROCESSOR_FALSE@ src/libbreakpad.a
am__src_processor_static_address_map_unittest_SOURCES_DIST = \
src/processor/static_address_map_unittest.cc \
src/testing/gtest/src/gtest-all.cc \
src/testing/src/gmock-all.cc
@DISABLE_PROCESSOR_FALSE@am_src_processor_static_address_map_unittest_OBJECTS = src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT)
src_processor_static_address_map_unittest_OBJECTS = \
$(am_src_processor_static_address_map_unittest_OBJECTS)
@DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_DEPENDENCIES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
am__src_processor_static_contained_range_map_unittest_SOURCES_DIST = \
src/processor/static_contained_range_map_unittest.cc \
src/testing/gtest/src/gtest-all.cc \
src/testing/src/gmock-all.cc
@DISABLE_PROCESSOR_FALSE@am_src_processor_static_contained_range_map_unittest_OBJECTS = src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT)
src_processor_static_contained_range_map_unittest_OBJECTS = $(am_src_processor_static_contained_range_map_unittest_OBJECTS)
@DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_DEPENDENCIES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
am__src_processor_static_map_unittest_SOURCES_DIST = \ am__src_processor_static_map_unittest_SOURCES_DIST = \
src/processor/static_map_unittest.cc \ src/processor/static_map_unittest.cc \
src/testing/gtest/src/gtest-all.cc \ src/testing/gtest/src/gtest-all.cc \
@ -781,6 +834,18 @@ src_processor_static_map_unittest_OBJECTS = \
@DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_DEPENDENCIES = \ @DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_DEPENDENCIES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
am__src_processor_static_range_map_unittest_SOURCES_DIST = \
src/processor/static_range_map_unittest.cc \
src/testing/gtest/src/gtest-all.cc \
src/testing/src/gmock-all.cc
@DISABLE_PROCESSOR_FALSE@am_src_processor_static_range_map_unittest_OBJECTS = src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT) \
@DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT)
src_processor_static_range_map_unittest_OBJECTS = \
$(am_src_processor_static_range_map_unittest_OBJECTS)
@DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_DEPENDENCIES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
am__src_processor_synth_minidump_unittest_SOURCES_DIST = \ am__src_processor_synth_minidump_unittest_SOURCES_DIST = \
src/common/test_assembler.cc src/common/test_assembler.h \ src/common/test_assembler.cc src/common/test_assembler.h \
src/processor/synth_minidump_unittest.cc \ src/processor/synth_minidump_unittest.cc \
@ -824,6 +889,7 @@ SOURCES = $(src_client_linux_libbreakpad_client_a_SOURCES) \
$(src_processor_contained_range_map_unittest_SOURCES) \ $(src_processor_contained_range_map_unittest_SOURCES) \
$(src_processor_disassembler_x86_unittest_SOURCES) \ $(src_processor_disassembler_x86_unittest_SOURCES) \
$(src_processor_exploitability_unittest_SOURCES) \ $(src_processor_exploitability_unittest_SOURCES) \
$(src_processor_map_serializers_unittest_SOURCES) \
$(src_processor_minidump_dump_SOURCES) \ $(src_processor_minidump_dump_SOURCES) \
$(src_processor_minidump_processor_unittest_SOURCES) \ $(src_processor_minidump_processor_unittest_SOURCES) \
$(src_processor_minidump_stackwalk_SOURCES) \ $(src_processor_minidump_stackwalk_SOURCES) \
@ -839,7 +905,10 @@ SOURCES = $(src_client_linux_libbreakpad_client_a_SOURCES) \
$(src_processor_stackwalker_arm_unittest_SOURCES) \ $(src_processor_stackwalker_arm_unittest_SOURCES) \
$(src_processor_stackwalker_selftest_SOURCES) \ $(src_processor_stackwalker_selftest_SOURCES) \
$(src_processor_stackwalker_x86_unittest_SOURCES) \ $(src_processor_stackwalker_x86_unittest_SOURCES) \
$(src_processor_static_address_map_unittest_SOURCES) \
$(src_processor_static_contained_range_map_unittest_SOURCES) \
$(src_processor_static_map_unittest_SOURCES) \ $(src_processor_static_map_unittest_SOURCES) \
$(src_processor_static_range_map_unittest_SOURCES) \
$(src_processor_synth_minidump_unittest_SOURCES) $(src_processor_synth_minidump_unittest_SOURCES)
DIST_SOURCES = \ DIST_SOURCES = \
$(am__src_client_linux_libbreakpad_client_a_SOURCES_DIST) \ $(am__src_client_linux_libbreakpad_client_a_SOURCES_DIST) \
@ -855,6 +924,7 @@ DIST_SOURCES = \
$(am__src_processor_contained_range_map_unittest_SOURCES_DIST) \ $(am__src_processor_contained_range_map_unittest_SOURCES_DIST) \
$(am__src_processor_disassembler_x86_unittest_SOURCES_DIST) \ $(am__src_processor_disassembler_x86_unittest_SOURCES_DIST) \
$(am__src_processor_exploitability_unittest_SOURCES_DIST) \ $(am__src_processor_exploitability_unittest_SOURCES_DIST) \
$(am__src_processor_map_serializers_unittest_SOURCES_DIST) \
$(am__src_processor_minidump_dump_SOURCES_DIST) \ $(am__src_processor_minidump_dump_SOURCES_DIST) \
$(am__src_processor_minidump_processor_unittest_SOURCES_DIST) \ $(am__src_processor_minidump_processor_unittest_SOURCES_DIST) \
$(am__src_processor_minidump_stackwalk_SOURCES_DIST) \ $(am__src_processor_minidump_stackwalk_SOURCES_DIST) \
@ -870,7 +940,10 @@ DIST_SOURCES = \
$(am__src_processor_stackwalker_arm_unittest_SOURCES_DIST) \ $(am__src_processor_stackwalker_arm_unittest_SOURCES_DIST) \
$(am__src_processor_stackwalker_selftest_SOURCES_DIST) \ $(am__src_processor_stackwalker_selftest_SOURCES_DIST) \
$(am__src_processor_stackwalker_x86_unittest_SOURCES_DIST) \ $(am__src_processor_stackwalker_x86_unittest_SOURCES_DIST) \
$(am__src_processor_static_address_map_unittest_SOURCES_DIST) \
$(am__src_processor_static_contained_range_map_unittest_SOURCES_DIST) \
$(am__src_processor_static_map_unittest_SOURCES_DIST) \ $(am__src_processor_static_map_unittest_SOURCES_DIST) \
$(am__src_processor_static_range_map_unittest_SOURCES_DIST) \
$(am__src_processor_synth_minidump_unittest_SOURCES_DIST) $(am__src_processor_synth_minidump_unittest_SOURCES_DIST)
DATA = $(dist_doc_DATA) DATA = $(dist_doc_DATA)
ETAGS = etags ETAGS = etags
@ -1062,6 +1135,8 @@ lib_LIBRARIES = $(am__append_1) $(am__append_3)
@DISABLE_PROCESSOR_FALSE@ src/processor/linked_ptr.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/linked_ptr.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/logging.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/logging.cc \
@DISABLE_PROCESSOR_FALSE@ src/processor/map_serializers-inl.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/map_serializers.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump.cc \
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor.cc \
@DISABLE_PROCESSOR_FALSE@ src/processor/network_interface.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/network_interface.h \
@ -1076,6 +1151,8 @@ lib_LIBRARIES = $(am__append_1) $(am__append_3)
@DISABLE_PROCESSOR_FALSE@ src/processor/range_map-inl.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/range_map-inl.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/range_map.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/range_map.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/scoped_ptr.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/scoped_ptr.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/simple_serializer-inl.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/simple_serializer.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/simple_symbol_supplier.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/simple_symbol_supplier.cc \
@DISABLE_PROCESSOR_FALSE@ src/processor/simple_symbol_supplier.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/simple_symbol_supplier.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/windows_frame_info.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/windows_frame_info.h \
@ -1092,10 +1169,16 @@ lib_LIBRARIES = $(am__append_1) $(am__append_3)
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_sparc.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_sparc.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_x86.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_x86.cc \
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_x86.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_x86.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_address_map-inl.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_address_map.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_contained_range_map-inl.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_contained_range_map.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_map_iterator-inl.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/static_map_iterator-inl.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_map_iterator.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/static_map_iterator.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_map-inl.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/static_map-inl.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_map.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/static_map.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_range_map-inl.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_range_map.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.cc \
@DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.h \ @DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.h \
@DISABLE_PROCESSOR_FALSE@ src/processor/udp_network.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/udp_network.cc \
@ -1298,6 +1381,22 @@ TESTS_ENVIRONMENT =
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
@DISABLE_PROCESSOR_FALSE@ src/third_party/libdisasm/libdisasm.a @DISABLE_PROCESSOR_FALSE@ src/third_party/libdisasm/libdisasm.a
@DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_SOURCES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/map_serializers_unittest.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/src/gmock-all.cc
@DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_CPPFLAGS = \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing
@DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_LDADD = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
@DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_SOURCES = \ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_SOURCES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor_unittest.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor_unittest.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \ @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \
@ -1436,6 +1535,38 @@ TESTS_ENVIRONMENT =
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/udp_network.o @DISABLE_PROCESSOR_FALSE@ src/processor/udp_network.o
@DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_SOURCES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_address_map_unittest.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/src/gmock-all.cc
@DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_CPPFLAGS = \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing
@DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_LDADD = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
@DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_SOURCES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_contained_range_map_unittest.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/src/gmock-all.cc
@DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_CPPFLAGS = \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing
@DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_LDADD = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
@DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_SOURCES = \ @DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_SOURCES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_map_unittest.cc \ @DISABLE_PROCESSOR_FALSE@ src/processor/static_map_unittest.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \ @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \
@ -1452,6 +1583,22 @@ TESTS_ENVIRONMENT =
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
@DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_SOURCES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/static_range_map_unittest.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \
@DISABLE_PROCESSOR_FALSE@ src/testing/src/gmock-all.cc
@DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_CPPFLAGS = \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \
@DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing
@DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_LDADD = \
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o
@DISABLE_PROCESSOR_FALSE@src_processor_pathname_stripper_unittest_SOURCES = \ @DISABLE_PROCESSOR_FALSE@src_processor_pathname_stripper_unittest_SOURCES = \
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper_unittest.cc @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper_unittest.cc
@ -2254,6 +2401,18 @@ src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT): \
src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
@rm -f src/processor/exploitability_unittest$(EXEEXT) @rm -f src/processor/exploitability_unittest$(EXEEXT)
$(CXXLINK) $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_LDADD) $(LIBS) $(CXXLINK) $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_LDADD) $(LIBS)
src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT): \
src/processor/$(am__dirstamp) \
src/processor/$(DEPDIR)/$(am__dirstamp)
src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT): \
src/testing/gtest/src/$(am__dirstamp) \
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT): \
src/testing/src/$(am__dirstamp) \
src/testing/src/$(DEPDIR)/$(am__dirstamp)
src/processor/map_serializers_unittest$(EXEEXT): $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
@rm -f src/processor/map_serializers_unittest$(EXEEXT)
$(CXXLINK) $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_LDADD) $(LIBS)
src/processor/minidump_dump.$(OBJEXT): src/processor/$(am__dirstamp) \ src/processor/minidump_dump.$(OBJEXT): src/processor/$(am__dirstamp) \
src/processor/$(DEPDIR)/$(am__dirstamp) src/processor/$(DEPDIR)/$(am__dirstamp)
src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp) src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp)
@ -2417,6 +2576,30 @@ src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT): \
src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
@rm -f src/processor/stackwalker_x86_unittest$(EXEEXT) @rm -f src/processor/stackwalker_x86_unittest$(EXEEXT)
$(CXXLINK) $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_LDADD) $(LIBS) $(CXXLINK) $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_LDADD) $(LIBS)
src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT): \
src/processor/$(am__dirstamp) \
src/processor/$(DEPDIR)/$(am__dirstamp)
src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJEXT): \
src/testing/gtest/src/$(am__dirstamp) \
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT): \
src/testing/src/$(am__dirstamp) \
src/testing/src/$(DEPDIR)/$(am__dirstamp)
src/processor/static_address_map_unittest$(EXEEXT): $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
@rm -f src/processor/static_address_map_unittest$(EXEEXT)
$(CXXLINK) $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_LDADD) $(LIBS)
src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT): \
src/processor/$(am__dirstamp) \
src/processor/$(DEPDIR)/$(am__dirstamp)
src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.$(OBJEXT): \
src/testing/gtest/src/$(am__dirstamp) \
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT): \
src/testing/src/$(am__dirstamp) \
src/testing/src/$(DEPDIR)/$(am__dirstamp)
src/processor/static_contained_range_map_unittest$(EXEEXT): $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
@rm -f src/processor/static_contained_range_map_unittest$(EXEEXT)
$(CXXLINK) $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_LDADD) $(LIBS)
src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT): \ src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT): \
src/processor/$(am__dirstamp) \ src/processor/$(am__dirstamp) \
src/processor/$(DEPDIR)/$(am__dirstamp) src/processor/$(DEPDIR)/$(am__dirstamp)
@ -2429,6 +2612,18 @@ src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT): \
src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
@rm -f src/processor/static_map_unittest$(EXEEXT) @rm -f src/processor/static_map_unittest$(EXEEXT)
$(CXXLINK) $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_LDADD) $(LIBS) $(CXXLINK) $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_LDADD) $(LIBS)
src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT): \
src/processor/$(am__dirstamp) \
src/processor/$(DEPDIR)/$(am__dirstamp)
src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT): \
src/testing/gtest/src/$(am__dirstamp) \
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT): \
src/testing/src/$(am__dirstamp) \
src/testing/src/$(DEPDIR)/$(am__dirstamp)
src/processor/static_range_map_unittest$(EXEEXT): $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
@rm -f src/processor/static_range_map_unittest$(EXEEXT)
$(CXXLINK) $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_LDADD) $(LIBS)
src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT): \ src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT): \
src/common/$(am__dirstamp) \ src/common/$(am__dirstamp) \
src/common/$(DEPDIR)/$(am__dirstamp) src/common/$(DEPDIR)/$(am__dirstamp)
@ -2511,6 +2706,7 @@ mostlyclean-compile:
-rm -f src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT) -rm -f src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.$(OBJEXT) -rm -f src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT) -rm -f src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT) -rm -f src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_minidump_unittest-minidump_unittest.$(OBJEXT) -rm -f src/processor/src_processor_minidump_unittest-minidump_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_minidump_unittest-synth_minidump.$(OBJEXT) -rm -f src/processor/src_processor_minidump_unittest-synth_minidump.$(OBJEXT)
@ -2520,7 +2716,10 @@ mostlyclean-compile:
-rm -f src/processor/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.$(OBJEXT) -rm -f src/processor/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.$(OBJEXT) -rm -f src/processor/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.$(OBJEXT) -rm -f src/processor/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT) -rm -f src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT)
-rm -f src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT) -rm -f src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT)
-rm -f src/processor/src_processor_synth_minidump_unittest-synth_minidump_unittest.$(OBJEXT) -rm -f src/processor/src_processor_synth_minidump_unittest-synth_minidump_unittest.$(OBJEXT)
-rm -f src/processor/stackwalker.$(OBJEXT) -rm -f src/processor/stackwalker.$(OBJEXT)
@ -2544,6 +2743,7 @@ mostlyclean-compile:
-rm -f src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_minidump_unittest-gtest-all.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_minidump_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_minidump_unittest-gtest_main.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_minidump_unittest-gtest_main.$(OBJEXT)
@ -2556,7 +2756,10 @@ mostlyclean-compile:
-rm -f src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest_main.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest_main.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest-all.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest_main.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest_main.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest-all.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest-all.$(OBJEXT)
-rm -f src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest_main.$(OBJEXT) -rm -f src/testing/gtest/src/src_processor_synth_minidump_unittest-gtest_main.$(OBJEXT)
-rm -f src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT)
@ -2566,6 +2769,7 @@ mostlyclean-compile:
-rm -f src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_network_source_line_resolver_server_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_network_source_line_resolver_server_unittest-gmock-all.$(OBJEXT)
@ -2574,7 +2778,10 @@ mostlyclean-compile:
-rm -f src/testing/src/src_processor_stackwalker_amd64_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_stackwalker_amd64_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_stackwalker_arm_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_stackwalker_arm_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT)
-rm -f src/testing/src/src_processor_synth_minidump_unittest-gmock-all.$(OBJEXT) -rm -f src/testing/src/src_processor_synth_minidump_unittest-gmock-all.$(OBJEXT)
-rm -f src/third_party/libdisasm/ia32_implicit.$(OBJEXT) -rm -f src/third_party/libdisasm/ia32_implicit.$(OBJEXT)
-rm -f src/third_party/libdisasm/ia32_insn.$(OBJEXT) -rm -f src/third_party/libdisasm/ia32_insn.$(OBJEXT)
@ -2652,6 +2859,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_exploitability_unittest-exploitability_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_unittest-minidump_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_unittest-minidump_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_unittest-synth_minidump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_unittest-synth_minidump.Po@am__quote@
@ -2661,7 +2869,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_synth_minidump_unittest-synth_minidump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_synth_minidump_unittest-synth_minidump.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_synth_minidump_unittest-synth_minidump_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_synth_minidump_unittest-synth_minidump_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker.Po@am__quote@
@ -2685,6 +2896,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gtest_main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_exploitability_unittest-gtest_main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_unittest-gtest-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_unittest-gtest_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_unittest-gtest_main.Po@am__quote@
@ -2697,7 +2909,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_arm_unittest-gtest_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_arm_unittest-gtest_main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gtest-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gtest_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gtest_main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_map_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gtest-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gtest_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gtest_main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Po@am__quote@
@ -2707,6 +2922,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_cfi_frame_info_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_cfi_frame_info_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_disassembler_x86_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_exploitability_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_network_source_line_resolver_server_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_network_source_line_resolver_server_unittest-gmock-all.Po@am__quote@
@ -2715,7 +2931,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_amd64_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_amd64_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_arm_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_arm_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_stackwalker_x86_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_map_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gmock-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_synth_minidump_unittest-gmock-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_implicit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_implicit.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_insn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/third_party/libdisasm/$(DEPDIR)/ia32_insn.Po@am__quote@
@ -3282,6 +3501,48 @@ src/testing/src/src_processor_exploitability_unittest-gmock-all.obj: src/testing
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_exploitability_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi` @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_exploitability_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_exploitability_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o: src/processor/map_serializers_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Tpo -c -o src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o `test -f 'src/processor/map_serializers_unittest.cc' || echo '$(srcdir)/'`src/processor/map_serializers_unittest.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Tpo src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/processor/map_serializers_unittest.cc' object='src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.o `test -f 'src/processor/map_serializers_unittest.cc' || echo '$(srcdir)/'`src/processor/map_serializers_unittest.cc
src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj: src/processor/map_serializers_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Tpo -c -o src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj `if test -f 'src/processor/map_serializers_unittest.cc'; then $(CYGPATH_W) 'src/processor/map_serializers_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/map_serializers_unittest.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Tpo src/processor/$(DEPDIR)/src_processor_map_serializers_unittest-map_serializers_unittest.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/processor/map_serializers_unittest.cc' object='src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.obj `if test -f 'src/processor/map_serializers_unittest.cc'; then $(CYGPATH_W) 'src/processor/map_serializers_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/map_serializers_unittest.cc'; fi`
src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_map_serializers_unittest-gtest-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
src/testing/src/src_processor_map_serializers_unittest-gmock-all.o: src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_map_serializers_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_map_serializers_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_map_serializers_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_map_serializers_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_map_serializers_unittest-gmock-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_map_serializers_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_map_serializers_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o: src/processor/minidump_processor_unittest.cc src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o: src/processor/minidump_processor_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo -c -o src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o `test -f 'src/processor/minidump_processor_unittest.cc' || echo '$(srcdir)/'`src/processor/minidump_processor_unittest.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo -c -o src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o `test -f 'src/processor/minidump_processor_unittest.cc' || echo '$(srcdir)/'`src/processor/minidump_processor_unittest.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po @am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po
@ -3744,6 +4005,90 @@ src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.obj: src/testin
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_stackwalker_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi` @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_stackwalker_x86_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o: src/processor/static_address_map_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Tpo -c -o src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o `test -f 'src/processor/static_address_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_address_map_unittest.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/processor/static_address_map_unittest.cc' object='src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.o `test -f 'src/processor/static_address_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_address_map_unittest.cc
src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj: src/processor/static_address_map_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Tpo -c -o src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj `if test -f 'src/processor/static_address_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_address_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_address_map_unittest.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_address_map_unittest-static_address_map_unittest.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/processor/static_address_map_unittest.cc' object='src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.obj `if test -f 'src/processor/static_address_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_address_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_address_map_unittest.cc'; fi`
src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_address_map_unittest-gtest-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
src/testing/src/src_processor_static_address_map_unittest-gmock-all.o: src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_address_map_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_address_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_address_map_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_address_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_address_map_unittest-gmock-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_address_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_address_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o: src/processor/static_contained_range_map_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Tpo -c -o src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o `test -f 'src/processor/static_contained_range_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_contained_range_map_unittest.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/processor/static_contained_range_map_unittest.cc' object='src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.o `test -f 'src/processor/static_contained_range_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_contained_range_map_unittest.cc
src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj: src/processor/static_contained_range_map_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Tpo -c -o src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj `if test -f 'src/processor/static_contained_range_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_contained_range_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_contained_range_map_unittest.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/processor/static_contained_range_map_unittest.cc' object='src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.obj `if test -f 'src/processor/static_contained_range_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_contained_range_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_contained_range_map_unittest.cc'; fi`
src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gtest-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o: src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_contained_range_map_unittest-gmock-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_contained_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
src/processor/src_processor_static_map_unittest-static_map_unittest.o: src/processor/static_map_unittest.cc src/processor/src_processor_static_map_unittest-static_map_unittest.o: src/processor/static_map_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_map_unittest-static_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Tpo -c -o src/processor/src_processor_static_map_unittest-static_map_unittest.o `test -f 'src/processor/static_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_map_unittest.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_map_unittest-static_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Tpo -c -o src/processor/src_processor_static_map_unittest-static_map_unittest.o `test -f 'src/processor/static_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_map_unittest.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Po @am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_map_unittest-static_map_unittest.Po
@ -3786,6 +4131,48 @@ src/testing/src/src_processor_static_map_unittest-gmock-all.obj: src/testing/src
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi` @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o: src/processor/static_range_map_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Tpo -c -o src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o `test -f 'src/processor/static_range_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_range_map_unittest.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/processor/static_range_map_unittest.cc' object='src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.o `test -f 'src/processor/static_range_map_unittest.cc' || echo '$(srcdir)/'`src/processor/static_range_map_unittest.cc
src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj: src/processor/static_range_map_unittest.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj -MD -MP -MF src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Tpo -c -o src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj `if test -f 'src/processor/static_range_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_range_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_range_map_unittest.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Tpo src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/processor/static_range_map_unittest.cc' object='src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.obj `if test -f 'src/processor/static_range_map_unittest.cc'; then $(CYGPATH_W) 'src/processor/static_range_map_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/static_range_map_unittest.cc'; fi`
src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_static_range_map_unittest-gtest-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
src/testing/src/src_processor_static_range_map_unittest-gmock-all.o: src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_range_map_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_range_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_range_map_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_range_map_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_static_range_map_unittest-gmock-all.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_static_range_map_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_static_range_map_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
src/common/src_processor_synth_minidump_unittest-test_assembler.o: src/common/test_assembler.cc src/common/src_processor_synth_minidump_unittest-test_assembler.o: src/common/test_assembler.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_synth_minidump_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_processor_synth_minidump_unittest-test_assembler.o -MD -MP -MF src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Tpo -c -o src/common/src_processor_synth_minidump_unittest-test_assembler.o `test -f 'src/common/test_assembler.cc' || echo '$(srcdir)/'`src/common/test_assembler.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_synth_minidump_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_processor_synth_minidump_unittest-test_assembler.o -MD -MP -MF src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Tpo -c -o src/common/src_processor_synth_minidump_unittest-test_assembler.o `test -f 'src/common/test_assembler.cc' || echo '$(srcdir)/'`src/common/test_assembler.cc
@am__fastdepCXX_TRUE@ $(am__mv) src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Tpo src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Po @am__fastdepCXX_TRUE@ $(am__mv) src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Tpo src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Po

View file

@ -64,6 +64,7 @@ class BasicSourceLineResolver : public SourceLineResolverBase {
private: private:
// friend declarations: // friend declarations:
friend class BasicModuleFactory; friend class BasicModuleFactory;
template<class> friend class SimpleSerializer;
// Function derives from SourceLineResolverBase::Function. // Function derives from SourceLineResolverBase::Function.
struct Function; struct Function;

View file

@ -42,6 +42,9 @@
namespace google_breakpad { namespace google_breakpad {
// Forward declarations (for later friend declarations).
template<class, class> class AddressMapSerializer;
template<typename AddressType, typename EntryType> template<typename AddressType, typename EntryType>
class AddressMap { class AddressMap {
public: public:
@ -65,6 +68,8 @@ class AddressMap {
void Clear(); void Clear();
private: private:
friend class AddressMapSerializer<AddressType, EntryType>;
// Convenience types. // Convenience types.
typedef std::map<AddressType, EntryType> AddressToEntryMap; typedef std::map<AddressType, EntryType> AddressToEntryMap;
typedef typename AddressToEntryMap::const_iterator MapConstIterator; typedef typename AddressToEntryMap::const_iterator MapConstIterator;
@ -77,4 +82,3 @@ class AddressMap {
} // namespace google_breakpad } // namespace google_breakpad
#endif // PROCESSOR_ADDRESS_MAP_H__ #endif // PROCESSOR_ADDRESS_MAP_H__

View file

@ -66,6 +66,8 @@
namespace google_breakpad { namespace google_breakpad {
// Forward declarations (for later friend declarations of specialized template).
template<class, class> class ContainedRangeMapSerializer;
template<typename AddressType, typename EntryType> template<typename AddressType, typename EntryType>
class ContainedRangeMap { class ContainedRangeMap {
@ -103,6 +105,8 @@ class ContainedRangeMap {
void Clear(); void Clear();
private: private:
friend class ContainedRangeMapSerializer<AddressType, EntryType>;
// AddressToRangeMap stores pointers. This makes reparenting simpler in // AddressToRangeMap stores pointers. This makes reparenting simpler in
// StoreRange, because it doesn't need to copy entire objects. // StoreRange, because it doesn't need to copy entire objects.
typedef std::map<AddressType, ContainedRangeMap *> AddressToRangeMap; typedef std::map<AddressType, ContainedRangeMap *> AddressToRangeMap;

View file

@ -0,0 +1,268 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// map_serializers_inl.h: implementation for serializing std::map and its
// wrapper classes.
//
// See map_serializers.h for documentation.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_MAP_SERIALIZERS_INL_H__
#define PROCESSOR_MAP_SERIALIZERS_INL_H__
#include <map>
#include <string>
#include "processor/map_serializers.h"
#include "processor/simple_serializer.h"
#include "processor/address_map-inl.h"
#include "processor/range_map-inl.h"
#include "processor/contained_range_map-inl.h"
#include "processor/logging.h"
namespace google_breakpad {
template<typename Key, typename Value>
size_t StdMapSerializer<Key, Value>::SizeOf(
const std::map<Key, Value> &m) const {
size_t size = 0;
size_t header_size = (1 + m.size()) * sizeof(u_int32_t);
size += header_size;
typename std::map<Key, Value>::const_iterator iter;
for (iter = m.begin(); iter != m.end(); ++iter) {
size += key_serializer_.SizeOf(iter->first);
size += value_serializer_.SizeOf(iter->second);
}
return size;
}
template<typename Key, typename Value>
char *StdMapSerializer<Key, Value>::Write(const std::map<Key, Value> &m,
char *dest) const {
if (!dest) {
BPLOG(ERROR) << "StdMapSerializer failed: write to NULL address.";
return NULL;
}
char *start_address = dest;
// Write header:
// Number of nodes.
dest = SimpleSerializer<u_int32_t>::Write(m.size(), dest);
// Nodes offsets.
u_int32_t *offsets = reinterpret_cast<u_int32_t*>(dest);
dest += sizeof(u_int32_t) * m.size();
char *key_address = dest;
dest += sizeof(Key) * m.size();
// Traverse map.
typename std::map<Key, Value>::const_iterator iter;
int index = 0;
for (iter = m.begin(); iter != m.end(); ++iter, ++index) {
offsets[index] = static_cast<u_int32_t>(dest - start_address);
key_address = key_serializer_.Write(iter->first, key_address);
dest = value_serializer_.Write(iter->second, dest);
}
return dest;
}
template<typename Key, typename Value>
char *StdMapSerializer<Key, Value>::Serialize(
const std::map<Key, Value> &m, unsigned int *size) const {
// Compute size of memory to be allocated.
unsigned int size_to_alloc = SizeOf(m);
// Allocate memory.
char *serialized_data =
reinterpret_cast<char*>(operator new(size_to_alloc));
if (!serialized_data) {
BPLOG(INFO) << "StdMapSerializer memory allocation failed.";
if (size) *size = 0;
return NULL;
}
// Write serialized data into memory.
Write(m, serialized_data);
if (size) *size = size_to_alloc;
return serialized_data;
}
template<typename Address, typename Entry>
size_t RangeMapSerializer<Address, Entry>::SizeOf(
const RangeMap<Address, Entry> &m) const {
size_t size = 0;
size_t header_size = (1 + m.map_.size()) * sizeof(u_int32_t);
size += header_size;
typename std::map<Address, Range>::const_iterator iter;
for (iter = m.map_.begin(); iter != m.map_.end(); ++iter) {
// Size of key (high address).
size += address_serializer_.SizeOf(iter->first);
// Size of base (low address).
size += address_serializer_.SizeOf(iter->second.base());
// Size of entry.
size += entry_serializer_.SizeOf(iter->second.entry());
}
return size;
}
template<typename Address, typename Entry>
char *RangeMapSerializer<Address, Entry>::Write(
const RangeMap<Address, Entry> &m, char *dest) const {
if (!dest) {
BPLOG(ERROR) << "RangeMapSerializer failed: write to NULL address.";
return NULL;
}
char *start_address = dest;
// Write header:
// Number of nodes.
dest = SimpleSerializer<u_int32_t>::Write(m.map_.size(), dest);
// Nodes offsets.
u_int32_t *offsets = reinterpret_cast<u_int32_t*>(dest);
dest += sizeof(u_int32_t) * m.map_.size();
char *key_address = dest;
dest += sizeof(Address) * m.map_.size();
// Traverse map.
typename std::map<Address, Range>::const_iterator iter;
int index = 0;
for (iter = m.map_.begin(); iter != m.map_.end(); ++iter, ++index) {
offsets[index] = static_cast<u_int32_t>(dest - start_address);
key_address = address_serializer_.Write(iter->first, key_address);
dest = address_serializer_.Write(iter->second.base(), dest);
dest = entry_serializer_.Write(iter->second.entry(), dest);
}
return dest;
}
template<typename Address, typename Entry>
char *RangeMapSerializer<Address, Entry>::Serialize(
const RangeMap<Address, Entry> &m, unsigned int *size) const {
// Compute size of memory to be allocated.
unsigned int size_to_alloc = SizeOf(m);
// Allocate memory.
char *serialized_data =
reinterpret_cast<char*>(operator new(size_to_alloc));
if (!serialized_data) {
BPLOG(INFO) << "RangeMapSerializer memory allocation failed.";
if (size) *size = 0;
return NULL;
}
// Write serialized data into memory.
Write(m, serialized_data);
if (size) *size = size_to_alloc;
return serialized_data;
}
template<class AddrType, class EntryType>
size_t ContainedRangeMapSerializer<AddrType, EntryType>::SizeOf(
const ContainedRangeMap<AddrType, EntryType> *m) const {
size_t size = 0;
size_t header_size = addr_serializer_.SizeOf(m->base_)
+ entry_serializer_.SizeOf(m->entry_)
+ sizeof(u_int32_t);
size += header_size;
// In case m.map_ == NULL, we treat it as an empty map:
size += sizeof(u_int32_t);
if (m->map_) {
size += m->map_->size() * sizeof(u_int32_t);
typename Map::const_iterator iter;
for (iter = m->map_->begin(); iter != m->map_->end(); ++iter) {
size += addr_serializer_.SizeOf(iter->first);
// Recursive calculation of size:
size += SizeOf(iter->second);
}
}
return size;
}
template<class AddrType, class EntryType>
char *ContainedRangeMapSerializer<AddrType, EntryType>::Write(
const ContainedRangeMap<AddrType, EntryType> *m, char *dest) const {
if (!dest) {
BPLOG(ERROR) << "StdMapSerializer failed: write to NULL address.";
return NULL;
}
dest = addr_serializer_.Write(m->base_, dest);
dest = SimpleSerializer<u_int32_t>::Write(entry_serializer_.SizeOf(m->entry_),
dest);
dest = entry_serializer_.Write(m->entry_, dest);
// Write map<<AddrType, ContainedRangeMap*>:
char *map_address = dest;
if (m->map_ == NULL) {
dest = SimpleSerializer<u_int32_t>::Write(0, dest);
} else {
dest = SimpleSerializer<u_int32_t>::Write(m->map_->size(), dest);
u_int32_t *offsets = reinterpret_cast<u_int32_t*>(dest);
dest += sizeof(u_int32_t) * m->map_->size();
char *key_address = dest;
dest += sizeof(AddrType) * m->map_->size();
// Traverse map.
typename Map::const_iterator iter;
int index = 0;
for (iter = m->map_->begin(); iter != m->map_->end(); ++iter, ++index) {
offsets[index] = static_cast<u_int32_t>(dest - map_address);
key_address = addr_serializer_.Write(iter->first, key_address);
// Recursively write.
dest = Write(iter->second, dest);
}
}
return dest;
}
template<class AddrType, class EntryType>
char *ContainedRangeMapSerializer<AddrType, EntryType>::Serialize(
const ContainedRangeMap<AddrType, EntryType> *m, unsigned int *size) const {
unsigned int size_to_alloc = SizeOf(m);
// Allocating memory.
char *serialized_data = reinterpret_cast<char*>(operator new(size_to_alloc));
if (!serialized_data) {
BPLOG(INFO) << "ContainedRangeMapSerializer memory allocation failed.";
if (size) *size = 0;
return NULL;
}
Write(m, serialized_data);
if (size) *size = size_to_alloc;
return serialized_data;
}
} // namespace google_breakpad
#endif // PROCESSOR_MAP_SERIALIZERS_INL_H__

View file

@ -0,0 +1,164 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// map_serializers.h: defines templates for serializing std::map and its
// wrappers: AddressMap, RangeMap, and ContainedRangeMap.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_MAP_SERIALIZERS_H__
#define PROCESSOR_MAP_SERIALIZERS_H__
#include <map>
#include <string>
#include "processor/simple_serializer.h"
#include "processor/address_map-inl.h"
#include "processor/range_map-inl.h"
#include "processor/contained_range_map-inl.h"
namespace google_breakpad {
// StdMapSerializer allocates memory and serializes an std::map instance into a
// chunk of memory data.
template<typename Key, typename Value>
class StdMapSerializer {
public:
// Calculate the memory size of serialized data.
size_t SizeOf(const std::map<Key, Value> &m) const;
// Writes the serialized data to memory with start address = dest,
// and returns the "end" of data, i.e., return the address follow the final
// byte of data.
// NOTE: caller has to allocate enough memory before invoke Write() method.
char* Write(const std::map<Key, Value> &m, char* dest) const;
// Serializes a std::map object into a chunk of memory data with format
// described in "StaticMap.h" comment.
// Returns a pointer to the serialized data. If size != NULL, *size is set
// to the size of serialized data, i.e., SizeOf(m).
char* Serialize(const std::map<Key, Value> &m, unsigned int *size) const;
private:
SimpleSerializer<Key> key_serializer_;
SimpleSerializer<Value> value_serializer_;
};
// AddressMapSerializer allocates memory and serializes an AddressMap into a
// chunk of memory data.
template<typename Addr, typename Entry>
class AddressMapSerializer {
public:
// Calculate the memory size of serialized data.
size_t SizeOf(const AddressMap<Addr, Entry> &m) const {
return std_map_serializer_.SizeOf(m.map_);
}
// Write the serialized data to specified memory location. Return the "end"
// of data, i.e., return the address after the final byte of data.
// NOTE: caller has to allocate enough memory before invoke Write() method.
char* Write(const AddressMap<Addr, Entry> &m, char *dest) const {
return std_map_serializer_.Write(m.map_, dest);
}
// Serializes an AddressMap object into a chunk of memory data.
// Returns a pointer to the serialized data. If size != NULL, *size is set
// to the size of serialized data, i.e., SizeOf(m).
char* Serialize(const AddressMap<Addr, Entry> &m, unsigned int *size) const {
return std_map_serializer_.Serialize(m.map_, size);
}
private:
// AddressMapSerializer is a simple wrapper of StdMapSerializer, just as
// AddressMap is a simple wrapper of std::map.
StdMapSerializer<Addr, Entry> std_map_serializer_;
};
// RangeMapSerializer allocates memory and serializes a RangeMap instance into a
// chunk of memory data.
template<typename Address, typename Entry>
class RangeMapSerializer {
public:
// Calculate the memory size of serialized data.
size_t SizeOf(const RangeMap<Address, Entry> &m) const;
// Write the serialized data to specified memory location. Return the "end"
// of data, i.e., return the address after the final byte of data.
// NOTE: caller has to allocate enough memory before invoke Write() method.
char* Write(const RangeMap<Address, Entry> &m, char* dest) const;
// Serializes a RangeMap object into a chunk of memory data.
// Returns a pointer to the serialized data. If size != NULL, *size is set
// to the size of serialized data, i.e., SizeOf(m).
char* Serialize(const RangeMap<Address, Entry> &m, unsigned int *size) const;
private:
// Convenient type name for Range.
typedef typename RangeMap<Address, Entry>::Range Range;
// Serializer for RangeMap's key and Range::base_.
SimpleSerializer<Address> address_serializer_;
// Serializer for RangeMap::Range::entry_.
SimpleSerializer<Entry> entry_serializer_;
};
// ContainedRangeMapSerializer allocates memory and serializes a
// ContainedRangeMap instance into a chunk of memory data.
template<class AddrType, class EntryType>
class ContainedRangeMapSerializer {
public:
// Calculate the memory size of serialized data.
size_t SizeOf(const ContainedRangeMap<AddrType, EntryType> *m) const;
// Write the serialized data to specified memory location. Return the "end"
// of data, i.e., return the address after the final byte of data.
// NOTE: caller has to allocate enough memory before invoke Write() method.
char* Write(const ContainedRangeMap<AddrType, EntryType> *m,
char* dest) const;
// Serializes a ContainedRangeMap object into a chunk of memory data.
// Returns a pointer to the serialized data. If size != NULL, *size is set
// to the size of serialized data, i.e., SizeOf(m).
char* Serialize(const ContainedRangeMap<AddrType, EntryType> *m,
unsigned int *size) const;
private:
// Convenient type name for the underlying map type.
typedef std::map<AddrType, ContainedRangeMap<AddrType, EntryType>*> Map;
// Serializer for addresses and entries stored in ContainedRangeMap.
SimpleSerializer<AddrType> addr_serializer_;
SimpleSerializer<EntryType> entry_serializer_;
};
} // namespace google_breakpad
#endif // PROCESSOR_MAP_SERIALIZERS_H__

View file

@ -0,0 +1,388 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// map_serializers_unittest.cc: Unit tests for std::map serializer and
// std::map wrapper serializers.
//
// Author: Siyang Xie (lambxsy@google.com)
#include <climits>
#include <map>
#include <string>
#include <utility>
#include <iostream>
#include <sstream>
#include "breakpad_googletest_includes.h"
#include "map_serializers-inl.h"
#include "processor/address_map-inl.h"
#include "processor/range_map-inl.h"
#include "processor/contained_range_map-inl.h"
typedef int32_t AddrType;
typedef int32_t EntryType;
const int kSizeOfInt = 4;
class TestStdMapSerializer : public ::testing::Test {
protected:
void SetUp() {
serialized_size_ = 0;
serialized_data_ = NULL;
}
void TearDown() {
delete serialized_data_;
}
std::map<AddrType, EntryType> std_map_;
google_breakpad::StdMapSerializer<AddrType, EntryType> serializer_;
u_int32_t serialized_size_;
char *serialized_data_;
};
TEST_F(TestStdMapSerializer, EmptyMapTestCase) {
const int32_t correct_data[] = { 0 };
u_int32_t correct_size = sizeof(correct_data);
// std_map_ is empty.
serialized_data_ = serializer_.Serialize(std_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
TEST_F(TestStdMapSerializer, MapWithTwoElementsTestCase) {
const int32_t correct_data[] = {
// # of nodes
2,
// Offsets
20, 24,
// Keys
1, 3,
// Values
2, 6
};
u_int32_t correct_size = sizeof(correct_data);
std_map_.insert(std::make_pair(1, 2));
std_map_.insert(std::make_pair(3, 6));
serialized_data_ = serializer_.Serialize(std_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
TEST_F(TestStdMapSerializer, MapWithFiveElementsTestCase) {
const int32_t correct_data[] = {
// # of nodes
5,
// Offsets
44, 48, 52, 56, 60,
// Keys
1, 2, 3, 4, 5,
// Values
11, 12, 13, 14, 15
};
u_int32_t correct_size = sizeof(correct_data);
for (int i = 1; i < 6; ++i)
std_map_.insert(std::make_pair(i, 10 + i));
serialized_data_ = serializer_.Serialize(std_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
class TestAddressMapSerializer : public ::testing::Test {
protected:
void SetUp() {
serialized_size_ = 0;
serialized_data_ = 0;
}
void TearDown() {
delete serialized_data_;
}
google_breakpad::AddressMap<AddrType, EntryType> address_map_;
google_breakpad::AddressMapSerializer<AddrType, EntryType> serializer_;
u_int32_t serialized_size_;
char *serialized_data_;
};
TEST_F(TestAddressMapSerializer, EmptyMapTestCase) {
const int32_t correct_data[] = { 0 };
u_int32_t correct_size = sizeof(correct_data);
// std_map_ is empty.
serialized_data_ = serializer_.Serialize(address_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
TEST_F(TestAddressMapSerializer, MapWithTwoElementsTestCase) {
const int32_t correct_data[] = {
// # of nodes
2,
// Offsets
20, 24,
// Keys
1, 3,
// Values
2, 6
};
u_int32_t correct_size = sizeof(correct_data);
address_map_.Store(1, 2);
address_map_.Store(3, 6);
serialized_data_ = serializer_.Serialize(address_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
TEST_F(TestAddressMapSerializer, MapWithFourElementsTestCase) {
const int32_t correct_data[] = {
// # of nodes
4,
// Offsets
36, 40, 44, 48,
// Keys
-6, -4, 8, 123,
// Values
2, 3, 5, 8
};
u_int32_t correct_size = sizeof(correct_data);
address_map_.Store(-6, 2);
address_map_.Store(-4, 3);
address_map_.Store(8, 5);
address_map_.Store(123, 8);
serialized_data_ = serializer_.Serialize(address_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
class TestRangeMapSerializer : public ::testing::Test {
protected:
void SetUp() {
serialized_size_ = 0;
serialized_data_ = 0;
}
void TearDown() {
delete serialized_data_;
}
google_breakpad::RangeMap<AddrType, EntryType> range_map_;
google_breakpad::RangeMapSerializer<AddrType, EntryType> serializer_;
u_int32_t serialized_size_;
char *serialized_data_;
};
TEST_F(TestRangeMapSerializer, EmptyMapTestCase) {
const int32_t correct_data[] = { 0 };
u_int32_t correct_size = sizeof(correct_data);
// range_map_ is empty.
serialized_data_ = serializer_.Serialize(range_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
TEST_F(TestRangeMapSerializer, MapWithOneRangeTestCase) {
const int32_t correct_data[] = {
// # of nodes
1,
// Offsets
12,
// Keys: high address
10,
// Values: (low address, entry) pairs
1, 6
};
u_int32_t correct_size = sizeof(correct_data);
range_map_.StoreRange(1, 10, 6);
serialized_data_ = serializer_.Serialize(range_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
TEST_F(TestRangeMapSerializer, MapWithThreeRangesTestCase) {
const int32_t correct_data[] = {
// # of nodes
3,
// Offsets
28, 36, 44,
// Keys: high address
5, 9, 20,
// Values: (low address, entry) pairs
2, 1, 6, 2, 10, 3
};
u_int32_t correct_size = sizeof(correct_data);
ASSERT_TRUE(range_map_.StoreRange(2, 4, 1));
ASSERT_TRUE(range_map_.StoreRange(6, 4, 2));
ASSERT_TRUE(range_map_.StoreRange(10, 11, 3));
serialized_data_ = serializer_.Serialize(range_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
class TestContainedRangeMapSerializer : public ::testing::Test {
protected:
void SetUp() {
serialized_size_ = 0;
serialized_data_ = 0;
}
void TearDown() {
delete serialized_data_;
}
google_breakpad::ContainedRangeMap<AddrType, EntryType> crm_map_;
google_breakpad::ContainedRangeMapSerializer<AddrType, EntryType> serializer_;
u_int32_t serialized_size_;
char *serialized_data_;
};
TEST_F(TestContainedRangeMapSerializer, EmptyMapTestCase) {
const int32_t correct_data[] = {
0, // base address of root
4, // size of entry
0, // entry stored at root
0 // empty map stored at root
};
u_int32_t correct_size = sizeof(correct_data);
// crm_map_ is empty.
serialized_data_ = serializer_.Serialize(&crm_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
TEST_F(TestContainedRangeMapSerializer, MapWithOneRangeTestCase) {
const int32_t correct_data[] = {
0, // base address of root
4, // size of entry
0, // entry stored at root
// Map stored at root node:
1, // # of nodes
12, // offset
9, // key
// value: a child ContainedRangeMap
3, // base address of child CRM
4, // size of entry
-1, // entry stored in child CRM
0 // empty sub-map stored in child CRM
};
u_int32_t correct_size = sizeof(correct_data);
crm_map_.StoreRange(3, 7, -1);
serialized_data_ = serializer_.Serialize(&crm_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
TEST_F(TestContainedRangeMapSerializer, MapWithTwoLevelsTestCase) {
// Tree structure of ranges:
// root level 0
// |
// map
// / \ level 1: child1, child2
// 2~8 10~20
// | |
// map map
// / \ |
// 3~4 6~7 16-20 level 2: grandchild1, grandchild2, grandchild3
const int32_t correct_data[] = {
// root: base, entry_size, entry
0, 4, 0,
// root's map: # of nodes, offset1, offset2, key1, key2
2, 20, 84, 8, 20,
// child1: base, entry_size, entry:
2, 4, -1,
// child1's map: # of nodes, offset1, offset2, key1, key2
2, 20, 36, 4, 7,
// grandchild1: base, entry_size, entry, empty_map
3, 4, -1, 0,
// grandchild2: base, entry_size, entry, empty_map
6, 4, -1, 0,
// child2: base, entry_size, entry:
10, 4, -1,
// child2's map: # of nodes, offset1, key1
1, 12, 20,
// grandchild3: base, entry_size, entry, empty_map
16, 4, -1, 0
};
u_int32_t correct_size = sizeof(correct_data);
// Store child1.
ASSERT_TRUE(crm_map_.StoreRange(2, 7, -1));
// Store child2.
ASSERT_TRUE(crm_map_.StoreRange(10, 11, -1));
// Store grandchild1.
ASSERT_TRUE(crm_map_.StoreRange(3, 2, -1));
// Store grandchild2.
ASSERT_TRUE(crm_map_.StoreRange(6, 2, -1));
// Store grandchild3.
ASSERT_TRUE(crm_map_.StoreRange(16, 5, -1));
serialized_data_ = serializer_.Serialize(&crm_map_, &serialized_size_);
EXPECT_EQ(correct_size, serialized_size_);
EXPECT_EQ(memcmp(correct_data, serialized_data_, correct_size), 0);
}
int main(int argc, char *argv[]) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

View file

@ -44,15 +44,15 @@ namespace google_breakpad {
class ModuleFactory { class ModuleFactory {
public: public:
virtual ~ModuleFactory() { }; virtual ~ModuleFactory() { };
virtual SourceLineResolverBase::Module* virtual SourceLineResolverBase::Module* CreateModule(
CreateModule(const string &name) const = 0; const string &name) const = 0;
}; };
class BasicModuleFactory : public ModuleFactory { class BasicModuleFactory : public ModuleFactory {
public: public:
virtual ~BasicModuleFactory() { } virtual ~BasicModuleFactory() { }
virtual BasicSourceLineResolver::Module* virtual BasicSourceLineResolver::Module* CreateModule(
CreateModule(const string &name) const { const string &name) const {
return new BasicSourceLineResolver::Module(name); return new BasicSourceLineResolver::Module(name);
} }
}; };

View file

@ -46,6 +46,8 @@
namespace google_breakpad { namespace google_breakpad {
// Forward declarations (for later friend declarations of specialized template).
template<class, class> class RangeMapSerializer;
template<typename AddressType, typename EntryType> template<typename AddressType, typename EntryType>
class RangeMap { class RangeMap {
@ -93,6 +95,9 @@ class RangeMap {
void Clear(); void Clear();
private: private:
// Friend declarations.
friend class RangeMapSerializer<AddressType, EntryType>;
class Range { class Range {
public: public:
Range(const AddressType &base, const EntryType &entry) Range(const AddressType &base, const EntryType &entry)

View file

@ -0,0 +1,252 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// simple_serializer-inl.h: template specializations for following types:
// bool, const char *(C-string), string,
// Line, Function, PublicSymbol, WindowsFrameInfo and their linked pointers.
//
// See simple_serializer.h for moredocumentation.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_SIMPLE_SERIALIZER_INL_H__
#define PROCESSOR_SIMPLE_SERIALIZER_INL_H__
#include <string>
#include "processor/simple_serializer.h"
#include "map_serializers-inl.h"
#include "google_breakpad/processor/basic_source_line_resolver.h"
#include "processor/basic_source_line_resolver_types.h"
#include "processor/linked_ptr.h"
#include "processor/windows_frame_info.h"
namespace google_breakpad {
// Specializations of SimpleSerializer: bool
template<>
class SimpleSerializer<bool> {
public:
static size_t SizeOf(bool boolean) { return 1; }
static char *Write(bool boolean, char *dest) {
*dest = static_cast<char>(boolean? 255 : 0);
return ++dest;
}
};
// Specializations of SimpleSerializer: string
template<>
class SimpleSerializer<string> {
public:
static size_t SizeOf(const string &str) { return str.size() + 1; }
static char *Write(const string &str, char *dest) {
strcpy(dest, str.c_str());
return dest + SizeOf(str);
}
};
// Specializations of SimpleSerializer: C-string
template<>
class SimpleSerializer<const char*> {
public:
static size_t SizeOf(const char *cstring) {
return strlen(cstring) + 1;
}
static char *Write(const char *cstring, char *dest) {
strcpy(dest, cstring);
return dest + SizeOf(cstring);
}
};
// Specializations of SimpleSerializer: Line
template<>
class SimpleSerializer<BasicSourceLineResolver::Line> {
typedef BasicSourceLineResolver::Line Line;
public:
static size_t SizeOf(const Line &line) {
return SimpleSerializer<MemAddr>::SizeOf(line.address)
+ SimpleSerializer<MemAddr>::SizeOf(line.size)
+ SimpleSerializer<int32_t>::SizeOf(line.source_file_id)
+ SimpleSerializer<int32_t>::SizeOf(line.line);
}
static char *Write(const Line &line, char *dest) {
dest = SimpleSerializer<MemAddr>::Write(line.address, dest);
dest = SimpleSerializer<MemAddr>::Write(line.size, dest);
dest = SimpleSerializer<int32_t>::Write(line.source_file_id, dest);
dest = SimpleSerializer<int32_t>::Write(line.line, dest);
return dest;
}
};
// Specializations of SimpleSerializer: PublicSymbol
template<>
class SimpleSerializer<BasicSourceLineResolver::PublicSymbol> {
typedef BasicSourceLineResolver::PublicSymbol PublicSymbol;
public:
static size_t SizeOf(const PublicSymbol &pubsymbol) {
return SimpleSerializer<string>::SizeOf(pubsymbol.name)
+ SimpleSerializer<MemAddr>::SizeOf(pubsymbol.address)
+ SimpleSerializer<int32_t>::SizeOf(pubsymbol.parameter_size);
}
static char *Write(const PublicSymbol &pubsymbol, char *dest) {
dest = SimpleSerializer<string>::Write(pubsymbol.name, dest);
dest = SimpleSerializer<MemAddr>::Write(pubsymbol.address, dest);
dest = SimpleSerializer<int32_t>::Write(pubsymbol.parameter_size, dest);
return dest;
}
};
// Specializations of SimpleSerializer: WindowsFrameInfo
template<>
class SimpleSerializer<WindowsFrameInfo> {
public:
static size_t SizeOf(const WindowsFrameInfo &wfi) {
unsigned int size = 0;
size += SimpleSerializer<int32_t>::SizeOf(wfi.valid);
size += SimpleSerializer<u_int32_t>::SizeOf(wfi.prolog_size);
size += SimpleSerializer<u_int32_t>::SizeOf(wfi.epilog_size);
size += SimpleSerializer<u_int32_t>::SizeOf(wfi.parameter_size);
size += SimpleSerializer<u_int32_t>::SizeOf(wfi.saved_register_size);
size += SimpleSerializer<u_int32_t>::SizeOf(wfi.local_size);
size += SimpleSerializer<u_int32_t>::SizeOf(wfi.max_stack_size);
size += SimpleSerializer<bool>::SizeOf(wfi.allocates_base_pointer);
size += SimpleSerializer<string>::SizeOf(wfi.program_string);
return size;
}
static char *Write(const WindowsFrameInfo &wfi, char *dest) {
dest = SimpleSerializer<int32_t>::Write(wfi.valid, dest);
dest = SimpleSerializer<u_int32_t>::Write(wfi.prolog_size, dest);
dest = SimpleSerializer<u_int32_t>::Write(wfi.epilog_size, dest);
dest = SimpleSerializer<u_int32_t>::Write(wfi.parameter_size, dest);
dest = SimpleSerializer<u_int32_t>::Write(wfi.saved_register_size, dest);
dest = SimpleSerializer<u_int32_t>::Write(wfi.local_size, dest);
dest = SimpleSerializer<u_int32_t>::Write(wfi.max_stack_size, dest);
dest = SimpleSerializer<bool>::Write(wfi.allocates_base_pointer, dest);
return SimpleSerializer<string>::Write(wfi.program_string, dest);
}
};
// Specializations of SimpleSerializer: Linked_ptr version of
// Line, Function, PublicSymbol, WindowsFrameInfo.
template<>
class SimpleSerializer< linked_ptr<BasicSourceLineResolver::Line> > {
typedef BasicSourceLineResolver::Line Line;
public:
static size_t SizeOf(const linked_ptr<Line> &lineptr) {
if (lineptr.get() == NULL) return 0;
return SimpleSerializer<Line>::SizeOf(*(lineptr.get()));
}
static char *Write(const linked_ptr<Line> &lineptr, char *dest) {
if (lineptr.get())
dest = SimpleSerializer<Line>::Write(*(lineptr.get()), dest);
return dest;
}
};
template<>
class SimpleSerializer<BasicSourceLineResolver::Function> {
// Convenient type names.
typedef BasicSourceLineResolver::Function Function;
typedef BasicSourceLineResolver::Line Line;
public:
static size_t SizeOf(const Function &func) {
unsigned int size = 0;
size += SimpleSerializer<string>::SizeOf(func.name);
size += SimpleSerializer<MemAddr>::SizeOf(func.address);
size += SimpleSerializer<MemAddr>::SizeOf(func.size);
size += SimpleSerializer<int32_t>::SizeOf(func.parameter_size);
size += range_map_serializer_.SizeOf(func.lines);
return size;
}
static char *Write(const Function &func, char *dest) {
dest = SimpleSerializer<string>::Write(func.name, dest);
dest = SimpleSerializer<MemAddr>::Write(func.address, dest);
dest = SimpleSerializer<MemAddr>::Write(func.size, dest);
dest = SimpleSerializer<int32_t>::Write(func.parameter_size, dest);
dest = range_map_serializer_.Write(func.lines, dest);
return dest;
}
private:
// This static member is defined in module_serializer.cc.
static RangeMapSerializer< MemAddr, linked_ptr<Line> > range_map_serializer_;
};
template<>
class SimpleSerializer< linked_ptr<BasicSourceLineResolver::Function> > {
typedef BasicSourceLineResolver::Function Function;
public:
static size_t SizeOf(const linked_ptr<Function> &func) {
if (!func.get()) return 0;
return SimpleSerializer<Function>::SizeOf(*(func.get()));
}
static char *Write(const linked_ptr<Function> &func, char *dest) {
if (func.get())
dest = SimpleSerializer<Function>::Write(*(func.get()), dest);
return dest;
}
};
template<>
class SimpleSerializer< linked_ptr<BasicSourceLineResolver::PublicSymbol> > {
typedef BasicSourceLineResolver::PublicSymbol PublicSymbol;
public:
static size_t SizeOf(const linked_ptr<PublicSymbol> &pubsymbol) {
if (pubsymbol.get() == NULL) return 0;
return SimpleSerializer<PublicSymbol>::SizeOf(*(pubsymbol.get()));
}
static char *Write(const linked_ptr<PublicSymbol> &pubsymbol, char *dest) {
if (pubsymbol.get())
dest = SimpleSerializer<PublicSymbol>::Write(*(pubsymbol.get()), dest);
return dest;
}
};
template<>
class SimpleSerializer< linked_ptr<WindowsFrameInfo> > {
public:
static size_t SizeOf(const linked_ptr<WindowsFrameInfo> &wfi) {
if (wfi.get() == NULL) return 0;
return SimpleSerializer<WindowsFrameInfo>::SizeOf(*(wfi.get()));
}
static char *Write(const linked_ptr<WindowsFrameInfo> &wfi, char *dest) {
if (wfi.get())
dest = SimpleSerializer<WindowsFrameInfo>::Write(*(wfi.get()), dest);
return dest;
}
};
} // namespace google_breakpad
#endif // PROCESSOR_SIMPLE_SERIALIZER_INL_H__

View file

@ -0,0 +1,63 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// simple_serializer.h: SimpleSerializer is a template for calculating size and
// writing to specific memory location for objects of primitive types, C-style
// string, string, breakpad types/structs etc.
// All specializations of SimpleSerializer template are defined in the
// "simple_serializer-inl.h" file.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_SIMPLE_SERIALIZER_H__
#define PROCESSOR_SIMPLE_SERIALIZER_H__
#include <sys/types.h>
namespace google_breakpad {
typedef u_int64_t MemAddr;
// Default implementation of SimpleSerializer template.
// Specializations are defined in "simple_serializer-inl.h".
template<class Type> class SimpleSerializer {
public:
// Calculate and return the size of the 'item'.
static size_t SizeOf(const Type &item) { return sizeof(item); }
// Write 'item' to memory location 'dest', and return to the "end" address of
// data written, i.e., the address after the final byte written.
static char *Write(const Type &item, char *dest) {
new (dest) Type(item);
return dest + SizeOf(item);
}
};
} // namespace google_breakpad
#endif // PROCESSOR_SIMPLE_SERIALIZER_H__

View file

@ -0,0 +1,71 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// static_address_map-inl.h: StaticAddressMap implementation.
//
// See static_address_map.h for documentation.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_STATIC_ADDRESS_MAP_INL_H__
#define PROCESSOR_STATIC_ADDRESS_MAP_INL_H__
#include "processor/static_address_map.h"
#include "processor/logging.h"
namespace google_breakpad {
template<typename AddressType, typename EntryType>
bool StaticAddressMap<AddressType, EntryType>::Retrieve(
const AddressType &address,
const EntryType *&entry, AddressType *entry_address) const {
// upper_bound gives the first element whose key is greater than address,
// but we want the first element whose key is less than or equal to address.
// Decrement the iterator to get there, but not if the upper_bound already
// points to the beginning of the map - in that case, address is lower than
// the lowest stored key, so return false.
MapConstIterator iterator = map_.upper_bound(address);
if (iterator == map_.begin())
return false;
--iterator;
entry = iterator.GetValuePtr();
// Make sure AddressType is a copyable basic type
if (entry_address)
*entry_address = iterator.GetKey();
return true;
}
} // namespace google_breakpad
#endif // PROCESSOR_STATIC_ADDRESS_MAP_INL_H__

View file

@ -0,0 +1,78 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// static_address_map.h: StaticAddressMap.
//
// StaticAddressMap is a wrapper class of StaticMap, just as AddressMap wraps
// std::map. StaticAddressMap provides read-only Retrieve() operation, similar
// as AddressMap. However, the difference between StaticAddressMap and
// AddressMap is that StaticAddressMap does not support dynamic operation
// Store() due to the static nature of the underlying StaticMap.
//
// See address_map.h for reference.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_STATIC_ADDRESS_MAP_H__
#define PROCESSOR_STATIC_ADDRESS_MAP_H__
#include "processor/static_map-inl.h"
namespace google_breakpad {
// AddressType MUST be a basic type, e.g.: integer types etc
// EntryType could be a complex type, so we retrieve its pointer instead.
template<typename AddressType, typename EntryType>
class StaticAddressMap {
public:
StaticAddressMap(): map_() { }
explicit StaticAddressMap(const char *map_data): map_(map_data) { }
// Locates the entry stored at the highest address less than or equal to
// the address argument. If there is no such range, returns false. The
// entry is returned in entry, which is a required argument. If
// entry_address is not NULL, it will be set to the address that the entry
// was stored at.
bool Retrieve(const AddressType &address,
const EntryType *&entry, AddressType *entry_address) const;
private:
friend class ModuleComparer;
// Convenience types.
typedef StaticAddressMap* SelfPtr;
typedef StaticMap<AddressType, EntryType> AddressToEntryMap;
typedef typename AddressToEntryMap::const_iterator MapConstIterator;
AddressToEntryMap map_;
};
} // namespace google_breakpad
#endif // PROCESSOR_STATIC_ADDRESS_MAP_H__

View file

@ -0,0 +1,235 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// static_address_map_unittest.cc: Unit tests for StaticAddressMap.
//
// Author: Siyang Xie (lambxsy@google.com)
#include <climits>
#include <cstdlib>
#include <ctime>
#include <string>
#include <iostream>
#include <sstream>
#include "breakpad_googletest_includes.h"
#include "processor/address_map-inl.h"
#include "processor/static_address_map-inl.h"
#include "processor/simple_serializer-inl.h"
#include "map_serializers-inl.h"
typedef google_breakpad::StaticAddressMap<int, char> TestMap;
typedef google_breakpad::AddressMap<int, std::string> AddrMap;
class TestStaticAddressMap : public ::testing::Test {
protected:
void SetUp() {
for (int testcase = 0; testcase < kNumberTestCases; ++testcase) {
testdata[testcase] = new int[testsize[testcase]];
}
// Test data set0: NULL (empty map)
// Test data set1: single element.
testdata[1][0] = 10;
// Test data set2: six elements.
const int tempdata[] = {5, 10, 14, 15, 16, 20};
for (int i = 0; i < testsize[2]; ++i)
testdata[2][i] = tempdata[i];
// Test data set3:
srand(time(NULL));
for (int i = 0; i < testsize[3]; ++i)
testdata[3][i] = rand();
// Setup maps.
std::stringstream sstream;
for (int testcase = 0; testcase < kNumberTestCases; ++testcase) {
for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
sstream.clear();
sstream << "test " << testdata[testcase][data_item];
addr_map[testcase].Store(testdata[testcase][data_item], sstream.str());
}
map_data[testcase] = serializer.Serialize(addr_map[testcase], NULL);
test_map[testcase] = TestMap(map_data[testcase]);
}
}
void TearDown() {
for (int i = 0; i < kNumberTestCases; ++i) {
delete map_data[i];
delete [] testdata[i];
}
}
void CompareRetrieveResult(int testcase, int target) {
int address;
int address_test;
std::string entry;
std::string entry_test;
const char *entry_cstring = NULL;
bool found;
bool found_test;
found = addr_map[testcase].Retrieve(target, &entry, &address);
found_test =
test_map[testcase].Retrieve(target, entry_cstring, &address_test);
ASSERT_EQ(found, found_test);
if (found && found_test) {
ASSERT_EQ(address, address_test);
entry_test = entry_cstring;
ASSERT_EQ(entry, entry_test);
}
}
void RetrieveTester(int testcase) {
int target;
target = INT_MIN;
CompareRetrieveResult(testcase, target);
target = INT_MAX;
CompareRetrieveResult(testcase, target);
srand(time(0));
for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
// Retrive (aka, search) for target address and compare results from
// AddressMap and StaticAddressMap.
// First, assign the search target to be one of original testdata that is
// known to exist in the map.
target = testdata[testcase][data_item];
CompareRetrieveResult(testcase, target);
// Then, add +2 / -1 bias to target value, in order to test searching for
// a target address not stored in the map.
target -= 1;
CompareRetrieveResult(testcase, target);
target += 3;
CompareRetrieveResult(testcase, target);
// Repeatedly test searching for random target addresses.
target = rand();
CompareRetrieveResult(testcase, target);
}
}
// Test data sets:
static const int kNumberTestCases = 4;
static const int testsize[];
int *testdata[kNumberTestCases];
AddrMap addr_map[kNumberTestCases];
TestMap test_map[kNumberTestCases];
char *map_data[kNumberTestCases];
google_breakpad::AddressMapSerializer<int, std::string> serializer;
};
const int TestStaticAddressMap::testsize[] = {0, 1, 6, 1000};
TEST_F(TestStaticAddressMap, TestEmptyMap) {
int testcase = 0;
int target;
target = INT_MIN;
CompareRetrieveResult(testcase, target);
target = INT_MAX;
CompareRetrieveResult(testcase, target);
for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
target = testdata[testcase][data_item];
CompareRetrieveResult(testcase, target);
target -= 1;
CompareRetrieveResult(testcase, target);
target += 3;
CompareRetrieveResult(testcase, target);
target = rand();
CompareRetrieveResult(testcase, target);
}
}
TEST_F(TestStaticAddressMap, TestOneElementMap) {
int testcase = 1;
int target;
target = INT_MIN;
CompareRetrieveResult(testcase, target);
target = INT_MAX;
CompareRetrieveResult(testcase, target);
for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
target = testdata[testcase][data_item];
CompareRetrieveResult(testcase, target);
target -= 1;
CompareRetrieveResult(testcase, target);
target += 3;
CompareRetrieveResult(testcase, target);
target = rand();
CompareRetrieveResult(testcase, target);
}
}
TEST_F(TestStaticAddressMap, TestSixElementsMap) {
int testcase = 2;
int target;
target = INT_MIN;
CompareRetrieveResult(testcase, target);
target = INT_MAX;
CompareRetrieveResult(testcase, target);
for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
target = testdata[testcase][data_item];
CompareRetrieveResult(testcase, target);
target -= 1;
CompareRetrieveResult(testcase, target);
target += 3;
CompareRetrieveResult(testcase, target);
target = rand();
CompareRetrieveResult(testcase, target);
}
}
TEST_F(TestStaticAddressMap, Test1000RandomElementsMap) {
int testcase = 3;
int target;
target = INT_MIN;
CompareRetrieveResult(testcase, target);
target = INT_MAX;
CompareRetrieveResult(testcase, target);
for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
target = testdata[testcase][data_item];
CompareRetrieveResult(testcase, target);
target -= 1;
CompareRetrieveResult(testcase, target);
target += 3;
CompareRetrieveResult(testcase, target);
target = rand();
CompareRetrieveResult(testcase, target);
}
}
int main(int argc, char *argv[]) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

View file

@ -0,0 +1,93 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// static_contained_range_map-inl.h: Hierarchically-organized range map,
// i.e., StaticContainedRangeMap implementation.
//
// See static_contained_range_map.h for documentation.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__
#define PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__
#include "processor/static_contained_range_map.h"
#include "processor/logging.h"
namespace google_breakpad {
template<typename AddressType, typename EntryType>
StaticContainedRangeMap<AddressType, EntryType>::StaticContainedRangeMap(
const char *base)
: base_(*(reinterpret_cast<const AddressType*>(base))),
entry_size_(*(reinterpret_cast<const u_int32_t*>(base + sizeof(base_)))),
entry_ptr_(reinterpret_cast<const EntryType *>(
base + sizeof(base_) + sizeof(entry_size_))),
map_(base + sizeof(base_) + sizeof(entry_size_) + entry_size_) {
if (entry_size_ == 0)
entry_ptr_ = NULL;
}
template<typename AddressType, typename EntryType>
bool StaticContainedRangeMap<AddressType, EntryType>::RetrieveRange(
const AddressType &address, const EntryType *&entry) const {
// Get an iterator to the child range whose high address is equal to or
// greater than the supplied address. If the supplied address is higher
// than all of the high addresses in the range, then this range does not
// contain a child at address, so return false. If the supplied address
// is lower than the base address of the child range, then it is not within
// the child range, so return false.
MapConstIterator iterator = map_.lower_bound(address);
if (iterator == map_.end())
return false;
const char *memory_child =
reinterpret_cast<const char*>(iterator.GetValuePtr());
StaticContainedRangeMap child_map(memory_child);
if (address < child_map.base_)
return false;
// The child in iterator->second contains the specified address. Find out
// if it has a more-specific descendant that also contains it. If it does,
// it will set |entry| appropriately. If not, set |entry| to the child.
if (!child_map.RetrieveRange(address, entry))
entry = child_map.entry_ptr_;
return true;
}
} // namespace google_breakpad
#endif // PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__

View file

@ -0,0 +1,96 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// static_contained_range_map.h: StaticContainedRangeMap.
//
// StaticContainedRangeMap is similar to ContainedRangeMap. However,
// StaticContainedRangeMap wraps a StaticMap instead of std::map, and does not
// support dynamic operations like StoreRange(...).
// StaticContainedRangeMap provides same RetrieveRange(...) interfaces as
// ContainedRangeMap.
//
// Please see contained_range_map.h for more documentation.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_STATIC_CONTAINED_RANGE_MAP_H__
#define PROCESSOR_STATIC_CONTAINED_RANGE_MAP_H__
#include "processor/static_map-inl.h"
namespace google_breakpad {
template<typename AddressType, typename EntryType>
class StaticContainedRangeMap {
public:
StaticContainedRangeMap(): base_(), entry_size_(), entry_ptr_(), map_() { }
explicit StaticContainedRangeMap(const char *base);
// Retrieves the most specific (smallest) descendant range encompassing
// the specified address. This method will only return entries held by
// child ranges, and not the entry contained by |this|. This is necessary
// to support a sparsely-populated root range. If no descendant range
// encompasses the address, returns false.
bool RetrieveRange(const AddressType &address, const EntryType *&entry) const;
private:
friend class ModuleComparer;
// AddressToRangeMap stores pointers. This makes reparenting simpler in
// StoreRange, because it doesn't need to copy entire objects.
typedef StaticContainedRangeMap* SelfPtr;
typedef
StaticMap<AddressType, StaticContainedRangeMap> AddressToRangeMap;
typedef typename AddressToRangeMap::const_iterator MapConstIterator;
// The base address of this range. The high address does not need to
// be stored, because it is used as the key to an object in its parent's
// map, and all ContainedRangeMaps except for the root range are contained
// within maps. The root range does not actually contain an entry, so its
// base_ field is meaningless, and the fact that it has no parent and thus
// no key is unimportant. For this reason, the base_ field should only be
// is accessed on child ContainedRangeMap objects, and never on |this|.
AddressType base_;
// The entry corresponding to this range. The root range does not
// actually contain an entry, so its entry_ field is meaningless. For
// this reason, the entry_ field should only be accessed on child
// ContainedRangeMap objects, and never on |this|.
u_int32_t entry_size_;
const EntryType *entry_ptr_;
// The map containing child ranges, keyed by each child range's high
// address. This is a pointer to avoid allocating map structures for
// leaf nodes, where they are not needed.
AddressToRangeMap map_;
};
} // namespace google_breakpad
#endif // PROCESSOR_STATIC_CONTAINED_RANGE_MAP_H__

View file

@ -0,0 +1,317 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// static_contained_range_map_unittest.cc: Unit tests for
// StaticContainedRangeMap.
//
// Author: Siyang Xie (lambxsy@google.com)
#include "breakpad_googletest_includes.h"
#include "processor/contained_range_map-inl.h"
#include "processor/static_contained_range_map-inl.h"
#include "processor/simple_serializer-inl.h"
#include "processor/map_serializers-inl.h"
#include "processor/scoped_ptr.h"
#include "processor/logging.h"
namespace {
// Each element in test_data contains the expected result when calling
// RetrieveRange on an address.
const int test_data[] = {
0, // 0
0, // 1
0, // 2
0, // 3
0, // 4
0, // 5
0, // 6
0, // 7
9, // 8
7, // 9
1, // 10
5, // 11
6, // 12
6, // 13
6, // 14
6, // 15
6, // 16
6, // 17
6, // 18
5, // 19
7, // 20
8, // 21
0, // 22
0, // 23
0, // 24
0, // 25
0, // 26
0, // 27
0, // 28
0, // 29
10, // 30
10, // 31
10, // 32
11, // 33
11, // 34
11, // 35
0, // 36
0, // 37
0, // 38
0, // 39
14, // 40
14, // 41
14, // 42
14, // 43
15, // 44
15, // 45
15, // 46
15, // 47
0, // 48
0, // 49
19, // 50
18, // 51
18, // 52
18, // 53
18, // 54
18, // 55
18, // 56
18, // 57
18, // 58
20, // 59
21, // 60
25, // 61
26, // 62
26, // 63
26, // 64
26, // 65
26, // 66
26, // 67
24, // 68
22, // 69
30, // 70
30, // 71
30, // 72
30, // 73
31, // 74
31, // 75
30, // 76
32, // 77
32, // 78
30, // 79
34, // 80
35, // 81
36, // 82
39, // 83
38, // 84
37, // 85
43, // 86
44, // 87
41, // 88
45, // 89
42, // 90
0, // 91
0, // 92
0, // 93
0, // 94
0, // 95
0, // 96
0, // 97
0, // 98
0 // 99
};
} // namespace
typedef google_breakpad::ContainedRangeMap<unsigned int, int> CRMMap;
typedef google_breakpad::StaticContainedRangeMap<unsigned int, int> TestMap;
using google_breakpad::scoped_ptr;
class TestStaticCRMMap : public ::testing::Test {
protected:
void SetUp();
// A referrence map for testing StaticCRMMap.
google_breakpad::ContainedRangeMap<unsigned int, int> crm_map_;
// Static version of crm_map using serialized data of crm_map.
// The goal of testing is to make sure TestMap provides same results for
// lookup operation(s) as CRMMap does.
google_breakpad::StaticContainedRangeMap<unsigned int, int> test_map_;
google_breakpad::ContainedRangeMapSerializer<unsigned int, int> serializer_;
scoped_ptr<char> serialized_data_;
};
void TestStaticCRMMap::SetUp() {
// First, do the StoreRange tests. This validates the containment
// rules.
// We confirm the referrence map correctly stores data during setup.
ASSERT_TRUE (crm_map_.StoreRange(10, 10, 1));
ASSERT_FALSE(crm_map_.StoreRange(10, 10, 2)); // exactly equal to 1
ASSERT_FALSE(crm_map_.StoreRange(11, 10, 3)); // begins inside 1 and extends up
ASSERT_FALSE(crm_map_.StoreRange( 9, 10, 4)); // begins below 1 and ends inside
ASSERT_TRUE (crm_map_.StoreRange(11, 9, 5)); // contained by existing
ASSERT_TRUE (crm_map_.StoreRange(12, 7, 6));
ASSERT_TRUE (crm_map_.StoreRange( 9, 12, 7)); // contains existing
ASSERT_TRUE (crm_map_.StoreRange( 9, 13, 8));
ASSERT_TRUE (crm_map_.StoreRange( 8, 14, 9));
ASSERT_TRUE (crm_map_.StoreRange(30, 3, 10));
ASSERT_TRUE (crm_map_.StoreRange(33, 3, 11));
ASSERT_TRUE (crm_map_.StoreRange(30, 6, 12)); // storable but totally masked
ASSERT_TRUE (crm_map_.StoreRange(40, 8, 13)); // will be totally masked
ASSERT_TRUE (crm_map_.StoreRange(40, 4, 14));
ASSERT_TRUE (crm_map_.StoreRange(44, 4, 15));
ASSERT_FALSE(crm_map_.StoreRange(32, 10, 16)); // begins in #10, ends in #14
ASSERT_FALSE(crm_map_.StoreRange(50, 0, 17)); // zero length
ASSERT_TRUE (crm_map_.StoreRange(50, 10, 18));
ASSERT_TRUE (crm_map_.StoreRange(50, 1, 19));
ASSERT_TRUE (crm_map_.StoreRange(59, 1, 20));
ASSERT_TRUE (crm_map_.StoreRange(60, 1, 21));
ASSERT_TRUE (crm_map_.StoreRange(69, 1, 22));
ASSERT_TRUE (crm_map_.StoreRange(60, 10, 23));
ASSERT_TRUE (crm_map_.StoreRange(68, 1, 24));
ASSERT_TRUE (crm_map_.StoreRange(61, 1, 25));
ASSERT_TRUE (crm_map_.StoreRange(61, 8, 26));
ASSERT_FALSE(crm_map_.StoreRange(59, 9, 27));
ASSERT_FALSE(crm_map_.StoreRange(59, 10, 28));
ASSERT_FALSE(crm_map_.StoreRange(59, 11, 29));
ASSERT_TRUE (crm_map_.StoreRange(70, 10, 30));
ASSERT_TRUE (crm_map_.StoreRange(74, 2, 31));
ASSERT_TRUE (crm_map_.StoreRange(77, 2, 32));
ASSERT_FALSE(crm_map_.StoreRange(72, 6, 33));
ASSERT_TRUE (crm_map_.StoreRange(80, 3, 34));
ASSERT_TRUE (crm_map_.StoreRange(81, 1, 35));
ASSERT_TRUE (crm_map_.StoreRange(82, 1, 36));
ASSERT_TRUE (crm_map_.StoreRange(83, 3, 37));
ASSERT_TRUE (crm_map_.StoreRange(84, 1, 38));
ASSERT_TRUE (crm_map_.StoreRange(83, 1, 39));
ASSERT_TRUE (crm_map_.StoreRange(86, 5, 40));
ASSERT_TRUE (crm_map_.StoreRange(88, 1, 41));
ASSERT_TRUE (crm_map_.StoreRange(90, 1, 42));
ASSERT_TRUE (crm_map_.StoreRange(86, 1, 43));
ASSERT_TRUE (crm_map_.StoreRange(87, 1, 44));
ASSERT_TRUE (crm_map_.StoreRange(89, 1, 45));
ASSERT_TRUE (crm_map_.StoreRange(87, 4, 46));
ASSERT_TRUE (crm_map_.StoreRange(87, 3, 47));
ASSERT_FALSE(crm_map_.StoreRange(86, 2, 48));
// Serialize crm_map to generate serialized data.
unsigned int size;
serialized_data_.reset(serializer_.Serialize(&crm_map_, &size));
BPLOG(INFO) << "Serialized data size: " << size << " Bytes.";
// Construct test_map_ from serialized data.
test_map_ = TestMap(serialized_data_.get());
}
TEST_F(TestStaticCRMMap, TestEmptyMap) {
CRMMap empty_crm_map;
unsigned int size;
scoped_ptr<char> serialized_data;
serialized_data.reset(serializer_.Serialize(&empty_crm_map, &size));
scoped_ptr<TestMap> test_map(new TestMap(serialized_data.get()));
const unsigned int kCorrectSizeForEmptyMap = 16;
ASSERT_EQ(kCorrectSizeForEmptyMap, size);
const int *entry_test;
ASSERT_FALSE(test_map->RetrieveRange(-1, entry_test));
ASSERT_FALSE(test_map->RetrieveRange(0, entry_test));
ASSERT_FALSE(test_map->RetrieveRange(10, entry_test));
}
TEST_F(TestStaticCRMMap, TestSingleElementMap) {
CRMMap crm_map;
// Test on one element:
int entry = 1;
crm_map.StoreRange(10, 10, entry);
unsigned int size;
scoped_ptr<char> serialized_data;
serialized_data.reset(serializer_.Serialize(&crm_map, &size));
scoped_ptr<TestMap> test_map(new TestMap(serialized_data.get()));
const unsigned int kCorrectSizeForSingleElementMap = 40;
ASSERT_EQ(kCorrectSizeForSingleElementMap, size);
const int *entry_test;
ASSERT_FALSE(test_map->RetrieveRange(-1, entry_test));
ASSERT_FALSE(test_map->RetrieveRange(0, entry_test));
ASSERT_TRUE(test_map->RetrieveRange(10, entry_test));
ASSERT_EQ(*entry_test, entry);
ASSERT_TRUE(test_map->RetrieveRange(13, entry_test));
ASSERT_EQ(*entry_test, entry);
}
TEST_F(TestStaticCRMMap, RunTestData) {
unsigned int test_high = sizeof(test_data) / sizeof(test_data[0]);
// Now, do the RetrieveRange tests. This further validates that the
// objects were stored properly and that retrieval returns the correct
// object.
// If GENERATE_TEST_DATA is defined, instead of the retrieval tests, a
// new test_data array will be printed. Exercise caution when doing this.
// Be sure to verify the results manually!
#ifdef GENERATE_TEST_DATA
printf(" const int test_data[] = {\n");
#endif // GENERATE_TEST_DATA
for (unsigned int address = 0; address < test_high; ++address) {
const int *entryptr;
int value = 0;
if (test_map_.RetrieveRange(address, entryptr))
value = *entryptr;
#ifndef GENERATE_TEST_DATA
// Don't use ASSERT inside the loop because it won't show the failed
// |address|, and the line number will always be the same. That makes
// it difficult to figure out which test failed.
EXPECT_EQ(value, test_data[address]) << "FAIL: retrieve address "
<< address;
#else // !GENERATE_TEST_DATA
printf(" %d%c%s // %d\n", value,
address == test_high - 1 ? ' ' : ',',
value < 10 ? " " : "",
address);
#endif // !GENERATE_TEST_DATA
}
#ifdef GENERATE_TEST_DATA
printf(" };\n");
#endif // GENERATE_TEST_DATA
}
int main(int argc, char *argv[]) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

View file

@ -0,0 +1,130 @@
// Copyright (c) 2010 Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// static_range_map-inl.h: StaticRangeMap implementation.
//
// See static_range_map.h for documentation.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_STATIC_RANGE_MAP_INL_H__
#define PROCESSOR_STATIC_RANGE_MAP_INL_H__
#include "processor/static_range_map.h"
#include "processor/logging.h"
namespace google_breakpad {
template<typename AddressType, typename EntryType>
bool StaticRangeMap<AddressType, EntryType>::RetrieveRange(
const AddressType &address, const EntryType *&entry,
AddressType *entry_base, AddressType *entry_size) const {
MapConstIterator iterator = map_.lower_bound(address);
if (iterator == map_.end())
return false;
// The map is keyed by the high address of each range, so |address| is
// guaranteed to be lower than the range's high address. If |range| is
// not directly preceded by another range, it's possible for address to
// be below the range's low address, though. When that happens, address
// references something not within any range, so return false.
const Range *range = iterator.GetValuePtr();
// Make sure AddressType and EntryType are copyable basic types
// e.g.: integer types, pointers etc
if (address < range->base())
return false;
entry = range->entryptr();
if (entry_base)
*entry_base = range->base();
if (entry_size)
*entry_size = iterator.GetKey() - range->base() + 1;
return true;
}
template<typename AddressType, typename EntryType>
bool StaticRangeMap<AddressType, EntryType>::RetrieveNearestRange(
const AddressType &address, const EntryType *&entry,
AddressType *entry_base, AddressType *entry_size) const {
// If address is within a range, RetrieveRange can handle it.
if (RetrieveRange(address, entry, entry_base, entry_size))
return true;
// upper_bound gives the first element whose key is greater than address,
// but we want the first element whose key is less than or equal to address.
// Decrement the iterator to get there, but not if the upper_bound already
// points to the beginning of the map - in that case, address is lower than
// the lowest stored key, so return false.
MapConstIterator iterator = map_.upper_bound(address);
if (iterator == map_.begin())
return false;
--iterator;
const Range *range = iterator.GetValuePtr();
entry = range->entryptr();
if (entry_base)
*entry_base = range->base();
if (entry_size)
*entry_size = iterator.GetKey() - range->base() + 1;
return true;
}
template<typename AddressType, typename EntryType>
bool StaticRangeMap<AddressType, EntryType>::RetrieveRangeAtIndex(
int index, const EntryType *&entry,
AddressType *entry_base, AddressType *entry_size) const {
if (index >= GetCount()) {
BPLOG(ERROR) << "Index out of range: " << index << "/" << GetCount();
return false;
}
MapConstIterator iterator = map_.IteratorAtIndex(index);
const Range *range = iterator.GetValuePtr();
entry = range->entryptr();
if (entry_base)
*entry_base = range->base();
if (entry_size)
*entry_size = iterator.GetKey() - range->base() + 1;
return true;
}
} // namespace google_breakpad
#endif // PROCESSOR_STATIC_RANGE_MAP_INL_H__

View file

@ -0,0 +1,106 @@
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// static_range_map.h: StaticRangeMap.
//
// StaticRangeMap is similar as RangeMap. However, StaticRangeMap wraps a
// StaticMap instead of std::map, and does not support dynamic operations like
// StoreRange(...). StaticRangeMap provides same Retrieve*() interfaces as
// RangeMap. Please see range_map.h for more documentation.
//
// Author: Siyang Xie (lambxsy@google.com)
#ifndef PROCESSOR_STATIC_RANGE_MAP_H__
#define PROCESSOR_STATIC_RANGE_MAP_H__
#include "processor/static_map-inl.h"
namespace google_breakpad {
// AddressType is basic type, e.g.: integer types, pointers etc
// EntryType could be a complex type, so we retrieve its pointer instead.
template<typename AddressType, typename EntryType>
class StaticRangeMap {
public:
StaticRangeMap(): map_() { }
explicit StaticRangeMap(const char *memory): map_(memory) { }
// Locates the range encompassing the supplied address. If there is
// no such range, returns false. entry_base and entry_size, if non-NULL,
// are set to the base and size of the entry's range.
bool RetrieveRange(const AddressType &address, const EntryType *&entry,
AddressType *entry_base, AddressType *entry_size) const;
// Locates the range encompassing the supplied address, if one exists.
// If no range encompasses the supplied address, locates the nearest range
// to the supplied address that is lower than the address. Returns false
// if no range meets these criteria. entry_base and entry_size, if
// non-NULL, are set to the base and size of the entry's range.
bool RetrieveNearestRange(const AddressType &address, const EntryType *&entry,
AddressType *entry_base, AddressType *entry_size)
const;
// Treating all ranges as a list ordered by the address spaces that they
// occupy, locates the range at the index specified by index. Returns
// false if index is larger than the number of ranges stored. entry_base
// and entry_size, if non-NULL, are set to the base and size of the entry's
// range.
//
// RetrieveRangeAtIndex is not optimized for speedy operation.
bool RetrieveRangeAtIndex(int index, const EntryType *&entry,
AddressType *entry_base, AddressType *entry_size)
const;
// Returns the number of ranges stored in the RangeMap.
inline unsigned int GetCount() const { return map_.size(); }
private:
friend class ModuleComparer;
class Range {
public:
AddressType base() const {
return *(reinterpret_cast<const AddressType*>(this));
}
const EntryType* entryptr() const {
return reinterpret_cast<const EntryType*>(this + sizeof(AddressType));
}
};
// Convenience types.
typedef StaticRangeMap* SelfPtr;
typedef StaticMap<AddressType, Range> AddressToRangeMap;
typedef typename AddressToRangeMap::const_iterator MapConstIterator;
AddressToRangeMap map_;
};
} // namespace google_breakpad
#endif // PROCESSOR_STATIC_RANGE_MAP_H__

View file

@ -0,0 +1,427 @@
// Copyright (c) 2010 Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// static_range_map_unittest.cc: Unit tests for StaticRangeMap.
//
// Author: Siyang Xie (lambxsy@google.com)
#include "breakpad_googletest_includes.h"
#include "processor/range_map-inl.h"
#include "processor/static_range_map-inl.h"
#include "processor/simple_serializer-inl.h"
#include "processor/map_serializers-inl.h"
#include "processor/logging.h"
#include "processor/scoped_ptr.h"
using google_breakpad::StaticRangeMap;
using google_breakpad::RangeMap;
// Types used for testing.
typedef int AddressType;
typedef int EntryType;
typedef StaticRangeMap< AddressType, EntryType > TestMap;
typedef RangeMap< AddressType, EntryType > RMap;
// RangeTest contains data to use for store and retrieve tests. See
// RunTests for descriptions of the tests.
struct RangeTest {
// Base address to use for test
AddressType address;
// Size of range to use for test
AddressType size;
// Unique ID of range - unstorable ranges must have unique IDs too
EntryType id;
// Whether this range is expected to be stored successfully or not
bool expect_storable;
};
// A RangeTestSet encompasses multiple RangeTests, which are run in
// sequence on the same RangeMap.
struct RangeTestSet {
// An array of RangeTests
const RangeTest* range_tests;
// The number of tests in the set
unsigned int range_test_count;
};
namespace {
// These tests will be run sequentially. The first set of tests exercises
// most functions of RangeTest, and verifies all of the bounds-checking.
const RangeTest range_tests_0[] = {
{ INT_MIN, 16, 1, true }, // lowest possible range
{ -2, 5, 2, true }, // a range through zero
{ INT_MAX - 9, 11, 3, false }, // tests anti-overflow
{ INT_MAX - 9, 10, 4, true }, // highest possible range
{ 5, 0, 5, false }, // tests anti-zero-size
{ 5, 1, 6, true }, // smallest possible range
{ -20, 15, 7, true }, // entirely negative
{ 10, 10, 10, true }, // causes the following tests to fail
{ 9, 10, 11, false }, // one-less base, one-less high
{ 9, 11, 12, false }, // one-less base, identical high
{ 9, 12, 13, false }, // completely contains existing
{ 10, 9, 14, false }, // identical base, one-less high
{ 10, 10, 15, false }, // exactly identical to existing range
{ 10, 11, 16, false }, // identical base, one-greater high
{ 11, 8, 17, false }, // contained completely within
{ 11, 9, 18, false }, // one-greater base, identical high
{ 11, 10, 19, false }, // one-greater base, one-greater high
{ 9, 2, 20, false }, // overlaps bottom by one
{ 10, 1, 21, false }, // overlaps bottom by one, contained
{ 19, 1, 22, false }, // overlaps top by one, contained
{ 19, 2, 23, false }, // overlaps top by one
{ 9, 1, 24, true }, // directly below without overlap
{ 20, 1, 25, true }, // directly above without overlap
{ 6, 3, 26, true }, // exactly between two ranges, gapless
{ 7, 3, 27, false }, // tries to span two ranges
{ 7, 5, 28, false }, // tries to span three ranges
{ 4, 20, 29, false }, // tries to contain several ranges
{ 30, 50, 30, true },
{ 90, 25, 31, true },
{ 35, 65, 32, false }, // tries to span two noncontiguous
{ 120, 10000, 33, true }, // > 8-bit
{ 20000, 20000, 34, true }, // > 8-bit
{ 0x10001, 0x10001, 35, true }, // > 16-bit
{ 27, -1, 36, false } // tests high < base
};
// Attempt to fill the entire space. The entire space must be filled with
// three stores because AddressType is signed for these tests, so RangeMap
// treats the size as signed and rejects sizes that appear to be negative.
// Even if these tests were run as unsigned, two stores would be needed
// to fill the space because the entire size of the space could only be
// described by using one more bit than would be present in AddressType.
const RangeTest range_tests_1[] = {
{ INT_MIN, INT_MAX, 50, true }, // From INT_MIN to -2, inclusive
{ -1, 2, 51, true }, // From -1 to 0, inclusive
{ 1, INT_MAX, 52, true }, // From 1 to INT_MAX, inclusive
{ INT_MIN, INT_MAX, 53, false }, // Can't fill the space twice
{ -1, 2, 54, false },
{ 1, INT_MAX, 55, false },
{ -3, 6, 56, false }, // -3 to 2, inclusive - spans 3 ranges
};
// A light round of testing to verify that RetrieveRange does the right
// the right thing at the extremities of the range when nothing is stored
// there. Checks are forced without storing anything at the extremities
// by setting size = 0.
const RangeTest range_tests_2[] = {
{ INT_MIN, 0, 100, false }, // makes RetrieveRange check low end
{ -1, 3, 101, true },
{ INT_MAX, 0, 102, false }, // makes RetrieveRange check high end
};
// Similar to the previous test set, but with a couple of ranges closer
// to the extremities.
const RangeTest range_tests_3[] = {
{ INT_MIN + 1, 1, 110, true },
{ INT_MAX - 1, 1, 111, true },
{ INT_MIN, 0, 112, false }, // makes RetrieveRange check low end
{ INT_MAX, 0, 113, false } // makes RetrieveRange check high end
};
// The range map is cleared between sets of tests listed here.
const RangeTestSet range_test_sets[] = {
{ range_tests_0, sizeof(range_tests_0) / sizeof(RangeTest) },
{ range_tests_1, sizeof(range_tests_1) / sizeof(RangeTest) },
{ range_tests_2, sizeof(range_tests_2) / sizeof(RangeTest) },
{ range_tests_3, sizeof(range_tests_3) / sizeof(RangeTest) },
{ range_tests_0, sizeof(range_tests_0) / sizeof(RangeTest) } // Run again
};
}
class TestStaticRangeMap : public ::testing::Test {
protected:
void SetUp() {
kTestCasesCount_ = sizeof(range_test_sets) / sizeof(RangeTestSet);
}
// StoreTest uses the data in a RangeTest and calls StoreRange on the
// test RangeMap. It returns true if the expected result occurred, and
// false if something else happened.
void StoreTest(RMap* range_map, const RangeTest* range_test);
// RetrieveTest uses the data in RangeTest and calls RetrieveRange on the
// test RangeMap. If it retrieves the expected value (which can be no
// map entry at the specified range,) it returns true, otherwise, it returns
// false. RetrieveTest will check the values around the base address and
// the high address of a range to guard against off-by-one errors.
void RetrieveTest(TestMap* range_map, const RangeTest* range_test);
// Test RetrieveRangeAtIndex, which is supposed to return objects in order
// according to their addresses. This test is performed by looping through
// the map, calling RetrieveRangeAtIndex for all possible indices in sequence,
// and verifying that each call returns a different object than the previous
// call, and that ranges are returned with increasing base addresses. Returns
// false if the test fails.
void RetrieveIndexTest(const TestMap* range_map, int set);
void RunTestCase(int test_case);
unsigned int kTestCasesCount_;
google_breakpad::RangeMapSerializer<AddressType, EntryType> serializer_;
};
void TestStaticRangeMap::StoreTest(RMap* range_map,
const RangeTest* range_test) {
bool stored = range_map->StoreRange(range_test->address,
range_test->size,
range_test->id);
EXPECT_EQ(stored, range_test->expect_storable)
<< "StoreRange id " << range_test->id << "FAILED";
}
void TestStaticRangeMap::RetrieveTest(TestMap* range_map,
const RangeTest* range_test) {
for (unsigned int side = 0; side <= 1; ++side) {
// When side == 0, check the low side (base address) of each range.
// When side == 1, check the high side (base + size) of each range.
// Check one-less and one-greater than the target address in addition
// to the target address itself.
// If the size of the range is only 1, don't check one greater than
// the base or one less than the high - for a successfully stored
// range, these tests would erroneously fail because the range is too
// small.
AddressType low_offset = -1;
AddressType high_offset = 1;
if (range_test->size == 1) {
if (!side) // When checking the low side,
high_offset = 0; // don't check one over the target.
else // When checking the high side,
low_offset = 0; // don't check one under the target.
}
for (AddressType offset = low_offset; offset <= high_offset; ++offset) {
AddressType address =
offset +
(!side ? range_test->address :
range_test->address + range_test->size - 1);
bool expected_result = false; // This is correct for tests not stored.
if (range_test->expect_storable) {
if (offset == 0) // When checking the target address,
expected_result = true; // test should always succeed.
else if (offset == -1) // When checking one below the target,
expected_result = side; // should fail low and succeed high.
else // When checking one above the target,
expected_result = !side; // should succeed low and fail high.
}
const EntryType* id;
AddressType retrieved_base;
AddressType retrieved_size;
bool retrieved = range_map->RetrieveRange(address, id,
&retrieved_base,
&retrieved_size);
bool observed_result = retrieved && *id == range_test->id;
EXPECT_EQ(observed_result, expected_result)
<< "RetrieveRange id " << range_test->id
<< ", side " << side << ", offset " << offset << " FAILED.";
// If a range was successfully retrieved, check that the returned
// bounds match the range as stored.
if (observed_result == true) {
EXPECT_EQ(retrieved_base, range_test->address)
<< "RetrieveRange id " << range_test->id
<< ", side " << side << ", offset " << offset << " FAILED.";
EXPECT_EQ(retrieved_size, range_test->size)
<< "RetrieveRange id " << range_test->id
<< ", side " << side << ", offset " << offset << " FAILED.";
}
// Now, check RetrieveNearestRange. The nearest range is always
// expected to be different from the test range when checking one
// less than the low side.
bool expected_nearest = range_test->expect_storable;
if (!side && offset < 0)
expected_nearest = false;
AddressType nearest_base;
AddressType nearest_size;
bool retrieved_nearest = range_map->RetrieveNearestRange(address,
id,
&nearest_base,
&nearest_size);
// When checking one greater than the high side, RetrieveNearestRange
// should usually return the test range. When a different range begins
// at that address, though, then RetrieveNearestRange should return the
// range at the address instead of the test range.
if (side && offset > 0 && nearest_base == address) {
expected_nearest = false;
}
bool observed_nearest = retrieved_nearest &&
*id == range_test->id;
EXPECT_EQ(observed_nearest, expected_nearest)
<< "RetrieveRange id " << range_test->id
<< ", side " << side << ", offset " << offset << " FAILED.";
// If a range was successfully retrieved, check that the returned
// bounds match the range as stored.
if (expected_nearest ==true) {
EXPECT_EQ(nearest_base, range_test->address)
<< "RetrieveRange id " << range_test->id
<< ", side " << side << ", offset " << offset << " FAILED.";
EXPECT_EQ(nearest_size, range_test->size)
<< "RetrieveRange id " << range_test->id
<< ", side " << side << ", offset " << offset << " FAILED.";
}
}
}
}
void TestStaticRangeMap::RetrieveIndexTest(const TestMap* range_map, int set) {
AddressType last_base = 0;
const EntryType* last_entry = 0;
const EntryType* entry;
int object_count = range_map->GetCount();
for (int object_index = 0; object_index < object_count; ++object_index) {
AddressType base;
ASSERT_TRUE(range_map->RetrieveRangeAtIndex(object_index,
entry,
&base,
NULL))
<< "FAILED: RetrieveRangeAtIndex set " << set
<< " index " << object_index;
ASSERT_TRUE(entry) << "FAILED: RetrieveRangeAtIndex set " << set
<< " index " << object_index;
// It's impossible to do these comparisons unless there's a previous
// object to compare against.
if (last_entry) {
// The object must be different from the last_entry one.
EXPECT_NE(*entry, *last_entry) << "FAILED: RetrieveRangeAtIndex set "
<< set << " index " << object_index;
// Each object must have a base greater than the previous object's base.
EXPECT_GT(base, last_base) << "FAILED: RetrieveRangeAtIndex set " << set
<< " index " << object_index;
}
last_entry = entry;
last_base = base;
}
// Make sure that RetrieveRangeAtIndex doesn't allow lookups at indices that
// are too high.
ASSERT_FALSE(range_map->RetrieveRangeAtIndex(
object_count, entry, NULL, NULL)) << "FAILED: RetrieveRangeAtIndex set "
<< set << " index " << object_count
<< " (too large)";
}
// RunTests runs a series of test sets.
void TestStaticRangeMap::RunTestCase(int test_case) {
// Maintain the range map in a pointer so that deletion can be meaningfully
// tested.
RMap* rmap = new RMap();
const RangeTest* range_tests = range_test_sets[test_case].range_tests;
unsigned int range_test_count = range_test_sets[test_case].range_test_count;
// Run the StoreRange test, which validates StoreRange and initializes
// the RangeMap with data for the RetrieveRange test.
int stored_count = 0; // The number of ranges successfully stored
for (unsigned int range_test_index = 0;
range_test_index < range_test_count;
++range_test_index) {
const RangeTest* range_test = &range_tests[range_test_index];
StoreTest(rmap, range_test);
if (range_test->expect_storable)
++stored_count;
}
char *memaddr = serializer_.Serialize(*rmap, NULL);
TestMap* static_range_map = new TestMap(memaddr);
// The RangeMap's own count of objects should also match.
EXPECT_EQ(static_range_map->GetCount(), stored_count);
// Run the RetrieveRange test
for (unsigned int range_test_index = 0;
range_test_index < range_test_count;
++range_test_index) {
const RangeTest* range_test = &range_tests[range_test_index];
RetrieveTest(static_range_map, range_test);
}
RetrieveIndexTest(static_range_map, test_case);
// Clear the map between test sets. If this is the final test set,
// delete the map instead to test destruction.
delete memaddr;
delete static_range_map;
rmap->Clear();
delete rmap;
}
TEST_F(TestStaticRangeMap, TestCase0) {
int test_case = 0;
RunTestCase(test_case);
}
TEST_F(TestStaticRangeMap, TestCase1) {
int test_case = 1;
RunTestCase(test_case);
}
TEST_F(TestStaticRangeMap, TestCase2) {
int test_case = 2;
RunTestCase(test_case);
}
TEST_F(TestStaticRangeMap, TestCase3) {
int test_case = 3;
RunTestCase(test_case);
}
TEST_F(TestStaticRangeMap, RunTestCase0Again) {
int test_case = 0;
RunTestCase(test_case);
}
int main(int argc, char *argv[]) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}