diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/api/multiple-targets')
3 files changed, 83 insertions, 0 deletions
| diff --git a/packages/Python/lldbsuite/test/api/multiple-targets/Makefile b/packages/Python/lldbsuite/test/api/multiple-targets/Makefile new file mode 100644 index 0000000000000..bee559c8ecdd1 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multiple-targets/Makefile @@ -0,0 +1,8 @@ +LEVEL = ../../make + +MAKE_DSYM := NO + +ENABLE_THREADS := YES +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/api/multiple-targets/TestMultipleTargets.py b/packages/Python/lldbsuite/test/api/multiple-targets/TestMultipleTargets.py new file mode 100644 index 0000000000000..decb3fd4f0c59 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multiple-targets/TestMultipleTargets.py @@ -0,0 +1,44 @@ +"""Test the lldb public C++ api when creating multiple targets simultaneously.""" + +from __future__ import print_function + + +import os +import re +import subprocess + +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TestMultipleTargets(TestBase): + +    mydir = TestBase.compute_mydir(__file__) +    NO_DEBUG_INFO_TESTCASE = True + +    @skipIfNoSBHeaders +    @skipIfHostIncompatibleWithRemote +    @expectedFailureAll( +        oslist=["windows", "freebsd"], +        bugnumber="llvm.org/pr20282") +    def test_multiple_targets(self): +        env = {self.dylibPath: self.getLLDBLibraryEnvVal()} + +        self.driver_exe = os.path.join(os.getcwd(), "multi-target") +        self.buildDriver('main.cpp', self.driver_exe) +        self.addTearDownHook(lambda: os.remove(self.driver_exe)) +        self.signBinary(self.driver_exe) + +# check_call will raise a CalledProcessError if multi-process-driver doesn't return +# exit code 0 to indicate success.  We can let this exception go - the test harness +# will recognize it as a test failure. + +        if self.TraceOn(): +            print("Running test %s" % self.driver_exe) +            check_call([self.driver_exe, self.driver_exe], env=env) +        else: +            with open(os.devnull, 'w') as fnull: +                check_call([self.driver_exe, self.driver_exe], +                           env=env, stdout=fnull, stderr=fnull) diff --git a/packages/Python/lldbsuite/test/api/multiple-targets/main.cpp b/packages/Python/lldbsuite/test/api/multiple-targets/main.cpp new file mode 100644 index 0000000000000..35fb4e0d613ed --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multiple-targets/main.cpp @@ -0,0 +1,31 @@ +#include <thread> + +#include "lldb/API/LLDB.h" +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBTarget.h" + +using namespace lldb; +int main (int argc, char **argv) +{ +  // We are expecting the program path and a path to an executable to load +  if (argc != 2) +    return 1; +  const char *program_file = argv[1]; +  SBDebugger::Initialize(); +  SBDebugger debugger = SBDebugger::Create(false); +  auto lambda = [&](){ +    SBError error; +    SBTarget target = debugger.CreateTarget(program_file, nullptr, nullptr,  +                                            false, error); +  }; + +  // Create 3 targets at the same time and make sure we don't crash. +  std::thread thread1(lambda); +  std::thread thread2(lambda); +  std::thread thread3(lambda); +  thread1.join(); +  thread2.join(); +  thread3.join(); +  SBDebugger::Terminate(); +  return 0; +} | 
