| Index: src/client/linux/minidump_writer/minidump_writer.cc
|
| diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc
|
| index 9a0a830b13723b02cdec7930c4e49e4e5d4044d1..459593d9f7d9b5e06d5f1bbe23e43366cfb913c5 100644
|
| --- a/src/client/linux/minidump_writer/minidump_writer.cc
|
| +++ b/src/client/linux/minidump_writer/minidump_writer.cc
|
| @@ -73,6 +73,7 @@
|
| #include "client/linux/minidump_writer/linux_ptrace_dumper.h"
|
| #include "client/linux/minidump_writer/proc_cpuinfo_reader.h"
|
| #include "client/minidump_file_writer.h"
|
| +#include "common/linux/file_id.h"
|
| #include "common/linux/linux_libc_support.h"
|
| #include "common/minidump_type_helper.h"
|
| #include "google_breakpad/common/minidump_format.h"
|
| @@ -83,6 +84,7 @@ namespace {
|
| using google_breakpad::AppMemoryList;
|
| using google_breakpad::ExceptionHandler;
|
| using google_breakpad::CpuSet;
|
| +using google_breakpad::kMaxBuildID;
|
| using google_breakpad::LineReader;
|
| using google_breakpad::LinuxDumper;
|
| using google_breakpad::LinuxPtraceDumper;
|
| @@ -539,41 +541,39 @@ class MinidumpWriter {
|
| mod->base_of_image = mapping.start_addr;
|
| mod->size_of_image = mapping.size;
|
|
|
| - uint8_t cv_buf[MDCVInfoPDB70_minsize + NAME_MAX];
|
| + uint8_t cv_buf[MDCVInfoELF_minsize + kMaxBuildID];
|
| uint8_t* cv_ptr = cv_buf;
|
|
|
| - const uint32_t cv_signature = MD_CVINFOPDB70_SIGNATURE;
|
| + const uint32_t cv_signature = MD_CVINFOELF_SIGNATURE;
|
| my_memcpy(cv_ptr, &cv_signature, sizeof(cv_signature));
|
| cv_ptr += sizeof(cv_signature);
|
| uint8_t* signature = cv_ptr;
|
| - cv_ptr += sizeof(MDGUID);
|
| + size_t signature_length = 0;
|
| if (identifier) {
|
| // GUID was provided by caller.
|
| my_memcpy(signature, identifier, sizeof(MDGUID));
|
| + signature_length = sizeof(MDGUID);
|
| } else {
|
| // Note: ElfFileIdentifierForMapping() can manipulate the |mapping.name|.
|
| - dumper_->ElfFileIdentifierForMapping(mapping, member,
|
| - mapping_id, signature);
|
| + dumper_->ElfFileIdentifierForMapping(mapping,
|
| + member,
|
| + mapping_id,
|
| + signature,
|
| + &signature_length);
|
| }
|
| - my_memset(cv_ptr, 0, sizeof(uint32_t)); // Set age to 0 on Linux.
|
| - cv_ptr += sizeof(uint32_t);
|
| -
|
| - char file_name[NAME_MAX];
|
| - char file_path[NAME_MAX];
|
| - LinuxDumper::GetMappingEffectiveNameAndPath(
|
| - mapping, file_path, sizeof(file_path), file_name, sizeof(file_name));
|
| -
|
| - const size_t file_name_len = my_strlen(file_name);
|
| UntypedMDRVA cv(&minidump_writer_);
|
| - if (!cv.Allocate(MDCVInfoPDB70_minsize + file_name_len + 1))
|
| + if (!cv.Allocate(MDCVInfoELF_minsize + signature_length))
|
| return false;
|
|
|
| - // Write pdb_file_name
|
| - my_memcpy(cv_ptr, file_name, file_name_len + 1);
|
| - cv.Copy(cv_buf, MDCVInfoPDB70_minsize + file_name_len + 1);
|
| + cv.Copy(cv_buf, MDCVInfoELF_minsize + signature_length);
|
|
|
| mod->cv_record = cv.location();
|
|
|
| + char file_name[NAME_MAX];
|
| + char file_path[NAME_MAX];
|
| + LinuxDumper::GetMappingEffectiveNameAndPath(
|
| + mapping, file_path, sizeof(file_path), file_name, sizeof(file_name));
|
| +
|
| MDLocationDescriptor ld;
|
| if (!minidump_writer_.WriteString(file_path, my_strlen(file_path), &ld))
|
| return false;
|
|
|