diff options
author | ted.mielczarek <ted.mielczarek@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2011-05-06 23:23:31 +0000 |
---|---|---|
committer | ted.mielczarek <ted.mielczarek@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2011-05-06 23:23:31 +0000 |
commit | 1807e385d74aba56b2fb61ea570a5f848da224d5 (patch) | |
tree | 851a16bfc05c3bc3a7116fcd259bd1b0975b9121 /src/client/linux/minidump_writer/linux_dumper.cc | |
parent | Fixed message about unregistered msdia*dll. Builds with different DiaSDK need... (diff) | |
download | breakpad-1807e385d74aba56b2fb61ea570a5f848da224d5.tar.xz |
Fix linux-gate handling in LinuxDumper so it gets a valid debug ID
A=ted R=nealsid at http://breakpad.appspot.com/284001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@788 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/client/linux/minidump_writer/linux_dumper.cc')
-rw-r--r-- | src/client/linux/minidump_writer/linux_dumper.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/client/linux/minidump_writer/linux_dumper.cc b/src/client/linux/minidump_writer/linux_dumper.cc index 76dc4db4..ab3a5ea5 100644 --- a/src/client/linux/minidump_writer/linux_dumper.cc +++ b/src/client/linux/minidump_writer/linux_dumper.cc @@ -213,6 +213,21 @@ LinuxDumper::ElfFileIdentifierForMapping(const MappingInfo& mapping, if (IsMappedFileOpenUnsafe(mapping)) return false; + // Special-case linux-gate because it's not a real file. + if (my_strcmp(mapping.name, kLinuxGateLibraryName) == 0) { + const uintptr_t kPageSize = getpagesize(); + void* linux_gate = NULL; + if (pid_ == sys_getpid()) { + linux_gate = reinterpret_cast<void*>(mapping.start_addr); + } else { + linux_gate = allocator_.Alloc(kPageSize); + CopyFromProcess(linux_gate, pid_, + reinterpret_cast<const void*>(mapping.start_addr), + kPageSize); + } + return FileID::ElfFileIdentifierFromMappedFile(linux_gate, identifier); + } + char filename[NAME_MAX]; size_t filename_len = my_strlen(mapping.name); assert(filename_len < NAME_MAX); |