From 0a5fc5d663054eb836eafc258cc2f6792358e2c9 Mon Sep 17 00:00:00 2001 From: "ted.mielczarek" Date: Wed, 23 Dec 2009 17:09:27 +0000 Subject: Issue 357: New Linux file_id code doesn't persist across strip. r=agl,nealsid at http://breakpad.appspot.com/49008 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@461 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/client/linux/minidump_writer/linux_dumper.cc | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/client/linux/minidump_writer/linux_dumper.cc') diff --git a/src/client/linux/minidump_writer/linux_dumper.cc b/src/client/linux/minidump_writer/linux_dumper.cc index 28729b34..d752608d 100644 --- a/src/client/linux/minidump_writer/linux_dumper.cc +++ b/src/client/linux/minidump_writer/linux_dumper.cc @@ -42,15 +42,20 @@ #include #include +#include #include #include +#include #include #include #include +#include + #include "client/linux/minidump_writer/directory_reader.h" #include "client/linux/minidump_writer/line_reader.h" +#include "common/linux/file_id.h" #include "common/linux/linux_libc_support.h" #include "common/linux/linux_syscall_support.h" @@ -156,6 +161,30 @@ LinuxDumper::BuildProcPath(char* path, pid_t pid, const char* node) const { memcpy(path + total_length, "\0", 1); } +bool +LinuxDumper::ElfFileIdentifierForMapping(unsigned int mapping_id, + uint8_t identifier[sizeof(MDGUID)]) +{ + assert(mapping_id < mappings_.size()); + const MappingInfo* mapping = mappings_[mapping_id]; + int fd = sys_open(mapping->name, O_RDONLY, 0); + if (fd < 0) + return false; + struct kernel_stat st; + if (sys_fstat(fd, &st) != 0) { + sys_close(fd); + return false; + } + void* base = sys_mmap2(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); + sys_close(fd); + if (base == MAP_FAILED) + return false; + + bool success = FileID::ElfFileIdentifierFromMappedFile(base, identifier); + sys_munmap(base, st.st_size); + return success; +} + void* LinuxDumper::FindBeginningOfLinuxGateSharedLibrary(const pid_t pid) const { char auxv_path[80]; -- cgit v1.2.1