llvm-project/lldb/source/Core
Leonard Mosescu 47196a25bb Improve LLDB's handling of non-local minidumps
Normally, LLDB is creating a high-fidelity representation of a live
process, including a list of modules and sections, with the 
associated memory address ranges. In order to build the module and
section map LLDB tries to locate the local module image (object file)
and will parse it.

This does not work for postmortem debugging scenarios where the crash
dump (minidump in this case) was captured on a different machine.

Fortunately the minidump format encodes enough information about
each module's memory range to allow us to create placeholder modules.
This enables most LLDB functionality involving address-to-module
translations.

Also, we may want to completly disable the search for matching
local object files if we load minidumps unless we can prove that the
local image matches the one from the crash origin.
(not part of this change, see: llvm.org/pr35193)

Example: Identify the module from a stack frame PC:

Before:
  thread #1, stop reason = Exception 0xc0000005 encountered at address 0x164d14
    frame #0: 0x00164d14
    frame #1: 0x00167c79
    frame #2: 0x00167e6d
    frame #3: 0x7510336a
    frame #4: 0x77759882
    frame #5: 0x77759855

After:
  thread #1, stop reason = Exception 0xc0000005 encountered at address 0x164d14
    frame #0: 0x00164d14 C:\Users\amccarth\Documents\Visual Studio 2013\Projects\fizzbuzz\Debug\fizzbuzz.exe
    frame #1: 0x00167c79 C:\Users\amccarth\Documents\Visual Studio 2013\Projects\fizzbuzz\Debug\fizzbuzz.exe
    frame #2: 0x00167e6d C:\Users\amccarth\Documents\Visual Studio 2013\Projects\fizzbuzz\Debug\fizzbuzz.exe
    frame #3: 0x7510336a C:\Windows\SysWOW64\kernel32.dll
    frame #4: 0x77759882 C:\Windows\SysWOW64\ntdll.dll
    frame #5: 0x77759855 C:\Windows\SysWOW64\ntdll.dll

Example: target modules list

Before:
error: the target has no associated executable images

After:
[ 0] C:\Windows\System32\MSVCP120D.dll 
[ 1] C:\Windows\SysWOW64\kernel32.dll 
[ 2] C:\Users\amccarth\Documents\Visual Studio 2013\Projects\fizzbuzz\Debug\fizzbuzz.exe 
[ 3] C:\Windows\System32\MSVCR120D.dll 
[ 4] C:\Windows\SysWOW64\KERNELBASE.dll 
[ 5] C:\Windows\SysWOW64\ntdll.dll

NOTE: the minidump format also includes the debug info GUID, so we can
fill-in the module UUID from it, but this part was excluded from this change
to keep the changes simple (the LLDB UUID is hardcoded to be either 16 or
20 bytes, while the CodeView GUIDs are normally 24 bytes)

Differential Revision: https://reviews.llvm.org/D45700

llvm-svn: 330302
2018-04-18 23:10:46 +00:00
..
Address.cpp Move ArchSpec to the Utility module 2017-11-13 16:16:33 +00:00
AddressRange.cpp Move ArchSpec to the Utility module 2017-11-13 16:16:33 +00:00
AddressResolver.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
AddressResolverFileLine.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
AddressResolverName.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
Broadcaster.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
CMakeLists.txt Move ArchSpec to the Utility module 2017-11-13 16:16:33 +00:00
Communication.cpp Move Connection and IOObject interfaces to Utility module 2017-06-27 10:33:14 +00:00
Debugger.cpp s/LLVM_ON_WIN32/_WIN32/, lldb 2018-04-10 13:33:45 +00:00
Disassembler.cpp Move Timer and TraceOptions from Core to Utility 2017-06-29 14:32:17 +00:00
DumpDataExtractor.cpp [lldb][PPC64] Fixed long double variables dump 2018-01-17 15:11:20 +00:00
DynamicLoader.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
EmulateInstruction.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
Event.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
FileLineResolver.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
FileSpecList.cpp [Core] Garbage collect dead code untouched in years. NFCI. 2017-11-18 00:34:09 +00:00
FormatEntity.cpp Move ArchSpec to the Utility module 2017-11-13 16:16:33 +00:00
IOHandler.cpp include locale.h in IOHandler.cpp 2018-03-13 15:55:00 +00:00
Listener.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
Mangled.cpp Move Timer and TraceOptions from Core to Utility 2017-06-29 14:32:17 +00:00
Module.cpp Improve LLDB's handling of non-local minidumps 2018-04-18 23:10:46 +00:00
ModuleChild.cpp *** This commit represents a complete reformatting of the LLDB source code 2016-09-06 20:57:50 +00:00
ModuleList.cpp s/LLVM_ON_WIN32/_WIN32/, lldb 2018-04-10 13:33:45 +00:00
Opcode.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
PluginManager.cpp s/LLVM_ON_WIN32/_WIN32/, lldb 2018-04-10 13:33:45 +00:00
RegisterValue.cpp Move Args.cpp from Interpreter to Utility 2018-04-17 18:53:35 +00:00
Scalar.cpp [Core] Grab-bag of improvements for Scalar. 2018-04-02 16:50:54 +00:00
SearchFilter.cpp Update StructuredData::String to return StringRefs. 2017-05-12 05:49:54 +00:00
Section.cpp Improve LLDB's handling of non-local minidumps 2018-04-18 23:10:46 +00:00
SourceManager.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
State.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
StreamAsynchronousIO.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
StreamFile.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
UserSettingsController.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
Value.cpp Add check for self-assignment. NFC 2017-11-14 18:19:41 +00:00
ValueObject.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectCast.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectChild.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectConstResult.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectConstResultCast.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectConstResultChild.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectConstResultImpl.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectDynamicValue.cpp Move ArchSpec to the Utility module 2017-11-13 16:16:33 +00:00
ValueObjectList.cpp iwyu fixes for lldbCore. 2017-04-06 21:28:29 +00:00
ValueObjectMemory.cpp Move ArchSpec to the Utility module 2017-11-13 16:16:33 +00:00
ValueObjectRegister.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectSyntheticFilter.cpp Rename Error -> Status. 2017-05-12 04:51:55 +00:00
ValueObjectVariable.cpp Move ArchSpec to the Utility module 2017-11-13 16:16:33 +00:00