Add stack traces on crashes on Windows
authorTamar Christina <tamar@zhox.com>
Sun, 22 Oct 2017 11:14:22 +0000 (12:14 +0100)
committerTamar Christina <tamar@zhox.com>
Sun, 22 Oct 2017 11:16:49 +0000 (12:16 +0100)
commit99c61e2220c4cba20117107f371aace68668a42f
tree236fcbd32cb7c1cfb74c4bc11c32218837c24287
parente375bd350bc9e719b757f4dc8c907c330b26ef6e
Add stack traces on crashes on Windows

Summary:
This patch adds the ability to generate stack traces on crashes for Windows.
When running in the interpreter this attempts to use symbol information from
the interpreter and information we know about the loaded object files to
resolve addresses to symbols.

When running compiled it doesn't have this information and then defaults
to using symbol information from PDB files. Which for now means only
files compiled with ICC or MSVC will show traces compiled.

But I have a future patch that may address this shortcoming.

Also since I don't know how to walk a pure haskell stack, I can for now
only show the last entry. I'm hoping to figure out how Apply.cmm works to
be able to walk the stalk and give more entries for pure haskell code.

In GHCi

```
$ echo main | inplace/bin/ghc-stage2.exe --interactive ./testsuite/tests/rts/derefnull.hs
GHCi, version 8.3.20170830: http://www.haskell.org/ghc/  :? for help
Ok, 1 module loaded.
Prelude Main>
Access violation in generated code when reading 0x0

 Attempting to reconstruct a stack trace...

   Frame        Code address
 * 0x77cde10    0xc370229 E:\..\base\dist-install\build\HSbase-4.10.0.0.o+0x190031
                 (base_ForeignziStorable_zdfStorableInt4_info+0x3f)
```

and compiled

```
Access violation in generated code when reading 0x0

 Attempting to reconstruct a stack trace...

   Frame        Code address
 * 0xf0dbd0     0x40bb01 E:\..\rts\derefnull.run\derefnull.exe+0xbb01
```

Test Plan: ./validate

Reviewers: austin, hvr, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3913
18 files changed:
docs/users_guide/8.4.1-notes.rst
docs/users_guide/runtime_control.rst
includes/rts/Flags.h
libraries/base/GHC/RTS/Flags.hsc
libraries/base/changelog.md
rts/Linker.c
rts/LinkerInternals.h
rts/RtsFlags.c
rts/linker/PEi386.c
rts/linker/PEi386.h
rts/package.conf.in
rts/win32/veh_excn.c
rts/win32/veh_excn.h
testsuite/tests/rts/all.T
testsuite/tests/rts/derefnull.stdout-i386-unknown-mingw32 [deleted file]
testsuite/tests/rts/derefnull.stdout-x86_64-unknown-mingw32 [deleted file]
testsuite/tests/rts/divbyzero.stdout-i386-unknown-mingw32 [deleted file]
testsuite/tests/rts/divbyzero.stdout-x86_64-unknown-mingw32 [deleted file]