aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* Add optional field indicating multiple symbols at an addressMike Wittman2017-11-2912-148/+324
| | | | | | | | | | | | | | | | | | Adds an optional 'm' as the first field in FUNCTION and PUBLIC records to indicate that the address corresponds to more than one symbol. Controls this by a command line flag for now to give symbol file users a chance to update. Also reduces the number of IDiaSymbols retained in memory to one per address. This reduces memory consumption by 8% when processing chrome.dll.pdb. Updates the processor to parse the new optional field. Bug: google-breakpad:751 Change-Id: I6503edaf057312d21a1d63d9c84e5a4fa019dc46 Reviewed-on: https://chromium-review.googlesource.com/773418 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Update test data for identical-code-folded symbol changesMike Wittman2017-11-286-6/+6
| | | | | | | Bug: google-breakpad:749 Change-Id: I2e56c8414c98c95372bd73811581cf1e98efe88e Reviewed-on: https://chromium-review.googlesource.com/791914 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Make identical-code-folded symbol output more consistent between runsMike Wittman2017-11-141-37/+43
| | | | | | | | | | | | | | Consistently output the "least" symbol by decorated name when multiple symbols share an address. Testing with chrome.dll.pdb the diffs between the new and old output look sensible, and this is actually ~20% faster than the existing implementation. Bug: 749 Change-Id: Ie638559b63f0eb2dcb80b1ebb579228d62c63bb2 Reviewed-on: https://chromium-review.googlesource.com/758885 Reviewed-by: Mark Mentovai <mark@chromium.org>
* List missing 64-bit arches in the bundled curlTomas Popela2017-11-131-1/+2
| | | | | | | | | | | Currently the bundled curl fails to build on ppc64/ppc64le or s390x, because it has an incomplete list of 64-bit arches (where long is 64-bit). Similar version is currently used as a downstream patch in Fedora https://src.fedoraproject.org/rpms/firefox/blob/master/f/build-ppc64-s390x-curl.patch Change-Id: Id27bfe1ca048340c45926f5435336941c080f132 Reviewed-on: https://chromium-review.googlesource.com/765453 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Add index-based set functionality to NonAllocatingMap.Robert Sesek2017-11-072-31/+79
| | | | | | | | | | This enables repeatedly setting a value based on index, which avoids a linear scan of the entry table after the first SetKeyValue(). Bug: chromium:598854 Change-Id: I9964670a09dcd8ff76180d031a373f20990bf4d8 Reviewed-on: https://chromium-review.googlesource.com/757579 Reviewed-by: Mark Mentovai <mark@chromium.org>
* dump_symbols: Stop rejecting files with Android packed relocation sections.Peter Collingbourne2017-11-071-31/+0
| | | | | | | | | | | | The lld linker has native support for creating packed relocation sections, and as a result we can expect files with these sections to have symbols. Bug: chromium:742655 Change-Id: I48a50bff041146f51b3a8b730d7a778f832787f6 Reviewed-on: https://chromium-review.googlesource.com/754239 Reviewed-by: Mike Frysinger <vapier@chromium.org> Reviewed-by: Mark Mentovai <mark@chromium.org>
* Create LongStringDictionary and replace SimpleStringDictionary on iOSYi Wang2017-11-037-21/+602
| | | | | | | | | | | This relands fd0a0d2b7ae9dd3d8a02b6a12e7941f7189fbb6c which was reverted in 5dad29423e62292c6ff468cabfee4422ba55b18b, with a fix for guarding kMaxSuffixLength which only used in assert()s with macros which breaks chromium.mac/ios-device. Change-Id: I5ee21b7f290517d6e7a0ef90b693b97f92392549 Reviewed-on: https://chromium-review.googlesource.com/751922 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Don’t set exit_after_write to false for tvOS.Adam Harrison2017-11-031-0/+2
| | | | | | | | | On tvOS, the app fails to shutdown after write. Allow exit_after_write to be false for tvOS in order to force an exit() after write. Change-Id: Ib2e1e1d03264a2972f5607b3070f4a6287aa0a98 Reviewed-on: https://chromium-review.googlesource.com/752071 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Revert "Create LongStringDictionary and replace SimpleStringDictionary ↵Mark Mentovai2017-11-027-599/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | usages in client/ios/Breakpad.mm." This reverts commit fd0a0d2b7ae9dd3d8a02b6a12e7941f7189fbb6c. Reason for revert: Build failures reported at https://chromium-review.googlesource.com/c/chromium/src/+/750591#message-cc4f7dd486fa1da7373ad5d83d56f550d607d429 Failed build on chromium.mac/ios-device: https://build.chromium.org/p/chromium.mac/builders/ios-device/builds/73163, https://logs.chromium.org/v/?s=chromium%2Fbb%2Fchromium.mac%2Fios-device%2F73163%2F%2B%2Frecipes%2Fsteps%2Fcompile%2F0%2Fstdout [637/3593] CXX obj/third_party/breakpad/client/long_string_dictionary.o FAILED: obj/third_party/breakpad/client/long_string_dictionary.o […] ../../third_party/breakpad/breakpad/src/common/long_string_dictionary.cc:46:16: error: unused variable 'kMaxSuffixLength' [-Werror,-Wunused-const-variable] const size_t kMaxSuffixLength = 4; ^ 1 error generated. […] [641/3593] CXX ios_clang_arm64/obj/third_party/breakpad/client/long_string_dictionary.o FAILED: ios_clang_arm64/obj/third_party/breakpad/client/long_string_dictionary.o ../../third_party/breakpad/breakpad/src/common/long_string_dictionary.cc:46:16: error: unused variable 'kMaxSuffixLength' [-Werror,-Wunused-const-variable] const size_t kMaxSuffixLength = 4; ^ 1 error generated. Change-Id: I285eaac6abfcb7d173a0d1e4998b92d5c8dd6ecb Reviewed-on: https://chromium-review.googlesource.com/751723 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Rename an argument named "register" to "reg".Peter Collingbourne2017-11-021-5/+5
| | | | | | | | | | This silences a warning in newer versions of clang that complains about "register" being a deprecated keyword. Bug: chromium:780692 Change-Id: If354b9b18421e3e910849b385c44207e0ce02590 Reviewed-on: https://chromium-review.googlesource.com/750362 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Fix double declaration of tgkill when using Android NDK Headers.Nicholas Baldwin2017-10-301-7/+1
| | | | | | | | | | | | | As of Android API level 16 tgkill is declared in the NDK version of signal.h, which conflicts with the static definition found in src/client/linux/handler/exception_handler.cc. This change removes the static tgkill definition and replaces its use with sys_tgkill from the linux syscall support library. Bug: Change-Id: Ic70addd8a064cfa36345d86b7e36409e2089e909 Reviewed-on: https://chromium-review.googlesource.com/738912 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Create LongStringDictionary and replace SimpleStringDictionary usages in ↵Yi Wang2017-10-277-21/+599
| | | | | | | | | client/ios/Breakpad.mm. Bug: Change-Id: I401028f5d90417d79fb109b510aaa9660a039b44 Reviewed-on: https://chromium-review.googlesource.com/688301 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Avoid skipping an initializer with a gotoBruce Dawson2017-10-261-6/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | C++ doesn't allow skipping initialization with a goto. This means that this code is illegal: void func(bool b) { if(b) goto END; int value = 0; //error C2362 with /permissive- //... value used here END: return; } Adding an extra scope makes the code legal. This problem is only detected with /permissive- but now that compiling with this switch is practical we might as well stay /permissive- clean: https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/ Note that compiling /permissive- clean only works with the 10.0.16299.0 SDK which currently has other issues... Bug: 773476 Change-Id: I54e64aaef46d70a817cf7da272f76d9ae5f6a6f7 Reviewed-on: https://chromium-review.googlesource.com/740287 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Roll src/src/third_party/lss/ a91633d17..e6527b0cd (1 commit)Torne (Richard Coles)2017-10-192-2/+2
| | | | | | | | | | | | | | | https://chromium.googlesource.com/linux-syscall-support/+log/a91633d17240..e6527b0cd469 $ git log a91633d17..e6527b0cd --date=short --no-merges --format='%ad %ae %s' 2017-10-03 torne Fix use of non-whitelisted syscalls on Android. Created with: roll-dep src/src/third_party/lss Bug: 770449 Change-Id: Ia9556ba31f61c0bd8a5dcd4b032cdb1f321d7a57 Reviewed-on: https://chromium-review.googlesource.com/728357 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Provide helper wrappers for basename(3) and dirname(3)Tobias Sargeant2017-10-1810-31/+220
| | | | | | | | | | This hides the need to provide mutable C strings, and unifies existing basename calls and variations in a single location. Change-Id: Idfb449c47b1421f1a751efc3d7404f15f8b369ca Reviewed-on: https://chromium-review.googlesource.com/725731 Reviewed-by: Mark Mentovai <mark@chromium.org> Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Move main executable handling out of procmaps parser loop.Peter Collingbourne2017-10-171-19/+21
| | | | | | | | | | | | | | | | | | | | | | | | If the mapping for the main executable needed to be merged (for example, if it was linked with lld and therefore contains an r mapping followed by an r/x mapping), we would never reach the code that makes it the first module. Handle that situation by moving that code into a separate loop. This fixes an issue where breakpad_unittests fails on Android devices when linked with lld. It appears that the glibc dynamic loader happens to always load executables (or at least the executables that we create) at a lower address than DSOs, so we never hit this bug on desktop Linux. Testing: "make check" with both gold and lld as linker. Also breakpad_unittests when patched into Chromium on Linux (lld) and Android (gold and lld). Bug: chromium:469376 Change-Id: I6329e4afd2f1bf44c25a6c3e684495e21dba83a6 Reviewed-on: https://chromium-review.googlesource.com/722286 Reviewed-by: Mike Frysinger <vapier@chromium.org> Reviewed-by: Mark Mentovai <mark@chromium.org>
* Rename src/common/memory.h to memory_allocator.h.Ted Mielczarek2017-10-1715-33/+35
| | | | | | | | | | | | memory.h shadows a system header which normally isn't a problem because of the include paths in Breakpad, but the Firefox build system winds up with src/common in the include path so we've had a workaround for this for years. Renaming the file lets us get rid of that workaround and shouldn't hurt anything. Change-Id: I3b7c4239dc77f3b2b7cf2b572a0cad88cd7e8522 Reviewed-on: https://chromium-review.googlesource.com/723261 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Add -s flag to microdump_stackwalk for dumping stack contents.Tobias Sargeant2017-10-176-30/+32
| | | | | | | | | | | | | | | Note that the current MicrodumpProcessor::Process implementation has a bug due to the fact that it creates a local Microdump instance, and then holds onto a pointer to the object returned by microdump.GetMemory() which is destroyed when microdump goes out of scope. This CL fixes the crash by making Microdump outlive MicrodumpProcessor, which is the same pattern that Minidump/MinidumpProcessor uses. Bug: google-breakpad:748 Change-Id: I554b46d309649cf404523722bd9ee39e17a10139 Reviewed-on: https://chromium-review.googlesource.com/720809 Reviewed-by: Primiano Tucci <primiano@chromium.org> Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* Convert {mini|micro}dump_stackwalk argument parsing to getopt.Tobias Sargeant2017-10-162-105/+131
| | | | | | | Bug: google-breakpad:748 Change-Id: I70b16ba6456df0be038d6c7170eb22b093fdc65d Reviewed-on: https://chromium-review.googlesource.com/718756 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* ios: Adds a no-Mach exception handlerAdam Harrison2017-10-123-0/+447
| | | | | | | | | | This exception_handler_no_mach does not use Mach for exception handling so that clients such as tvOS and watchOS that do not support mach messages can handle POSIX signals. Change-Id: I4a4574e58834bc590e110e6ecd1825f8af1437a2 Reviewed-on: https://chromium-review.googlesource.com/714276 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Android: Use sys/types.h instead of stdint.h for sys/user.hJoshua Peraza2017-10-061-1/+1
| | | | | | | | | | When using traditional headers, sys/types.h is needed to define __u64 for sys/user.h. Previously, we thought this would be provided by stdint.h, but it is not. Change-Id: I0e648712f4ef1e303104a5264d3d2d0b218f5d45 Reviewed-on: https://chromium-review.googlesource.com/705267 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Fix minidump_dump_test after 6d0287851fabMark Mentovai2017-10-051-1/+0
| | | | | | Change-Id: I9957f27cd134f862b9831e4b1d90f8a014eb37b6 Reviewed-on: https://chromium-review.googlesource.com/701740 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Dump Crashpad extension structures in minidump_dumpMark Mentovai2017-09-274-18/+463
| | | | | | | | | | | | | | | | | | | | | | | | | | This is currently mostly useful to expose the annotations that Crashpad stores in minidumps. Example output: MDRawCrashpadInfo version = 1 report_id = 01234567-89ab-cdef-0123-456789abcdef client_id = fedcba98-7654-3210-fedc-ba9876543210 simple_annotations["channel"] = canary simple_annotations["plat"] = OS X simple_annotations["prod"] = Chrome_Mac simple_annotations["ver"] = 59.0.3069.0 module_list[0].minidump_module_list_index = 0 module_list[0].version = 1 module_list[0].simple_annotations["ptype"] = crashpad-handler module_list[1].minidump_module_list_index = 28 module_list[1].version = 1 module_list[1].list_annotations[0] = abort() called Change-Id: I00ba291f93ea3a37fc3754c651b3ccc542e5b8b2 Reviewed-on: https://chromium-review.googlesource.com/688416 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Only run GYP for Windows targets on WindowsMark Mentovai2017-09-272-17/+22
| | | | | | | | | | | | | | This prevents GYP from running on macOS, where it would produce a bunch of pointless .xcodeproj directories for Windows libraries and tools that could never possibly build. Those would pollute “git status” output and other operations. Check in a new default.xml generated from DEPS too. It doesn’t correspond to this change, but I should have done this in 26b988681d5b. Change-Id: I034a5b30d13fdcc14911fc1354504375752d6144 Reviewed-on: https://chromium-review.googlesource.com/688045 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Fix MSVC build on 64-bitOrgad Shaneh2017-09-257-17/+17
| | | | | | | | | | | Mostly int<->size_t implicit conversions. Warning 4366 (The result of the unary '&' operator may be unaligned) appears in minidump.cc:907, but I don't know why. It looks aligned to me. Change-Id: I641942adc324f8f9832b20662083dc83498688a8 Reviewed-on: https://chromium-review.googlesource.com/637390 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Refresh refresh_binaries.batOrgad Shaneh2017-09-241-12/+8
| | | | | | Change-Id: I15687f35e560eb1e25bb4d7483c8f6fe5fdf210e Reviewed-on: https://chromium-review.googlesource.com/637391 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Restore missing #include <stdint.h> to Android <sys/user.h>Mark Mentovai2017-09-201-0/+4
| | | | | | | | | | This was lost in afa9c52715db, but it turns out that it’s still necessary. Bug: google-breakpad:733 Change-Id: I4e0e4e4d2e80c22df1ff6b82e471905773c940a3 Reviewed-on: https://chromium-review.googlesource.com/675732 Reviewed-by: Joshua Peraza <jperaza@chromium.org>
* Replace remaining references to 'struct ucontext' with 'ucontext_t'Mark Mentovai2017-09-206-33/+33
| | | | | | | | | | | | | | | | | This relands https://chromium.googlesource.com/breakpad/breakpad/src/+/e3035bc406cee8a4d765e59ad46eb828705f17f4, which was accidentally committed to breakpad/breakpad/src, the read-only mirror of src in breakpad/breakpad. (Well, it should have been read-only.) See https://crbug.com/766164. This fixes issues with glibc-2.26. See https://bugs.gentoo.org/show_bug.cgi?id=628782 , https://sourceware.org/git/?p=glibc.git;h=251287734e89a52da3db682a8241eb6bccc050c9 , and https://sourceware.org/ml/libc-alpha/2017-08/msg00010.html for context. Change-Id: Id66f474d636dd2afa450bab925c5514a800fdd6f Reviewed-on: https://chromium-review.googlesource.com/674304 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Fix googletest/googlemock buildMark Mentovai2017-09-193-15/+15
| | | | | | | | | | | | | | 1. testing.gyp is a gyp file, not a gypi file. It is only referenced in “dependencies” sections. The gypi extension is used for files that are included by an “includes” section. 2. Update paths in testing.gyp to reflect the real locations of googletest and googlemock following their merge into a single repository. Change-Id: If9c356d93aa5ffda54af46fbed648baa2274dac6 Reviewed-on: https://chromium-review.googlesource.com/673404 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* android: Don’t compete with NDK API >= 21 over NDK structuresMark Mentovai2017-09-182-39/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Chrome uses API 16 for 32-bit builds and API 21 for 64-bit builds. The NDK’s <link.h> provides r_debug and link_map structure definitions only at API 21 and above. Breakpad used a custom <link.h> to define these structures only during 64-bit builds, which worked for Chrome’s purposes. However, other consumers may wish to build Breakpad at arbitrary API levels without regard to bitness. This alters Breakpad’s custom <link.h> to correctly check the NDK API level rather than target CPU bitness. Likewise for <sys/user.h> on 32-bit x86, which provided a typedef for user_fpxregs_struct to user_fxsr_struct. API 21 and above, as well as the unified headers at any API level, always name the structure user_fpxregs_struct. Definitions for 64-bit ARM’s user_regs_struct and user_fpsimd_struct have been removed from Breakpad’s copy of <sys/user.h>. The header claims that these fallback definitions are only necessary with NDK r10, which should no longer be in use even by Chromium, which now uses NDK r12b. This removes the Chromium-specific ANDROID_NDK_MAJOR_VERSION macro from use entirely. Fixes https://stackoverflow.com/questions/44141159/ and b/65630828. Bug: google-breakpad:733 Change-Id: I5841906297cd15b15ce48b73fd8332fd40afc9a0 Reviewed-on: https://chromium-review.googlesource.com/665740 Reviewed-by: Primiano Tucci <primiano@chromium.org> Reviewed-by: Joshua Peraza <jperaza@chromium.org>
* Add new test data to Makefile.amTobias Sargeant2017-09-142-1/+2
| | | | | | | | | This should have been done as part of 2b3be5 Bug: google-breakpad:746 Change-Id: I7eae33166cff238d72293e659abc90e724b365dc Reviewed-on: https://chromium-review.googlesource.com/667102 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* drop bundled gflags from the checkoutMike Frysinger2017-09-133-534/+2
| | | | | | | | | | | | The only code using gflags is google_crash_report_sender, and nothing builds or tests that code currently. Switch it over to using system versions of gflags so we can drop the local prebuilts. Tested local builds by hand of the tool. Bug: google-breakpad:360 Change-Id: I75d79b176468c948773079a54d87e70709feaf87 Reviewed-on: https://chromium-review.googlesource.com/665799 Reviewed-by: Mark Mentovai <mark@chromium.org>
* google_crashdump_uploader_test: integrate test into normal buildMike Frysinger2017-09-132-3/+111
| | | | | | | | | | This is turned on in the gyp file, but not our automake build. Include it there to make sure we don't break it and keep coverage up. Bug: google-breakpad:360 Change-Id: If54ff04e62641b1c4a550db8a09f5ac09ff8765c Reviewed-on: https://chromium-review.googlesource.com/665798 Reviewed-by: Mark Mentovai <mark@chromium.org>
* drop glog from the checkoutMike Frysinger2017-09-134-11/+0
| | | | | | | | | Nothing appears to be using this anymore, so stop bundling it. Bug: google-breakpad:360 Change-Id: Id95b36994379da92f8ef2a81754b3da5f1f79cae Reviewed-on: https://chromium-review.googlesource.com/665503 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Parse DWARF 4 line tables correctlyMark Mentovai2017-09-131-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Breakpad’s DWARF line table reader only understood line tables at the level of DWARF 2. This wasn’t a problem because LLVM only produced line tables at this level, even when generating DWARF 4. But LLVM would like to output DWARF 4 line tables when generating DWARF 4, and Breakpad needs to understand this format. (Meanwhile, it seems that GCC has used DWARF 4 line tables with DWARF 4 output since 4.5.0, 2010-04-14.) DWARF 3 line tables are fully compatible with DWARF 2 (assuming that nothing needs “prologue end,” “epilogue begin,” or “isa”, and opcodes related to these fields are properly skipped). DWARF 4 changes the line number program header slightly to include a “maximum operations per instruction” field. This field must be recognized, but can safely be ignored (and assumed to be always 1) if VLIW architectures are not supported (they aren’t). DWARF 4 also introduces a “discriminator”, whose opcode can also be skipped if these values are not needed (they shouldn’t be). This recognizes the “maximum operations per instruction” field when processing DWARF 4 line tables, but asserts that its value is 1 and otherwise ignores it. This is not compatible with VLIW architectures that set this field to a value other than 1. Such architectures are irrelevant to Breakpad, and mainline GCC and the proposed LLVM patch always set this field to 1. There are other things that could be extracted from DWARF 3 and 4 line tables that aren’t currently extracted (although these are currently irrelevant to Breakpad too). Bug: google-breakpad:745 Change-Id: I5bf9c0b1aa654849c9cce64e60682447d10be8ba Reviewed-on: https://chromium-review.googlesource.com/663441 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Increase the maximum number of modules allowed in minidumps.Tobias Sargeant2017-09-011-3/+3
| | | | | | | Bug: google-breakpad:743 Change-Id: I2e40b5cc36c012c18a1c4637634fb139b0d8e14d Reviewed-on: https://chromium-review.googlesource.com/647886 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Fix memory leak in ppc64 stackwalkerTobias Sargeant2017-08-301-2/+3
| | | | | | | | BUG=757166 Change-Id: I967a6903332b9c3d16b583f7fa4d3c9c44c2f729 Reviewed-on: https://chromium-review.googlesource.com/643267 Reviewed-by: Leonard Mosescu <mosescu@chromium.org>
* Update GYP to 324dd166b7c0b39d513026fa52d6280ac6d56770Mark Mentovai2017-08-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This picks up 3½ years of changes, but 4ff48eb18307 is really what’s needed to un-break “gclient sync” in Breakpad. e16906f6a2db android: Add support for multiarch builds d49e6fec9631 Adds xcode-ninja flavor for Xcode wrapper projects a336035b6d4e Avoid duplicating non-configuration settings when merging configurations 4e05c3342e09 Revert "Fix None target type with Ninja build." d4779eb1916a Use context manager to manage OS environment in tests 5a8a04430afd Add MASM settings support to msvs_settings 9a184eea4849 Make test/cxxflags use a user define instead of __OPTIMIZE__ 56a70c5641bb gyp: use all processors instead of hard-coded 8 5fd7ce16426b gyp: 1% faster by optimizing IsPathSections bf9a0ad1a214 gyp: fix O(n^2) in dependency calculations 1cd602be60dd gyp: use a set() in DeepDependencies for less O(n^2) dc866c743496 gyp: cache conditional ASTs for 3 CPU seconds (5%) gain aec8079bd717 Remove the default setting for clcompile_cmd in msvs-ninja 1fa63533989a win: disable two flaky tests on gyp-win32 b5dd37303a71 Show ASM output file instead of input file, just like CC and CXX. R=scottmg@chromium.org 8929839ae384 gyp: avoid copying items that will be deleted 6d8eda691886 gyp: isinstance -> type for another 1-5% save 9f14141afe73 gyp performance: Another fixed O(n^2) in dependency calcs f983231492d1 Test handling of empty RULE_INPUT_DIRNAME and fix this on android 09af1810a11f 1-5% faster gyp: Use a simpler deepcopy 4e6d425104c2 gyp: Optimize IsStrCanonicalNumber for common case fc1e3d52ccc5 android: only emit multilib variables for target builds 152521d7f307 Revert "gyp: use all processors instead of hard-coded 8." c2f33dbfd5b1 Append src path to compiler path retrieved from build configuration 11b270c9c7d5 Make the command cache use the directory name as part of the cache key 03c3c47fb42e Add xcode_ninja_target_pattern to xcode-ninja generator 63de31e166cc Silence pylint for the imported OrderedSet class 6e8e8eb49ad1 Prefer MSVS 2013 over MSVS 2010 147a8aebd6cc Remove pylintrc and enable pylint checks for the Xcode generator 54538a15d434 android: set GYP_VAR_PREFIX as a local variable in actions/rules 1a622e23d0c3 ninja/mac: Update libtool noise filter for Xcode 5 9acbe0c6f78a Don't exclude sources for 'none' targets 3efe68d8cf67 Fix link step when specifying CLANG_CXX_LIBRARY a981c9389d12 ninja win: filter 64 bit idl processing, and confirm in test dbcdbde823d2 Fix for some rules not being run if their trigger is also an action dependency 482fd5de5c82 Use relative path/dir msbuild variables to map $(InputDir) and $(InputPath) fb36c3fe0124 msvs: Revert r1920 and add a test for excluded idl 11e243c9fd62 Fix msvs-ninja OutputDirectory path 0ff4e1aa1964 android: Handle inputs with spaces inside make functions 41f4de6e6db4 gyp: use all processors instead of hard-coded 8 23d664144f92 Fix msvs-ninja clean build command / target 3917682a16d5 Add option for link concurrency 018065bdc1a6 Add unittest for 'AR' in 'make_global_settings' 0c9a7aa9446f Override the user's language settings during tests e97dbe88f23b ninja win: Remove obsolete comment, and make sure cc/cxx are always overridden f6d25e9ca24a Use context manager to manage OS environment in tests f9242383d34e Teach Ninja generator about 'AR' in 'make_global_settings' 5a0658e560c0 First crack at adding a GYP_GENERATOR for determining various things 133926d7f47e Add unittest for 'LD' in 'make_global_settings' 822a998ac082 Remove unused parameters from test code 466a82eba30e Revise unittest for 'LD' in 'make_global_settings' e35391e5b016 Revise unittest for 'AR' in 'make_global_settings' 4d45bd7473c8 Teach Ninja generator about 'LD'/'LD.host' specified in 'make_global_settings_ld' 8746d8100e41 Teach Ninja generator about 'AR.host' specified in 'make_global_settings' dacdd3802559 [gyp][Android] Implement TestGypAndroid.run_built_executable 63a1f78eb0ec ninja: Pass .so files outside of --start-group/--end-group c5c01bbc72f4 msvs: ensure that failing actions make the build fail with multiple actions 796b58cddb84 Makes analyzer strip off a leading path separator 1c4be478a439 Introduce '--no-duplicate-basename-check' option to disable the check of duplicate basenames 867a23f4b596 Xcode: Add xcdatamodeld = wrapper.xcdatamodeld in extension_map d1e5ccaf05ba Fixes two bugs in analyzer 80e01de623ed Fixes bug in path handling of analyzer b886dac6179e Add test files for https://codereview.chromium.org/406523005/ 39fd3e8ea1c8 ninja/win: Put common msvs_system_include_dirs into %INCLUDE% f536bafefff9 This CL adds support for extension in GYP a48744759a8a ninja: Add support for 'ninja_use_console' in actions/rules b95cbeb2b4a5 Changes analyzer to search for targets cb818ae005d8 Enable custom suffixes for Mac bundles 39bb8956231c Avoid infinite recursion with identity variables ac2684beed6e Updates analyzer to output to a file cd5d655d509f Guard against configurations without 'xcode_settings' 6bd80e4bba1e Pull in relevant targets when using xcode-ninja 93303ec2a58c Currently I've special cased gyp* file modifications higher in the stack. By that I mean if a gyp* file has been modified I don't run analyze and assume everything has changed. This change adds support for modification to gyp* files. If a gyp* file has changed it assumes all targets in the file are modified. Similarly if an included file has been modified all targets in the file that did the include are considered modified. Lastly, if one of the modified files is specified on the command line via -I the I early out and assume everything needs to be recompiled 474e6f6c6772 Style changes for analyzer __ -> _ and lots of single newlines to double newlines ed274e3ea588 Provide a way to suppress implicit MIDL generation rules for actions 8432ec2cc86f Removes old way to specify files to look for ce177a087448 Makes the analyzer output the set of targets needing a build b38e5f2f93fa ninja win: don't expect pdb to be generated when GenerateDebugInformation: false 07465a390fff android: Make buildbot able to use a custom manifest fa401a9913d3 Makes analyzer output names of all executable target types 43a3b907eb20 android: Support host multilib builds 02717b7ddda2 Support for custom NM/readelf binaries in your toolchain 6760f5b1a485 Makes matching of build files work when absolute 1ff523f4eccd Changes the ninja generator to output phony targets for uninteresting targets 94b57d39a88c Changes ninja generator to only output empty names if not already output 80a221d3ac20 Fix indentation for emacs and add missing keyword 911f177ec4ce android: Don't emit useless info into generated makefiles 46282cedf40f android: Add a way to override build system variables ce6c5076aa98 Don't return unfound VS version, raise instead 0eedec84850c Don't run windows tests on other platforms c5aaab5e438b Adds swift file support to xcode generation 397b1c684b0b I need this change to create Windows 8.1/Windows Phone 8.1 projects that compile modules that can be consumed by Windows Store Applications (WinRT) d77f8ea48f8c Revert r1978 and r1979 825a7599122b Revert "I need this change to create Windows 8.1/Windows Phone 8.1 projects that compile modules that can be consumed by Windows Store Applications (WinRT)." 0f464a10fcfd ninja win: Add support for 'CallingConvention' f79c48344324 Added msvs_enable_winrt to enable creating Windows Store compatible projects for .dlls that are consumed by WinRT applications 05c509393b3f Add support for MIDL include directories 55e3f25dfe2a ninja: Don't rerun actions/rules based on where gyp was invoked 2be082cb9513 Add Ninja support for MSVS $(TargetExt), $(TargetFileName) and $(TargetPath) macros 9e65902d3601 gypd: update with required default variables 9202573e476f android: Build against NDK prebuilts, not system libraries a61e86088492 Add (partial) support for assets catalog a79c3560865f Simplify and optimize FindCycles 540e4b1e665a Stop checking for duplicate basenames b13d8f243da1 Moves warning about invalid targets into 'invalid_targets' in result a83e5acab1a8 Add indentation offset guess for gyp emacs mode 723d919ae70c Switch to 2013 now that it's what's on the bots f491c0b3aae9 msvs: Fix rule dependencies for VS2013 487c0b6ae8b4 Set ZERO_AR_DATE=1 when running libtool cb9f256d75f5 ninja win: Don't return unfound VS version, raise instead 9c58d52d6b6c Fix dependency broken on mac when building FAT binaries f1c42f73e4cc Revert r1998, it breaks iOS builds addc5ea33ab3 win: Use the _winreg module for registry access 0131edea33bb ninja win: Add msvs emulation for FloatingPointModel fb8a7bd65062 Add support for "else if" in gyp conditions 66b3c809f3d9 Mechanical changes to cleanup pylint presubmit checks acf3295fe144 Add back support for /Gv now that gyp-win64 has VS2013 4621f4d44814 Initialize struct flock for AIX with O_LARGEFILE used by Python 0a381c067483 ninja/win: Let link-wrapper convert /s to \s in the linker command fe00999dfaee android: don't try to handle suppress_wildcard fa59ed0b9a01 Fixed Gyp Xcode generator for libraries with identical names d75685990507 Cache data for included files in the multiprocess load codepath ce7a555f1c58 win: Add support for VS2015 201a8c83eb33 Add support for iOS WatchKit apps in GYP 32ca1cd8e010 Add support for generating an Eclipse .classpath file 8c31354f5e0c Fix mixed line endings warning 4f4c7cb5a63e Add TestGypXcodeNinja to run tests against the xcode-ninja generator f1dc682b70a6 Fix: xcode-ninja should generate Xcode workspace into generator_output cdf037c1edc0 Fix: xcode-ninja should copy the product extension to the wrapper project 82b08049cc0b Set ZERO_AR_DATE=1 when running libtool 8b69f7d23df5 Add support for generating an Eclipse .classpath file (bug fix) 789a019a8320 Don't serialize linking for the make generator by default 194ec65a55ed Revert 2011 'Fixed Gyp Xcode generator for libraries with identical names.' 91a89564da3d Add 'depfile' option to actions 3dde7bfb50a6 don't assume bash is installed 28384e55a5c8 msvs/ninja win: Fix support for ImageHasSafeExceptionHandlers adb7d24b9fc1 Revert "msvs/ninja win: Fix support for ImageHasSafeExceptionHandlers" b28bd7ddd143 win: 'EnableEnhancedInstructionSet': '5' now enables /arch:AVX2 104e21ecf6f2 mac: Followup to ZERO_AR_DATE, touch the -o archive, rather than expecting only one 4d7c139b1820 win: Add NoImportLibrary flag for ninja generator 67000714d51e Reland "msvs/ninja win: Fix support for ImageHasSafeExceptionHandlers" 16f9f4566f5d msvs: Prefer x64 toolset if we are running on 64-bit 6194e32f7fcb Make msvs-ninja work for target-arch=x64 34640080d08a ninja/posix: Introduce support for arflags variable 7cd601835636 Updating gyp repo for git, preparing for cq dd831fd86e7a Fix script url a5bd08f28629 Adds the ability for 'copies' in Xcode project files to specify the 'Code Sign on Copy' option 002ebe4420a3 Fixed version of https://codereview.chromium.org/748793002 50ab31edc847 Fix typo in ternary operator 4a9b712d5cb4 Fix gyp analyzer generator on mac d9823985797f Convert plist and strings to binary for iOS 28c00336a403 Bump Xcode compatibility version from 45 (Xcode 2.4-3.1) to 46 (Xcode 3.2) 2cd9d0633c96 [ninja-xcode] Include action inputs in hybrid builds d174d75bf69c Export generator flavor to gyp scripts 2b44e5987d5a Add missing identity variables to gypd generator e1c8fcf74b68 Assert when source is an absolute path c5859a298166 Migrate GYP docs over from the wiki 69dfb493a22f LLVM_LTO support for make / ninja 2889664b9fa8 Address scottmg comments from https://codereview.chromium.org/1003273007/ 2a5511bd901f Improve generated Makefile rules for rules several outputs 2f66a3f94953 Whitespace change to test the new GYP waterfalls 3601f26003c6 Make dump_dependency_json.py write <| list files to the output directory rather than the source tree 8866260996c0 win: prefer amd64_x86 compiler on >= 2013, not just 2013 0bb67471bca0 Slightly better docs for git instead of svn f34b9aa7c9d6 Remove the Android generator 9f594095c5b1 Added msvs_application_type_revision for winrt compilation c0cf1f22eb42 Revert "Stop checking for duplicate basenames" 4dd5d3c614fb Update shared_library test after c0cf1f22eb 29e94a3285ee Avoid lint presubmit error in dump_dependency_json 08429da7955a Update cmake generator to handle Skia Android build aa537916dcb5 msvs: Make sure stdout/stderr from rule commands get logged fdc7b812f99e Makes analyzer always output static_libraries that have changed 79de4031069f Fix gyp->make translation of rules with several outputs 9b2b25aececd Correct braces in input format reference doc b4781fc38236 MSVS: Normalize paths against gyp directory 127b311bf61d Adds some debugging output to analyzer fdcd8bc10c93 More debugging for analyzer acfc10d29072 Revert "MSVS: Normalize paths against gyp directory." 5122240c5e5c Fix support for iOS today extensions on latest Xcode beta ae276266d580 Make DependencyGraph.DeepDependencies() depth-first 25ed9ac4ac2a Do not remote duplicate entries from ldflags when generating ninja files as it changes behavior 6ee91ad86598 Reduce DefaultConcurrentLinks from phys/4GB to phys/5GB 658f3a81995b Disable currently failing gyp tests on win to make the bots green 479dacf7be5f Disable GYP tests currently failing on the Mac bot 36d99ff23099 Disable test/win/gyptest-link-defrelink.py d6adc48df899 Fix the default tryserver lists in PRESUBMIT.py 81c2e5ff92af Added msvs_target_platform_version and msvs_target_platform_minversion for winrt compilation 010fb9d696e7 msvs_emulation: Add support for StackReserveSize and StackCommitSize edccc7bad7da Analyzer didn't match correctly targets that defined path to inputs with '.' relative path values. So let normalize path before matching bae26e800c7f Inject pylib first in the path. This ensures that test load the version of pylib in this repo, not elsewhere on the system 008cf1c04393 Improve error messages when <!(commands) fail 121d89dfcd4f Make RelativePath use abspath rather than realpath for the 'path' variable. This allows gyp to work correctly in symlink-heavy environments. Basically, this is because gyp paths need to be in a consistent tree, so we need to compute a path to the target within the *stated* tree, even if it is not the real underlying path to the target. The 'relative_path' variable does need to be resolved using realpath, since gyp or the underlying build system might cd to it before looking for the 'path' target 2b17e0b26a93 Fix paths with different seperators being compared in the analyzer on Windows 5d01a8cda53b Revert "Make RelativePath use abspath rather than realpath for the 'path' variable." 1f374df95de1 Make sure GYP supports compiling managed code cf3170e30578 Update gyp LINK_COMMANDS_AIX to support both 32-bit and 64-bit files. * cmd_alink: Add -X32_64 option. * cmd_alink_thin: Add -X32_64 option 01528c724483 Fallback to '.tbd' for system missing '.dylib' 7904ce96fd01 Make the ninja generator handle symlinked paths correctly 741b7f1d257b Add support for a CPPFLAGS_host environment variable, and update the cflags test to verify it 265f495cc3a3 Fix infinite loop on empty variable name c3d861c8bca4 ninja win: Suppress noisy messages from link.exe when LTCG is enabled 8f3918d7408f Promote documents in md-pages branch b3cef028a51a AIX's cp command does not support -af which is the default, so use -RPf which achives something similar 427a0406159c Adding framework path mapping for 'copies' action in gyp files 3f21260b4340 Change analyzer to search for build_targets from supplied targets e2e928bacd07 Add support for Xcode LastUpgradeCheck project attributes, allowing suppression of Xcode project configuration warnings 68f268008844 Add support for kernel-extensions in GYP ae2d73840216 Set optional LastSwiftUpdateCheck to Xcode project attributes f2c3cfc3b1df win: Fix missing loadable_module dependency in ULDI mode 2c1e6cced235 Revert of e2e928bacd07fead99a18cb08d64cb24e131d3e5 0f5bae131e58 Change CMAKE_SOURCE_DIR to CMAKE_CURRENT_LIST_DIR 2dd620e10329 Attempt again to upstream Xcode project version warning suppression, from 1416453003 and 1430573009, and rolled back in 1423583004 f54bd199e717 Adds back lookup of 'all' targets 70fa8bbeb292 Changes semantics of analyzer 33b351b2eda8 Fix bug in analyze were empty invalid_targets was incorrectly written e1133480da78 Changes analyzer to include test_targets in compile_targets f06a5a0e46ce Remove deprecated code path from analyzer.py 567d084f2cb1 Add support for NetBSD (OS = netbsd) c385ad654b30 Copy files with `cp -pPRf` on OpenBSD f4d65e35719c Generate response files out of the source tree with xcode & xcode-ninja e2313c02ad7b Fix CalculateGeneratorInputInfo for "xcode-ninja" generator 6fb8bd829f0c Derive default for ar_host from ar 70ee80e82bac Error checking to clarify SYSTEMROOT errors 863d9a4f4119 Make ninja work with XCTests for iOS b85ad3e578da ninja: Correctly handle copies steps in sourceless shared_library targets b362bbfbc877 mac: Extend libtool filter to also match fat builds 2b086540aeed Peter Kasting <pkasting@chromium.org> 4ff48eb18307 Switch the dependencies to their Git mirror 54b7dfc03f74 mac ninja&make: Use xcrun instead of xcodebuild where possible 9e2ceaef5352 GYP: Make GYP build deterministic 6f83895e9622 Stop copying deprecated ResourceRules.plist aa0301be5a24 Allow converting resource plists to binary 87ac4d0e63fc Add limited support for Mac to CMake generator 7ab6f482e87a [iOS] Preserve global symbols when calling strip (-x) on today extensions 32cb1709adc3 Add timestamp=none to codesign flags 57190fa27868 [iOS] Update today_extension link flags 18ce4ecf6cf2 [iOS] Set --auto-activate-custom-fonts for ibtool compile a230124f3834 Avoid gyp_chromium failures when vcvarsall.bat was run 66bbdf4c6b45 Revert "[iOS] Set --auto-activate-custom-fonts for ibtool compile." 5170bfd38fe7 [Mac/iOS] Add custom fonts, target device and minimum deployment target to _CopyXIBFile 51383232066a Update Xcode emulation extra plist items 7d29c3de1f5e Revert "Update Xcode emulation extra plist items." b25bbc1f942d Re-land update Xcode emulation extra plist items for Xcode 7.2 2f9ffdc96135 Support sdk_version of None ed163ce233f7 Don't recompute environment for mac bundles unnecessarily 0cd47bf6960e Make login.keychain and 'Provisioning Profiles' symlinks d84fed246cd4 Fix tests with Xcode 7 1950f6761bdf Xcode-ninja: Add excluded files to the project sources_for_indexing.xcodeproj 61259d585ce9 ninja/win: Use qualified paths for precompiled headers 5874a3cf9bac Adjust pretty_gyp to align comments with the appropriate braces fbcb317c7513 ninja: Add target_rpath generator flag 133eaf70b372 Add support for iOS Frameworks with header maps 8e8c3178d9d2 Detect and warn on missing vcvarsall.bat 28340b46df65 Support DEVELOPER_DIR in gyp-ninja for mac 3fa0c6038873 [GN] Use hard-link if possible when copying to bundle 697933c2e3b3 Fix mac_tool.py copy-bundle-resource errors 4ec6c4e3a94b [iOS/OS X] Copy file instead of hard-linking them f9ac7a9ba1c4 gyp-win-tool: Let LinkWrapper only transmogrify / when the host platform is Windows 34d3fba9d167 gyp-win-tool: Fix regression from my last change 6ea68631cdab gyp-win-tool: Don't use shell=True on non-Windows hosts db72e9fcf55b Fix header map nextPowerOf2 method 4cf07e8d6167 [ios-ninja] Support xctests in devices in release e24c83726b72 Adds support for a new target spec: 'mac_xcuitest_bundle'. This allows us to create UI testing bundles 02b145a1a4f4 Enabling /ZW (CompileAsWinRT) option for msvs bce1c7793010 ninja/mac: Add horrible workaround for horrible Xcode 7.3 ld bug c61b0b35c839 [gyp-ninja] Set simulator and device SDKROOT for iOS 35eafcd93951 Ignore more Xcode stderr logging information bac4680ec9a5 Only call CopyStringsFile if convert_to_binary is False e7079f0e0e14 Fix :rfc1034identifier when the value contains underscore 1f989f652a30 Complete PBXCopyFilesBuildPhase TODO in xcodeproj_file.py 93cc6e2c23e4 Make the ninja backend transitively check for C++ sources to use the C++ compiler for linking 702ac58e4772 Add new target type called windows_driver. * Modify GYP to set the PlatformToolset, the DriverType and the TargetVersion * Add msvs_target_version configuration 5dc5a5b1718e fix common "NameError"s 920ee58c3d31 Hash intermediate file name to avoid ENAMETOOLONG ef2f29a7311b msvs: Allow target platform version without WinRT 940a15ee3f1c Update shared library extension on AIX to .a 9733aa652da4 Set up a CQ for gyp a7055b3989c1 Make Gerrit the default code review system for gyp aae1e3efb507 CQ config: add gerrit CQAbility verifier 95da7665b1a3 [win-test] loosen win-driver-target-type test eb296f67da07 [win] Add support for MS VS2017 (via Registry) 19495aa28282 Update test/no-cpp/gyptest-no-cpp a94b02ec68fb Disable a bunch of tests on Mac ae76d9198630 Clean up gyptest.py b62d04ff85e6 win,ninja: ninja generator better on windows 8dc77241251e Disable flaky test/copies/gyptest-all under msvs e8850240a433 Fix MSVC++ 32-on-32 builds after b62d04ff85e6 ffd524cefaad win ninja/make: Always use a native compiler executable with MSVS 2017 a478c1ab51ea win: mkdir even when copying directory d61a9397e668 mac_tool.py: Handle non-zero ibtool return code 4801a5331ae6 gyp: update xml string encoding conversion 324dd166b7c0 gyp: show descriptive Windows SDK detection error Change-Id: I7b9e9bf9098469e94e657aa46ff7f6f7001a60df Reviewed-on: https://chromium-review.googlesource.com/638090 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Add crash reason extraction to microdump processorTobias Sargeant2017-08-215-1/+1457
| | | | | | | | BUG=754715 Change-Id: I00fe62ed06dbbab4c8f6c416d56e2d444be11571 Reviewed-on: https://chromium-review.googlesource.com/621307 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Fix memory leak in ppc stackwalkerTobias Sargeant2017-08-181-2/+3
| | | | | | | | BUG=756317 Change-Id: Id096372e5a0d1e7c70e95304b1f0c181f57d3882 Reviewed-on: https://chromium-review.googlesource.com/619126 Reviewed-by: Leonard Mosescu <mosescu@chromium.org>
* Add crash reason and address to microdumps.Tobias Sargeant2017-08-144-0/+111
| | | | | | | | | | | | This will allow us to provide the right information for webview renderer crashes. At the moment the crash information for the browser process is captured (from the debuggerd output) instead. BUG=754715 Change-Id: I409546311b6e38fe1cf804097c18d7bb2a015d83 Reviewed-on: https://chromium-review.googlesource.com/612381 Reviewed-by: Robert Sesek <rsesek@chromium.org>
* Increase maximum number of regions for minidump_stackwalk.Lars Volker2017-07-281-1/+3
| | | | | | | | | | Change I361d8812df7b2977fe2630289059d31c3c9a4cc3 increased the maximum number of threads for minidump_stackwalk. This change also increases the maximum number of regions. Change-Id: I61efd4453df8809bd9cd657546d1d6727cd10281 Reviewed-on: https://chromium-review.googlesource.com/588384 Reviewed-by: Mike Frysinger <vapier@chromium.org>
* Handle very large stack tracesLeonard Mosescu2017-07-1214-81/+108
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The main motivation for this change is to handle very large stack traces, normally the result of infinite recursion. This part is actually fairly simple, relaxing a few self-imposed limits on how many frames we can unwind and the max size for stack memory. Relaxing these limits requires stricter and more consistent checks for stack unwinding. There are a number of unwinding invariants that apply to all the platforms: 1. stack pointer (and frame pointer) must be within the stack memory (frame pointer, if preset, must point to the right frame too) 2. unwinding must monotonically increase SP (except for the first frame unwind, this must be a strict increase) 3. Instruction pointer (return address) must point to a valid location 4. stack pointer (and frame pointer) must be appropriately aligned This change is focused on 2), which is enough to guarantee that the unwinding doesn't get stuck in an infinite loop. 1) is implicitly validated part of accessing the stack memory (explicit checks might be nice though). 4) is ABI specific and while it may be valuable in catching suspicious frames is not in the scope of this change. 3) is also an interesting check but thanks to just-in-time compilation it's more complex than just calling StackWalker::InstructionAddressSeemsValid() and we don't want to drop parts of the callstack due to an overly conservative check. Bug: chromium:735989 Change-Id: I9aaba77c7fd028942d77c87d51b5e6f94e136ddd Reviewed-on: https://chromium-review.googlesource.com/563771 Reviewed-by: Mark Mentovai <mark@chromium.org> Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
* A couple of minor fixesLeonard Mosescu2017-07-113-4/+9
| | | | | | | | | | | | | | | | 1. Fixing ExceptionHandlerTest.FirstChanceHandlerRuns: exit() is not an async-signal-safe function (http://man7.org/linux/man-pages/man7/signal-safety.7.html) 2. Fixing entry point signature in minidump_dump Changed "const char* argv[]" to "char* argv[]" to match the standard entry point signature 3. Updating .gitignore to exclude unit test artifacts Change-Id: I9662898d0bd97769621fb6476a720105821c60f0 Reviewed-on: https://chromium-review.googlesource.com/562356 Reviewed-by: Mark Mentovai <mark@chromium.org> Reviewed-by: Ivan Penkov <ivanpe@chromium.org> Reviewed-by: Joshua Peraza <jperaza@chromium.org>
* Fix asan buildsEric Holk2017-06-221-23/+23
| | | | | | | | | | | | | When rolling this into Chrome, we got compile failures due to DoNullPointerDereference being undefined but the new FirstChanceHandlerRuns tests depends on this and was still defined. The fix is to only enable the FirstChanceHandlerRuns test on non-asan builds. Bug: Change-Id: I5a3da0a21e2d0dd663ffc01137496d16905293a6 Reviewed-on: https://chromium-review.googlesource.com/544186 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Add first chance exception handler APIEric Holk2017-06-193-0/+44
| | | | | | | | | | | | | | This change adds the option for Breakpad hosts to register a callback that gets the first chance to handle an exception. The handler will return true if it handled the exception and false otherwise. The primary use case is V8's trap-based bounds checking support for WebAssembly. Bug: Change-Id: I5aa5b87d1229f1cef905a00404fa2027ee86be56 Reviewed-on: https://chromium-review.googlesource.com/509994 Reviewed-by: Mark Mentovai <mark@chromium.org>
* roll lss depsMike Frysinger2017-06-162-2/+2
| | | | | | | | | | This should hopefully fix the ARMv8/IT fix to work on clang & gcc. BUG=chromium:686903 Change-Id: Ib99f05a0cd8df2cb2d393e2ff951d3109cdb5f5b Reviewed-on: https://chromium-review.googlesource.com/538213 Reviewed-by: Mark Mentovai <mark@chromium.org>
* Merge exec and non-exec segments while merging executable bit.Peter Collingbourne2017-05-261-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The bfd and gold linkers create segments like this: r/x, r/w where the r/x segment covers the start of the ELF file. lld's segments look like this: r, r/x, r/w where the r segment covers the start of the ELF file. So we cannot rely on the location of the r/x to tell where the start of the ELF is. But we can still rely on the r and r/x mappings being adjacent. So what we do is when we see an r segment followed by an r/x, merge the r into the r/x and claim that it is executable. This way, the minidump writer will continue to see a single executable segment covering the entire executable. Testing: "make check" passes when breakpad is compiled with lld compiled from trunk (requires bug fix from LLVM r303689). Also patched change into chromium and tested these builds: $ cat args.gn is_chrome_branded = true is_debug = false is_official_build = true use_lld = true allow_posix_link_time_opt = false is_cfi = false $ cat args.gn target_os = "android" target_cpu = "arm" is_debug = false is_official_build = true is_chrome_branded = true With both builds breakpad_unittests passes and chrome/chrome_modern_public_apk create good minidumps after navigating to chrome://inducebrowsercrashforrealz (checked that minidump contains stack trace entry for content::HandleDebugURL). Bug: chromium:716484 Change-Id: Ib6ed3a8420b83acf4a5962843930fb006734cb95 Reviewed-on: https://chromium-review.googlesource.com/513610 Reviewed-by: Primiano Tucci <primiano@chromium.org>
* Teach the ELF parser to handle multiple PT_NOTE phdrs.Peter Collingbourne2017-05-264-38/+76
| | | | | | | | | | | | | | | It is legal for an ELF to contain multiple PT_NOTEs, and that is in fact what lld's output looks like. Testing: "make check" and breakpad_unittests when patched into chromium. Bug: chromium:716484 Change-Id: I01d3f8679961e2cb7e789d4007de8914c6af357d Reviewed-on: https://chromium-review.googlesource.com/513512 Reviewed-by: Primiano Tucci <primiano@chromium.org> Reviewed-by: Ted Mielczarek <ted@mielczarek.org> Reviewed-by: Mark Mentovai <mark@chromium.org>
* Make the cross-compilation glue for dump_syms Mac handle x86_64h.Markus Stange2017-05-262-4/+25
| | | | | | | | | | x86_64h has a different cpusubtype from x86_64. The h is for Haswell. BUG= Change-Id: Icf884e5699fe120c12d13aa57cd62db5b69a2ce6 Reviewed-on: https://chromium-review.googlesource.com/457171 Reviewed-by: Ted Mielczarek <ted@mielczarek.org>