diff options
Diffstat (limited to 'src/processor/minidump.cc')
-rw-r--r-- | src/processor/minidump.cc | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc index afc5f038..aebed0e3 100644 --- a/src/processor/minidump.cc +++ b/src/processor/minidump.cc @@ -2667,7 +2667,14 @@ MinidumpModuleList::MinidumpModuleList(Minidump* minidump) range_map_(new RangeMap<uint64_t, unsigned int>()), modules_(NULL), module_count_(0) { - range_map_->SetEnableShrinkDown(minidump_->IsAndroid()); + MDOSPlatform platform; + if (minidump_->GetPlatform(&platform)) { + if (platform == MD_OS_ANDROID) { + range_map_->SetMergeStrategy(MergeRangeStrategy::kTruncateUpper); + } else if (platform == MD_OS_LINUX) { + range_map_->SetMergeStrategy(MergeRangeStrategy::kTruncateLower); + } + } } @@ -2931,7 +2938,7 @@ const MinidumpModule* MinidumpModuleList::GetModuleAtIndex( const CodeModules* MinidumpModuleList::Copy() const { - return new BasicCodeModules(this); + return new BasicCodeModules(this, range_map_->GetMergeStrategy()); } vector<linked_ptr<const CodeModule> > @@ -2939,10 +2946,6 @@ MinidumpModuleList::GetShrunkRangeModules() const { return vector<linked_ptr<const CodeModule> >(); } -bool MinidumpModuleList::IsModuleShrinkEnabled() const { - return range_map_->IsShrinkDownEnabled(); -} - void MinidumpModuleList::Print() { if (!valid_) { BPLOG(ERROR) << "MinidumpModuleList cannot print invalid data"; @@ -3870,7 +3873,7 @@ MinidumpUnloadedModuleList::MinidumpUnloadedModuleList(Minidump* minidump) range_map_(new RangeMap<uint64_t, unsigned int>()), unloaded_modules_(NULL), module_count_(0) { - range_map_->SetEnableShrinkDown(true); + range_map_->SetMergeStrategy(MergeRangeStrategy::kTruncateLower); } MinidumpUnloadedModuleList::~MinidumpUnloadedModuleList() { @@ -4048,7 +4051,7 @@ MinidumpUnloadedModuleList::GetModuleAtIndex( } const CodeModules* MinidumpUnloadedModuleList::Copy() const { - return new BasicCodeModules(this); + return new BasicCodeModules(this, range_map_->GetMergeStrategy()); } vector<linked_ptr<const CodeModule>> @@ -4056,10 +4059,6 @@ MinidumpUnloadedModuleList::GetShrunkRangeModules() const { return vector<linked_ptr<const CodeModule> >(); } -bool MinidumpUnloadedModuleList::IsModuleShrinkEnabled() const { - return range_map_->IsShrinkDownEnabled(); -} - // // MinidumpMiscInfo @@ -5386,6 +5385,11 @@ MinidumpLinuxMapsList *Minidump::GetLinuxMapsList() { } bool Minidump::IsAndroid() { + MDOSPlatform platform; + return GetPlatform(&platform) && platform == MD_OS_ANDROID; +} + +bool Minidump::GetPlatform(MDOSPlatform* platform) { // Save the current stream position off_t saved_position = Tell(); if (saved_position == -1) { @@ -5400,7 +5404,11 @@ bool Minidump::IsAndroid() { return false; } - return system_info && system_info->platform_id == MD_OS_ANDROID; + if (!system_info) { + return false; + } + *platform = static_cast<MDOSPlatform>(system_info->platform_id); + return true; } MinidumpCrashpadInfo* Minidump::GetCrashpadInfo() { |