The on-ios-device command line lldb has an optimization where
authorJason Molenda <jmolenda@apple.com>
Fri, 4 May 2018 00:59:37 +0000 (00:59 +0000)
committerJason Molenda <jmolenda@apple.com>
Fri, 4 May 2018 00:59:37 +0000 (00:59 +0000)
commit07580ffe4705ae0f85659bf5c8a18afc0137353b
treef539be67d4566014fc4b7fdee0c422d66d7ec78e
parent4cc0d4e82301910007963a0f96502dc97b560727
The on-ios-device command line lldb has an optimization where
when it and the inferior process both have the same shared cache
(a conglomeration of all libraries at the same fixed address for
all processes), lldb will read data out of its own memory to speed
things up.  The shared cache has a UUID, so lldb currently checks
that the UUID of its own shared cache matches that of the inferior.

This change adds one refinement to that -- it checks that the UUID
is the same and that the base address of the shared cache is the
same.  And only uses its local shared cache if they are both identical.

This involved using a different style of SPI with dyld to get lldb's
shared cache load address, but it's not especially difficult.

One unattractive part of the change is that I'm using the real
underlying types of task_t and kern_return_t instead of picking
them up from mach/mach.h.  The defines that get picked up there (a
lot from machine.h but others too) conflict with llvm/Support/MachO.h
even when I have mach.h included before our SafeMachO.h which
undefines most of the defines before including llvm/Support/MachO.h.
I'll need to augment the #undefs in SafeMachO.h to get this to
compile cleanly, but that'll be another day.

<rdar://problem/39868238>

llvm-svn: 331497
lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h