diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2020-04-14 08:41:50 -0700 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2020-04-14 09:24:23 -0700 |
commit | fc410138939fbc98d7eb700e0e898500a00efc4d (patch) | |
tree | fc6c99eec9108bbb1b19bb4a6b2251b733811d7c /lldb/packages/Python/lldbsuite/test | |
parent | c1a9dd9aea498dd78d6583f29f15a690ddd5466a (diff) | |
download | llvm-fc410138939fbc98d7eb700e0e898500a00efc4d.zip llvm-fc410138939fbc98d7eb700e0e898500a00efc4d.tar.gz llvm-fc410138939fbc98d7eb700e0e898500a00efc4d.tar.bz2 |
[lldb/Reproducers] Capture reproducers from the API test suite.
Make it possible to capture reproducers from the API test suite. Given
the symmetry between capture and replay, this patch also adds the
necessary code for replay. For now this is a NO-OP until the
corresponding reproducer instrumentation changes land.
For more info please refer to the RFC on lldb-dev:
http://lists.llvm.org/pipermail/lldb-dev/2020-April/016100.html
Differential revision: https://reviews.llvm.org/D77588
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/configuration.py | 5 | ||||
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/decorators.py | 8 | ||||
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/dotest.py | 22 | ||||
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/dotest_args.py | 11 |
4 files changed, 45 insertions, 1 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/configuration.py b/lldb/packages/Python/lldbsuite/test/configuration.py index ce6f46a..9d69438 100644 --- a/lldb/packages/Python/lldbsuite/test/configuration.py +++ b/lldb/packages/Python/lldbsuite/test/configuration.py @@ -87,7 +87,6 @@ session_file_format = 'fnmac' # Set this flag if there is any session info dumped during the test run. sdir_has_content = False - # svn_info stores the output from 'svn info lldb.base.dir'. svn_info = '' @@ -124,6 +123,10 @@ results_formatter_object = None results_formatter_options = None test_result = None +# Reproducers +capture_path = None +replay_path = None + # Test rerun configuration vars rerun_all_issues = False diff --git a/lldb/packages/Python/lldbsuite/test/decorators.py b/lldb/packages/Python/lldbsuite/test/decorators.py index cc28ae9..65b63b4 100644 --- a/lldb/packages/Python/lldbsuite/test/decorators.py +++ b/lldb/packages/Python/lldbsuite/test/decorators.py @@ -854,3 +854,11 @@ def skipIfAsan(func): return "ASAN unsupported" return None return skipTestIfFn(is_asan)(func) + +def skipIfReproducer(func): + """Skip this test if the environment is set up to run LLDB with reproducers.""" + def is_reproducer(): + if configuration.capture_path or configuration.replay_path: + return "reproducers unsupported" + return None + return skipTestIfFn(is_reproducer)(func) diff --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py index 31c617c..b5666ec 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest.py +++ b/lldb/packages/Python/lldbsuite/test/dotest.py @@ -429,6 +429,17 @@ def parseOptionsAndInitTestdirs(): configuration.results_formatter_name = ( "lldbsuite.test_event.formatter.results_formatter.ResultsFormatter") + # Reproducer arguments + if args.capture_path and args.replay_path: + logging.error('Cannot specify both a capture and a replay path.') + sys.exit(-1) + + if args.capture_path: + configuration.capture_path = args.capture_path + + if args.replay_path: + configuration.replay_path = args.replay_path + # rerun-related arguments configuration.rerun_all_issues = args.rerun_all_issues @@ -955,8 +966,19 @@ def run_suite(): setupSysPath() import lldbconfig + if configuration.capture_path or configuration.replay_path: + lldbconfig.INITIALIZE = False import lldb + if configuration.capture_path: + lldb.SBReproducer.Capture(configuration.capture_path) + lldb.SBReproducer.SetAutoGenerate(True) + elif configuration.replay_path: + lldb.SBReproducer.PassiveReplay(configuration.replay_path) + + if not lldbconfig.INITIALIZE: + lldb.SBDebugger.Initialize() + # Use host platform by default. lldb.selected_platform = lldb.SBPlatform.GetHostPlatform() diff --git a/lldb/packages/Python/lldbsuite/test/dotest_args.py b/lldb/packages/Python/lldbsuite/test/dotest_args.py index 385f65f..ad9508d 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest_args.py +++ b/lldb/packages/Python/lldbsuite/test/dotest_args.py @@ -196,6 +196,17 @@ def create_parser(): metavar='platform-working-dir', help='The directory to use on the remote platform.') + # Reproducer options + group = parser.add_argument_group('Reproducer options') + group.add_argument( + '--capture-path', + metavar='reproducer path', + help='The reproducer capture path') + group.add_argument( + '--replay-path', + metavar='reproducer path', + help='The reproducer replay path') + # Test-suite behaviour group = parser.add_argument_group('Runtime behaviour options') X('-d', 'Suspend the process after launch to wait indefinitely for a debugger to attach') |