Commit Graph

1682 Commits

Author SHA1 Message Date
Mike Wittman
b1226959a2 Add optional field indicating multiple symbols at an address
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>
2017-11-29 21:33:23 +00:00
Mike Wittman
4eeb384f3e Update test data for identical-code-folded symbol changes
Bug: google-breakpad:749
Change-Id: I2e56c8414c98c95372bd73811581cf1e98efe88e
Reviewed-on: https://chromium-review.googlesource.com/791914
Reviewed-by: Mark Mentovai <mark@chromium.org>
2017-11-28 04:01:03 +00:00
Mike Wittman
70914b2d38 Make identical-code-folded symbol output more consistent between runs
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>
2017-11-14 14:31:22 +00:00
Tomas Popela
615ad2b6f4 List missing 64-bit arches in the bundled curl
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>
2017-11-13 19:50:29 +00:00
Robert Sesek
8a0edac9ab Add index-based set functionality to NonAllocatingMap.
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>
2017-11-07 23:24:48 +00:00
Peter Collingbourne
3bbf3fb0db dump_symbols: Stop rejecting files with Android packed relocation sections.
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>
2017-11-07 14:56:36 +00:00
Yi Wang
8e9080bc53 Create LongStringDictionary and replace SimpleStringDictionary on iOS
This relands fd0a0d2b7a which was reverted
in 5dad29423e, 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>
2017-11-03 17:06:05 +00:00
Adam Harrison
550c6227bb Don’t set exit_after_write to false for tvOS.
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>
2017-11-03 02:53:56 +00:00
Mark Mentovai
5dad29423e Revert "Create LongStringDictionary and replace SimpleStringDictionary usages in client/ios/Breakpad.mm."
This reverts commit fd0a0d2b7a.

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>
2017-11-02 17:56:17 +00:00
Peter Collingbourne
2d85d492ae Rename an argument named "register" to "reg".
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>
2017-11-02 02:40:39 +00:00
Nicholas Baldwin
7e3c165000 Fix double declaration of tgkill when using Android NDK Headers.
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>
2017-10-30 17:23:56 +00:00
Yi Wang
fd0a0d2b7a Create LongStringDictionary and replace SimpleStringDictionary usages in client/ios/Breakpad.mm.
Bug:
Change-Id: I401028f5d90417d79fb109b510aaa9660a039b44
Reviewed-on: https://chromium-review.googlesource.com/688301
Reviewed-by: Mark Mentovai <mark@chromium.org>
2017-10-27 17:47:03 +00:00
Bruce Dawson
73d2773f9f Avoid skipping an initializer with a goto
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>
2017-10-26 22:25:57 +00:00
Torne (Richard Coles)
2aaeead73f Roll src/src/third_party/lss/ a91633d17..e6527b0cd (1 commit)
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>
2017-10-19 18:43:22 +00:00
Tobias Sargeant
072f86ca83 Provide helper wrappers for basename(3) and dirname(3)
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>
2017-10-18 15:44:59 +00:00
Peter Collingbourne
9b23ca3a7c Move main executable handling out of procmaps parser loop.
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>
2017-10-17 20:19:03 +00:00
Ted Mielczarek
8bb3d55af7 Rename src/common/memory.h to memory_allocator.h.
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>
2017-10-17 14:02:43 +00:00
Tobias Sargeant
3d6076efc2 Add -s flag to microdump_stackwalk for dumping stack contents.
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>
2017-10-17 10:22:46 +00:00
Tobias Sargeant
623c4a0f42 Convert {mini|micro}dump_stackwalk argument parsing to getopt.
Bug: google-breakpad:748
Change-Id: I70b16ba6456df0be038d6c7170eb22b093fdc65d
Reviewed-on: https://chromium-review.googlesource.com/718756
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2017-10-16 09:13:02 +00:00
Adam Harrison
bc8fb88648 ios: Adds a no-Mach exception handler
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>
2017-10-12 00:21:31 +00:00
Joshua Peraza
1c3f8d1002 Android: Use sys/types.h instead of stdint.h for sys/user.h
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>
2017-10-06 18:19:40 +00:00
Mark Mentovai
0bdf616c7e Fix minidump_dump_test after 6d0287851f
Change-Id: I9957f27cd134f862b9831e4b1d90f8a014eb37b6
Reviewed-on: https://chromium-review.googlesource.com/701740
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2017-10-05 15:18:12 +00:00
Mark Mentovai
6d0287851f Dump Crashpad extension structures in minidump_dump
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>
2017-09-27 21:27:17 +00:00
Mark Mentovai
cbd7bb4cd2 Only run GYP for Windows targets on Windows
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 26b988681d.

Change-Id: I034a5b30d13fdcc14911fc1354504375752d6144
Reviewed-on: https://chromium-review.googlesource.com/688045
Reviewed-by: Robert Sesek <rsesek@chromium.org>
2017-09-27 20:46:16 +00:00
Orgad Shaneh
09df67311f Fix MSVC build on 64-bit
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>
2017-09-25 07:10:11 +00:00
Orgad Shaneh
005f41eb8c Refresh refresh_binaries.bat
Change-Id: I15687f35e560eb1e25bb4d7483c8f6fe5fdf210e
Reviewed-on: https://chromium-review.googlesource.com/637391
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2017-09-24 23:23:20 +00:00
Mark Mentovai
1c6d161396 Restore missing #include <stdint.h> to Android <sys/user.h>
This was lost in afa9c52715, 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>
2017-09-20 19:34:39 +00:00
Mark Mentovai
bddcc58860 Replace remaining references to 'struct ucontext' with 'ucontext_t'
This relands
e3035bc406,
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>
2017-09-20 11:50:04 +00:00
Mark Mentovai
491f174949 Fix googletest/googlemock build
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>
2017-09-19 20:51:42 +00:00
Mark Mentovai
afa9c52715 android: Don’t compete with NDK API >= 21 over NDK structures
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>
2017-09-18 14:00:44 +00:00
Tobias Sargeant
dea867e76f Add new test data to Makefile.am
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>
2017-09-14 20:54:34 +00:00
Mike Frysinger
6a4976483b drop bundled gflags from the checkout
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>
2017-09-13 23:38:29 +00:00
Mike Frysinger
0842e530e1 google_crashdump_uploader_test: integrate test into normal build
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>
2017-09-13 21:56:40 +00:00
Mike Frysinger
d8c6101124 drop glog from the checkout
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>
2017-09-13 21:35:17 +00:00
Mark Mentovai
7c409af709 Parse DWARF 4 line tables correctly
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>
2017-09-13 19:50:52 +00:00
Tobias Sargeant
a1dbcdcb43 Increase the maximum number of modules allowed in minidumps.
Bug: google-breakpad:743
Change-Id: I2e40b5cc36c012c18a1c4637634fb139b0d8e14d
Reviewed-on: https://chromium-review.googlesource.com/647886
Reviewed-by: Mark Mentovai <mark@chromium.org>
2017-09-01 14:49:17 +00:00
Tobias Sargeant
c4335f0435 Fix memory leak in ppc64 stackwalker
BUG=757166

Change-Id: I967a6903332b9c3d16b583f7fa4d3c9c44c2f729
Reviewed-on: https://chromium-review.googlesource.com/643267
Reviewed-by: Leonard Mosescu <mosescu@chromium.org>
2017-08-30 17:28:54 +00:00
Mark Mentovai
26b988681d Update GYP to 324dd166b7c0b39d513026fa52d6280ac6d56770
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>
2017-08-28 16:07:05 +00:00
Tobias Sargeant
2b3be5179e Add crash reason extraction to microdump processor
BUG=754715

Change-Id: I00fe62ed06dbbab4c8f6c416d56e2d444be11571
Reviewed-on: https://chromium-review.googlesource.com/621307
Reviewed-by: Robert Sesek <rsesek@chromium.org>
2017-08-21 10:19:07 +00:00
Tobias Sargeant
b1e7ec065d Fix memory leak in ppc stackwalker
BUG=756317

Change-Id: Id096372e5a0d1e7c70e95304b1f0c181f57d3882
Reviewed-on: https://chromium-review.googlesource.com/619126
Reviewed-by: Leonard Mosescu <mosescu@chromium.org>
2017-08-18 10:24:52 +00:00
Tobias Sargeant
38cbbfed71 Add crash reason and address to microdumps.
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>
2017-08-14 09:49:51 +00:00
Lars Volker
1b704857f1 Increase maximum number of regions for minidump_stackwalk.
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>
2017-07-28 22:28:15 +00:00
Leonard Mosescu
01431c2f61 Handle very large stack traces
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>
2017-07-12 17:53:15 +00:00
Leonard Mosescu
5f112cb174 A couple of minor fixes
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>
2017-07-11 17:24:47 +00:00
Eric Holk
66856d617b Fix asan builds
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>
2017-06-22 17:17:43 +00:00
Eric Holk
1628d99f7b Add first chance exception handler API
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>
2017-06-19 18:23:41 +00:00
Mike Frysinger
c142362a6c roll lss deps
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>
2017-06-16 04:05:08 +00:00
Peter Collingbourne
94b6309aec Merge exec and non-exec segments while merging executable bit.
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>
2017-05-26 16:51:46 +00:00
Peter Collingbourne
08bea455d4 Teach the ELF parser to handle multiple PT_NOTE phdrs.
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>
2017-05-26 16:43:47 +00:00
Markus Stange
8880afb762 Make the cross-compilation glue for dump_syms Mac handle x86_64h.
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>
2017-05-26 16:03:39 +00:00