652 Commits

Author SHA1 Message Date
Mark Mentovai
2eeaa3ac54 win: Add HandleToInt() and IntToHandle()
This consolidates all of the twisted casts and comments that discuss how
HANDLEs are really only 32 bits wide even in 64-bit processes on 64-bit
operating systems into a single location.

R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1422503015 .
2015-11-05 14:00:26 -05:00
Mark Mentovai
20045d3867 Add buildtools to make depot_tools-wrapped clang-format work
Crashpad is mostly friendly with clang-format and has its own
.clang-format file. Adding buildtools makes it possible to use the
depot_tools clang-format wrapper.

R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1414903006 .
2015-11-05 13:48:27 -05:00
Mark Mentovai
3e988865ad win: crashpad_handler should create its own pipe name in ephemeral mode
Allowing the client to create its own pipe name string caused a race
between client and server. Instead, in this mode, the server now creates
the pipe name along with a pipe, and returns it to its client via a
--handshake-handle. This guarantees that by the time the client gets the
pipe name, the server has already created it.

Ephemeral mode is now implied by --handshake-handle. The --persistent
option is gone. --persistent mode is enabled when using --pipe-name.

BUG=crashpad:69
R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1432563003 .
2015-11-03 19:26:18 -05:00
Mark Mentovai
809affe793 mac: Add a mode to crashpad_handler to run from launchd
By invoking crashpad_handler with --mach-service instead of
--handshake-fd, the handler will run as a well-behaved launchd job. The
launchd job may be as a launch agent or launch daemon, or be submitted
to launchd by on_demand_service_tool.

BUG=crashpad:25
R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1414533006 .
2015-11-03 19:20:29 -05:00
Mark Mentovai
ee6fc23fb3 mac: Restart crashpad_handler from the initial client if it dies
BUG=crashpad:68
R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1413033007 .
2015-11-03 19:13:48 -05:00
Mark Mentovai
a30db914af win: Add CrashpadClient::GetHandlerIPCPipe()
For multiprocess architectures, this method allows the pipe used for
registration to be obtained from CrashpadHandler, even when
CrashpadHandler chooses its own name. This may happen if the handler is
not running on a well-known pipe name but was instead started by
CrashpadHandler::StartHandler(). If Chrome uses this interface, for
example, the browser process will need to call
CrashpadClient::GetHandlerIPCPipe() and pass the pipe name to its child
processes.

R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1427163004 .
2015-11-02 23:15:22 -05:00
Mark Mentovai
7f939285de win: Rename CrashpadClient::SetHandler() to SetHandlerIPCPipe()
In https://codereview.chromium.org/1414533006/, I'm adding a few
Mac-specific SetHandler() variants, so it makes sense to name each
SetHandler() variant for what it does.

I'm also making it take a wstring argument, which seems like a more
natural fit for what it does. There should be fewer string conversions
this way.

R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1406993008 .
2015-11-02 17:00:06 -05:00
Mark Mentovai
740c668e87 win: Implement CrashpadClient::StartHandler()
BUG=crashpad:69
R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1428803006 .
2015-11-02 13:59:36 -05:00
Scott Graham
c295e9d748 Fix exception location in z7 test on older bots
The cdb on the x86 bot displays relative to exported DLL symbols, but
newer ones don't seem to, so it's either:

  z7_test!CrashMe+0xe

or

  z7_test+0x100e

https://build.chromium.org/p/client.crashpad/builders/crashpad_win_x86_rel/builds/110/steps/run%20tests/logs/stdio

R=mark@chromium.org
BUG=crashpad:47

Review URL: https://codereview.chromium.org/1430633006 .
2015-11-02 10:28:01 -08:00
Scott Graham
3e4130ad5d win: Also look in PROGRAMW6432 for cdb
This is necessary for 64 bit tools installed on a 64 bit OS, but with
the tests run from a 32 bit Python. (sigh)

Doesn't happen on bots, but comes up occasionally testing on VMs.

R=mark@chromium.org

Review URL: https://codereview.chromium.org/1425153003 .
2015-11-02 09:35:08 -08:00
Mark Mentovai
04d97ca86e win: Add a note about /Z7 obsolescence regarding CodeView debug info
BUG=crashpad:47
R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1414323003 .
2015-11-02 12:20:25 -05:00
Mark Mentovai
3ea5172982 win: Let Doxygen see CRASHPAD_SIMULATE_CRASH()
Doxygen doesn’t generate documentation for macros unless the file that
defines it has a \file directive.

R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1406253009 .
2015-11-02 12:19:44 -05:00
Scott Graham
4860f64923 win: Handle binary with embedded CodeView debug record
I considered writing the CodeView records to the minidump, but I didn't
find a ton of docs and debugging is only lightly supported (e.g.
http://www.debuginfo.com/articles/gendebuginfo.html#debuggersandformats
and it doesn't attempt to load at all on more recent Visual Studios).

As we won't be generating symbols in this format, and we don't expect to
have symbols for any weird modules that get injected into us in the
wild, it seems like we don't lose anything by just ignoring them.

R=mark@chromium.org
BUG=crashpad:47

Review URL: https://codereview.chromium.org/1430773003 .
2015-10-31 11:45:39 -07:00
Mark Mentovai
e86d9bdc55 doc: “Crashpad issue tracker” should go to the list, not the entry page
R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1427193002 .
2015-10-30 18:47:18 -04:00
Mark Mentovai
c1b841442f mac: Add NotifyServer::DefaultInterface, a default no-op implementation
Each routine in this implementation returns MIG_BAD_ID. These routines
may be overridden.

Most things that implement NotifyServer::Interface will only need to
implement one of the interface routines. Since another user of
NotifyServer will be added soon, it makes sense to provide a default
no-op implementation rather than forcing everyone to write the same
no-op boilerplate repeatedly.

R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1414413006 .
2015-10-30 15:44:40 -04:00
Marc-Antoine Courteau
7858145558 Update paths in third_party to use DEPTH instead of relative paths.
R=mark@chromium.org

Review URL: https://codereview.chromium.org/1428973002 .

Patch from Marc-Antoine Courteau <macourteau@chromium.org>.
2015-10-30 11:37:15 -04:00
Mark Mentovai
cd0e25f1ba Update all URLs to point to https://crashpad.chromium.org/
All other links to code.google.com and googlecode.com are fixed to point
to their proper new homes as well.

R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1414243005 .
2015-10-29 18:31:20 -04:00
Mark Mentovai
06ad194571 win: Construct ExceptionHandlerServer() with its pipe argument (again)
This re-lands 9d03d54d0ba1, which was partially un-done by an apparent
bad rebase leading up to fc7d8b3a27e1.

Review URL: https://codereview.chromium.org/1424213005 .
2015-10-29 18:19:37 -04:00
Mark Mentovai
fc7d8b3a27 mac: Make crashpad_handler get its receive right from its client
Previously, crashpad_handler made its own receive right, and transferred
a corresponding send right to its client. There are two advantages to
making the receive right in the client:

 - It is possible to monitor the receive right for a port-destroyed
   notificaiton in the client, allowing the handler to be restarted if
   it dies.
 - For the future run-from-launchd mode (bug crashpad:25), the handler
   will obtain its receive right from the bootstrap server instead of
   making its own. Having the handler get its receive right from
   different sources allows more code to be shared than if it were to
   sometimes get a receive right and sometimes make a receive right and
   transfer a send right.

This includes a restructuring in crashpad_client_mac.cc that will make
it easier to give it an option to restart crashpad_handler if it dies.
The handler starting logic should all behave the same as before.

BUG=crashpad:68
R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1409073013 .
2015-10-29 18:09:03 -04:00
Mark Mentovai
9d03d54d0b win: Construct ExceptionHandlerServer() with its pipe argument
This allows better code sharing in crashpad_handler’s main(). It doesn’t
look like much of an improvement now, but a separate change will cause
the Mac ExceptionHandlerServer() to be constructed with an argument. It
will be beneficial for Mac and Windows to be able to share the Run()
call.

R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1402333004 .
2015-10-29 15:12:23 -04:00
Mark Mentovai
062138106c mac: ChildPortHandshake: allow receive rights to be sent
The intended use is to flip the client-server relationship in
CrashpadClient so that the initial client (parent process) furnishes the
handler process with a receive right. The parent can optionally receive
a port-destroyed notification allowing it to restart the handler if it
exits prematurely.

R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1408473002 .
2015-10-29 14:14:15 -04:00
Scott Graham
3ee9d891d9 win: Plumb module PDB name through snapshot
R=mark@chromium.org
BUG=chromium:546288

Review URL: https://codereview.chromium.org/1415543003 .
2015-10-29 10:48:23 -07:00
Mark Mentovai
ad9887ee0d win: Don't attempt to read a nonexistent IMAGE_DIRECTORY_ENTRY_DEBUG
BUG=crashpad:1
R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1411123011 .
2015-10-28 16:42:34 -04:00
Scott Graham
ba0e7de07b win: Disable more warnings when not building with Crashpad's common.gypi
Roll mini_chromium deps to remove disabling of those warnings in common.gypi:
  8e12d3d win: Remove disabling some warnings

R=mark@chromium.org
BUG=chromium:546288, crashpad:1

Review URL: https://codereview.chromium.org/1430523002 .
2015-10-27 16:03:26 -07:00
Scott Graham
a96f5ace5b Capture UUID age field on Windows
R=mark@chromium.org
BUG=chromium:546288

Review URL: https://codereview.chromium.org/1418613013 .
2015-10-27 13:06:58 -07:00
Scott Graham
03d8be4a15 win: Fix NTSTATUS_LOG for no-function arg version of COMPACT_GOOGLE_LOG_EX_
R=mark@chromium.org
BUG=crashpad:1, chromium:546288

Review URL: https://codereview.chromium.org/1426493002 .
2015-10-23 14:32:17 -07:00
Scott Graham
1a9c8b0e9d win: Disable C4201 in util.gyp for building without crashpad common.gypi
R=mark@chromium.org
BUG=crashpad:1, crashpad:526488

Review URL: https://codereview.chromium.org/1421173002 .
2015-10-23 14:07:59 -07:00
Scott Graham
4b8b42be6c win: Implement c16lcpy without base:c16*
Chromium base doesn't have base::c16len, c16memcpy, etc. when
WCHAR_T_IS_UTF16, so implement c16lcpy without using those.

R=mark@chromium.org
BUG=crashpad:1, chromium:546288

Review URL: https://codereview.chromium.org/1417403004 .
2015-10-23 13:38:46 -07:00
Scott Graham
3d598cdbcd Change file op |ssize_t|s to FileOperationResult
R=mark@chromium.org

Review URL: https://codereview.chromium.org/1416493006 .
2015-10-22 16:14:18 -07:00
Scott Graham
63916623cd roll mini_chromium to 8d42e2439aa0bd677dca64ba3070f3fa2353b7f2
8d42e24 win: Enable C4800, implicit bool conversion
82060c1 mac: Make Mach port scopers better ScopedGenerics
d7270da Fix base::RandDouble()

R=mark@chromium.org

Committed: 26b6913512

Review URL: https://codereview.chromium.org/1424463002 .
2015-10-22 15:02:48 -07:00
Scott Graham
26b6913512 roll mini_chromium to 744f209e621224b703cc897581c8d7bf4416f49b
744f209 win: Enable C4800, implicit bool conversion
82060c1 mac: Make Mach port scopers better ScopedGenerics
d7270da Fix base::RandDouble()

R=mark@chromium.org

Review URL: https://codereview.chromium.org/1424463002 .
2015-10-22 14:49:50 -07:00
Scott Graham
4b780ba040 Tidy up to enable C4800 on Windows
Fixes two incorrect usages of ssize_t/off_t being implicitly converted
to bool. As such, I think it's worth the cost of the additional !! on
BOOL returning Win32 functions.

R=mark@chromium.org

Review URL: https://codereview.chromium.org/1408123006 .
2015-10-22 14:32:13 -07:00
Scott Graham
80f50467c3 Fix Mac after FileOperationResult change
Oops, forgot to test Mac, sorry.

R=mark@chromium.org

Review URL: https://codereview.chromium.org/1409973004 .
2015-10-22 14:17:03 -07:00
Scott Graham
a43323a1bf Remove usage of compat from client
When used in client headers, the downstream dependency on compat
is unpleasant, so avoid that.

This is another alternative rather than
https://codereview.chromium.org/1424443002/.

R=mark@chromium.org
BUG=chromium:546288, crashpad:1

Review URL: https://codereview.chromium.org/1419673007 .
2015-10-22 14:01:33 -07:00
Scott Graham
90ef7475cd win: Validate readability of memory ranges added to minidump
R=mark@chromium.org
BUG=crashpad:59

Review URL: https://codereview.chromium.org/1412243005 .
2015-10-21 16:07:03 -07:00
Mark Mentovai
0615a59285 doc: Update status to reflect Windows and Android progress
R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1415313003 .
2015-10-21 18:41:39 -04:00
Scott Graham
38b7e919f8 win: Fix x64 compile error in handle writer
R=mark@chromium.org
BUG=crashpad:52

Review URL: https://codereview.chromium.org/1408073005 .
2015-10-21 15:35:57 -07:00
Scott Graham
1407b21d69 Pool TypeName strings when writing MINIDUMP_HANDLE_DESCRIPTOR
Follow up to TODO in https://codereview.chromium.org/1419623003/.

R=mark@chromium.org
BUG=crashpad:21, crashpad:52

Review URL: https://codereview.chromium.org/1411793005 .
2015-10-21 13:25:48 -07:00
Scott Graham
fe49473b3d Fix mac after https://codereview.chromium.org/1419623003/
L"" and wstring are a bit of a mess cross-platform, so just store the
type name as UTF8 instead.

R=mark@chromium.org
BUG=crashpad:21, crashpad:52

Review URL: https://codereview.chromium.org/1421473005 .
2015-10-21 11:39:53 -07:00
Scott Graham
3261edd997 Write MINIDUMP_HANDLE_DATA_STREAM to minidump
R=mark@chromium.org
BUG=crashpad:21, crashpad:52

Review URL: https://codereview.chromium.org/1419623003 .
2015-10-21 10:43:42 -07:00
Mark Mentovai
3ac40a54d0 doc: Add generate_git.sh, which updates the checked-in generated docs
BUG=crashpad:67
R=agable@chromium.org

Review URL: https://codereview.chromium.org/1399623002 .
2015-10-21 13:22:51 -04:00
Mark Mentovai
af8c7fcbee Add a README for the App Engine app with notes for maintaining it
R=andybons@chromium.org

Review URL: https://codereview.chromium.org/1416833003 .
2015-10-21 11:20:10 -04:00
Mark Mentovai
0ed0106aa4 Add /bug redirects to the home page AppEngine app
/bug/ redirects to the Crashpad project on Monorail. /bug/new redirects
to the “new issue” screen, and /bug/123 redirects to the named bug.

R=andybons@chromium.org

Review URL: https://codereview.chromium.org/1415063002 .
2015-10-21 09:42:29 -04:00
Mark Mentovai
6c0d42ce9d Mach port scopers should use get() instead of type conversion operators
In https://codereview.chromium.org/1411523006, the Mach port scopers are
becoming better ScopedGenerics and are losing the type conversion
operators in the process. This is needed to adapt to that change. get()
is ugly, but being explicit about conversion isn’t a bad thing, and
these scopers will gain functionality such as Pass() as part of the
switch.

As a bonus, some would-be uses of get() to check for valid port rights
are becoming a more descriptive is_valid().

R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1405273002 .
2015-10-20 11:03:25 -04:00
Mark Mentovai
53ccd8fc5e doc/developing.ad: replace removed backslash
Having two ~s in one block confused doc generation.

R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1413203002 .
2015-10-19 17:17:09 -04:00
Mark Mentovai
d075a9eb2e win: Add and use GET_FUNCTION() and GET_FUNCTION_REQUIRED()
These wrap the GetProcAddress(LoadLibrary(), …) idiom into macros that
are much less wordy.

TEST=crashpad_util_test GetFunction.GetFunction and all others
R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1405323003 .
2015-10-19 14:32:07 -04:00
Mark Mentovai
2adcd13fd6 Update developer documentation to recommend the “fetch” tool
“fetch crashpad“ is possible since depot_tools ea1b3d5ed88b.

R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1408133003 .
2015-10-19 13:51:52 -04:00
Mark Mentovai
1818dbbb08 win: Fix crashpad_util_test ProcessInfo.Handles
This new test from 7de04b02f85d was failing on Windows 10. I started by
adding the hint, which produced “CreateFileMapping: Access is denied.
(0x5)”. Switching the “Global\” to “Local\” fixes the test for me.

TEST=crashpad_util_test ProcessInfo.Handles
R=scottmg@chromium.org

Review URL: https://codereview.chromium.org/1407993003 .
2015-10-19 13:40:50 -04:00
Mark Mentovai
07dbc3259c Use an even better random number generation scheme in the prune test
base::RandInt(0, max - 1) has a uniform distribution.
base::RandUint64() % max does not.

TEST=crashpad_client_test PruneCrashReports.PruneOrder
R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/1417443002 .
2015-10-19 11:43:58 -04:00
Scott Graham
30678f1e82 Fix Mac build after https://codereview.chromium.org/1407643004
Oops.

R=mark@chromium.org
BUG=crashpad:21, crashpad:52

Review URL: https://codereview.chromium.org/1409823003 .
2015-10-16 16:33:40 -07:00