diff options
| author | Zachary Turner <zturner@google.com> | 2015-10-28 17:43:26 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2015-10-28 17:43:26 +0000 |
| commit | c432c8f856e0bd84de980a9d9bb2d31b06fa95b1 (patch) | |
| tree | 4efa528e074a6e2df782345e4cd97f5d85d038c4 /lldb/test/functionalities/thread/create_after_attach | |
| parent | a8a3bd210086b50242903ed95048fe5e53897878 (diff) | |
| download | bcm5719-llvm-c432c8f856e0bd84de980a9d9bb2d31b06fa95b1.tar.gz bcm5719-llvm-c432c8f856e0bd84de980a9d9bb2d31b06fa95b1.zip | |
Move lldb/test to lldb/packages/Python/lldbsuite/test.
This is the conclusion of an effort to get LLDB's Python code
structured into a bona-fide Python package. This has a number
of benefits, but most notably the ability to more easily share
Python code between different but related pieces of LLDB's Python
infrastructure (for example, `scripts` can now share code with
`test`).
llvm-svn: 251532
Diffstat (limited to 'lldb/test/functionalities/thread/create_after_attach')
3 files changed, 0 insertions, 203 deletions
diff --git a/lldb/test/functionalities/thread/create_after_attach/Makefile b/lldb/test/functionalities/thread/create_after_attach/Makefile deleted file mode 100644 index 30c1547e35b..00000000000 --- a/lldb/test/functionalities/thread/create_after_attach/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../../make
-
-CXX_SOURCES := main.cpp
-ENABLE_STD_THREADS := YES
-include $(LEVEL)/Makefile.rules
diff --git a/lldb/test/functionalities/thread/create_after_attach/TestCreateAfterAttach.py b/lldb/test/functionalities/thread/create_after_attach/TestCreateAfterAttach.py deleted file mode 100644 index 6e363a3ffe6..00000000000 --- a/lldb/test/functionalities/thread/create_after_attach/TestCreateAfterAttach.py +++ /dev/null @@ -1,120 +0,0 @@ -""" -Test thread creation after process attach. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -from lldbtest import * -import lldbutil - -class CreateAfterAttachTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - @skipIfFreeBSD # Hangs. May be the same as Linux issue llvm.org/pr16229 but - # not yet investigated. Revisit once required functionality - # is implemented for FreeBSD. - @skipIfWindows # Occasionally hangs on Windows, may be same as other issues. - def test_create_after_attach_with_popen(self): - """Test thread creation after process attach.""" - self.build(dictionary=self.getBuildFlags(use_cpp11=False)) - self.create_after_attach(use_fork=False) - - @skipIfFreeBSD # Hangs. Revisit once required functionality is implemented - # for FreeBSD. - @skipIfRemote - @skipIfWindows # Windows doesn't have fork. - @expectedFlakeyLinux("llvm.org/pr16229") # 1/100 dosep, build 3546, clang-3.5 x84_64 - def test_create_after_attach_with_fork(self): - """Test thread creation after process attach.""" - self.build(dictionary=self.getBuildFlags(use_cpp11=False)) - self.create_after_attach(use_fork=True) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line numbers for our breakpoints. - self.break_1 = line_number('main.cpp', '// Set first breakpoint here') - self.break_2 = line_number('main.cpp', '// Set second breakpoint here') - self.break_3 = line_number('main.cpp', '// Set third breakpoint here') - - def create_after_attach(self, use_fork): - """Test thread creation after process attach.""" - - exe = os.path.join(os.getcwd(), "a.out") - - # Spawn a new process - if use_fork: - pid = self.forkSubprocess(exe) - else: - popen = self.spawnSubprocess(exe) - pid = popen.pid - self.addTearDownHook(self.cleanupSubprocesses) - - # Attach to the spawned process - self.runCmd("process attach -p " + str(pid)) - - target = self.dbg.GetSelectedTarget() - - process = target.GetProcess() - self.assertTrue(process, PROCESS_IS_VALID) - - # This should create a breakpoint in the main thread. - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_1, num_expected_locations=1) - - # This should create a breakpoint in the second child thread. - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_2, num_expected_locations=1) - - # This should create a breakpoint in the first child thread. - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_3, num_expected_locations=1) - - # Note: With std::thread, we cannot rely on particular thread numbers. Using - # std::thread may cause the program to spin up a thread pool (and it does on - # Windows), so the thread numbers are non-deterministic. - - # Run to the first breakpoint - self.runCmd("continue") - - # The stop reason of the thread should be breakpoint. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, - substrs = ['stopped', - '* thread #', - 'main', - 'stop reason = breakpoint']) - - # Change a variable to escape the loop - self.runCmd("expression main_thread_continue = 1") - - # Run to the second breakpoint - self.runCmd("continue") - - # The stop reason of the thread should be breakpoint. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, - substrs = ['stopped', - '* thread #', - 'thread_2_func', - 'stop reason = breakpoint']) - - # Change a variable to escape the loop - self.runCmd("expression child_thread_continue = 1") - - # Run to the third breakpoint - self.runCmd("continue") - - # The stop reason of the thread should be breakpoint. - # Thread 3 may or may not have already exited. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, - substrs = ['stopped', - '* thread #', - 'thread_1_func', - 'stop reason = breakpoint']) - - # Run to completion - self.runCmd("continue") - - # At this point, the inferior process should have exited. - self.assertTrue(process.GetState() == lldb.eStateExited, PROCESS_EXITED) diff --git a/lldb/test/functionalities/thread/create_after_attach/main.cpp b/lldb/test/functionalities/thread/create_after_attach/main.cpp deleted file mode 100644 index 8434458f064..00000000000 --- a/lldb/test/functionalities/thread/create_after_attach/main.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include <stdio.h> -#include <chrono> -#include <thread> - -using std::chrono::microseconds; - -#if defined(__linux__) -#include <sys/prctl.h> -#endif - -volatile int g_thread_2_continuing = 0; - -void * -thread_1_func (void *input) -{ - // Waiting to be released by the debugger. - while (!g_thread_2_continuing) // Another thread will change this value - { - std::this_thread::sleep_for(microseconds(1)); - } - - // Return - return NULL; // Set third breakpoint here -} - -void * -thread_2_func (void *input) -{ - // Waiting to be released by the debugger. - int child_thread_continue = 0; - while (!child_thread_continue) // The debugger will change this value - { - std::this_thread::sleep_for(microseconds(1)); // Set second breakpoint here - } - - // Release thread 1 - g_thread_2_continuing = 1; - - // Return - return NULL; -} - -int main(int argc, char const *argv[]) -{ -#if defined(__linux__) - // Immediately enable any ptracer so that we can allow the stub attach - // operation to succeed. Some Linux kernels are locked down so that - // only an ancestor process can be a ptracer of a process. This disables that - // restriction. Without it, attach-related stub tests will fail. -#if defined(PR_SET_PTRACER) && defined(PR_SET_PTRACER_ANY) - int prctl_result; - - // For now we execute on best effort basis. If this fails for - // some reason, so be it. - prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); - (void) prctl_result; -#endif -#endif - - // Create a new thread - std::thread thread_1(thread_1_func, nullptr); - - // Waiting to be attached by the debugger. - int main_thread_continue = 0; - while (!main_thread_continue) // The debugger will change this value - { - std::this_thread::sleep_for(microseconds(1)); // Set first breakpoint here - } - - // Create another new thread - std::thread thread_2(thread_2_func, nullptr); - - // Wait for the threads to finish. - thread_1.join(); - thread_2.join(); - - printf("Exiting now\n"); -} |

