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; |