| Index: src/common/linux/dump_symbols.cc
|
| diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc
|
| index 5d2aac7ecb27e6324cf42ea11d3dd838aaa107e0..d31e2c2d798e57111f522153f298e095ab755c48 100644
|
| --- a/src/common/linux/dump_symbols.cc
|
| +++ b/src/common/linux/dump_symbols.cc
|
| @@ -64,6 +64,7 @@
|
| #include "common/linux/elfutils-inl.h"
|
| #include "common/linux/elf_symbols_to_module.h"
|
| #include "common/linux/file_id.h"
|
| +#include "common/memory.h"
|
| #include "common/module.h"
|
| #include "common/scoped_ptr.h"
|
| #ifndef NO_STABS_SUPPORT
|
| @@ -82,14 +83,18 @@ using google_breakpad::DwarfLineToModule;
|
| using google_breakpad::ElfClass;
|
| using google_breakpad::ElfClass32;
|
| using google_breakpad::ElfClass64;
|
| +using google_breakpad::FileID;
|
| using google_breakpad::FindElfSectionByName;
|
| using google_breakpad::GetOffset;
|
| using google_breakpad::IsValidElf;
|
| +using google_breakpad::kDefaultBuildIdSize;
|
| using google_breakpad::Module;
|
| +using google_breakpad::PageAllocator;
|
| #ifndef NO_STABS_SUPPORT
|
| using google_breakpad::StabsToModule;
|
| #endif
|
| using google_breakpad::scoped_ptr;
|
| +using google_breakpad::wasteful_vector;
|
|
|
| // Define AARCH64 ELF architecture if host machine does not include this define.
|
| #ifndef EM_AARCH64
|
| @@ -854,25 +859,6 @@ const char* ElfArchitecture(const typename ElfClass::Ehdr* elf_header) {
|
| }
|
| }
|
|
|
| -// Format the Elf file identifier in IDENTIFIER as a UUID with the
|
| -// dashes removed.
|
| -string FormatIdentifier(unsigned char identifier[16]) {
|
| - char identifier_str[40];
|
| - google_breakpad::FileID::ConvertIdentifierToString(
|
| - identifier,
|
| - identifier_str,
|
| - sizeof(identifier_str));
|
| - string id_no_dash;
|
| - for (int i = 0; identifier_str[i] != '\0'; ++i)
|
| - if (identifier_str[i] != '-')
|
| - id_no_dash += identifier_str[i];
|
| - // Add an extra "0" by the end. PDB files on Windows have an 'age'
|
| - // number appended to the end of the file identifier; this isn't
|
| - // really used or necessary on other platforms, but be consistent.
|
| - id_no_dash += '0';
|
| - return id_no_dash;
|
| -}
|
| -
|
| // Return the non-directory portion of FILENAME: the portion after the
|
| // last slash, or the whole filename if there are no slashes.
|
| string BaseFileName(const string &filename) {
|
| @@ -924,9 +910,10 @@ bool ReadSymbolDataElfClass(const typename ElfClass::Ehdr* elf_header,
|
|
|
| *out_module = NULL;
|
|
|
| - unsigned char identifier[16];
|
| - if (!google_breakpad::FileID::ElfFileIdentifierFromMappedFile(elf_header,
|
| - identifier)) {
|
| + PageAllocator allocator;
|
| + wasteful_vector<uint8_t> identifier(&allocator, kDefaultBuildIdSize);
|
| + if (!FileID::ElfFileIdentifierFromMappedFile(elf_header,
|
| + identifier)) {
|
| fprintf(stderr, "%s: unable to generate file identifier\n",
|
| obj_filename.c_str());
|
| return false;
|
| @@ -946,7 +933,10 @@ bool ReadSymbolDataElfClass(const typename ElfClass::Ehdr* elf_header,
|
|
|
| string name = BaseFileName(obj_filename);
|
| string os = "Linux";
|
| - string id = FormatIdentifier(identifier);
|
| + // Add an extra "0" at the end. PDB files on Windows have an 'age'
|
| + // number appended to the end of the file identifier; this isn't
|
| + // really used or necessary on other platforms, but be consistent.
|
| + string id = FileID::ConvertIdentifierToUUIDString(identifier) + "0";
|
|
|
| LoadSymbolsInfo<ElfClass> info(debug_dirs);
|
| scoped_ptr<Module> module(new Module(name, os, architecture, id));
|
|
|