android: truncate lower of two overlapping modules

Previously, the processor truncated the upper of two
overlapping module ranges to compensate for incorrect
reporting of module ranges by the Breakpad client.
Crashpad correctly reports module load ranges, so
this truncation strategy is no longer necessary.

However, when partitioned libraries are used, the base
library may have a range which encompasses the other
partitions. When this is combined with the truncate
upper merge strategy, the base library's executable
segment is truncated causing symbolization failures.

This patch changes Android's merge strategy to truncate
the lower range (which is still the base library, but
this strategy truncates from the high end of the
library's range, instead of its base).

Bug: b/149845120
Change-Id: Ic75ecd3e919432690740eb21ebd4265fc0bbaa86
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2067952
Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
Joshua Peraza 2020-02-20 18:56:04 -08:00
parent bbad9f255d
commit 5e1c53a442

View file

@ -2654,12 +2654,9 @@ MinidumpModuleList::MinidumpModuleList(Minidump* minidump)
modules_(NULL), modules_(NULL),
module_count_(0) { module_count_(0) {
MDOSPlatform platform; MDOSPlatform platform;
if (minidump_->GetPlatform(&platform)) { if (minidump_->GetPlatform(&platform) &&
if (platform == MD_OS_ANDROID) { (platform == MD_OS_ANDROID || platform == MD_OS_LINUX)) {
range_map_->SetMergeStrategy(MergeRangeStrategy::kTruncateUpper); range_map_->SetMergeStrategy(MergeRangeStrategy::kTruncateLower);
} else if (platform == MD_OS_LINUX) {
range_map_->SetMergeStrategy(MergeRangeStrategy::kTruncateLower);
}
} }
} }