diff options
-rw-r--r-- | src/client/linux/minidump_writer/linux_dumper.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/client/linux/minidump_writer/linux_dumper.cc b/src/client/linux/minidump_writer/linux_dumper.cc index 00d18189..43b74ad9 100644 --- a/src/client/linux/minidump_writer/linux_dumper.cc +++ b/src/client/linux/minidump_writer/linux_dumper.cc @@ -510,10 +510,15 @@ void LinuxDumper::LatePostprocessMappings() { } if (ehdr.e_type == ET_DYN) { // Compute the effective load bias for this mapped library, and update - // the mapping to hold that rather than |start_addr|. Where the library - // does not contain Android packed relocations, GetEffectiveLoadBias() - // returns |start_addr| and the mapping entry is not changed. - mapping->start_addr = GetEffectiveLoadBias(&ehdr, mapping->start_addr); + // the mapping to hold that rather than |start_addr|, at the same time + // adjusting |size| to account for the change in |start_addr|. Where + // the library does not contain Android packed relocations, + // GetEffectiveLoadBias() returns |start_addr| and the mapping entry + // is not changed. + const uintptr_t load_bias = GetEffectiveLoadBias(&ehdr, + mapping->start_addr); + mapping->size += mapping->start_addr - load_bias; + mapping->start_addr = load_bias; } } } |