Define and use a a new MDRawContextARM64
This struct matches the layout defined by Microsoft and replaces Breakpad's MDRawContextARM64_Old. This CL updates the processor to understand either the old or new structs, but clients continue to write the old structs. Change-Id: I8dedd9ddb2ec083b802723b9ac87beb18d98edbd Reviewed-on: https://chromium-review.googlesource.com/1155938 Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
parent
627ef0cb9c
commit
88d8114fda
22 changed files with 411 additions and 83 deletions
10
Makefile.am
10
Makefile.am
|
@ -233,6 +233,8 @@ src_libbreakpad_a_SOURCES = \
|
|||
src/processor/cfi_frame_info.h \
|
||||
src/processor/contained_range_map-inl.h \
|
||||
src/processor/contained_range_map.h \
|
||||
src/processor/convert_old_arm64_context.cc \
|
||||
src/processor/convert_old_arm64_context.h \
|
||||
src/processor/disassembler_x86.h \
|
||||
src/processor/disassembler_x86.cc \
|
||||
src/processor/dump_context.cc \
|
||||
|
@ -487,6 +489,7 @@ src_client_linux_linux_client_unittest_shlib_SOURCES = \
|
|||
src/common/tests/file_utils.cc \
|
||||
src/common/tests/file_utils.h \
|
||||
src/processor/basic_code_modules.cc \
|
||||
src/processor/convert_old_arm64_context.cc \
|
||||
src/processor/dump_context.cc \
|
||||
src/processor/dump_object.cc \
|
||||
src/processor/logging.cc \
|
||||
|
@ -811,6 +814,7 @@ src_processor_exploitability_unittest_SOURCES = \
|
|||
src_processor_exploitability_unittest_CPPFLAGS = \
|
||||
$(AM_CPPFLAGS) $(TEST_CFLAGS)
|
||||
src_processor_exploitability_unittest_LDADD = \
|
||||
src/processor/convert_old_arm64_context.o \
|
||||
src/processor/minidump_processor.o \
|
||||
src/processor/process_state.o \
|
||||
src/processor/disassembler_x86.o \
|
||||
|
@ -892,6 +896,7 @@ src_processor_microdump_processor_unittest_LDADD = \
|
|||
src/processor/basic_code_modules.o \
|
||||
src/processor/basic_source_line_resolver.o \
|
||||
src/processor/call_stack.o \
|
||||
src/processor/convert_old_arm64_context.o \
|
||||
src/processor/cfi_frame_info.o \
|
||||
src/processor/dump_context.o \
|
||||
src/processor/dump_object.o \
|
||||
|
@ -926,6 +931,7 @@ src_processor_minidump_processor_unittest_LDADD = \
|
|||
src/processor/basic_source_line_resolver.o \
|
||||
src/processor/call_stack.o \
|
||||
src/processor/cfi_frame_info.o \
|
||||
src/processor/convert_old_arm64_context.o \
|
||||
src/processor/disassembler_x86.o \
|
||||
src/processor/dump_context.o \
|
||||
src/processor/dump_object.o \
|
||||
|
@ -965,6 +971,7 @@ src_processor_minidump_unittest_CPPFLAGS = \
|
|||
$(AM_CPPFLAGS) $(TEST_CFLAGS)
|
||||
src_processor_minidump_unittest_LDADD = \
|
||||
src/processor/basic_code_modules.o \
|
||||
src/processor/convert_old_arm64_context.o \
|
||||
src/processor/dump_context.o \
|
||||
src/processor/dump_object.o \
|
||||
src/processor/logging.o \
|
||||
|
@ -1186,6 +1193,7 @@ src_processor_minidump_dump_SOURCES = \
|
|||
src/processor/minidump_dump.cc
|
||||
src_processor_minidump_dump_LDADD = \
|
||||
src/processor/basic_code_modules.o \
|
||||
src/processor/convert_old_arm64_context.o \
|
||||
src/processor/dump_context.o \
|
||||
src/processor/dump_object.o \
|
||||
src/processor/logging.o \
|
||||
|
@ -1200,6 +1208,7 @@ src_processor_microdump_stackwalk_LDADD = \
|
|||
src/processor/basic_code_modules.o \
|
||||
src/processor/basic_source_line_resolver.o \
|
||||
src/processor/call_stack.o \
|
||||
src/processor/convert_old_arm64_context.o \
|
||||
src/processor/cfi_frame_info.o \
|
||||
src/processor/disassembler_x86.o \
|
||||
src/processor/dump_context.o \
|
||||
|
@ -1235,6 +1244,7 @@ src_processor_minidump_stackwalk_LDADD = \
|
|||
src/processor/basic_source_line_resolver.o \
|
||||
src/processor/call_stack.o \
|
||||
src/processor/cfi_frame_info.o \
|
||||
src/processor/convert_old_arm64_context.o \
|
||||
src/processor/disassembler_x86.o \
|
||||
src/processor/dump_context.o \
|
||||
src/processor/dump_object.o \
|
||||
|
|
58
Makefile.in
58
Makefile.in
|
@ -1,7 +1,7 @@
|
|||
# Makefile.in generated by automake 1.15 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.15.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994-2017 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -385,6 +385,8 @@ am__src_libbreakpad_a_SOURCES_DIST = \
|
|||
src/processor/cfi_frame_info.h \
|
||||
src/processor/contained_range_map-inl.h \
|
||||
src/processor/contained_range_map.h \
|
||||
src/processor/convert_old_arm64_context.cc \
|
||||
src/processor/convert_old_arm64_context.h \
|
||||
src/processor/disassembler_x86.h \
|
||||
src/processor/disassembler_x86.cc \
|
||||
src/processor/dump_context.cc src/processor/dump_object.cc \
|
||||
|
@ -455,6 +457,7 @@ am__src_libbreakpad_a_SOURCES_DIST = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.$(OBJEXT) \
|
||||
|
@ -626,6 +629,7 @@ am__src_client_linux_linux_client_unittest_shlib_SOURCES_DIST = \
|
|||
src/common/tests/auto_tempdir.h src/common/tests/file_utils.cc \
|
||||
src/common/tests/file_utils.h \
|
||||
src/processor/basic_code_modules.cc \
|
||||
src/processor/convert_old_arm64_context.cc \
|
||||
src/processor/dump_context.cc src/processor/dump_object.cc \
|
||||
src/processor/logging.cc src/processor/minidump.cc \
|
||||
src/processor/pathname_stripper.cc \
|
||||
|
@ -656,6 +660,7 @@ am__src_client_linux_linux_client_unittest_shlib_SOURCES_DIST = \
|
|||
@LINUX_HOST_TRUE@ src/common/src_client_linux_linux_client_unittest_shlib-memory_allocator_unittest.$(OBJEXT) \
|
||||
@LINUX_HOST_TRUE@ src/common/tests/src_client_linux_linux_client_unittest_shlib-file_utils.$(OBJEXT) \
|
||||
@LINUX_HOST_TRUE@ src/processor/src_client_linux_linux_client_unittest_shlib-basic_code_modules.$(OBJEXT) \
|
||||
@LINUX_HOST_TRUE@ src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.$(OBJEXT) \
|
||||
@LINUX_HOST_TRUE@ src/processor/src_client_linux_linux_client_unittest_shlib-dump_context.$(OBJEXT) \
|
||||
@LINUX_HOST_TRUE@ src/processor/src_client_linux_linux_client_unittest_shlib-dump_object.$(OBJEXT) \
|
||||
@LINUX_HOST_TRUE@ src/processor/src_client_linux_linux_client_unittest_shlib-logging.$(OBJEXT) \
|
||||
|
@ -906,7 +911,7 @@ am__src_processor_exploitability_unittest_SOURCES_DIST = \
|
|||
@DISABLE_PROCESSOR_FALSE@am_src_processor_exploitability_unittest_OBJECTS = src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT)
|
||||
src_processor_exploitability_unittest_OBJECTS = \
|
||||
$(am_src_processor_exploitability_unittest_OBJECTS)
|
||||
@DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_DEPENDENCIES = \
|
||||
@DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_DEPENDENCIES = src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
|
||||
|
@ -979,6 +984,7 @@ src_processor_microdump_processor_unittest_OBJECTS = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
|
@ -1014,6 +1020,7 @@ src_processor_microdump_stackwalk_OBJECTS = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
|
@ -1047,6 +1054,7 @@ src_processor_minidump_dump_OBJECTS = \
|
|||
$(am_src_processor_minidump_dump_OBJECTS)
|
||||
@DISABLE_PROCESSOR_FALSE@src_processor_minidump_dump_DEPENDENCIES = \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
|
||||
|
@ -1063,6 +1071,7 @@ src_processor_minidump_processor_unittest_OBJECTS = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
|
@ -1105,6 +1114,7 @@ src_processor_minidump_stackwalk_OBJECTS = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
|
@ -1146,6 +1156,7 @@ src_processor_minidump_unittest_OBJECTS = \
|
|||
$(am_src_processor_minidump_unittest_OBJECTS)
|
||||
@DISABLE_PROCESSOR_FALSE@src_processor_minidump_unittest_DEPENDENCIES = \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
|
||||
|
@ -2031,6 +2042,7 @@ pdfdir = @pdfdir@
|
|||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
|
@ -2179,6 +2191,8 @@ CLEANFILES = $(am__append_12)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/contained_range_map-inl.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/contained_range_map.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.cc \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.cc \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.cc \
|
||||
|
@ -2330,6 +2344,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@LINUX_HOST_TRUE@ src/common/tests/file_utils.cc \
|
||||
@LINUX_HOST_TRUE@ src/common/tests/file_utils.h \
|
||||
@LINUX_HOST_TRUE@ src/processor/basic_code_modules.cc \
|
||||
@LINUX_HOST_TRUE@ src/processor/convert_old_arm64_context.cc \
|
||||
@LINUX_HOST_TRUE@ src/processor/dump_context.cc \
|
||||
@LINUX_HOST_TRUE@ src/processor/dump_object.cc \
|
||||
@LINUX_HOST_TRUE@ src/processor/logging.cc \
|
||||
|
@ -2654,6 +2669,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ $(AM_CPPFLAGS) $(TEST_CFLAGS)
|
||||
|
||||
@DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_LDADD = \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
|
||||
|
@ -2743,6 +2759,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
|
@ -2779,6 +2796,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
|
@ -2820,6 +2838,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
|
||||
@DISABLE_PROCESSOR_FALSE@src_processor_minidump_unittest_LDADD = \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
|
||||
|
@ -3073,6 +3092,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
|
||||
@DISABLE_PROCESSOR_FALSE@src_processor_minidump_dump_LDADD = \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \
|
||||
|
@ -3088,6 +3108,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
|
@ -3124,6 +3145,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/convert_old_arm64_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_context.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/dump_object.o \
|
||||
|
@ -3665,6 +3687,9 @@ src/processor/call_stack.$(OBJEXT): src/processor/$(am__dirstamp) \
|
|||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/cfi_frame_info.$(OBJEXT): src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/convert_old_arm64_context.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/disassembler_x86.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
|
@ -3966,6 +3991,9 @@ src/common/tests/src_client_linux_linux_client_unittest_shlib-file_utils.$(OBJEX
|
|||
src/processor/src_client_linux_linux_client_unittest_shlib-basic_code_modules.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/src_client_linux_linux_client_unittest_shlib-dump_context.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
|
@ -4921,6 +4949,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/call_stack.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/cfi_frame_info.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/contained_range_map_unittest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/convert_old_arm64_context.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/disassembler_x86.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/dump_context.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/dump_object.Po@am__quote@
|
||||
|
@ -4947,6 +4976,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/simple_symbol_supplier.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/source_line_resolver_base.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-basic_code_modules.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-dump_context.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-dump_object.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-logging.Po@am__quote@
|
||||
|
@ -5392,6 +5422,20 @@ src/processor/src_client_linux_linux_client_unittest_shlib-basic_code_modules.ob
|
|||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_shlib_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest_shlib-basic_code_modules.obj `if test -f 'src/processor/basic_code_modules.cc'; then $(CYGPATH_W) 'src/processor/basic_code_modules.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/basic_code_modules.cc'; fi`
|
||||
|
||||
src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.o: src/processor/convert_old_arm64_context.cc
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_shlib_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.o -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.Tpo -c -o src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.o `test -f 'src/processor/convert_old_arm64_context.cc' || echo '$(srcdir)/'`src/processor/convert_old_arm64_context.cc
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/processor/convert_old_arm64_context.cc' object='src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_shlib_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.o `test -f 'src/processor/convert_old_arm64_context.cc' || echo '$(srcdir)/'`src/processor/convert_old_arm64_context.cc
|
||||
|
||||
src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.obj: src/processor/convert_old_arm64_context.cc
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_shlib_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.obj -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.Tpo -c -o src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.obj `if test -f 'src/processor/convert_old_arm64_context.cc'; then $(CYGPATH_W) 'src/processor/convert_old_arm64_context.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/convert_old_arm64_context.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/processor/convert_old_arm64_context.cc' object='src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_shlib_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_client_linux_linux_client_unittest_shlib-convert_old_arm64_context.obj `if test -f 'src/processor/convert_old_arm64_context.cc'; then $(CYGPATH_W) 'src/processor/convert_old_arm64_context.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/convert_old_arm64_context.cc'; fi`
|
||||
|
||||
src/processor/src_client_linux_linux_client_unittest_shlib-dump_context.o: src/processor/dump_context.cc
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_shlib_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_client_linux_linux_client_unittest_shlib-dump_context.o -MD -MP -MF src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-dump_context.Tpo -c -o src/processor/src_client_linux_linux_client_unittest_shlib-dump_context.o `test -f 'src/processor/dump_context.cc' || echo '$(srcdir)/'`src/processor/dump_context.cc
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-dump_context.Tpo src/processor/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-dump_context.Po
|
||||
|
@ -8398,7 +8442,7 @@ distdir: $(DISTFILES)
|
|||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
|
@ -8424,7 +8468,7 @@ dist-shar: distdir
|
|||
@echo WARNING: "Support for shar distribution archives is" \
|
||||
"deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
|
@ -8442,7 +8486,7 @@ dist dist-all:
|
|||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lz*) \
|
||||
|
@ -8452,7 +8496,7 @@ distcheck: dist
|
|||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
|
||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
|
|
52
aclocal.m4
vendored
52
aclocal.m4
vendored
|
@ -1,6 +1,6 @@
|
|||
# generated automatically by aclocal 1.15 -*- Autoconf -*-
|
||||
# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
|
|||
If you have problems, you may need to regenerate the build system entirely.
|
||||
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
|
||||
|
||||
# Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2002-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
|
|||
[am__api_version='1.15'
|
||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||
dnl require some minimum version. Point them to the right macro.
|
||||
m4_if([$1], [1.15], [],
|
||||
m4_if([$1], [1.15.1], [],
|
||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||
])
|
||||
|
||||
|
@ -51,12 +51,12 @@ m4_define([_AM_AUTOCONF_VERSION], [])
|
|||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.15])dnl
|
||||
[AM_AUTOMAKE_VERSION([1.15.1])dnl
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||
|
||||
# Copyright (C) 2011-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -118,7 +118,7 @@ AC_SUBST([AR])dnl
|
|||
|
||||
# Figure out how to run the assembler. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -138,7 +138,7 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
|
|||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -190,7 +190,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
|
|||
|
||||
# AM_CONDITIONAL -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -221,7 +221,7 @@ AC_CONFIG_COMMANDS_PRE(
|
|||
Usually this means the macro was only invoked conditionally.]])
|
||||
fi])])
|
||||
|
||||
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -412,7 +412,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
|
|||
|
||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -488,7 +488,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
|||
|
||||
# Do all the work for Automake. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -685,7 +685,7 @@ for _am_header in $config_headers :; do
|
|||
done
|
||||
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
||||
|
||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -706,7 +706,7 @@ if test x"${install_sh+set}" != xset; then
|
|||
fi
|
||||
AC_SUBST([install_sh])])
|
||||
|
||||
# Copyright (C) 2003-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2003-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -728,7 +728,7 @@ AC_SUBST([am__leading_dot])])
|
|||
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
|
||||
# From Jim Meyering
|
||||
|
||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -763,7 +763,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
|
|||
|
||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -813,7 +813,7 @@ rm -f confinc confmf
|
|||
|
||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -854,7 +854,7 @@ fi
|
|||
# Obsolete and "removed" macros, that must however still report explicit
|
||||
# error messages when used, to smooth transition.
|
||||
#
|
||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -881,7 +881,7 @@ AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
|
|||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -910,7 +910,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
|
|||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||
|
||||
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -957,7 +957,7 @@ AC_LANG_POP([C])])
|
|||
# For backward compatibility.
|
||||
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
|
||||
|
||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -976,7 +976,7 @@ AC_DEFUN([AM_RUN_LOG],
|
|||
|
||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -1057,7 +1057,7 @@ AC_CONFIG_COMMANDS_PRE(
|
|||
rm -f conftest.file
|
||||
])
|
||||
|
||||
# Copyright (C) 2009-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -1117,7 +1117,7 @@ AC_SUBST([AM_BACKSLASH])dnl
|
|||
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
|
||||
])
|
||||
|
||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -1145,7 +1145,7 @@ fi
|
|||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||
|
||||
# Copyright (C) 2006-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -1164,7 +1164,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
|||
|
||||
# Check how to create a tarball. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2004-2014 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2004-2017 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
|
|
@ -52,6 +52,9 @@
|
|||
3329D4ED0FA16D820007BBC5 /* Breakpad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3329D4EC0FA16D820007BBC5 /* Breakpad.xib */; };
|
||||
33880C800F9E097100817F82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 33880C7E0F9E097100817F82 /* InfoPlist.strings */; };
|
||||
4084699D0F5D9CF900FDCA37 /* crash_report_sender.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */; };
|
||||
421BC5BC21110C0300B8042E /* convert_old_arm64_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = 421BC5AD21110C0300B8042E /* convert_old_arm64_context.cc */; };
|
||||
421BC5BD21110C0300B8042E /* convert_old_arm64_context.h in Headers */ = {isa = PBXBuildFile; fileRef = 421BC5BB21110C0300B8042E /* convert_old_arm64_context.h */; };
|
||||
421BC5BE21110C1000B8042E /* convert_old_arm64_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = 421BC5AD21110C0300B8042E /* convert_old_arm64_context.cc */; };
|
||||
4247E6412110D7A300482558 /* memory_allocator_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = D244540A12439BA0009BBCE0 /* memory_allocator_unittest.cc */; };
|
||||
4D61A25F14F43CFC002D5862 /* bootstrap_compat.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D61A25D14F43CFC002D5862 /* bootstrap_compat.cc */; };
|
||||
4D61A26B14F43D3C002D5862 /* bootstrap_compat.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D61A25D14F43CFC002D5862 /* bootstrap_compat.cc */; };
|
||||
|
@ -577,6 +580,8 @@
|
|||
3329D4EC0FA16D820007BBC5 /* Breakpad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Breakpad.xib; path = sender/Breakpad.xib; sourceTree = "<group>"; };
|
||||
33880C7F0F9E097100817F82 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = sender/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = crash_report_sender.icns; path = sender/crash_report_sender.icns; sourceTree = "<group>"; };
|
||||
421BC5AD21110C0300B8042E /* convert_old_arm64_context.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = convert_old_arm64_context.cc; path = ../../processor/convert_old_arm64_context.cc; sourceTree = "<group>"; };
|
||||
421BC5BB21110C0300B8042E /* convert_old_arm64_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = convert_old_arm64_context.h; path = ../../processor/convert_old_arm64_context.h; sourceTree = "<group>"; };
|
||||
4D61A25D14F43CFC002D5862 /* bootstrap_compat.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bootstrap_compat.cc; path = ../../common/mac/bootstrap_compat.cc; sourceTree = SOURCE_ROOT; };
|
||||
4D61A25E14F43CFC002D5862 /* bootstrap_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bootstrap_compat.h; path = ../../common/mac/bootstrap_compat.h; sourceTree = SOURCE_ROOT; };
|
||||
4D72CA0D13DFAD5C006CABE3 /* md5.cc */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = md5.cc; path = ../../common/md5.cc; sourceTree = SOURCE_ROOT; };
|
||||
|
@ -896,6 +901,8 @@
|
|||
D244536912426EE7009BBCE0 /* processor */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
421BC5AD21110C0300B8042E /* convert_old_arm64_context.cc */,
|
||||
421BC5BB21110C0300B8042E /* convert_old_arm64_context.h */,
|
||||
D244535112426EBB009BBCE0 /* logging.cc */,
|
||||
D244535212426EBB009BBCE0 /* minidump.cc */,
|
||||
D244535312426EBB009BBCE0 /* pathname_stripper.cc */,
|
||||
|
@ -1154,6 +1161,7 @@
|
|||
D2F9A4CC121336C7002747C1 /* crash_generation_server.h in Headers */,
|
||||
163201D61443019E00C4DBF5 /* ConfigFile.h in Headers */,
|
||||
16C7C918147D45AE00776EAD /* BreakpadDefines.h in Headers */,
|
||||
421BC5BD21110C0300B8042E /* convert_old_arm64_context.h in Headers */,
|
||||
162F64F3161C577500CD68D5 /* arch_utilities.h in Headers */,
|
||||
F4DAB1DE19F1027100A5A838 /* launch_reporter.h in Headers */,
|
||||
1EEEB6241720829E00F7E689 /* simple_string_dictionary.h in Headers */,
|
||||
|
@ -1686,6 +1694,7 @@
|
|||
163201D71443019E00C4DBF5 /* ConfigFile.mm in Sources */,
|
||||
162F64F2161C577500CD68D5 /* arch_utilities.cc in Sources */,
|
||||
1EEEB6231720829E00F7E689 /* simple_string_dictionary.cc in Sources */,
|
||||
421BC5BC21110C0300B8042E /* convert_old_arm64_context.cc in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -1844,6 +1853,7 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
421BC5BE21110C1000B8042E /* convert_old_arm64_context.cc in Sources */,
|
||||
4247E6412110D7A300482558 /* memory_allocator_unittest.cc in Sources */,
|
||||
D244536A12426F00009BBCE0 /* logging.cc in Sources */,
|
||||
D244536B12426F00009BBCE0 /* minidump.cc in Sources */,
|
||||
|
|
|
@ -66,7 +66,61 @@
|
|||
#ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_ARM64_H__
|
||||
#define GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_ARM64_H__
|
||||
|
||||
#include "google_breakpad/common/breakpad_types.h"
|
||||
|
||||
#define MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT 32
|
||||
#define MD_CONTEXT_ARM64_GPR_COUNT 33
|
||||
|
||||
typedef struct {
|
||||
/* 32 128-bit floating point registers, d0 .. d31. */
|
||||
uint128_struct regs[MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT];
|
||||
|
||||
uint32_t fpcr; /* FPU control register */
|
||||
uint32_t fpsr; /* FPU status register */
|
||||
} MDFloatingSaveAreaARM64;
|
||||
|
||||
/* For (MDRawContextARM64).context_flags. These values indicate the type of
|
||||
* context stored in the structure. */
|
||||
#define MD_CONTEXT_ARM64 0x00400000
|
||||
#define MD_CONTEXT_ARM64_CONTROL (MD_CONTEXT_ARM64 | 0x00000001)
|
||||
#define MD_CONTEXT_ARM64_INTEGER (MD_CONTEXT_ARM64 | 0x00000002)
|
||||
#define MD_CONTEXT_ARM64_FLOATING_POINT (MD_CONTEXT_ARM64 | 0x00000004)
|
||||
#define MD_CONTEXT_ARM64_DEBUG (MD_CONTEXT_ARM64 | 0x00000008)
|
||||
#define MD_CONTEXT_ARM64_FULL (MD_CONTEXT_ARM64_CONTROL | \
|
||||
MD_CONTEXT_ARM64_INTEGER | \
|
||||
MD_CONTEXT_ARM64_FLOATING_POINT)
|
||||
#define MD_CONTEXT_ARM64_ALL (MD_CONTEXT_ARM64_FULL | MD_CONTEXT_ARM64_DEBUG)
|
||||
|
||||
typedef struct {
|
||||
/* Determines which fields of this struct are populated */
|
||||
uint32_t context_flags;
|
||||
|
||||
/* CPSR (flags, basically): 32 bits:
|
||||
bit 31 - N (negative)
|
||||
bit 30 - Z (zero)
|
||||
bit 29 - C (carry)
|
||||
bit 28 - V (overflow)
|
||||
bit 27 - Q (saturation flag, sticky)
|
||||
All other fields -- ignore */
|
||||
uint32_t cpsr;
|
||||
|
||||
/* 33 64-bit integer registers, x0 .. x31 + the PC
|
||||
* Note the following fixed uses:
|
||||
* x29 is the frame pointer
|
||||
* x30 is the link register
|
||||
* x31 is the stack pointer
|
||||
* The PC is effectively x32.
|
||||
*/
|
||||
uint64_t iregs[MD_CONTEXT_ARM64_GPR_COUNT];
|
||||
|
||||
/* The next field is included with MD_CONTEXT64_ARM_FLOATING_POINT */
|
||||
MDFloatingSaveAreaARM64 float_save;
|
||||
|
||||
uint32_t bcr[8];
|
||||
uint64_t bvr[8];
|
||||
uint32_t wcr[2];
|
||||
uint64_t wvr[2];
|
||||
} MDRawContextARM64;
|
||||
|
||||
typedef struct {
|
||||
uint32_t fpsr; /* FPU status register */
|
||||
|
@ -76,8 +130,6 @@ typedef struct {
|
|||
uint128_struct regs[MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT];
|
||||
} MDFloatingSaveAreaARM64_Old;
|
||||
|
||||
#define MD_CONTEXT_ARM64_GPR_COUNT 33
|
||||
|
||||
/* Use the same 32-bit alignment when accessing this structure from 64-bit code
|
||||
* as is used natively in 32-bit code. */
|
||||
#pragma pack(push, 4)
|
||||
|
|
|
@ -654,6 +654,7 @@ typedef enum {
|
|||
MD_CPU_ARCHITECTURE_AMD64 = 9, /* PROCESSOR_ARCHITECTURE_AMD64 */
|
||||
MD_CPU_ARCHITECTURE_X86_WIN64 = 10,
|
||||
/* PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 (WoW64) */
|
||||
MD_CPU_ARCHITECTURE_ARM64 = 12, /* PROCESSOR_ARCHITECTURE_ARM64 */
|
||||
MD_CPU_ARCHITECTURE_SPARC = 0x8001, /* Breakpad-defined value for SPARC */
|
||||
MD_CPU_ARCHITECTURE_PPC64 = 0x8002, /* Breakpad-defined value for PPC64 */
|
||||
MD_CPU_ARCHITECTURE_ARM64_OLD = 0x8003, /* Breakpad-defined value for ARM64 */
|
||||
|
|
|
@ -56,7 +56,7 @@ class DumpContext : public DumpObject {
|
|||
// context data does not match the CPU type or does not exist, returns NULL.
|
||||
const MDRawContextAMD64* GetContextAMD64() const;
|
||||
const MDRawContextARM* GetContextARM() const;
|
||||
const MDRawContextARM64_Old* GetContextARM64() const;
|
||||
const MDRawContextARM64* GetContextARM64() const;
|
||||
const MDRawContextMIPS* GetContextMIPS() const;
|
||||
const MDRawContextPPC* GetContextPPC() const;
|
||||
const MDRawContextPPC64* GetContextPPC64() const;
|
||||
|
@ -85,7 +85,7 @@ class DumpContext : public DumpObject {
|
|||
void SetContextAMD64(MDRawContextAMD64* amd64);
|
||||
void SetContextSPARC(MDRawContextSPARC* ctx_sparc);
|
||||
void SetContextARM(MDRawContextARM* arm);
|
||||
void SetContextARM64(MDRawContextARM64_Old* arm64);
|
||||
void SetContextARM64(MDRawContextARM64* arm64);
|
||||
void SetContextMIPS(MDRawContextMIPS* ctx_mips);
|
||||
|
||||
// Free the CPU-specific context structure.
|
||||
|
@ -103,7 +103,7 @@ class DumpContext : public DumpObject {
|
|||
// so variables can NOT be named as sparc
|
||||
MDRawContextSPARC* ctx_sparc;
|
||||
MDRawContextARM* arm;
|
||||
MDRawContextARM64_Old* arm64_old;
|
||||
MDRawContextARM64* arm64;
|
||||
MDRawContextMIPS* ctx_mips;
|
||||
} context_;
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ class MicrodumpModules : public BasicCodeModules {
|
|||
class MicrodumpContext : public DumpContext {
|
||||
public:
|
||||
virtual void SetContextARM(MDRawContextARM* arm);
|
||||
virtual void SetContextARM64(MDRawContextARM64_Old* arm64);
|
||||
virtual void SetContextARM64(MDRawContextARM64* arm64);
|
||||
virtual void SetContextX86(MDRawContextX86* x86);
|
||||
virtual void SetContextMIPS(MDRawContextMIPS* mips32);
|
||||
virtual void SetContextMIPS64(MDRawContextMIPS* mips64);
|
||||
|
|
|
@ -1260,6 +1260,8 @@ class Minidump {
|
|||
|
||||
bool swap() const { return valid_ ? swap_ : false; }
|
||||
|
||||
bool is_big_endian() const { return valid_ ? is_big_endian_ : false; }
|
||||
|
||||
// Print a human-readable representation of the object to stdout.
|
||||
void Print();
|
||||
|
||||
|
@ -1325,6 +1327,9 @@ class Minidump {
|
|||
// same-endian, this will be false.
|
||||
bool swap_;
|
||||
|
||||
// true if the minidump was produced by a big-endian cpu.
|
||||
bool is_big_endian_;
|
||||
|
||||
// Validity of the Minidump structure, false immediately after
|
||||
// construction or after a failed Read(); true following a successful
|
||||
// Read().
|
||||
|
|
|
@ -327,7 +327,7 @@ struct StackFrameARM64 : public StackFrame {
|
|||
// stack. In other frames, the values of nonvolatile registers may be
|
||||
// present, given sufficient debugging information. Refer to
|
||||
// context_validity.
|
||||
MDRawContextARM64_Old context;
|
||||
MDRawContextARM64 context;
|
||||
|
||||
// For each register in context whose value has been recovered, we set
|
||||
// the corresponding CONTEXT_VALID_ bit in context_validity.
|
||||
|
|
67
src/processor/convert_old_arm64_context.cc
Normal file
67
src/processor/convert_old_arm64_context.cc
Normal file
|
@ -0,0 +1,67 @@
|
|||
// Copyright (c) 2018, 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.
|
||||
|
||||
#include "processor/convert_old_arm64_context.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
namespace google_breakpad {
|
||||
|
||||
void ConvertOldARM64Context(const MDRawContextARM64_Old& old,
|
||||
MDRawContextARM64* context) {
|
||||
context->context_flags = MD_CONTEXT_ARM64;
|
||||
if (old.context_flags & MD_CONTEXT_ARM64_INTEGER_OLD) {
|
||||
context->context_flags |=
|
||||
MD_CONTEXT_ARM64_INTEGER | MD_CONTEXT_ARM64_CONTROL;
|
||||
}
|
||||
if (old.context_flags & MD_CONTEXT_ARM64_FLOATING_POINT_OLD) {
|
||||
context->context_flags |= MD_CONTEXT_ARM64_FLOATING_POINT;
|
||||
}
|
||||
|
||||
context->cpsr = old.cpsr;
|
||||
|
||||
static_assert(sizeof(old.iregs) == sizeof(context->iregs),
|
||||
"iregs size mismatch");
|
||||
memcpy(context->iregs, old.iregs, sizeof(context->iregs));
|
||||
|
||||
static_assert(sizeof(old.float_save.regs) == sizeof(context->float_save.regs),
|
||||
"float_save.regs size mismatch");
|
||||
memcpy(context->float_save.regs,
|
||||
old.float_save.regs,
|
||||
sizeof(context->float_save.regs));
|
||||
context->float_save.fpcr = old.float_save.fpcr;
|
||||
context->float_save.fpsr = old.float_save.fpsr;
|
||||
|
||||
memset(context->bcr, 0, sizeof(context->bcr));
|
||||
memset(context->bvr, 0, sizeof(context->bvr));
|
||||
memset(context->wcr, 0, sizeof(context->wcr));
|
||||
memset(context->wvr, 0, sizeof(context->wvr));
|
||||
}
|
||||
|
||||
} // namespace google_breakpad
|
42
src/processor/convert_old_arm64_context.h
Normal file
42
src/processor/convert_old_arm64_context.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
// Copyright (c) 2018, 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.
|
||||
|
||||
#ifndef PROCESSOR_CONVERT_OLD_ARM64_CONTEXT_H__
|
||||
#define PROCESSOR_CONVERT_OLD_ARM64_CONTEXT_H__
|
||||
|
||||
#include "google_breakpad/common/minidump_cpu_arm64.h"
|
||||
|
||||
namespace google_breakpad {
|
||||
|
||||
void ConvertOldARM64Context(const MDRawContextARM64_Old& old,
|
||||
MDRawContextARM64* context);
|
||||
|
||||
} // namespace google_breakpad
|
||||
|
||||
#endif // PROCESSOR_CONVERT_OLD_ARM64_CONTEXT_H__
|
|
@ -121,13 +121,13 @@ const MDRawContextARM* DumpContext::GetContextARM() const {
|
|||
return context_.arm;
|
||||
}
|
||||
|
||||
const MDRawContextARM64_Old* DumpContext::GetContextARM64() const {
|
||||
if (GetContextCPU() != MD_CONTEXT_ARM64_OLD) {
|
||||
const MDRawContextARM64* DumpContext::GetContextARM64() const {
|
||||
if (GetContextCPU() != MD_CONTEXT_ARM64) {
|
||||
BPLOG(ERROR) << "DumpContext cannot get arm64 context";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return context_.arm64_old;
|
||||
return context_.arm64;
|
||||
}
|
||||
|
||||
const MDRawContextMIPS* DumpContext::GetContextMIPS() const {
|
||||
|
@ -157,7 +157,7 @@ bool DumpContext::GetInstructionPointer(uint64_t* ip) const {
|
|||
case MD_CONTEXT_ARM:
|
||||
*ip = GetContextARM()->iregs[MD_CONTEXT_ARM_REG_PC];
|
||||
break;
|
||||
case MD_CONTEXT_ARM64_OLD:
|
||||
case MD_CONTEXT_ARM64:
|
||||
*ip = GetContextARM64()->iregs[MD_CONTEXT_ARM64_REG_PC];
|
||||
break;
|
||||
case MD_CONTEXT_PPC:
|
||||
|
@ -201,7 +201,7 @@ bool DumpContext::GetStackPointer(uint64_t* sp) const {
|
|||
case MD_CONTEXT_ARM:
|
||||
*sp = GetContextARM()->iregs[MD_CONTEXT_ARM_REG_SP];
|
||||
break;
|
||||
case MD_CONTEXT_ARM64_OLD:
|
||||
case MD_CONTEXT_ARM64:
|
||||
*sp = GetContextARM64()->iregs[MD_CONTEXT_ARM64_REG_SP];
|
||||
break;
|
||||
case MD_CONTEXT_PPC:
|
||||
|
@ -256,8 +256,8 @@ void DumpContext::SetContextARM(MDRawContextARM* arm) {
|
|||
context_.arm = arm;
|
||||
}
|
||||
|
||||
void DumpContext::SetContextARM64(MDRawContextARM64_Old* arm64) {
|
||||
context_.arm64_old = arm64;
|
||||
void DumpContext::SetContextARM64(MDRawContextARM64* arm64) {
|
||||
context_.arm64 = arm64;
|
||||
}
|
||||
|
||||
void DumpContext::SetContextMIPS(MDRawContextMIPS* ctx_mips) {
|
||||
|
@ -290,10 +290,6 @@ void DumpContext::FreeContext() {
|
|||
delete context_.arm;
|
||||
break;
|
||||
|
||||
case MD_CONTEXT_ARM64_OLD:
|
||||
delete context_.arm64_old;
|
||||
break;
|
||||
|
||||
case MD_CONTEXT_MIPS:
|
||||
case MD_CONTEXT_MIPS64:
|
||||
delete context_.ctx_mips;
|
||||
|
@ -581,10 +577,10 @@ void DumpContext::Print() {
|
|||
break;
|
||||
}
|
||||
|
||||
case MD_CONTEXT_ARM64_OLD: {
|
||||
const MDRawContextARM64_Old* context_arm64 = GetContextARM64();
|
||||
case MD_CONTEXT_ARM64: {
|
||||
const MDRawContextARM64* context_arm64 = GetContextARM64();
|
||||
printf("MDRawContextARM64\n");
|
||||
printf(" context_flags = 0x%" PRIx64 "\n",
|
||||
printf(" context_flags = 0x%x\n",
|
||||
context_arm64->context_flags);
|
||||
for (unsigned int ireg_index = 0;
|
||||
ireg_index < MD_CONTEXT_ARM64_GPR_COUNT;
|
||||
|
@ -603,6 +599,7 @@ void DumpContext::Print() {
|
|||
printf(" float_save.regs[%2d] = 0x%" PRIx64 "%" PRIx64 "\n",
|
||||
freg_index, fp_value.high, fp_value.low);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "google_breakpad/common/minidump_cpu_arm.h"
|
||||
#include "google_breakpad/processor/code_module.h"
|
||||
#include "processor/basic_code_module.h"
|
||||
#include "processor/convert_old_arm64_context.h"
|
||||
#include "processor/linked_ptr.h"
|
||||
#include "processor/logging.h"
|
||||
#include "processor/range_map-inl.h"
|
||||
|
@ -125,8 +126,8 @@ void MicrodumpContext::SetContextARM(MDRawContextARM* arm) {
|
|||
valid_ = true;
|
||||
}
|
||||
|
||||
void MicrodumpContext::SetContextARM64(MDRawContextARM64_Old* arm64) {
|
||||
DumpContext::SetContextFlags(MD_CONTEXT_ARM64_OLD);
|
||||
void MicrodumpContext::SetContextARM64(MDRawContextARM64* arm64) {
|
||||
DumpContext::SetContextFlags(MD_CONTEXT_ARM64);
|
||||
DumpContext::SetContextARM64(arm64);
|
||||
valid_ = true;
|
||||
}
|
||||
|
@ -311,15 +312,22 @@ Microdump::Microdump(const string& contents)
|
|||
memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size());
|
||||
context_->SetContextARM(arm);
|
||||
} else if (strcmp(arch.c_str(), kArm64Architecture) == 0) {
|
||||
if (cpu_state_raw.size() != sizeof(MDRawContextARM64_Old)) {
|
||||
if (cpu_state_raw.size() == sizeof(MDRawContextARM64)) {
|
||||
MDRawContextARM64* arm = new MDRawContextARM64();
|
||||
memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size());
|
||||
context_->SetContextARM64(arm);
|
||||
} else if (cpu_state_raw.size() == sizeof(MDRawContextARM64_Old)) {
|
||||
MDRawContextARM64_Old old_arm;
|
||||
memcpy(&old_arm, &cpu_state_raw[0], cpu_state_raw.size());
|
||||
MDRawContextARM64* new_arm = new MDRawContextARM64();
|
||||
ConvertOldARM64Context(old_arm, new_arm);
|
||||
context_->SetContextARM64(new_arm);
|
||||
} else {
|
||||
std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
|
||||
<< " bytes instead of " << sizeof(MDRawContextARM64_Old)
|
||||
<< " bytes instead of " << sizeof(MDRawContextARM64)
|
||||
<< std::endl;
|
||||
continue;
|
||||
}
|
||||
MDRawContextARM64_Old* arm = new MDRawContextARM64_Old();
|
||||
memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size());
|
||||
context_->SetContextARM64(arm);
|
||||
} else if (strcmp(arch.c_str(), kX86Architecture) == 0) {
|
||||
if (cpu_state_raw.size() != sizeof(MDRawContextX86)) {
|
||||
std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
#include "google_breakpad/processor/dump_context.h"
|
||||
#include "processor/basic_code_module.h"
|
||||
#include "processor/basic_code_modules.h"
|
||||
#include "processor/convert_old_arm64_context.h"
|
||||
#include "processor/logging.h"
|
||||
|
||||
// All intentional fallthroughs in breakpad are in this file, so define
|
||||
|
@ -104,6 +105,8 @@ bool IsContextSizeUnique(uint32_t context_size) {
|
|||
num_matching_contexts++;
|
||||
if (context_size == sizeof(MDRawContextARM))
|
||||
num_matching_contexts++;
|
||||
if (context_size == sizeof(MDRawContextARM64))
|
||||
num_matching_contexts++;
|
||||
if (context_size == sizeof(MDRawContextARM64_Old))
|
||||
num_matching_contexts++;
|
||||
if (context_size == sizeof(MDRawContextMIPS))
|
||||
|
@ -745,10 +748,8 @@ bool MinidumpContext::Read(uint32_t expected_size) {
|
|||
for (unsigned int fpr_index = 0;
|
||||
fpr_index < MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT;
|
||||
++fpr_index) {
|
||||
// While ARM64 is bi-endian, iOS (currently the only platform
|
||||
// for which ARM64 support has been brought up) uses ARM64 exclusively
|
||||
// in little-endian mode.
|
||||
Normalize128(&context_arm64->float_save.regs[fpr_index], false);
|
||||
Normalize128(&context_arm64->float_save.regs[fpr_index],
|
||||
minidump_->is_big_endian());
|
||||
Swap(&context_arm64->float_save.regs[fpr_index]);
|
||||
}
|
||||
}
|
||||
|
@ -762,7 +763,9 @@ bool MinidumpContext::Read(uint32_t expected_size) {
|
|||
return false;
|
||||
}
|
||||
|
||||
SetContextARM64(context_arm64.release());
|
||||
scoped_ptr<MDRawContextARM64> new_context(new MDRawContextARM64());
|
||||
ConvertOldARM64Context(*context_arm64.get(), new_context.get());
|
||||
SetContextARM64(new_context.release());
|
||||
} else {
|
||||
uint32_t context_flags;
|
||||
if (!minidump_->ReadBytes(&context_flags, sizeof(context_flags))) {
|
||||
|
@ -1059,6 +1062,58 @@ bool MinidumpContext::Read(uint32_t expected_size) {
|
|||
break;
|
||||
}
|
||||
|
||||
case MD_CONTEXT_ARM64: {
|
||||
if (expected_size != sizeof(MDRawContextARM64)) {
|
||||
BPLOG(ERROR) << "MinidumpContext arm64 size mismatch, " <<
|
||||
expected_size << " != " << sizeof(MDRawContextARM64);
|
||||
return false;
|
||||
}
|
||||
|
||||
scoped_ptr<MDRawContextARM64> context_arm64(new MDRawContextARM64());
|
||||
|
||||
// Set the context_flags member, which has already been read, and
|
||||
// read the rest of the structure beginning with the first member
|
||||
// after context_flags.
|
||||
context_arm64->context_flags = context_flags;
|
||||
|
||||
size_t flags_size = sizeof(context_arm64->context_flags);
|
||||
uint8_t* context_after_flags =
|
||||
reinterpret_cast<uint8_t*>(context_arm64.get()) + flags_size;
|
||||
if (!minidump_->ReadBytes(context_after_flags,
|
||||
sizeof(*context_arm64) - flags_size)) {
|
||||
BPLOG(ERROR) << "MinidumpContext could not read arm64 context";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do this after reading the entire MDRawContext structure because
|
||||
// GetSystemInfo may seek minidump to a new position.
|
||||
if (!CheckAgainstSystemInfo(cpu_type)) {
|
||||
BPLOG(ERROR) << "MinidumpContext arm does not match system info";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (minidump_->swap()) {
|
||||
// context_arm64->context_flags was already swapped.
|
||||
for (unsigned int ireg_index = 0;
|
||||
ireg_index < MD_CONTEXT_ARM64_GPR_COUNT;
|
||||
++ireg_index) {
|
||||
Swap(&context_arm64->iregs[ireg_index]);
|
||||
}
|
||||
Swap(&context_arm64->cpsr);
|
||||
Swap(&context_arm64->float_save.fpsr);
|
||||
Swap(&context_arm64->float_save.fpcr);
|
||||
for (unsigned int fpr_index = 0;
|
||||
fpr_index < MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT;
|
||||
++fpr_index) {
|
||||
Normalize128(&context_arm64->float_save.regs[fpr_index],
|
||||
minidump_->is_big_endian());
|
||||
Swap(&context_arm64->float_save.regs[fpr_index]);
|
||||
}
|
||||
}
|
||||
SetContextARM64(context_arm64.release());
|
||||
break;
|
||||
}
|
||||
|
||||
case MD_CONTEXT_MIPS:
|
||||
case MD_CONTEXT_MIPS64: {
|
||||
if (expected_size != sizeof(MDRawContextMIPS)) {
|
||||
|
@ -1199,6 +1254,11 @@ bool MinidumpContext::CheckAgainstSystemInfo(uint32_t context_cpu_type) {
|
|||
return_value = true;
|
||||
break;
|
||||
|
||||
case MD_CONTEXT_ARM64:
|
||||
if (system_info_cpu_type == MD_CPU_ARCHITECTURE_ARM64)
|
||||
return_value = true;
|
||||
break;
|
||||
|
||||
case MD_CONTEXT_ARM64_OLD:
|
||||
if (system_info_cpu_type == MD_CPU_ARCHITECTURE_ARM64_OLD)
|
||||
return_value = true;
|
||||
|
@ -3487,6 +3547,7 @@ string MinidumpSystemInfo::GetCPU() {
|
|||
cpu = "arm";
|
||||
break;
|
||||
|
||||
case MD_CPU_ARCHITECTURE_ARM64:
|
||||
case MD_CPU_ARCHITECTURE_ARM64_OLD:
|
||||
cpu = "arm64";
|
||||
break;
|
||||
|
@ -4994,6 +5055,7 @@ Minidump::Minidump(const string& path, bool hexdump, unsigned int hexdump_width)
|
|||
path_(path),
|
||||
stream_(NULL),
|
||||
swap_(false),
|
||||
is_big_endian_(false),
|
||||
valid_(false),
|
||||
hexdump_(hexdump),
|
||||
hexdump_width_(hexdump_width) {
|
||||
|
@ -5006,6 +5068,7 @@ Minidump::Minidump(istream& stream)
|
|||
path_(),
|
||||
stream_(&stream),
|
||||
swap_(false),
|
||||
is_big_endian_(false),
|
||||
valid_(false),
|
||||
hexdump_(false),
|
||||
hexdump_width_(0) {
|
||||
|
@ -5086,6 +5149,9 @@ bool Minidump::GetContextCPUFlagsFromSystemInfo(uint32_t *context_cpu_flags) {
|
|||
case MD_CPU_ARCHITECTURE_ARM:
|
||||
*context_cpu_flags = MD_CONTEXT_ARM;
|
||||
break;
|
||||
case MD_CPU_ARCHITECTURE_ARM64:
|
||||
*context_cpu_flags = MD_CONTEXT_ARM64;
|
||||
break;
|
||||
case MD_CPU_ARCHITECTURE_ARM64_OLD:
|
||||
*context_cpu_flags = MD_CONTEXT_ARM64_OLD;
|
||||
break;
|
||||
|
@ -5161,6 +5227,13 @@ bool Minidump::Read() {
|
|||
swap_ = false;
|
||||
}
|
||||
|
||||
#if defined(__BIG_ENDIAN__) || \
|
||||
(defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||
is_big_endian_ = !swap_;
|
||||
#else
|
||||
is_big_endian_ = swap_;
|
||||
#endif
|
||||
|
||||
BPLOG(INFO) << "Minidump " << (swap_ ? "" : "not ") <<
|
||||
"byte-swapping minidump";
|
||||
|
||||
|
|
|
@ -49,6 +49,8 @@
|
|||
'cfi_frame_info.h',
|
||||
'contained_range_map-inl.h',
|
||||
'contained_range_map.h',
|
||||
'convert_old_arm64_context.cc',
|
||||
'convert_old_arm64_context.h',
|
||||
'disassembler_x86.cc',
|
||||
'disassembler_x86.h',
|
||||
'dump_context.cc',
|
||||
|
|
|
@ -259,7 +259,7 @@ Stackwalker* Stackwalker::StackwalkerForCPU(
|
|||
break;
|
||||
}
|
||||
|
||||
case MD_CONTEXT_ARM64_OLD:
|
||||
case MD_CONTEXT_ARM64:
|
||||
cpu_stackwalker = new StackwalkerARM64(system_info,
|
||||
context->GetContextARM64(),
|
||||
memory, modules,
|
||||
|
|
|
@ -48,7 +48,7 @@ namespace google_breakpad {
|
|||
|
||||
|
||||
StackwalkerARM64::StackwalkerARM64(const SystemInfo* system_info,
|
||||
const MDRawContextARM64_Old* context,
|
||||
const MDRawContextARM64* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* resolver_helper)
|
||||
|
|
|
@ -55,7 +55,7 @@ class StackwalkerARM64 : public Stackwalker {
|
|||
// included in the stack. The other arguments are passed directly through
|
||||
// to the base Stackwalker constructor.
|
||||
StackwalkerARM64(const SystemInfo* system_info,
|
||||
const MDRawContextARM64_Old* context,
|
||||
const MDRawContextARM64* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer);
|
||||
|
@ -89,7 +89,7 @@ class StackwalkerARM64 : public Stackwalker {
|
|||
|
||||
// Stores the CPU context corresponding to the youngest stack frame, to
|
||||
// be returned by GetContextFrame.
|
||||
const MDRawContextARM64_Old* context_;
|
||||
const MDRawContextARM64* context_;
|
||||
|
||||
// Validity mask for youngest stack frame. This is always
|
||||
// CONTEXT_VALID_ALL in real use; it is only changeable for the sake of
|
||||
|
|
|
@ -122,14 +122,14 @@ class StackwalkerARM64Fixture {
|
|||
}
|
||||
|
||||
// Fill RAW_CONTEXT with pseudo-random data, for round-trip checking.
|
||||
void BrandContext(MDRawContextARM64_Old *raw_context) {
|
||||
void BrandContext(MDRawContextARM64 *raw_context) {
|
||||
uint8_t x = 173;
|
||||
for (size_t i = 0; i < sizeof(*raw_context); i++)
|
||||
reinterpret_cast<uint8_t *>(raw_context)[i] = (x += 17);
|
||||
}
|
||||
|
||||
SystemInfo system_info;
|
||||
MDRawContextARM64_Old raw_context;
|
||||
MDRawContextARM64 raw_context;
|
||||
Section stack_section;
|
||||
MockMemoryRegion stack_region;
|
||||
MockCodeModule module1;
|
||||
|
@ -688,7 +688,7 @@ struct CFIFixture: public StackwalkerARM64Fixture {
|
|||
}
|
||||
|
||||
// The values we expect to find for the caller's registers.
|
||||
MDRawContextARM64_Old expected;
|
||||
MDRawContextARM64 expected;
|
||||
|
||||
// The validity mask for expected.
|
||||
uint64_t expected_validity;
|
||||
|
|
|
@ -480,17 +480,28 @@ ParseThreadRegisters(CrashedProcess::Thread* thread,
|
|||
static void
|
||||
ParseThreadRegisters(CrashedProcess::Thread* thread,
|
||||
const MinidumpMemoryRange& range) {
|
||||
const MDRawContextARM64_Old* rawregs = range.GetData<MDRawContextARM64_Old>(0);
|
||||
#define COPY_REGS(rawregs) \
|
||||
do { \
|
||||
for (int i = 0; i < 31; ++i) \
|
||||
thread->regs.regs[i] = rawregs->iregs[i]; \
|
||||
thread->regs.sp = rawregs->iregs[MD_CONTEXT_ARM64_REG_SP]; \
|
||||
thread->regs.pc = rawregs->iregs[MD_CONTEXT_ARM64_REG_PC]; \
|
||||
thread->regs.pstate = rawregs->cpsr; \
|
||||
\
|
||||
memcpy(thread->fpregs.vregs, rawregs->float_save.regs, 8 * 32); \
|
||||
thread->fpregs.fpsr = rawregs->float_save.fpsr; \
|
||||
thread->fpregs.fpcr = rawregs->float_save.fpcr; \
|
||||
} while (false)
|
||||
|
||||
for (int i = 0; i < 31; ++i)
|
||||
thread->regs.regs[i] = rawregs->iregs[i];
|
||||
thread->regs.sp = rawregs->iregs[MD_CONTEXT_ARM64_REG_SP];
|
||||
thread->regs.pc = rawregs->iregs[MD_CONTEXT_ARM64_REG_PC];
|
||||
thread->regs.pstate = rawregs->cpsr;
|
||||
|
||||
memcpy(thread->fpregs.vregs, rawregs->float_save.regs, 8 * 32);
|
||||
thread->fpregs.fpsr = rawregs->float_save.fpsr;
|
||||
thread->fpregs.fpcr = rawregs->float_save.fpcr;
|
||||
if (range.length() == sizeof(MDRawContextARM64_Old)) {
|
||||
const MDRawContextARM64_Old* rawregs =
|
||||
range.GetData<MDRawContextARM64_Old>(0);
|
||||
COPY_REGS(rawregs);
|
||||
} else {
|
||||
const MDRawContextARM64* rawregs = range.GetData<MDRawContextARM64>(0);
|
||||
COPY_REGS(rawregs);
|
||||
}
|
||||
#undef COPY_REGS
|
||||
}
|
||||
#elif defined(__mips__)
|
||||
static void
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
/* Begin PBXBuildFile section */
|
||||
162F64FE161C5ECB00CD68D5 /* arch_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 162F64FC161C5ECB00CD68D5 /* arch_utilities.cc */; };
|
||||
4214B800211109A600B769FA /* convert_old_arm64_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4214B7FE211109A600B769FA /* convert_old_arm64_context.cc */; };
|
||||
4247E6402110D5A500482558 /* path_helper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4247E63F2110D5A500482558 /* path_helper.cc */; };
|
||||
4D2C721B126F9ACC00B43EAF /* source_line_resolver_base.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */; };
|
||||
4D2C721F126F9ADE00B43EAF /* exploitability.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C721E126F9ADE00B43EAF /* exploitability.cc */; };
|
||||
|
@ -82,6 +83,8 @@
|
|||
08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
162F64FC161C5ECB00CD68D5 /* arch_utilities.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arch_utilities.cc; path = ../../../common/mac/arch_utilities.cc; sourceTree = "<group>"; };
|
||||
162F64FD161C5ECB00CD68D5 /* arch_utilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arch_utilities.h; path = ../../../common/mac/arch_utilities.h; sourceTree = "<group>"; };
|
||||
4214B7FE211109A600B769FA /* convert_old_arm64_context.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = convert_old_arm64_context.cc; path = ../../../processor/convert_old_arm64_context.cc; sourceTree = "<group>"; };
|
||||
4214B7FF211109A600B769FA /* convert_old_arm64_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = convert_old_arm64_context.h; path = ../../../processor/convert_old_arm64_context.h; sourceTree = "<group>"; };
|
||||
4247E63E2110D5A500482558 /* path_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = path_helper.h; path = ../../../common/path_helper.h; sourceTree = "<group>"; };
|
||||
4247E63F2110D5A500482558 /* path_helper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = path_helper.cc; path = ../../../common/path_helper.cc; sourceTree = "<group>"; };
|
||||
4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = source_line_resolver_base.cc; path = ../../../processor/source_line_resolver_base.cc; sourceTree = SOURCE_ROOT; };
|
||||
|
@ -218,6 +221,8 @@
|
|||
08FB7794FE84155DC02AAC07 /* crash_report */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4214B7FE211109A600B769FA /* convert_old_arm64_context.cc */,
|
||||
4214B7FF211109A600B769FA /* convert_old_arm64_context.h */,
|
||||
4247E63F2110D5A500482558 /* path_helper.cc */,
|
||||
4247E63E2110D5A500482558 /* path_helper.h */,
|
||||
8B31025311F0D2D400FCF3E4 /* Breakpad.xcconfig */,
|
||||
|
@ -525,6 +530,7 @@
|
|||
4D2C7223126F9AF900B43EAF /* exploitability_win.cc in Sources */,
|
||||
4D2C7227126F9B0F00B43EAF /* disassembler_x86.cc in Sources */,
|
||||
F407DC48185773C10064622B /* exploitability_linux.cc in Sources */,
|
||||
4214B800211109A600B769FA /* convert_old_arm64_context.cc in Sources */,
|
||||
4D2C722B126F9B5A00B43EAF /* x86_disasm.c in Sources */,
|
||||
4D2C722D126F9B6E00B43EAF /* x86_misc.c in Sources */,
|
||||
4D2C722F126F9B8300B43EAF /* x86_operand_list.c in Sources */,
|
||||
|
|
Loading…
Reference in a new issue