breakpad/src/processor
Joshua Peraza c2467077b9 Enable truncation of module ranges
ELF modules are loaded in memory in several, possibly discontiguous,
segments. If the holes between segments are large enough, other things,
possibly other ELF modules may be mapped in that space. Crashpad
records the range of modules as the base address of the lowest mapped
segment to the high address of the highest mapped segment. This means
that when one module is mapped into a hole in another, it appears to
the Breakpad processor as overlapping modules. Module ranges are
relevant to the Breakpad processor during stackwalking for identifying
which module a particular program counter belongs to (i.e. mapping the
address to a module's text segment). This patch addresses this issue of
overlapping modules by truncating the range of the module with the
lower base address. A typical module's text segment is the first loaded
segment which would leave the text segment range unaffected. Module
producers can restrict the size of holes in their ELF modules with the
flag "-Wl,-z,max-page-size=4096", preventing other modules from being
mapped in their address range.

Properly contemplating ELF module address ranges would require
extensions to the minidump format to encode any holes.
crbug.com/crashpad/298

This patch also renames the concept of "shrinking down" (which
truncated the upper of two overlapping ranges) to "truncate upper".

Change-Id: I4599201f1e43918db036c390961f8b39e3af1849
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/1646932
Reviewed-by: Mark Mentovai <mark@chromium.org>
2019-06-11 19:04:02 +00:00
..
proto Update links 2016-11-18 17:24:37 +00:00
testdata Always emit a 32-bit crash address for 32-bit architectures 2019-01-30 16:21:52 +00:00
address_map-inl.h
address_map.h
address_map_unittest.cc
basic_code_module.h Populate stack frames with unloaded module info. 2017-01-19 19:33:56 +00:00
basic_code_modules.cc Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
basic_code_modules.h Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
basic_source_line_resolver.cc Add optional field indicating multiple symbols at an address 2017-11-29 21:33:23 +00:00
basic_source_line_resolver_types.h Add optional field indicating multiple symbols at an address 2017-11-29 21:33:23 +00:00
basic_source_line_resolver_unittest.cc Add optional field indicating multiple symbols at an address 2017-11-29 21:33:23 +00:00
call_stack.cc Add the TID to the CallStack. 2016-04-01 10:11:10 -04:00
cfi_frame_info-inl.h
cfi_frame_info.cc Don't use strtok_s for mingw builds 2015-08-20 15:09:16 +00:00
cfi_frame_info.h Update symbol file documentation links. 2016-06-10 06:29:06 -04:00
cfi_frame_info_unittest.cc Refactoring in preparation for microdump processing 2014-09-08 19:10:42 +00:00
contained_range_map-inl.h
contained_range_map.h
contained_range_map_unittest.cc
convert_old_arm64_context.cc Define and use a a new MDRawContextARM64 2018-08-01 19:27:25 +00:00
convert_old_arm64_context.h Define and use a a new MDRawContextARM64 2018-08-01 19:27:25 +00:00
disassembler_x86.cc disassembler_x86: Remove unused include 2016-01-08 10:07:04 -05:00
disassembler_x86.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
disassembler_x86_unittest.cc Cleanup: Remove duplicate wording in license headers. 2013-04-23 23:18:39 +00:00
dump_context.cc processor: Fix memory leak after 88d8114f 2018-08-02 00:02:10 +00:00
dump_object.cc Refactoring in preparation for microdump processing 2014-09-08 19:10:42 +00:00
exploitability.cc Add check for Linux minidump ending on bad write for exploitability rating. 2015-08-21 16:22:19 +00:00
exploitability_linux.cc Fix a win32 build error by moving a #include out of an #ifndef _WIN32 2016-09-20 12:12:56 -04:00
exploitability_linux.h Fixing a flaky Linux exploitability unittest. 2016-02-16 11:46:04 -08:00
exploitability_unittest.cc Updating ExploitabilityLinux to check memory mapping names against a prefix 2016-08-29 18:39:01 +00:00
exploitability_win.cc Use general instruction/stack pointer convenience method instead of manually 2015-06-30 23:22:09 +00:00
exploitability_win.h
fast_source_line_resolver.cc Detect corrupt symbol files during minidump processing. Recover from the errors and use the good data if possible. 2013-07-11 01:36:06 +00:00
fast_source_line_resolver_types.h Detect corrupt symbol files during minidump processing. Recover from the errors and use the good data if possible. 2013-07-11 01:36:06 +00:00
fast_source_line_resolver_unittest.cc Populate stack frames with unloaded module info. 2017-01-19 19:33:56 +00:00
linked_ptr.h Fix processor to build with clang 2012-09-10 19:46:19 +00:00
logging.cc Add SEVERITY_CRITICAL to logging, that would help to suppress logs from the fuzz target. 2018-05-29 19:24:32 +00:00
logging.h Conditionally define BPLOG_LAZY_STREAM 2018-11-27 16:12:23 +00:00
map_serializers-inl.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
map_serializers.h
map_serializers_unittest.cc map_serializers_unittest: fix unused variable warning 2013-10-30 17:16:38 +00:00
microdump.cc Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
microdump_processor.cc Add -s flag to microdump_stackwalk for dumping stack contents. 2017-10-17 10:22:46 +00:00
microdump_processor_unittest.cc Add -s flag to microdump_stackwalk for dumping stack contents. 2017-10-17 10:22:46 +00:00
microdump_stackwalk.cc Provide helper wrappers for basename(3) and dirname(3) 2017-10-18 15:44:59 +00:00
microdump_stackwalk_machine_readable_test microdump_stackwalk_test: fix bashism in test 2016-11-25 04:53:01 +00:00
microdump_stackwalk_test microdump_stackwalk_test: fix bashism in test 2016-11-25 04:53:01 +00:00
microdump_stackwalk_test_vars Microdumps: support aarch64 and lib mapping from APK 2014-12-02 15:31:25 +00:00
minidump.cc Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
minidump_dump.cc Allow minidump_dump to print module lists that would normally be rejected 2018-03-12 09:59:33 +00:00
minidump_dump_test
minidump_processor.cc Always emit a 32-bit crash address for 32-bit architectures 2019-01-30 16:21:52 +00:00
minidump_processor_unittest.cc Always emit a 32-bit crash address for 32-bit architectures 2019-01-30 16:21:52 +00:00
minidump_stackwalk.cc Provide helper wrappers for basename(3) and dirname(3) 2017-10-18 15:44:59 +00:00
minidump_stackwalk_machine_readable_test
minidump_stackwalk_test
minidump_unittest.cc Added classes to support reading unloaded module lists in minidumps. 2016-12-16 20:15:04 +00:00
module_comparer.cc Detect corrupt symbol files during minidump processing. Recover from the errors and use the good data if possible. 2013-07-11 01:36:06 +00:00
module_comparer.h
module_factory.h
module_serializer.cc Detect corrupt symbol files during minidump processing. Recover from the errors and use the good data if possible. 2013-07-11 01:36:06 +00:00
module_serializer.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
pathname_stripper.cc
pathname_stripper.h This change allows compiling the google-breakpad code using a global ::string class instead of std::string. For more details take a look at common/using_std_string.h 2012-06-28 22:46:01 +00:00
pathname_stripper_unittest.cc
postfix_evaluator-inl.h Handle program strings with the assignment operator smashed against the next 2012-02-23 22:41:36 +00:00
postfix_evaluator.h This change allows compiling the google-breakpad code using a global ::string class instead of std::string. For more details take a look at common/using_std_string.h 2012-06-28 22:46:01 +00:00
postfix_evaluator_unittest.cc Refactoring in preparation for microdump processing 2014-09-08 19:10:42 +00:00
proc_maps_linux.cc This change allows compiling the google-breakpad code using a global ::string class instead of std::string. 2016-08-30 23:31:43 +00:00
proc_maps_linux_unittest.cc This change allows compiling the google-breakpad code using a global ::string class instead of std::string. 2016-08-30 23:31:43 +00:00
process_state.cc Fixed leak of unloaded module lists. 2017-02-07 22:41:43 +00:00
processor.gyp Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
processor_tools.gypi Add GYP build for the src/tools directory on Mac and Linux. 2014-07-24 15:22:51 +00:00
range_map-inl.h Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
range_map.h Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
range_map_truncate_lower_unittest.cc Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
range_map_truncate_upper_unittest.cc Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
range_map_unittest.cc Adding support for overlapping ranges to RangeMap. 2016-06-05 22:41:10 -07:00
simple_serializer-inl.h Detect corrupt symbol files during minidump processing. Recover from the errors and use the good data if possible. 2013-07-11 01:36:06 +00:00
simple_serializer.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
simple_symbol_supplier.cc Detect corrupt symbol files during minidump processing. Recover from the errors and use the good data if possible. 2013-07-11 01:36:06 +00:00
simple_symbol_supplier.h Detect corrupt symbol files during minidump processing. Recover from the errors and use the good data if possible. 2013-07-11 01:36:06 +00:00
source_line_resolver_base.cc Detect corrupt symbol files during minidump processing. Recover from the errors and use the good data if possible. 2013-07-11 01:36:06 +00:00
source_line_resolver_base_types.h Add optional field indicating multiple symbols at an address 2017-11-29 21:33:23 +00:00
stack_frame_cpu.cc Process minidumps generated on ARM64 in iOS apps. 2013-11-23 01:45:20 +00:00
stack_frame_symbolizer.cc Populate stack frames with unloaded module info. 2017-01-19 19:33:56 +00:00
stackwalk_common.cc This change allows compiling the google-breakpad code using a global ::string class instead of std::string. 2016-08-30 23:31:43 +00:00
stackwalk_common.h Revert "Added a switch to dump minidump modules in minidump_stackwalk." 2016-02-10 13:11:20 -08:00
stackwalker.cc Define and use a a new MDRawContextARM64 2018-08-01 19:27:25 +00:00
stackwalker_address_list.cc Make StackWalkerAddressList use FRAME_TRUST_PREWALKED trust level. 2013-09-04 20:43:10 +00:00
stackwalker_address_list.h Create StackwalkerAddressList. 2013-08-23 14:38:36 +00:00
stackwalker_address_list_unittest.cc Make StackWalkerAddressList use FRAME_TRUST_PREWALKED trust level. 2013-09-04 20:43:10 +00:00
stackwalker_amd64.cc Handle very large stack traces 2017-07-12 17:53:15 +00:00
stackwalker_amd64.h Handle very large stack traces 2017-07-12 17:53:15 +00:00
stackwalker_amd64_unittest.cc Sanity check frame pointer while stackwalking 2017-03-22 23:23:25 +00:00
stackwalker_arm.cc iOS: disable using CFI in stackwalking 2018-07-06 21:22:45 +00:00
stackwalker_arm.h Allow setting a limit on the number of frames to be recovered by stack scanning. 2013-08-19 18:31:51 +00:00
stackwalker_arm64.cc Define and use a a new MDRawContextARM64 2018-08-01 19:27:25 +00:00
stackwalker_arm64.h Define and use a a new MDRawContextARM64 2018-08-01 19:27:25 +00:00
stackwalker_arm64_unittest.cc Define and use a a new MDRawContextARM64 2018-08-01 19:27:25 +00:00
stackwalker_arm_unittest.cc iOS: disable using CFI in stackwalking 2018-07-06 21:22:45 +00:00
stackwalker_mips.cc Handle very large stack traces 2017-07-12 17:53:15 +00:00
stackwalker_mips.h Adding support for mips. 2013-09-11 11:37:04 +00:00
stackwalker_mips64_unittest.cc [MIPS]: Don't terminate stackwalk when $sp value doesn't change between frames 2017-03-16 15:59:05 +00:00
stackwalker_mips_unittest.cc [MIPS]: Don't terminate stackwalk when $sp value doesn't change between frames 2017-03-16 15:59:05 +00:00
stackwalker_ppc.cc Fix memory leak in ppc stackwalker 2017-08-18 10:24:52 +00:00
stackwalker_ppc.h Allow setting a limit on the number of frames to be recovered by stack scanning. 2013-08-19 18:31:51 +00:00
stackwalker_ppc64.cc Fix memory leak in ppc64 stackwalker 2017-08-30 17:28:54 +00:00
stackwalker_ppc64.h Allow setting a limit on the number of frames to be recovered by stack scanning. 2013-08-19 18:31:51 +00:00
stackwalker_selftest.cc Refactoring in preparation for microdump processing 2014-09-08 19:10:42 +00:00
stackwalker_selftest_sol.s
stackwalker_sparc.cc Handle very large stack traces 2017-07-12 17:53:15 +00:00
stackwalker_sparc.h Allow setting a limit on the number of frames to be recovered by stack scanning. 2013-08-19 18:31:51 +00:00
stackwalker_unittest_utils.h Enable truncation of module ranges 2019-06-11 19:04:02 +00:00
stackwalker_x86.cc Handle very large stack traces 2017-07-12 17:53:15 +00:00
stackwalker_x86.h Allow setting a limit on the number of frames to be recovered by stack scanning. 2013-08-19 18:31:51 +00:00
stackwalker_x86_unittest.cc Provide initial EBX value to FPO frame data evaluator 2016-10-14 17:51:32 +00:00
static_address_map-inl.h
static_address_map.h
static_address_map_unittest.cc This change allows compiling the google-breakpad code using a global ::string class instead of std::string. For more details take a look at common/using_std_string.h 2012-06-28 22:46:01 +00:00
static_contained_range_map-inl.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
static_contained_range_map.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
static_contained_range_map_unittest.cc Move scoped_ptr.h to common 2013-01-17 15:53:56 +00:00
static_map-inl.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
static_map.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
static_map_iterator-inl.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
static_map_iterator.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
static_map_unittest.cc Explicitly call non-sized delete on dynamically sized memory for correct behavior under sized-delete. 2016-03-11 16:37:46 -08:00
static_range_map-inl.h
static_range_map.h Cleaning up google-breakpad source code of signed-unsigned comparison warnings 2012-11-21 01:33:08 +00:00
static_range_map_unittest.cc Move scoped_ptr.h to common 2013-01-17 15:53:56 +00:00
symbolic_constants_win.cc Allow compiling the google-breakpad code using a global ::string class instead of std::string. 2016-11-08 01:29:06 +00:00
symbolic_constants_win.h Allow compiling the google-breakpad code using a global ::string class instead of std::string. 2016-11-08 01:29:06 +00:00
synth_minidump.cc Added classes to support reading unloaded module lists in minidumps. 2016-12-16 20:15:04 +00:00
synth_minidump.h Added classes to support reading unloaded module lists in minidumps. 2016-12-16 20:15:04 +00:00
synth_minidump_unittest.cc Use stdint types everywhere 2013-03-06 14:04:42 +00:00
synth_minidump_unittest_data.h Use stdint types everywhere 2013-03-06 14:04:42 +00:00
tokenize.cc Don't use strtok_s for mingw builds 2015-08-20 15:09:16 +00:00
tokenize.h This change allows compiling the google-breakpad code using a global ::string class instead of std::string. For more details take a look at common/using_std_string.h 2012-06-28 22:46:01 +00:00
windows_frame_info.h Update symbol file documentation links. 2016-06-10 06:29:06 -04:00