aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorwfh@chromium.org <wfh@chromium.org>2014-12-20 00:47:07 +0000
committerwfh@chromium.org <wfh@chromium.org>2014-12-20 00:47:07 +0000
commit30d41ec2436a6499b7293c20ba4c80d741badf38 (patch)
tree69aa5b11d51e7065c4aa00a1e2c382b3d65ef776 /src
parentAdd microdump files to project. (diff)
downloadbreakpad-30d41ec2436a6499b7293c20ba4c80d741badf38.tar.xz
Modify minidump_stackwalk to be more tolerant of overlapping ranges.
These ranges can be seen in some Android minidumps. BUG=chromium:439531 R=mark@chromium.org Review URL: https://breakpad.appspot.com/9744002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1412 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src')
-rw-r--r--src/processor/minidump.cc26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc
index 8ae260d5..6b0389b8 100644
--- a/src/processor/minidump.cc
+++ b/src/processor/minidump.cc
@@ -2548,12 +2548,26 @@ bool MinidumpModuleList::Read(uint32_t expected_size) {
}
if (!range_map_->StoreRange(base_address, module_size, module_index)) {
- BPLOG(ERROR) << "MinidumpModuleList could not store module " <<
- module_index << "/" << module_count << ", " <<
- module->code_file() << ", " <<
- HexString(base_address) << "+" <<
- HexString(module_size);
- return false;
+ // Android's shared memory implementation /dev/ashmem can contain
+ // duplicate entries for JITted code, so ignore these.
+ // TODO(wfh): Remove this code when Android is fixed.
+ // See https://crbug.com/439531
+ const string kDevAshmem("/dev/ashmem/");
+ if (module->code_file().compare(
+ 0, kDevAshmem.length(), kDevAshmem) != 0) {
+ BPLOG(ERROR) << "MinidumpModuleList could not store module " <<
+ module_index << "/" << module_count << ", " <<
+ module->code_file() << ", " <<
+ HexString(base_address) << "+" <<
+ HexString(module_size);
+ return false;
+ } else {
+ BPLOG(INFO) << "MinidumpModuleList ignoring overlapping module " <<
+ module_index << "/" << module_count << ", " <<
+ module->code_file() << ", " <<
+ HexString(base_address) << "+" <<
+ HexString(module_size);
+ }
}
}