summaryrefslogtreecommitdiffstats
path: root/lldb/tools/debugserver/source/DNB.cpp
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2015-07-10 23:15:22 +0000
committerJason Molenda <jmolenda@apple.com>2015-07-10 23:15:22 +0000
commit20ee21bde6ca8df6841d55b9098a11c22e0f811d (patch)
tree1344f188dc85716eeb4cf7f3bb74310ca777d561 /lldb/tools/debugserver/source/DNB.cpp
parentc6ecb7c6938bae8dbd5f5d3adbc665ccc4ff0034 (diff)
downloadbcm5719-llvm-20ee21bde6ca8df6841d55b9098a11c22e0f811d.tar.gz
bcm5719-llvm-20ee21bde6ca8df6841d55b9098a11c22e0f811d.zip
Add a another packet to the gdb-remote protocol,
jGetLoadedDynamicLibrariesInfos. This packet is similar to qXfer:libraries:read except that lldb supplies the number of solibs that should be reported about, and the start address for the list of them. At the initial process launch we'll read the full list of solibs linked by the process -- at this point we could be using qXfer:libraries:read -- but on subsequence solib-loaded notifications, we'll be fetching a smaller number of solibs, often only one or two. A typical Mac/iOS GUI app may have a couple hundred different solibs loaded - doing all of the loads via memory reads takes a couple of megabytes of traffic between lldb and debugserver. Having debugserver summarize the load addresses of all the solibs and sending it in JSON requires a couple of hundred kilobytes of traffic. It's a significant performance improvement when communicating over a slower channel. This patch leaves all of the logic for loading the libraries in DynamicLoaderMacOSXDYLD -- it only call over ot ProcesGDBRemote to get the JSON result. If the jGetLoadedDynamicLibrariesInfos packet is not implemented, the normal technique of using memory read packets to get all of the details from the target will be used. <rdar://problem/21007465> llvm-svn: 241964
Diffstat (limited to 'lldb/tools/debugserver/source/DNB.cpp')
-rw-r--r--lldb/tools/debugserver/source/DNB.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/lldb/tools/debugserver/source/DNB.cpp b/lldb/tools/debugserver/source/DNB.cpp
index 4cde3f87b08..f9cab2ff665 100644
--- a/lldb/tools/debugserver/source/DNB.cpp
+++ b/lldb/tools/debugserver/source/DNB.cpp
@@ -1066,6 +1066,18 @@ DNBGetTSDAddressForThread (nub_process_t pid, nub_thread_t tid, uint64_t plo_pth
return INVALID_NUB_ADDRESS;
}
+JSONGenerator::ObjectSP
+DNBGetLoadedDynamicLibrariesInfos (nub_process_t pid, nub_addr_t image_list_address, nub_addr_t image_count)
+{
+ MachProcessSP procSP;
+ if (GetProcessSP (pid, procSP))
+ {
+ return procSP->GetLoadedDynamicLibrariesInfos (pid, image_list_address, image_count);
+ }
+ return JSONGenerator::ObjectSP();
+}
+
+
const char *
DNBProcessGetExecutablePath (nub_process_t pid)
OpenPOWER on IntegriCloud