mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 12:35:47 -04:00

Summary: This adds the jModulesInfo packet, which is the equivalent of qModulesInfo, but it enables us to query multiple modules at once. This makes a significant speed improvement in case the application has many (over a hundred) modules, and the communication link has a non-negligible latency. This functionality is accessed by ProcessGdbRemote::PrefetchModuleSpecs(), which does the caching. GetModuleSpecs() is modified to first consult the cache before asking the remote stub. PrefetchModuleSpecs is currently only called from POSIX-DYLD dynamic loader plugin, after it reads the list of modules from the inferior memory, but other uses are possible. This decreases the attach time to an android application by about 40%. Reviewers: clayborg Subscribers: tberghammer, lldb-commits, danalbert Differential Revision: https://reviews.llvm.org/D24236 llvm-svn: 280919
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
from __future__ import print_function
|
|
|
|
|
|
import gdbremote_testcase
|
|
import lldbgdbserverutils
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class TestGdbRemoteModuleInfo(gdbremote_testcase.GdbRemoteTestCaseBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
def module_info(self):
|
|
procs = self.prep_debug_monitor_and_inferior()
|
|
self.test_sequence.add_log_lines([
|
|
'read packet: $jModulesInfo:[{"file":"%s","triple":"%s"}]]#00' % (
|
|
lldbutil.append_to_process_working_directory("a.out"),
|
|
self.dbg.GetSelectedPlatform().GetTriple()),
|
|
{"direction": "send",
|
|
"regex": r'^\$\[{(.*)}\]\]#[0-9A-Fa-f]{2}',
|
|
"capture": {1: "spec"}},
|
|
], True)
|
|
|
|
context = self.expect_gdbremote_sequence()
|
|
spec = context.get("spec")
|
|
self.assertRegexpMatches(spec, '"file_path":".*"')
|
|
self.assertRegexpMatches(spec, '"file_offset":\d+')
|
|
self.assertRegexpMatches(spec, '"file_size":\d+')
|
|
self.assertRegexpMatches(spec, '"triple":"\w*-\w*-.*"')
|
|
self.assertRegexpMatches(spec, '"uuid":"[A-Fa-f0-9]+"')
|
|
|
|
@llgs_test
|
|
def test_module_info(self):
|
|
self.init_llgs_test()
|
|
self.build()
|
|
self.set_inferior_startup_launch()
|
|
self.module_info()
|