mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2024-12-23 07:05:37 +00:00
Write adjusted range back to module
In Android, the mmap could be overlapped by /dev/ashmem, we adjusted the range in https://breakpad.appspot.com/9744002/, but adjusted range isn't written back to module, this caused the corresponding module be dropped in BasicCodeModules copy constructor. This also fix a lot of 'unable to store module' warnings when dumping Android's minidump. BUG=606972 R=mark@chromium.org, wfh@chromium.org Review URL: https://codereview.chromium.org/1939333002 . Patch from Tao Bai <michaelbai@chromium.org>.
This commit is contained in:
parent
fcb844ee32
commit
4f417c8c0f
|
@ -382,6 +382,11 @@ class MinidumpModule : public MinidumpObject,
|
||||||
|
|
||||||
const MDRawModule* module() const { return valid_ ? &module_ : NULL; }
|
const MDRawModule* module() const { return valid_ ? &module_ : NULL; }
|
||||||
|
|
||||||
|
// This method is intented to handle the case on Android where the module
|
||||||
|
// could overlap with ashmem, and is not supposed to be used in anywhere
|
||||||
|
// else.
|
||||||
|
void set_base_address_and_size(uint64_t base_address, uint64_t size);
|
||||||
|
|
||||||
// CodeModule implementation
|
// CodeModule implementation
|
||||||
virtual uint64_t base_address() const {
|
virtual uint64_t base_address() const {
|
||||||
return valid_ ? module_.base_of_image : static_cast<uint64_t>(-1);
|
return valid_ ? module_.base_of_image : static_cast<uint64_t>(-1);
|
||||||
|
|
|
@ -2327,6 +2327,13 @@ const MDImageDebugMisc* MinidumpModule::GetMiscRecord(uint32_t* size) {
|
||||||
return reinterpret_cast<MDImageDebugMisc*>(&(*misc_record_)[0]);
|
return reinterpret_cast<MDImageDebugMisc*>(&(*misc_record_)[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MinidumpModule::set_base_address_and_size(uint64_t base_address,
|
||||||
|
uint64_t size) {
|
||||||
|
if (valid_) {
|
||||||
|
module_.base_of_image = base_address;
|
||||||
|
module_.size_of_image = size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MinidumpModule::Print() {
|
void MinidumpModule::Print() {
|
||||||
if (!valid_) {
|
if (!valid_) {
|
||||||
|
@ -2635,6 +2642,7 @@ bool MinidumpModuleList::Read(uint32_t expected_size) {
|
||||||
HexString(module_size) << ", after adjusting";
|
HexString(module_size) << ", after adjusting";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
module->set_base_address_and_size(base_address, module_size);
|
||||||
} else {
|
} else {
|
||||||
BPLOG(ERROR) << "MinidumpModuleList could not store module " <<
|
BPLOG(ERROR) << "MinidumpModuleList could not store module " <<
|
||||||
module_index << "/" << module_count << ", " <<
|
module_index << "/" << module_count << ", " <<
|
||||||
|
|
Loading…
Reference in a new issue