aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* Use string instead of std::stringJoshua Peraza2017-03-221-1/+1
| | | | | | | | BUG= Change-Id: I06d1a836f8ff59a6abb7e420cd35fe52610ce091 Reviewed-on: https://chromium-review.googlesource.com/457872 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* [MIPS] Get (ptrace) value of $pc for a threadGordana Cmiljanovic2017-03-221-0/+2
| | | | | | | | | This change is fixing LinuxPtraceDumperTest.SanitizeStackCopy test case. Change-Id: I1eb3becfd4b3660bc5529b5d2a5e35db0b6eb6e0 Reviewed-on: https://chromium-review.googlesource.com/458277 Reviewed-by: Mark Mentovai <mark@chromium.org>
* dump_context: arm: name the registers in the dump outputMike Frysinger2017-03-181-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current ARM minidump_dump output makes people remember or look up how registers are mapped in the ISA. Let's use human friendly names instead so they don't have to. Currently it looks like: MDRawContextARM context_flags = 0x40000006 iregs[ 0] = 0x3c48b000 iregs[ 1] = 0x3 iregs[ 2] = 0x20 iregs[ 3] = 0x0 iregs[ 4] = 0x1c iregs[ 5] = 0x3c48b000 iregs[ 6] = 0x20 iregs[ 7] = 0x3c48b04c iregs[ 8] = 0x39100611 iregs[ 9] = 0x1c iregs[10] = 0x0 iregs[11] = 0xbe61c200 iregs[12] = 0xfb9c1fec iregs[13] = 0xbe61bd28 iregs[14] = 0x39e19b1c iregs[15] = 0x357dd74c cpsr = 0x680b0010 float_save.fpscr = 0x0 Now it looks like: MDRawContextARM context_flags = 0x40000006 r0 = 0x3c48b000 r1 = 0x3 r2 = 0x20 r3 = 0x0 r4 = 0x1c r5 = 0x3c48b000 r6 = 0x20 r7 = 0x3c48b04c r8 = 0x39100611 r9 = 0x1c r10 = 0x0 r11 = 0xbe61c200 r12 = 0xfb9c1fec sp = 0xbe61bd28 lr = 0x39e19b1c pc = 0x357dd74c cpsr = 0x680b0010 float_save.fpscr = 0x0 BUG=chromium:665083 Change-Id: I46d87c4ff7303a7efcd60da1d0b67ae7a5465c8f Reviewed-on: https://chromium-review.googlesource.com/457197 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* Fix sporadic failure of InstructionPointerMemory test on WindowsJon Turney2017-03-171-7/+12
| | | | | | | | | | | | | | | | | | If another memory region of interest (e.g. a thread stack) randomly happens to lie immediately before the page allocated by this test, the memory regions can be coalesced in the minidump generated. Relax this test so it correctly handles the case where the expected 256 bytes around the IP aren't at the start of the minidump memory region. Alternatively, that could be avoided by reserving the page before the page used for this test, in which case this test is degenerate with InstructionPointerMemoryMinBound and can be removed. BUG= Change-Id: Ib1bfb242b2c0acaa090df68334a02ac434ad880c Reviewed-on: https://chromium-review.googlesource.com/456702 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Fix issues with Windows dump_syms_unittestJon Turney2017-03-177-2954/+2961
| | | | | | | | | | | | | | | | | | | | | | | | | | * Turn DumpSymsRegressionTest into a parameterized test so it's easier to see which test file is failing * Convert dump_syms_regtest.sym to DOS line endings, being careful to preserve the required spaces at the end of 'STACK WIN' lines * In test #4 (omap_reorder_bbs), since the .exe corresponding to the .pdb is not present, no INFO line is generated in the .sym file. Update .sym file. * Stop collecting stderr from dump_syms. Future work: perhaps it's worth collecting stderr to compare with a different file to verify that "Couldn't locate EXE or DLL file" is output when expected? * Regenerate testdata for test #5 (dump_syms_regtest64), which currently does not pass, seemingly due a mis-match in the PDB age between the .pdb file and the .sym file. Also add the .exe corresponding to the .pdb present, to provide CFI BUG= Change-Id: I54fab866437c9e1bad3a5534cef4fe4b6ae47cd2 Reviewed-on: https://chromium-review.googlesource.com/453178 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* [MIPS]: Don't terminate stackwalk when $sp value doesn't change between framesDragan Mladjenovic2017-03-163-7/+1
| | | | | | | | | Currently on MIPS we accidentally terminate stackwalk if $sp value doesn't change between frames which results in incomplete callchain terminated at the point of first tailcall encountered. Change-Id: I8f1ed1df958d8f0a9eb11fd7800062184d8f1ee2 Reviewed-on: https://chromium-review.googlesource.com/449755 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Fix Windows client ExceptionHandlerTest testsJon Turney2017-03-114-6/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | ExceptionHandlerTest.InvalidParameterMiniDumpTest and ExceptionHandlerTest.PureVirtualCallMiniDumpTest both also exercise a feature that if the MiniDumpWithFullMemory MINIDUMP_TYPE is used, both UUID.dmp and UUID-full.dmp files are written. This is currently broken, and requesting a minidump with MiniDumpWithFullMemory MINIDUMP_TYPE fails, as the file handle for the full dump is not set. Call GenerateFullDumpFile() if MiniDumpWithFullMemory is requested, to generate a filename for the full dump file and set the file handle. Currently GenerateFullDumpFile() also generates another UUID for the full dump filename, so also make the private method MinidumpGenerator::GenerateDumpFilePath() idempotent (so the same UUID is reused) (Note that calling Generate(|Full)DumpFile() more than once is not permitted, so there's no behaviour where this changed the UUID to preserve) BUG= Change-Id: I74304f38b398f53da1c24f368dedfba8463da9e5 Reviewed-on: https://chromium-review.googlesource.com/452978 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* iOS client identifies itself via URL paramsRoman Margold2017-03-101-0/+44
| | | | | | | | | | | For iOS apps, product and version information is now automatically provided as part of the crash report upload URL to allow for early rejections. Change-Id: Ia19c490c38023f9e23ec8a537f7a203ff1e642d7 Reviewed-on: https://chromium-review.googlesource.com/436164 Reviewed-by: Roman Margold <rmargold@chromium.org> Reviewed-by: Joshua Peraza <jperaza@chromium.org>
* Use NSURLSession if the min version we support is iOS 7+.George Kola2017-03-091-7/+5
| | | | | | | | | | | | | | | Because many apps still support iOS 8, they were defaulting to deprecated NSURLConnection even if the code ran on iOS 10. NSURLConnection requires a run loop and hence the code did not always upload if the queue ran on a thread without a Run Loop. This should improve break pad uploads BUG= Change-Id: I7bff80ea977fd1ab13c8812ed933ef842dab417f Reviewed-on: https://chromium-review.googlesource.com/451880 Reviewed-by: Sylvain Defresne <sdefresne@chromium.org> Reviewed-by: Mark Mentovai <mark@chromium.org>
* Fix segfault when interpreting bad debug_fileJoshua Peraza2017-03-081-1/+3
| | | | | | | | BUG=chromium:661037 Change-Id: Ia4da0bd9787c232a6a199cfdfccfbed60c2515c2 Reviewed-on: https://chromium-review.googlesource.com/450090 Reviewed-by: Joshua Peraza <jperaza@chromium.org>
* [MIPS]: Relax dwarf section loading to accept both PROGBITS and MIPS_DWARF ↵Dragan Mladjenovic2017-03-071-4/+22
| | | | | | | | section types Change-Id: I0862d930d92687dee47daa8d4dc3a21524c1c893 Reviewed-on: https://chromium-review.googlesource.com/447697 Reviewed-by: Joshua Peraza <jperaza@chromium.org>
* Fix dump_syms clang compilation on WindowsMaciej Pawlowski2017-03-021-8/+8
| | | | | | | | | | | | Clang complains about bad format strings (DWORD is an unsigned long, not unsigned int) and signed/unsigned comparison. This change is necessary for https://codereview.chromium.org/2712423002/ BUG=245456 Change-Id: I58da92d43d90ac535c165fca346ee6866dfce22e Reviewed-on: https://chromium-review.googlesource.com/448037 Reviewed-by: Mark Mentovai <mark@chromium.org>
* roll lss depsMike Frysinger2017-03-012-2/+2
| | | | | | | | | We want the updated ARMv8/IT fix in the clone code path that newer versions of clang warn about. Change-Id: Ibd2d301d94cd09affc4225d013547ee1e24fac82 Reviewed-on: https://chromium-review.googlesource.com/448001 Reviewed-by: Mark Seaborn <mseaborn@chromium.org>
* win: Set LargeAddressAware on symuploadScott Graham2017-02-281-0/+5
| | | | | | | | | | | | | | | | | | | | This was set manually on Chrome's built binary before https://codereview.chromium.org/2173533002 but wasn't added to the build file. After this change: c:\src\breakpad\src\src>dumpbin /headers tools\windows\symupload\Release\symupload.exe | grep large Application can handle large (>2GB) addresses This change only affects x86 builds. R=mark@chromium.org BUG=chromium:696911 Change-Id: I8f1bd5535af242edde51e70c60cf33b6170855ea Reviewed-on: https://chromium-review.googlesource.com/447780 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Improve stack sanitization unittests.Tobias Sargeant2017-02-242-47/+73
| | | | | | | | | | | | Rather than relying on the process stack having all the things that should/shouldn't be sanitized, create synthetic stacks to test all of the important cases. BUG=664460 Change-Id: I959266390e94d6fb83ca8ef11ac19fac89e68c31 Reviewed-on: https://chromium-review.googlesource.com/446108 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Handle ntdll only emitting PUBLIC at func entryScott Graham2017-02-233-1/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This handles a case encountered in ntdll.dll symbols for Windows 7, where a PUBLIC would be emitted only for the entry point to the function. The body of the function, however, is split in a PGO-ish fashion to another remote location in the binary. Because of this, there were large gaps in the RVA space that would be attributed to the "last" function that happened to have an entry point before the gap. In practice, something like this: 0x100 Func1 0x110 Func2 0x120 Func3 0x130 Func4 ... 0x800 LaterFuncs The bodies of Func1/2/3 tend to be implemented as a fast-path check, followed by a jmp to somewhere in the range between 0x130 and 0x800. Because no symbols are emitted for this range, everything is attributed to Func4, causing crash misattribution. In this CL, the change is: after emitting the entry point symbol, also walk in the original OMAP entries through the untranslated binary, and for each block until we resolve to a new symbol (via the same mechanism as we found the entry point) emit another PUBLIC indicating that there's another block that belongs to that symbol. This effectively breaks up the "0x130 - 0x800" range above. R=mark@chromium.org BUG=chromium:678874 Change-Id: Ib3741abab2e7158c81e3e34bca4340ce4d3153a1 Reviewed-on: https://chromium-review.googlesource.com/446717 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Make stack sanitization elide pointers to non-executable mappings.Tobias Sargeant2017-02-231-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | The address space of every Android Java process is approximately 50% mapped, which means that sanitization tends to be ineffective because most string fragments are plausibly pointers into some mapping. For example, the zygote on 32 bit devices has the following mappings made by dalvik and this covers all 4 byte strings starting with a character between 0x13 and 0x52 (which includes all uppercase characters up to and including 'R'). 12c00000-12d16000 12d16000-32c00000 32c00000-32c01000 32c01000-52c00000 In order to perform stack unwinding we only need pointers into the stack of the thread in question, and pointers to executable mappings. If we reduce the set of considered mappings to those mappings alone, then only ~2% of the address space is left unelided. BUG=664460 Change-Id: I1cc27821659acfb91d658f42a83a24c176505a88 Reviewed-on: https://chromium-review.googlesource.com/446500 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Use the correct PC when determining whether to skip storing a stack.Tobias Sargeant2017-02-231-5/+7
| | | | | | | | | | | | This addresses a bug in commit 049a1532 that meant that the PC of the crashing thread was always used to determine whether to include a stack, instead of using the PC of the thread in question. BUG=664460 Change-Id: Idcbd5db751e5c00941a1be28607389961c0c75d7 Reviewed-on: https://chromium-review.googlesource.com/446499 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* minidump: mark Read as override in derived classesMike Frysinger2017-02-201-11/+10
| | | | | | | | | | | | | | | | | | | | The base class here declares Read as virtual, so make sure it's marked as override in the derived classes. This fixes some build errors with clang. src/google_breakpad/processor/minidump.h:853:8: error: 'Read' overrides a member function but is not marked 'override' [-Werror,-Winconsistent-missing-override] bool Read(uint32_t expected_size_); ^ src/google_breakpad/processor/minidump.h:153:16: note: overridden virtual function is here virtual bool Read(uint32_t expected_size) = 0; ^ Change-Id: Ie4e5fec097b7f37739433a9deb39e7ed60471461 Reviewed-on: https://chromium-review.googlesource.com/444385 Reviewed-by: Tobias Sargeant <tobiasjs@chromium.org>
* travis: add a clang buildMike Frysinger2017-02-172-15/+13
| | | | | | | | | We rework the matrix a bit to avoid the implicit explosion of duplicated results. Change-Id: I9a2d91b3a6a55bf2843e0e90d59fe5710bd639c7 Reviewed-on: https://chromium-review.googlesource.com/444544 Reviewed-by: Ted Mielczarek <ted@mielczarek.org>
* Fix compile errors arising from compiling breakpad with clang.Tobias Sargeant2017-02-171-16/+17
| | | | | | | | | | | | | | | | | | | | | These compile errors occur when building the check target with: CXX=clang++-3.8 CXXFLAGS="-Werror -Wconstant-conversion -g -O2 -std=c++11" src/processor/stackwalker_mips.cc:60:9: error: comparison of constant 18446744073709551615 with expression of type 'bool' is always false [Werror,-Wtautological-constant-out-of-range-compare] > 0xffffffffffffffff) { ^ ~~~~~~~~~~~~~~~~~~ src/processor/stackwalker_mips.cc:68:66: error: comparison of constant 4294967295 with expression of type 'bool' is always false [-Werror,-Wtautological-constant-out-of-range-compare] if ((memory_ && memory_->GetBase() + memory_->GetSize() - 1) > 0xffffffff) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~ Change-Id: I29eed8f4a67b9feeb274aa1fc6c79a019135e8d6 Reviewed-on: https://chromium-review.googlesource.com/438445 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* autotools: move -W flags to configure detectionMike Frysinger2017-02-169-74/+449
| | | | | | | | This lets us use the flags with clang, and to add more flags easily. Change-Id: I51bb53ffd5ab6da769cdfb422a2c88442f1ff9ad Reviewed-on: https://chromium-review.googlesource.com/441864 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* libdisasm: add upstream/license detailsMike Frysinger2017-02-142-0/+146
| | | | | | | | The license file comes from the upstream libdisasm tarball/repo. Change-Id: I04a4002db72f778dd67dbcd71d3b5d1205a8c21d Reviewed-on: https://chromium-review.googlesource.com/441884 Reviewed-by: Ted Mielczarek <ted@mielczarek.org>
* There is no need to use the main queue just for perform selector.George Kola2017-02-131-34/+31
| | | | | | | | | | | | | | | | | | | | | | | | | We were using the main queue to queue up a perform selector and then the code [self sendStoredCrashReports] was immediately doing a dispatch_async. This unnecessary thread switching is not needed. We simplify the above logic and use dispatch_after to queue the block on the internal queue after a delay Note that main queue is typically more loaded and it is better for non-UI code to not use the main queue. This may also help improve crash log upload. This change also switches from @synchronized to dispatch_once as that is faster Reference: http://googlemac.blogspot.com/2006/10/synchronized-swimming.html BUG= Change-Id: I81035149cbbf13a3058ca3a11e6efd23980f19ad Reviewed-on: https://chromium-review.googlesource.com/441364 Reviewed-by: Joshua Peraza <jperaza@chromium.org>
* Appveyor CI for Windows MSVS buildJon Turney2017-02-134-1/+95
| | | | | | | | | | | | | | | | | | | | | | Add a .gyp file for building all windows tools, and add hook to run gyp to create corresponding .sln files. This doesn't try to build for platform:x64. This fails due to various errors caused by the assumption that size_t can be converted to an unsigned int without loss of information, which is not true on Windows x64 (LLP64), where size_t is 64 bits, but int is only 32 bits. There are test failures. client_tests failures are as described in [1]. dump_syms_unittest are as discussed in the description of [2]. [1] https://bugs.chromium.org/p/google-breakpad/issues/detail?id=520 [2] https://codereview.chromium.org/1782453003 BUG= Change-Id: I965244eb3746f87f30160fd0577e1cc9eb7a8b08 Reviewed-on: https://chromium-review.googlesource.com/441026 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* turn on -Werror generallyMike Frysinger2017-02-132-0/+2
| | | | | | | | | | This moves us to being warning free by default rather than being free of some specific warnings. This doesn't turn on any new warnings though. Change-Id: I60bb79d1790e85ec4618b3548dad6de5d9bf8ab5 Reviewed-on: https://chromium-review.googlesource.com/438565 Reviewed-by: Mark Mentovai <mark@chromium.org>
* processor: drop set-but-unused variableMike Frysinger2017-02-121-4/+2
| | | | | | Change-Id: Idf3fe363c76734caa3e6a6cc20a53fd1d661188d Reviewed-on: https://chromium-review.googlesource.com/438564 Reviewed-by: Mark Mentovai <mark@chromium.org>
* macho_reader_unittest: use EXPECT_FALSEMike Frysinger2017-02-121-2/+2
| | | | | | | | | | | | | | | | | | | This avoids compile time errors: In file included from ./src/testing/googletest/include/gtest/gtest.h:1874:0, from ./src/breakpad_googletest_includes.h:33, from src/common/mac/macho_reader_unittest.cc:39: src/common/mac/macho_reader_unittest.cc: In member function 'virtual void LoadCommand_SegmentBE32_Test::TestBody()': ./src/testing/googletest/include/gtest/internal/gtest-internal.h:133:55: error: converting 'false' to pointer type for argument 1 of 'char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)' [-Werror=conversion-null] (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) ^ ... src/common/mac/macho_reader_unittest.cc:1117:3: note: in expansion of macro 'EXPECT_EQ' EXPECT_EQ(false, actual_segment.bits_64); Change-Id: I0cf88160dbe17b0feebed3c91ad65491b81023fd Reviewed-on: https://chromium-review.googlesource.com/439004 Reviewed-by: Mark Mentovai <mark@chromium.org>
* windows: fix build on pre-Win10 systemsMike Frysinger2017-02-111-0/+5
| | | | | | | | | | The use of DBG_PRINTEXCEPTION_WIDE_C was added for Win10 support, but that define doesn't exist in older versions which means we fail to build. Put it behind an ifdef check to work everywhere. Change-Id: Ibab8bddd5c19b4b50e356f59edeb3873c3104569 Reviewed-on: https://chromium-review.googlesource.com/441525 Reviewed-by: Mark Mentovai <mark@chromium.org>
* windows: update gtest/gmock pathsMike Frysinger2017-02-116-20/+22
| | | | | | | | | The Windows build has rotted a bit with the gtest/gmock updates. Update all of the paths to fix things up again. Change-Id: Id67ce76abfd331c0543aa4bd1138e9cc13a18c75 Reviewed-on: https://chromium-review.googlesource.com/441584 Reviewed-by: Mark Mentovai <mark@chromium.org>
* aclocal: regenerate properlyMike Frysinger2017-02-085-166/+5
| | | | | | | | | Rather than manually include m4 files in configure.ac, let aclocal do its thing and manage aclocal.m4 automatically for us. Change-Id: I50689ec78a85651949aab104e7f4de46b14bca5a Reviewed-on: https://chromium-review.googlesource.com/438544 Reviewed-by: Mark Mentovai <mark@chromium.org>
* fix write() unused-result warningMike Frysinger2017-02-083-4/+6
| | | | | | | | | | | src/client/linux/microdump_writer/microdump_writer_unittest.cc:98:47: error: ignoring return value of 'ssize_t write(int, const void*, size_t)', declared with attribute warn_unused_result [-Werror=unused-result] write(STDOUT_FILENO, identifiable_string, 0); Change-Id: I3f2305fbec0dbd1464de9aeff051e7cba2ee69a2 Reviewed-on: https://chromium-review.googlesource.com/438545 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* Fixed leak of unloaded module lists.Joshua Peraza2017-02-072-2/+6
| | | | | | | | BUG= Change-Id: I6d03820082f793a2eac3c3c2abd184b4acf66aa4 Reviewed-on: https://chromium-review.googlesource.com/438755 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* Address post-submit review comments related to CL #430050Tobias Sargeant2017-02-072-6/+13
| | | | | | | | | | See: https://chromium-review.googlesource.com/c/430050/ BUG=664460 Change-Id: I3cbfbd5b00725bd501f06427eebd976267c4f617 Reviewed-on: https://chromium-review.googlesource.com/438444 Reviewed-by: Primiano Tucci <primiano@chromium.org>
* md5: fix strict aliasing warningsMike Frysinger2017-02-071-2/+2
| | | | | | Change-Id: I64f4570610c625b1325249fd5fa1b9edc3a89ae4 Reviewed-on: https://chromium-review.googlesource.com/438864 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* autotools: refresh config.{sub,guess}Mike Frysinger2017-02-062-64/+100
|
* Remove debugging fprintf in unittest code that prevents rolling breakpadTobias Sargeant2017-02-061-1/+0
| | | | | | | | BUG=664460 Change-Id: I40d8567c659e97415db65cb308c0d39391c44353 Reviewed-on: https://chromium-review.googlesource.com/438364 Reviewed-by: Primiano Tucci <primiano@chromium.org>
* Wire up stack sanitization and skipping to WriteMinidumpTobias Sargeant2017-02-035-40/+232
| | | | | | | | | | | | This makes the parameters stored in the MinidumpDescriptor structure functional for minidumps, analogously to how they are applied to microdumps. BUG=664460 Change-Id: I7578e7a1638cea8f0445b18d4bbdaf5e0a32d808 Reviewed-on: https://chromium-review.googlesource.com/435380 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Revert "Several fixes for broken Mac build"Roman Margold2017-02-014-10/+11
| | | | This reverts commit 5c521532fc0a1b65f42c0d61d2da206eadf318b8.
* Revert "iOS client identifies itself via URL params"Roman Margold2017-02-011-37/+0
| | | | This reverts commit 262a3f50fe5948c2570bbce2cd696e253a88af79.
* iOS client identifies itself via URL paramsRoman Margold2017-02-011-0/+37
| | | | Recently, Crash started applying quotas for crash report uploads to protect the service and its client products from misbehaving product or product version. For the protection to be effective, products need to identify themselves during report upload via URL parameters. This new code makes iOS apps using Breakpad provide the parameters automatically.
* Several fixes for broken Mac buildRoman Margold2017-02-014-11/+10
|
* Sanitize dumped stacks to remove data that may be identifiable.Tobias Sargeant2017-01-319-62/+362
| | | | | | | | | | | | | | | In order to sanitize the stack contents we erase any pointer-aligned word that could not be interpreted as a pointer into one of the processes' memory mappings, or a small integer (+/-4096). This still retains enough information to unwind stack frames, and also to recover some register values. BUG=682278 Change-Id: I541a13b2e92a9d1aea2c06a50bd769a9e25601d3 Reviewed-on: https://chromium-review.googlesource.com/430050 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Fixed a bug where cv record size was not correctly checked.Joshua Peraza2017-01-301-4/+6
| | | | | | | | BUG= Change-Id: I6c1d78cfe344c7b90a03f6df35193d67623bfd89 Reviewed-on: https://chromium-review.googlesource.com/434094 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* Change symbol upload message to include 'breakpad'Bruce Dawson2017-01-281-1/+1
| | | | | | | | | | | | | | | | The breakpad symbol uploader prints messages of this form: Uploaded symbols for windows-x86/eventlog_provider.dll.pdb/... This is confusing because many people see this message and assume that symbols are being uploaded to a symbol server. This changes the message to clarify what is happening. BUG=677226 Change-Id: Id6fdd8497d0cb97be43c4af010058aab9d84375c Reviewed-on: https://chromium-review.googlesource.com/434187 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Populate stack frames with unloaded module info.Joshua Peraza2017-01-1915-13/+161
| | | | | | | | | | | | | | | | | | | This CL hits lots of source files because: 1. An update to the CodeModule virtual class. I added an is_loaded method to specify whether the module is loaded. There were several mocks/test classes that needed to be updated with an implementation. An alternative to this route would be to modify MinidumpUnloadedModule::code_file to prepend "Unloaded_" to the module name. 2. Added an unloaded_modules parameter to StackFrameSymbolizer::FillSourceLineInfo. BUG= Change-Id: Ic9c7f7c7b7e932a154a5d4ccf292c1527d8da09f Reviewed-on: https://chromium-review.googlesource.com/430241 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* Add API to skip dump if crashing thread doesn't reference a given module (2)Tobias Sargeant2017-01-191-0/+8
| | | | | | | | | | | Follow-up CL to add relevant code to the copy constructor and assignment operator for MinidumpDescriptor BUG=664460 Change-Id: I71c0ad01d8686a9215a718cebc9d11a215ea342c Reviewed-on: https://chromium-review.googlesource.com/430711 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Add API to skip dump if crashing thread doesn't reference a given moduleTobias Sargeant2017-01-1810-62/+149
| | | | | | | | | | | | | | | | | | | | | | | | This CL makes it possible to skip a dump if the crashing thread doesn't have any pointers to a given module. The concrete use case is WebView where we would like to skip generating microdump output when webview is unreferenced by the stack and thus cannot be responsible for the crash in a way that would be debuggable. The range of interesting addresses is chosen by examining the process mappings to find the one that contains a pointer that is known to be in the right shared object (i.e. an appropriately chosen function pointer) passed from the client. If the extracted stack does not contain a pointer in this range, then we do not generate a microdump. If the stack extraction fails, we still generate a microdump (without a stack). BUG=664460 Change-Id: If19406a13168264f7751245fc39591bd6cdbf5df Reviewed-on: https://chromium-review.googlesource.com/419476 Reviewed-by: Robert Sesek <rsesek@chromium.org> Reviewed-by: Primiano Tucci <primiano@chromium.org>
* Added classes to support reading unloaded module lists in minidumps.Joshua Peraza2016-12-166-1/+685
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The implementations of Module/UnloadedModule and ModuleList/UnloadedModuleList are very similar. They have been made separate classes because they operate on different structs, complicating factoring code into a base class and have sufficiently different implementation that templates would not be suitable. When unloaded modules have partially overlapping ranges, the module shrink down feature is used to move the start of the higher range to the end of the lower range. If two unloaded modules overlap identically, the second module will not be added to the range map and the failure ignored. Places where MinidumpUnloadedModule differs from MinidumpModule: code_identifier: the android/linux case is deleted since cv_records never exist. debug_file/debug_identifier/version: always return empty strings. Read: an expected size is provided as opposed to MD_MODULE_SIZE. A seek is used if there are extra, unused bytes. Places where MinidumpUnloadedModuleList differs from MinidumpModuleList: Read: entry and header size is provided in the header in addition to count. This changes the checks and handling of padding. Failures from StoreRange are ignored. GetMainModule: always returns NULL. BUG= Change-Id: I52e93d3ccc38483f50a6418fede8b506ec879aaa Reviewed-on: https://chromium-review.googlesource.com/421566 Reviewed-by: Joshua Peraza <jperaza@chromium.org>
* Fix unit tests expecting no output when a microdump is suppressed.Tobias Sargeant2016-12-121-9/+9
| | | | | | | | BUG= Change-Id: Ie4d190c68ecbd8709874a3f1ceb872b94b36914f Reviewed-on: https://chromium-review.googlesource.com/419036 Reviewed-by: Primiano Tucci <primiano@chromium.org>