diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 |
commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /packages/Python/lldbsuite | |
parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
download | src-9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc.tar.gz src-9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc.zip |
Vendor import of lldb trunk r256945:vendor/lldb/lldb-trunk-r256945
Notes
Notes:
svn path=/vendor/lldb/dist/; revision=293262
svn path=/vendor/lldb/lldb-trunk-r256945/; revision=293263; tag=vendor/lldb/lldb-trunk-r256945
Diffstat (limited to 'packages/Python/lldbsuite')
1563 files changed, 103123 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/__init__.py b/packages/Python/lldbsuite/__init__.py new file mode 100644 index 000000000000..aa6874e78bc2 --- /dev/null +++ b/packages/Python/lldbsuite/__init__.py @@ -0,0 +1,28 @@ +# Module level initialization for the `lldbsuite` module. + +import inspect +import os +import sys + +def find_lldb_root(): + lldb_root = os.path.dirname(inspect.getfile(inspect.currentframe())) + while True: + lldb_root = os.path.dirname(lldb_root) + if lldb_root is None: + return None + + test_path = os.path.join(lldb_root, "use_lldb_suite_root.py") + if os.path.isfile(test_path): + return lldb_root + return None + +# lldbsuite.lldb_root refers to the root of the git/svn source checkout +lldb_root = find_lldb_root() + +# lldbsuite.lldb_test_root refers to the root of the python test tree +lldb_test_root = os.path.join( + lldb_root, + "packages", + "Python", + "lldbsuite", + "test") diff --git a/packages/Python/lldbsuite/support/__init__.py b/packages/Python/lldbsuite/support/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/packages/Python/lldbsuite/support/__init__.py diff --git a/packages/Python/lldbsuite/support/fs.py b/packages/Python/lldbsuite/support/fs.py new file mode 100644 index 000000000000..9a56808369de --- /dev/null +++ b/packages/Python/lldbsuite/support/fs.py @@ -0,0 +1,64 @@ +""" + The LLVM Compiler Infrastructure + +This file is distributed under the University of Illinois Open Source +License. See LICENSE.TXT for details. + +Prepares language bindings for LLDB build process. Run with --help +to see a description of the supported command line arguments. +""" + +# Python modules: +import os +import platform +import sys + + +def _find_file_in_paths(paths, exe_basename): + """Returns the full exe path for the first path match. + + @params paths the list of directories to search for the exe_basename + executable + @params exe_basename the name of the file for which to search. + e.g. "swig" or "swig.exe". + + @return the full path to the executable if found in one of the + given paths; otherwise, returns None. + """ + for path in paths: + trial_exe_path = os.path.join(path, exe_basename) + if os.path.exists(trial_exe_path): + return os.path.normcase(trial_exe_path) + return None + +def find_executable(executable): + """Finds the specified executable in the PATH or known good locations.""" + + # Figure out what we're looking for. + if platform.system() == "Windows": + executable = executable + ".exe" + extra_dirs = [] + else: + extra_dirs = ["/usr/local/bin"] + + # Figure out what paths to check. + path_env = os.environ.get("PATH", None) + if path_env is not None: + paths_to_check = path_env.split(os.path.pathsep) + else: + paths_to_check = [] + + # Add in the extra dirs + paths_to_check.extend(extra_dirs) + if len(paths_to_check) < 1: + raise os.OSError( + "executable was not specified, PATH has no " + "contents, and there are no extra directories to search") + + result = _find_file_in_paths(paths_to_check, executable) + + if not result or len(result) < 1: + raise os.OSError( + "failed to find exe='%s' in paths='%s'" % (executable, paths_to_check)) + return result + diff --git a/packages/Python/lldbsuite/support/seven.py b/packages/Python/lldbsuite/support/seven.py new file mode 100644 index 000000000000..56ddd8db3f66 --- /dev/null +++ b/packages/Python/lldbsuite/support/seven.py @@ -0,0 +1,20 @@ +import six + +if six.PY2: + import commands + get_command_output = commands.getoutput + get_command_status_output = commands.getstatusoutput + + cmp_ = cmp +else: + def get_command_status_output(command): + try: + import subprocess + return (0, subprocess.check_output(command, shell=True, universal_newlines=True)) + except subprocess.CalledProcessError as e: + return (e.returncode, e.output) + + def get_command_output(command): + return get_command_status_output(command)[1] + + cmp_ = lambda x, y: (x > y) - (x < y)
\ No newline at end of file diff --git a/packages/Python/lldbsuite/support/sockutil.py b/packages/Python/lldbsuite/support/sockutil.py new file mode 100644 index 000000000000..b3d81d14884a --- /dev/null +++ b/packages/Python/lldbsuite/support/sockutil.py @@ -0,0 +1,23 @@ +""" + The LLVM Compiler Infrastructure + +This file is distributed under the University of Illinois Open Source +License. See LICENSE.TXT for details. + +Helper functions for working with sockets. +""" + +# Python modules: +import io +import socket + +# LLDB modules +import use_lldb_suite + +def recvall(sock, size): + bytes = io.BytesIO() + while size > 0: + this_result = sock.recv(size) + bytes.write(this_result) + size -= len(this_result) + return bytes.getvalue() diff --git a/packages/Python/lldbsuite/test/.categories b/packages/Python/lldbsuite/test/.categories new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/packages/Python/lldbsuite/test/.categories diff --git a/packages/Python/lldbsuite/test/Makefile b/packages/Python/lldbsuite/test/Makefile new file mode 100644 index 000000000000..4d08ef39d4db --- /dev/null +++ b/packages/Python/lldbsuite/test/Makefile @@ -0,0 +1,33 @@ +LLDB_LEVEL := .. +include $(LLDB_LEVEL)/Makefile + +.PHONY: programs + +all:: check-local + +#---------------------------------------------------------------------- +# Make all of the test programs +#---------------------------------------------------------------------- +programs: + find . -type d -depth 1 | xargs -J % find % \ + -name Makefile \ + -exec echo \; \ + -exec echo make -f '{}' \; \ + -execdir make \; + +#---------------------------------------------------------------------- +# Clean all of the test programs +#---------------------------------------------------------------------- +clean:: + find . -type d -depth 1 | xargs -J % find % \ + -name Makefile \ + -exec echo \; \ + -exec echo make -f '{}' clean \; \ + -execdir make clean \; + +#---------------------------------------------------------------------- +# Run the tests +#---------------------------------------------------------------------- +check-local:: + rm -rf lldb-test-traces + python $(PROJ_SRC_DIR)/dotest.py --executable $(ToolDir)/lldb -q -s lldb-test-traces -u CXXFLAGS -u CFLAGS -C $(subst ccache,,$(CC)) diff --git a/packages/Python/lldbsuite/test/README-TestSuite b/packages/Python/lldbsuite/test/README-TestSuite new file mode 100644 index 000000000000..6df4d7bd7be7 --- /dev/null +++ b/packages/Python/lldbsuite/test/README-TestSuite @@ -0,0 +1,159 @@ +This README file describes the files and directories related to the Python test +suite under the current 'test' directory. + +o dotest.py + + Provides the test driver for the test suite. To invoke it, cd to the 'test' + directory and issue the './dotest.py' command or './dotest.py -v' for more + verbose output. '.dotest.py -h' prints out the help messge. + + A specific naming pattern is followed by the .py script under the 'test' + directory in order to be recognized by 'dotest.py' test driver as a module + which implements a test case, namely, Test*.py. + + Some example usages: + + 1. ./dotest.py -v . 2> ~/Developer/Log/lldbtest.log0 + This runs the test suite and directs the run log to a file. + + 2. LLDB_LOG=/tmp/lldb.log GDB_REMOTE_LOG=/tmp/gdb-remote.log ./dotest.py -v . 2> ~/Developer/Log/lldbtest.log + This runs the test suite, with logging turned on for the lldb as well as + the process.gdb-remote channels and directs the run log to a file. + +o lldbtest.py + + Provides an abstract base class of lldb test case named 'TestBase', which in + turn inherits from Python's unittest.TestCase. The concrete subclass can + override lldbtest.TestBase in order to inherit the common behavior for + unittest.TestCase.setUp/tearDown implemented in this file. + + To provide a test case, the concrete subclass provides methods whose names + start with the letters test. For more details about the Python's unittest + framework, go to http://docs.python.org/library/unittest.html. + + ./command_source/TestCommandSource.py provides a simple example of test case + which overrides lldbtest.TestBase to exercise the lldb's 'command source' + command. The subclass should override the attribute 'mydir' in order for the + runtime to locate the individual test cases when running as part of a large + test suite or when running each test case as a separate Python invocation. + + The doc string provides more details about the setup required for running a + test case on its own. To run the whole test suite, 'dotest.py' is all you + need to do. + +o subdirectories of 'test' + + Most of them predate the introduction of the python test suite and contain + example C/C++/ObjC source files which get compiled into executables which are + to be exercised by the debugger. + + For such subdirectory which has an associated Test*.py file, it was added as + part of the Python-based test suite to test lldb functionality. + + Some of the subdirectories, for example, the 'help' subdirectory, do not have + C/C++/ObjC source files; they were created to house the Python test case which + does not involve lldb reading in an executable file at all. + +o make directory + + Contains Makefile.rules, which can be utilized by test cases to write Makefile + based rules to build binaries for the inferiors. + + By default, the built executable name is a.out, which can be overwritten by + specifying your EXE make variable, via the Makefile under the specific test + directory or via supplying a Python dictionary to the build method in your + Python test script. An example of the latter can be found in + test/lang/objc/radar-9691614/TestObjCMethodReturningBOOL.py, where: + + def test_method_ret_BOOL_with_dsym(self): + """Test that objective-c method returning BOOL works correctly.""" + d = {'EXE': self.exe_name} + self.buildDsym(dictionary=d) + self.setTearDownCleanup(dictionary=d) + self.objc_method_ret_BOOL(self.exe_name) + + def test_method_ret_BOOL_with_dwarf(self): + """Test that objective-c method returning BOOL works correctly.""" + d = {'EXE': self.exe_name} + self.buildDwarf(dictionary=d) + self.setTearDownCleanup(dictionary=d) + self.objc_method_ret_BOOL(self.exe_name) + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + # We'll use the test method name as the exe_name. + self.exe_name = self.testMethodName + # Find the line number to break inside main(). + self.main_source = "main.m" + self.line = line_number(self.main_source, '// Set breakpoint here.') + + The exe names for the two test methods are equal to the test method names and + are therefore guaranteed different. + +o plugins directory + + Contains platform specific plugin to build binaries with dsym/dwarf debugging + info. Other platform specific functionalities may be added in the future. + +o unittest2 directory + + Many new features were added to unittest in Python 2.7, including test + discovery. unittest2 allows you to use these features with earlier versions of + Python. + + It currently has unittest2 0.5.1 from http://pypi.python.org/pypi/unittest2. + Version 0.5.1 of unittest2 has feature parity with unittest in Python 2.7 + final. If you want to ensure that your tests run identically under unittest2 + and unittest in Python 2.7 you should use unittest2 0.5.1. + + Later versions of unittest2 include changes in unittest made in Python 3.2 and + onwards after the release of Python 2.7. + +o dotest.pl + + In case you wonder, there is also a 'dotest.pl' perl script file. It was + created to visit each Python test case under the specified directory and + invoke Python's builtin unittest.main() on each test case. + + It does not take advantage of the test runner and test suite functionality + provided by Python's unitest framework. Its existence is because we want a + different way of running the whole test suite. As lldb and the Python test + suite become more reliable, we don't expect to be using 'dotest.pl' anymore. + + Note: dotest.pl has been moved to the attic directory. + +o Profiling dotest.py runs + + I used the following command line thingy to do the profiling on a SnowLeopard + machine: + +$ DOTEST_PROFILE=YES DOTEST_SCRIPT_DIR=/Volumes/data/lldb/svn/trunk/test /System/Library/Frameworks/Python.framework/Versions/Current/lib/python2.6/cProfile.py -o my.profile ./dotest.py -v -w 2> ~/Developer/Log/lldbtest.log + + After that, I used the pstats.py module to browse the statistics: + +$ python /System/Library/Frameworks/Python.framework/Versions/Current/lib/python2.6/pstats.py my.profile + +o Writing test cases: + + We strongly prefer writing test cases using the SB API's rather than the runCmd & expect. + Unless you are actually testing some feature of the command line, please don't write + command based tests. For historical reasons there are plenty of examples of tests in the + test suite that use runCmd where they shouldn't, but don't copy them, copy the plenty that + do use the SB API's instead. + + The reason for this is that our policy is that we will maintain compatibility with the + SB API's. But we don't make any similar guarantee about the details of command result format. + If your test is using the command line, it is going to have to check against the command result + text, and you either end up writing your check pattern by checking as little as possible so + you won't be exposed to random changes in the text; in which case you can end up missing some + failure, or you test too much and it means irrelevant changes break your tests. + + However, if you use the Python API's it is possible to check all the results you want + to check in a very explicit way, which makes the tests much more robust. + + Even if you are testing that a command-line command does some specific thing, it is still + better in general to use the SB API's to drive to the point where you want to run the test, + then use SBInterpreter::HandleCommand to run the command. You get the full result text + from the command in the command return object, and all the part where you are driving the + debugger to the point you want to test will be more robust. diff --git a/packages/Python/lldbsuite/test/__init__.py b/packages/Python/lldbsuite/test/__init__.py new file mode 100644 index 000000000000..93971c2f2364 --- /dev/null +++ b/packages/Python/lldbsuite/test/__init__.py @@ -0,0 +1,7 @@ +# Module level initialization for the `lldbsuite.test` module. + +from __future__ import absolute_import + +from . import dotest + +run_suite = dotest.run_suite diff --git a/packages/Python/lldbsuite/test/android/platform/Makefile b/packages/Python/lldbsuite/test/android/platform/Makefile new file mode 100644 index 000000000000..22e42c5a776e --- /dev/null +++ b/packages/Python/lldbsuite/test/android/platform/Makefile @@ -0,0 +1,4 @@ +LEVEL = ../../make + +CXX_SOURCES := main.cpp +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/android/platform/TestDefaultCacheLineSize.py b/packages/Python/lldbsuite/test/android/platform/TestDefaultCacheLineSize.py new file mode 100644 index 000000000000..b925afe1b70c --- /dev/null +++ b/packages/Python/lldbsuite/test/android/platform/TestDefaultCacheLineSize.py @@ -0,0 +1,38 @@ +""" +Verify the default cache line size for android targets +""" + +from __future__ import print_function + + + +import os +import lldb +from lldbsuite.test.lldbtest import * +import lldbsuite.test.lldbutil as lldbutil + +class DefaultCacheLineSizeTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipUnlessPlatform(['android']) + def test_cache_line_size(self): + self.build(dictionary=self.getBuildFlags()) + exe = os.path.join(os.getcwd(), "a.out") + target = self.dbg.CreateTarget(exe) + self.assertTrue(target and target.IsValid(), "Target is valid") + + breakpoint = target.BreakpointCreateByName("main") + self.assertTrue(breakpoint and breakpoint.IsValid(), "Breakpoint is valid") + + # Run the program. + process = target.LaunchSimple(None, None, self.get_process_working_directory()) + self.assertTrue(process and process.IsValid(), PROCESS_IS_VALID) + self.assertEqual(process.GetState(), lldb.eStateStopped, PROCESS_STOPPED) + + # check the setting value + self.expect("settings show target.process.memory-cache-line-size", patterns=[" = 2048"]) + + # Run to completion. + process.Continue() + self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED) diff --git a/packages/Python/lldbsuite/test/android/platform/main.cpp b/packages/Python/lldbsuite/test/android/platform/main.cpp new file mode 100644 index 000000000000..3fb9edc47270 --- /dev/null +++ b/packages/Python/lldbsuite/test/android/platform/main.cpp @@ -0,0 +1,13 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main () +{ + return 0; +} diff --git a/packages/Python/lldbsuite/test/api/check_public_api_headers/Makefile b/packages/Python/lldbsuite/test/api/check_public_api_headers/Makefile new file mode 100644 index 000000000000..8a7102e347af --- /dev/null +++ b/packages/Python/lldbsuite/test/api/check_public_api_headers/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../make + +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/api/check_public_api_headers/TestPublicAPIHeaders.py b/packages/Python/lldbsuite/test/api/check_public_api_headers/TestPublicAPIHeaders.py new file mode 100644 index 000000000000..0d0507f1d70c --- /dev/null +++ b/packages/Python/lldbsuite/test/api/check_public_api_headers/TestPublicAPIHeaders.py @@ -0,0 +1,88 @@ +"""Test the integrity of the lldb public api directory containing SB*.h headers. + +There should be nothing unwanted there and a simpe main.cpp which includes SB*.h +should compile and link with the LLDB framework.""" + +from __future__ import print_function + + + +import os, re +from lldbsuite.test.lldbtest import * +import lldbsuite.test.lldbutil as lldbutil + +class SBDirCheckerCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def setUp(self): + TestBase.setUp(self) + self.template = 'main.cpp.template' + self.source = 'main.cpp' + self.exe_name = 'a.out' + + @skipIfNoSBHeaders + def test_sb_api_directory(self): + """Test the SB API directory and make sure there's no unwanted stuff.""" + + # Only proceed if this is an Apple OS, "x86_64", and local platform. + if not (self.platformIsDarwin() and self.getArchitecture() == "x86_64"): + self.skipTest("This test is only for LLDB.framework built 64-bit") + if self.getArchitecture() == "i386": + self.skipTest("LLDB is 64-bit and cannot be linked to 32-bit test program.") + + # Generate main.cpp, build it, and execute. + self.generate_main_cpp() + self.buildDriver(self.source, self.exe_name) + self.sanity_check_executable(self.exe_name) + + def generate_main_cpp(self): + """Generate main.cpp from main.cpp.template.""" + temp = os.path.join(os.getcwd(), self.template) + with open(temp, 'r') as f: + content = f.read() + + public_api_dir = os.path.join(os.environ["LLDB_SRC"], "include", "lldb", "API") + + # Look under the include/lldb/API directory and add #include statements + # for all the SB API headers. + public_headers = os.listdir(public_api_dir) + # For different platforms, the include statement can vary. + if self.platformIsDarwin(): + include_stmt = "'#include <%s>' % os.path.join('LLDB', header)" + if self.getPlatform() == "freebsd" or self.getPlatform() == "linux" or os.environ.get('LLDB_BUILD_TYPE') == 'Makefile': + include_stmt = "'#include <%s>' % os.path.join(public_api_dir, header)" + list = [eval(include_stmt) for header in public_headers if (header.startswith("SB") and + header.endswith(".h"))] + includes = '\n'.join(list) + new_content = content.replace('%include_SB_APIs%', includes) + src = os.path.join(os.getcwd(), self.source) + with open(src, 'w') as f: + f.write(new_content) + + # The main.cpp has been generated, add a teardown hook to remove it. + self.addTearDownHook(lambda: os.remove(src)) + + def sanity_check_executable(self, exe_name): + """Sanity check executable compiled from the auto-generated program.""" + exe = os.path.join(os.getcwd(), exe_name) + self.runCmd("file %s" % exe, CURRENT_EXECUTABLE_SET) + + self.line_to_break = line_number(self.source, '// Set breakpoint here.') + + env_cmd = "settings set target.env-vars %s=%s" %(self.dylibPath, self.getLLDBLibraryEnvVal()) + if self.TraceOn(): + print("Set environment to: ", env_cmd) + self.runCmd(env_cmd) + self.addTearDownHook(lambda: self.dbg.HandleCommand("settings remove target.env-vars %s" % self.dylibPath)) + + lldbutil.run_break_set_by_file_and_line (self, self.source, self.line_to_break, num_expected_locations = -1) + + self.runCmd("run", RUN_SUCCEEDED) + + # The stop reason of the thread should be breakpoint. + self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, + substrs = ['stopped', + 'stop reason = breakpoint']) + + self.runCmd('frame variable') diff --git a/packages/Python/lldbsuite/test/api/check_public_api_headers/main.cpp.template b/packages/Python/lldbsuite/test/api/check_public_api_headers/main.cpp.template new file mode 100644 index 000000000000..ed754add6100 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/check_public_api_headers/main.cpp.template @@ -0,0 +1,24 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include <stdio.h> +%include_SB_APIs% + +using namespace lldb; +int +main(int argc, char const *argv[]) +{ + SBDebugger::Initialize(); + SBDebugger dbg = SBDebugger::Create(); + + printf("Hello SBDebugger %llu\n", dbg.GetID()); // Set breakpoint here. + + SBDebugger::Terminate(); + return 0; +} diff --git a/packages/Python/lldbsuite/test/api/multiple-debuggers/.categories b/packages/Python/lldbsuite/test/api/multiple-debuggers/.categories new file mode 100644 index 000000000000..6e70196ccd70 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multiple-debuggers/.categories @@ -0,0 +1 @@ +stresstest diff --git a/packages/Python/lldbsuite/test/api/multiple-debuggers/Makefile b/packages/Python/lldbsuite/test/api/multiple-debuggers/Makefile new file mode 100644 index 000000000000..08f8850e3e8f --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multiple-debuggers/Makefile @@ -0,0 +1,8 @@ +LEVEL = ../../make + +MAKE_DSYM := NO + +ENABLE_THREADS := YES +CXX_SOURCES := multi-process-driver.cpp testprog.cpp + +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py b/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py new file mode 100644 index 000000000000..67dca2273d8a --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py @@ -0,0 +1,44 @@ +"""Test the lldb public C++ api when doing multiple debug sessions simultaneously.""" + +from __future__ import print_function + + + +import os, re +from lldbsuite.test.lldbtest import * +import lldbsuite.test.lldbutil as lldbutil +import lldb +import subprocess + +class TestMultipleSimultaneousDebuggers(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipIfi386 + @skipIfNoSBHeaders + @expectedFailureFreeBSD("llvm.org/pr20282") + @expectedFailureLinux("llvm.org/pr20282") + @expectedFailureWindows # Test crashes + @expectedFlakeyDarwin() + def test_multiple_debuggers(self): + env = {self.dylibPath : self.getLLDBLibraryEnvVal()} + + self.driver_exe = os.path.join(os.getcwd(), "multi-process-driver") + self.buildDriver('multi-process-driver.cpp', self.driver_exe) + self.addTearDownHook(lambda: os.remove(self.driver_exe)) + self.signBinary(self.driver_exe) + + self.inferior_exe = os.path.join(os.getcwd(), "testprog") + self.buildDriver('testprog.cpp', self.inferior_exe) + self.addTearDownHook(lambda: os.remove(self.inferior_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.inferior_exe], env=env) + else: + with open(os.devnull, 'w') as fnull: + check_call([self.driver_exe, self.inferior_exe], env=env, stdout=fnull, stderr=fnull) diff --git a/packages/Python/lldbsuite/test/api/multiple-debuggers/multi-process-driver.cpp b/packages/Python/lldbsuite/test/api/multiple-debuggers/multi-process-driver.cpp new file mode 100644 index 000000000000..1c2689ff6c4f --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multiple-debuggers/multi-process-driver.cpp @@ -0,0 +1,283 @@ + +// This program creates NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS of pthreads, +// creates an lldb Debugger on each thread, creates targets, inserts two +// breakpoints, runs to the first breakpoint, backtraces, runs to the second +// breakpoint, backtraces, kills the inferior process, closes down the +// debugger. + +// The main thread keeps track of which pthreads have completed and which +// pthreads have completed successfully, and exits when all pthreads have +// completed successfully, or our time limit has been exceeded. + +// This test file helps to uncover race conditions and locking mistakes +// that are hit when lldb is being used to debug multiple processes +// simultaneously. + +#include <stdio.h> +#include <stdlib.h> + + +#include "lldb/API/LLDB.h" +#include "lldb/API/SBCommandInterpreter.h" +#include "lldb/API/SBCommandReturnObject.h" +#include "lldb/API/SBDebugger.h" + +#include <chrono> +#include <thread> + +#define NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS 20 + +#define DEBUG 0 + +using namespace lldb; + +bool *completed_threads_array = 0; +bool *successful_threads_array = 0; + +const char *inferior_process_name = "testprog"; + +bool +wait_for_stop_event (SBProcess process, SBListener listener) +{ + bool stopped = false; + while (!stopped) + { + SBEvent event; + bool waitfor_ret = listener.WaitForEvent (2, event); + if (event.GetType() == SBProcess::eBroadcastBitStateChanged) + { + if (process.GetState() == StateType::eStateStopped + || process.GetState() == StateType::eStateCrashed + || process.GetState() == StateType::eStateDetached + || process.GetState() == StateType::eStateExited) + { + stopped = true; + } + } + } + return stopped; +} + +bool +walk_stack_to_main (SBThread thread) +{ + if (thread.IsValid() == 0) + { + return false; + } + + bool found_main = false; + uint32_t curr_frame = 0; + const uint32_t framecount = thread.GetNumFrames(); + while (!found_main && curr_frame < framecount) + { + SBFrame frame = thread.GetFrameAtIndex (curr_frame); + if (strcmp (frame.GetFunctionName(), "main") == 0) + { + found_main = true; + break; + } + curr_frame += 1; + } + return found_main; +} + +void *do_one_debugger (void *in) +{ + uint64_t threadnum = (uint64_t) in; + +#if defined (__APPLE__) + char *threadname; + asprintf (&threadname, "thread #%lld", threadnum); + pthread_setname_np (threadname); + free (threadname); +#endif + +#if DEBUG == 1 + printf ("#%lld: Starting debug session\n", threadnum); +#endif + + SBDebugger debugger = lldb::SBDebugger::Create (false); + if (debugger.IsValid ()) + { + debugger.SetAsync (true); + SBTarget target = debugger.CreateTargetWithFileAndArch(inferior_process_name, "x86_64"); + SBCommandInterpreter command_interp = debugger.GetCommandInterpreter(); + if (target.IsValid()) + { + SBBreakpoint bar_br = target.BreakpointCreateByName ("bar", "testprog"); + if (!bar_br.IsValid()) + { + printf ("#%lld: failed to set breakpoint on bar, exiting.\n", threadnum); + exit (1); + } + SBBreakpoint foo_br = target.BreakpointCreateByName ("foo", "testprog"); + if (!foo_br.IsValid()) + { + printf ("#%lld: Failed to set breakpoint on foo()\n", threadnum); + } + + SBLaunchInfo launch_info (NULL); + SBError error; + SBProcess process = target.Launch (launch_info, error); + if (process.IsValid()) + { + SBListener listener = debugger.GetListener(); + SBBroadcaster broadcaster = process.GetBroadcaster(); + uint32_t rc = broadcaster.AddListener (listener, SBProcess::eBroadcastBitStateChanged); + if (rc == 0) + { + printf ("adding listener failed\n"); + exit (1); + } + + wait_for_stop_event (process, listener); + + if (!walk_stack_to_main (process.GetThreadAtIndex(0))) + { + printf ("#%lld: backtrace while @ foo() failed\n", threadnum); + completed_threads_array[threadnum] = true; + return (void *) 1; + } + + if (strcmp (process.GetThreadAtIndex(0).GetFrameAtIndex(0).GetFunctionName(), "foo") != 0) + { +#if DEBUG == 1 + printf ("#%lld: First breakpoint did not stop at foo(), instead stopped at '%s'\n", threadnum, process.GetThreadAtIndex(0).GetFrameAtIndex(0).GetFunctionName()); +#endif + completed_threads_array[threadnum] = true; + return (void*) 1; + } + + process.Continue(); + + wait_for_stop_event (process, listener); + + if (process.GetState() == StateType::eStateExited) + { + printf ("#%lld: Process exited\n", threadnum); + completed_threads_array[threadnum] = true; + return (void *) 1; + } + + + if (!walk_stack_to_main (process.GetThreadAtIndex(0))) + { + printf ("#%lld: backtrace while @ bar() failed\n", threadnum); + completed_threads_array[threadnum] = true; + return (void *) 1; + } + + if (strcmp (process.GetThreadAtIndex(0).GetFrameAtIndex(0).GetFunctionName(), "bar") != 0) + { + printf ("#%lld: First breakpoint did not stop at bar()\n", threadnum); + completed_threads_array[threadnum] = true; + return (void*) 1; + } + + process.Kill(); + + wait_for_stop_event (process, listener); + + SBDebugger::Destroy(debugger); + +#if DEBUG == 1 + printf ("#%lld: All good!\n", threadnum); +#endif + successful_threads_array[threadnum] = true; + completed_threads_array[threadnum] = true; + return (void*) 0; + } + else + { + printf("#%lld: process failed to launch\n", threadnum); + successful_threads_array[threadnum] = false; + completed_threads_array[threadnum] = true; + return (void*) 0; + } + } + else + { + printf ("#%lld: did not get valid target\n", threadnum); + successful_threads_array[threadnum] = false; + completed_threads_array[threadnum] = true; + return (void*) 0; + } + } + else + { + printf ("#%lld: did not get debugger\n", threadnum); + successful_threads_array[threadnum] = false; + completed_threads_array[threadnum] = true; + return (void*) 0; + } + completed_threads_array[threadnum] = true; + return (void*) 1; +} + +int main (int argc, char **argv) +{ + SBDebugger::Initialize(); + + completed_threads_array = (bool *) malloc (sizeof (bool) * NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS); + memset (completed_threads_array, 0, sizeof (bool) * NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS); + successful_threads_array = (bool *) malloc (sizeof (bool) * NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS); + memset (successful_threads_array, 0, sizeof (bool) * NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS); + + if (argc > 1 && argv[1] != NULL) + { + inferior_process_name = argv[1]; + } + + std::thread threads[NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS]; + for (uint64_t i = 0; i< NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS; i++) + { + threads[i] = std::move(std::thread(do_one_debugger, (void*)i)); + } + + + int max_time_to_wait = 20; // 20 iterations, or 60 seconds + int iter = 0; + while (1) + { + std::this_thread::sleep_for(std::chrono::seconds(3)); + bool all_done = true; + int successful_threads = 0; + int total_completed_threads = 0; + for (uint64_t i = 0; i < NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS; i++) + { + if (successful_threads_array[i] == true) + successful_threads++; + if (completed_threads_array[i] == true) + total_completed_threads++; + if (completed_threads_array[i] == false) + { + all_done = false; + } + } + if (all_done) + { +#if DEBUG == 1 + printf ("All threads completed.\n"); + printf ("%d threads completed successfully out of %d\n", successful_threads, NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS); +#endif + SBDebugger::Terminate(); + exit(0); + } + else + { +#if DEBUG == 1 + printf ("%d threads completed so far (%d successfully), out of %d\n", total_completed_threads, successful_threads, NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS); +#endif + } + if (iter++ == max_time_to_wait) + { + printf ("reached maximum timeout but only %d threads have completed so far (%d successfully), out of %d. Exiting.\n", total_completed_threads, successful_threads, NUMBER_OF_SIMULTANEOUS_DEBUG_SESSIONS); + break; + } + } + + + SBDebugger::Terminate(); + exit (1); +} diff --git a/packages/Python/lldbsuite/test/api/multiple-debuggers/testprog.cpp b/packages/Python/lldbsuite/test/api/multiple-debuggers/testprog.cpp new file mode 100644 index 000000000000..c9d1ea14f17b --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multiple-debuggers/testprog.cpp @@ -0,0 +1,12 @@ +int bar () +{ + return 5; +} +int foo () +{ + return bar() + 5; +} +int main () +{ + return foo(); +} diff --git a/packages/Python/lldbsuite/test/api/multithreaded/Makefile b/packages/Python/lldbsuite/test/api/multithreaded/Makefile new file mode 100644 index 000000000000..37323ea78190 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/Makefile @@ -0,0 +1,9 @@ +LEVEL = ../../make + +ENABLE_THREADS := YES +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules + +clean:: + rm -rf $(wildcard *.o *.d *.dSYM) diff --git a/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py b/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py new file mode 100644 index 000000000000..0b405091ebd1 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py @@ -0,0 +1,91 @@ +"""Test the lldb public C++ api breakpoint callbacks.""" + +from __future__ import print_function + +# __package__ = "lldbsuite.test" + + +import os, re +from lldbsuite.test.lldbtest import * +import lldbsuite.test.lldbutil as lldbutil +import subprocess + +class SBBreakpointCallbackCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipIfRemote + @skipIfNoSBHeaders + @skipIfWindows # clang-cl does not support throw or catch (llvm.org/pr24538) + def test_breakpoint_callback(self): + """Test the that SBBreakpoint callback is invoked when a breakpoint is hit. """ + self.build_and_test('driver.cpp test_breakpoint_callback.cpp', + 'test_breakpoint_callback') + + @skipIfRemote + @skipIfNoSBHeaders + @skipIfWindows # clang-cl does not support throw or catch (llvm.org/pr24538) + @expectedFlakeyFreeBSD + def test_sb_api_listener_event_description(self): + """ Test the description of an SBListener breakpoint event is valid.""" + self.build_and_test('driver.cpp listener_test.cpp test_listener_event_description.cpp', + 'test_listener_event_description') + pass + + @skipIfRemote + @skipIfNoSBHeaders + @skipIfWindows # clang-cl does not support throw or catch (llvm.org/pr24538) + @expectedFlakeyFreeBSD + @expectedFlakeyLinux # Driver occasionally returns '1' as exit status + @expectedFailureAll("llvm.org/pr23139", oslist=["linux"], compiler="gcc", compiler_version=[">=","4.9"], archs=["x86_64"]) + def test_sb_api_listener_event_process_state(self): + """ Test that a registered SBListener receives events when a process + changes state. + """ + self.build_and_test('driver.cpp listener_test.cpp test_listener_event_process_state.cpp', + 'test_listener_event_process_state') + pass + + + @skipIfRemote + @skipIfNoSBHeaders + @skipIfWindows # clang-cl does not support throw or catch (llvm.org/pr24538) + @expectedFlakeyFreeBSD + @expectedFlakeyLinux + def test_sb_api_listener_resume(self): + """ Test that a process can be resumed from a non-main thread. """ + self.build_and_test('driver.cpp listener_test.cpp test_listener_resume.cpp', + 'test_listener_resume') + pass + + def build_and_test(self, sources, test_name, args = None): + """ Build LLDB test from sources, and run expecting 0 exit code """ + + # These tests link against host lldb API. + # Compiler's target triple must match liblldb triple + # because remote is disabled, we can assume that the os is the same + # still need to check architecture + if self.getLldbArchitecture() != self.getArchitecture(): + self.skipTest("This test is only run if the target arch is the same as the lldb binary arch") + + self.inferior = 'inferior_program' + self.buildProgram('inferior.cpp', self.inferior) + self.addTearDownHook(lambda: os.remove(self.inferior)) + + self.buildDriver(sources, test_name) + self.addTearDownHook(lambda: os.remove(test_name)) + + test_exe = os.path.join(os.getcwd(), test_name) + self.signBinary(test_exe) + exe = [test_exe, self.inferior] + + env = {self.dylibPath : self.getLLDBLibraryEnvVal()} + if self.TraceOn(): + print("Running test %s" % " ".join(exe)) + check_call(exe, env=env) + else: + with open(os.devnull, 'w') as fnull: + check_call(exe, env=env, stdout=fnull, stderr=fnull) + + def build_program(self, sources, program): + return self.buildDriver(sources, program) diff --git a/packages/Python/lldbsuite/test/api/multithreaded/common.h b/packages/Python/lldbsuite/test/api/multithreaded/common.h new file mode 100644 index 000000000000..dad8bba07a3f --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/common.h @@ -0,0 +1,68 @@ +#ifndef LLDB_TEST_API_COMMON_H +#define LLDB_TEST_API_COMMON_H + +#include <condition_variable> +#include <chrono> +#include <exception> +#include <iostream> +#include <mutex> +#include <string> +#include <queue> + +#include <unistd.h> + +/// Simple exception class with a message +struct Exception : public std::exception +{ + std::string s; + Exception(std::string ss) : s(ss) {} + virtual ~Exception() throw () { } + const char* what() const throw() { return s.c_str(); } +}; + +// Synchronized data structure for listener to send events through +template<typename T> +class multithreaded_queue { + std::condition_variable m_condition; + std::mutex m_mutex; + std::queue<T> m_data; + bool m_notified; + +public: + + void push(T e) { + std::lock_guard<std::mutex> lock(m_mutex); + m_data.push(e); + m_notified = true; + m_condition.notify_all(); + } + + T pop(int timeout_seconds, bool &success) { + int count = 0; + while (count < timeout_seconds) { + std::unique_lock<std::mutex> lock(m_mutex); + if (!m_data.empty()) { + m_notified = false; + T ret = m_data.front(); + m_data.pop(); + success = true; + return ret; + } else if (!m_notified) + m_condition.wait_for(lock, std::chrono::seconds(1)); + count ++; + } + success = false; + return T(); + } +}; + +/// Allocates a char buffer with the current working directory +inline char* get_working_dir() { +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) + return getwd(0); +#else + return get_current_dir_name(); +#endif +} + +#endif // LLDB_TEST_API_COMMON_H diff --git a/packages/Python/lldbsuite/test/api/multithreaded/driver.cpp b/packages/Python/lldbsuite/test/api/multithreaded/driver.cpp new file mode 100644 index 000000000000..fa0c48e0ecfb --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/driver.cpp @@ -0,0 +1,38 @@ + +/// LLDB C API Test Driver + +#include <algorithm> +#include <iostream> +#include <iterator> +#include <string> +#include <vector> + +#include "lldb-headers.h" + +#include "common.h" + +using namespace std; +using namespace lldb; + +void test(SBDebugger &dbg, std::vector<string> args); + +int main(int argc, char** argv) { + int code = 0; + + SBDebugger::Initialize(); + SBDebugger dbg = SBDebugger::Create(); + + try { + if (!dbg.IsValid()) + throw Exception("invalid debugger"); + vector<string> args(argv + 1, argv + argc); + + test(dbg, args); + } catch (Exception &e) { + cout << "ERROR: " << e.what() << endl; + code = 1; + } + + SBDebugger::Destroy(dbg); + return code; +} diff --git a/packages/Python/lldbsuite/test/api/multithreaded/inferior.cpp b/packages/Python/lldbsuite/test/api/multithreaded/inferior.cpp new file mode 100644 index 000000000000..9dbb289f98be --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/inferior.cpp @@ -0,0 +1,17 @@ + +#include <iostream> + +using namespace std; + +int next() { + static int i = 0; + cout << "incrementing " << i << endl; + return ++i; +} + +int main() { + int i = 0; + while (i < 5) + i = next(); + return 0; +} diff --git a/packages/Python/lldbsuite/test/api/multithreaded/listener_test.cpp b/packages/Python/lldbsuite/test/api/multithreaded/listener_test.cpp new file mode 100644 index 000000000000..b20868ff94f4 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/listener_test.cpp @@ -0,0 +1,74 @@ +// LLDB test snippet that registers a listener with a process that hits +// a breakpoint. + +#include <atomic> +#include <iostream> +#include <string> +#include <thread> +#include <vector> + +#include "lldb-headers.h" +#include "common.h" + +using namespace lldb; +using namespace std; + +void listener_func(); +void check_listener(SBDebugger &dbg); + +// Listener thread and related variables +atomic<bool> g_done; +SBListener g_listener("test-listener"); +thread g_listener_thread; + +void shutdown_listener() { + g_done.store(true); + if (g_listener_thread.joinable()) + g_listener_thread.join(); +} + +void test(SBDebugger &dbg, std::vector<string> args) { + try { + g_done.store(false); + SBTarget target = dbg.CreateTarget(args.at(0).c_str()); + if (!target.IsValid()) throw Exception("invalid target"); + + SBBreakpoint breakpoint = target.BreakpointCreateByName("next"); + if (!breakpoint.IsValid()) throw Exception("invalid breakpoint"); + + std::unique_ptr<char> working_dir(get_working_dir()); + + SBError error; + SBProcess process = target.Launch(g_listener, + 0, 0, 0, 0, 0, + working_dir.get(), + 0, + false, + error); + if (!error.Success()) + throw Exception("Error launching process."); + + /* FIXME: the approach below deadlocks + SBProcess process = target.LaunchSimple (0, 0, working_dir.get()); + + // get debugger listener (which is attached to process by default) + g_listener = dbg.GetListener(); + */ + + // FIXME: because a listener is attached to the process at launch-time, + // registering the listener below results in two listeners being attached, + // which is not supported by LLDB. + // register listener + // process.GetBroadcaster().AddListener(g_listener, + // SBProcess::eBroadcastBitStateChanged); + + // start listener thread + g_listener_thread = thread(listener_func); + check_listener(dbg); + + } catch (Exception &e) { + shutdown_listener(); + throw e; + } + shutdown_listener(); +} diff --git a/packages/Python/lldbsuite/test/api/multithreaded/lldb-headers.h b/packages/Python/lldbsuite/test/api/multithreaded/lldb-headers.h new file mode 100644 index 000000000000..da0914b3b071 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/lldb-headers.h @@ -0,0 +1,11 @@ + +#ifndef LLDB_HEADERS_H +#define LLDB_HEADERS_H + +#ifdef __APPLE__ +#include <LLDB/LLDB.h> +#else +#include "lldb/API/LLDB.h" +#endif + +#endif // LLDB_HEADERS_H diff --git a/packages/Python/lldbsuite/test/api/multithreaded/test_breakpoint_callback.cpp b/packages/Python/lldbsuite/test/api/multithreaded/test_breakpoint_callback.cpp new file mode 100644 index 000000000000..def31f82b0c7 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/test_breakpoint_callback.cpp @@ -0,0 +1,49 @@ + +// LLDB C++ API Test: verify that the function registered with +// SBBreakpoint.SetCallback() is invoked when a breakpoint is hit. + +#include <mutex> +#include <iostream> +#include <vector> +#include <string> + +#include "lldb-headers.h" + +#include "common.h" + +using namespace std; +using namespace lldb; + +mutex g_mutex; +condition_variable g_condition; +int g_breakpoint_hit_count = 0; + +bool BPCallback (void *baton, + SBProcess &process, + SBThread &thread, + SBBreakpointLocation &location) { + lock_guard<mutex> lock(g_mutex); + g_breakpoint_hit_count += 1; + g_condition.notify_all(); + return true; +} + +void test(SBDebugger &dbg, vector<string> args) { + dbg.SetAsync(false); + SBTarget target = dbg.CreateTarget(args.at(0).c_str()); + if (!target.IsValid()) throw Exception("invalid target"); + + SBBreakpoint breakpoint = target.BreakpointCreateByName("next"); + if (!breakpoint.IsValid()) throw Exception("invalid breakpoint"); + breakpoint.SetCallback(BPCallback, 0); + + std::unique_ptr<char> working_dir(get_working_dir()); + SBProcess process = target.LaunchSimple (0, 0, working_dir.get()); + + { + unique_lock<mutex> lock(g_mutex); + g_condition.wait_for(lock, chrono::seconds(5)); + if (g_breakpoint_hit_count != 1) + throw Exception("Breakpoint hit count expected to be 1"); + } +} diff --git a/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_description.cpp b/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_description.cpp new file mode 100644 index 000000000000..0d7844dce6d0 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_description.cpp @@ -0,0 +1,97 @@ + +// LLDB C++ API Test: verify the event description that is received by an +// SBListener object registered with a process with a breakpoint. + +#include <atomic> +#include <array> +#include <iostream> +#include <string> +#include <thread> + +#include "lldb-headers.h" + +#include "common.h" + +using namespace lldb; +using namespace std; + +// listener thread control +extern atomic<bool> g_done; +extern SBListener g_listener; + +multithreaded_queue<string> g_event_descriptions; +string g_error_desc; + +void listener_func() { + while (!g_done) { + SBEvent event; + bool got_event = g_listener.WaitForEvent(1, event); + + if (got_event) { + if (!event.IsValid()) + throw Exception("event is not valid in listener thread"); + + SBStream description; + event.GetDescription(description); + string str(description.GetData()); + g_event_descriptions.push(str); + } + } +} + +bool check_state(string &state, string &desc, bool got_description) +{ + g_error_desc.clear(); + + if(!got_description) + { + g_error_desc.append("Did not get expected event description"); + return false; + } + + if (desc.find("state-changed") == desc.npos) + g_error_desc.append("Event description incorrect: missing 'state-changed' "); + + if (desc.find("pid = ") == desc.npos) + g_error_desc.append("Event description incorrect: missing process pid "); + + string state_search_str = "state = " + state; + if (desc.find(state_search_str) == desc.npos) + { + string errString = ("Event description incorrect: expected state " + + state + + " but desc was " + + desc); + g_error_desc.append(errString); + } + + if (g_error_desc.length() > 0) + return false; + + cout << "check_state: " << state << " OK\n"; + return true; +} + +void check_listener(SBDebugger &dbg) +{ + bool got_description; + string state; + + // check for "launching" state, this may or may not be present + string desc = g_event_descriptions.pop(5, got_description); + state = "launching"; + if (check_state(state, desc, got_description)) + { + // found a 'launching' state, pop next one from queue + desc = g_event_descriptions.pop(5, got_description); + } + + state = "running"; + if( !check_state(state, desc, got_description) ) + throw Exception(g_error_desc); + + desc = g_event_descriptions.pop(5, got_description); + state = "stopped"; + if( !check_state(state, desc, got_description) ) + throw Exception(g_error_desc); +} diff --git a/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp b/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp new file mode 100644 index 000000000000..0a698d1081d4 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp @@ -0,0 +1,68 @@ + +// LLDB C++ API Test: verify the event description as obtained by calling +// SBEvent::GetCStringFromEvent that is received by an +// SBListener object registered with a process with a breakpoint. + +#include <atomic> +#include <iostream> +#include <string> +#include <thread> + +#include "lldb-headers.h" + +#include "common.h" + +using namespace lldb; +using namespace std; + +// listener thread control +extern atomic<bool> g_done; + +multithreaded_queue<string> g_thread_descriptions; +multithreaded_queue<string> g_frame_functions; + +extern SBListener g_listener; + +void listener_func() { + while (!g_done) { + SBEvent event; + bool got_event = g_listener.WaitForEvent(1, event); + if (got_event) { + if (!event.IsValid()) + throw Exception("event is not valid in listener thread"); + + // send process description + SBProcess process = SBProcess::GetProcessFromEvent(event); + SBStream description; + + for (int i = 0; i < process.GetNumThreads(); ++i) { + // send each thread description + description.Clear(); + SBThread thread = process.GetThreadAtIndex(i); + thread.GetDescription(description); + g_thread_descriptions.push(description.GetData()); + + // send each frame function name + uint32_t num_frames = thread.GetNumFrames(); + for(int j = 0; j < num_frames; ++j) { + const char* function_name = thread.GetFrameAtIndex(j).GetSymbol().GetName(); + if (function_name) + g_frame_functions.push(function_name); + } + } + } + } +} + +void check_listener(SBDebugger &dbg) { + // check thread description + bool got_description = false; + string desc = g_thread_descriptions.pop(5, got_description); + if (!got_description) + throw Exception("Expected at least one thread description string"); + + // check at least one frame has a function name + desc = g_frame_functions.pop(5, got_description); + if (!got_description) + throw Exception("Expected at least one frame function name string"); +} diff --git a/packages/Python/lldbsuite/test/api/multithreaded/test_listener_resume.cpp b/packages/Python/lldbsuite/test/api/multithreaded/test_listener_resume.cpp new file mode 100644 index 000000000000..8cf786b11603 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/test_listener_resume.cpp @@ -0,0 +1,53 @@ + +// LLDB C++ API Test: verify the event description as obtained by calling +// SBEvent::GetCStringFromEvent that is received by an +// SBListener object registered with a process with a breakpoint. + +#include <atomic> +#include <iostream> +#include <string> +#include <thread> + +#include "lldb-headers.h" + +#include "common.h" + +using namespace lldb; +using namespace std; + +// listener thread control +extern atomic<bool> g_done; + +// used by listener thread to communicate a successful process continue command +// back to the checking thread. + +multithreaded_queue<bool> g_process_started; + +extern SBListener g_listener; + +void listener_func() { + while (!g_done) { + SBEvent event; + bool got_event = g_listener.WaitForEvent(1, event); + if (got_event) { + if (!event.IsValid()) + throw Exception("event is not valid in listener thread"); + + SBProcess process = SBProcess::GetProcessFromEvent(event); + if (process.GetState() == eStateStopped) { + SBError error = process.Continue(); + if (!error.Success()) + throw Exception(string("Cannot continue process from listener thread: ") + + error.GetCString()); + g_process_started.push(true); + } + } + } +} + +void check_listener(SBDebugger &dbg) { + bool got_message = false; + while (!got_message) + g_process_started.pop(5, got_message); + g_done = true; +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/TestEmulations.py b/packages/Python/lldbsuite/test/arm_emulation/TestEmulations.py new file mode 100644 index 000000000000..8a78d21e7978 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/TestEmulations.py @@ -0,0 +1,54 @@ +""" +Test some ARM instruction emulation. +""" + +from __future__ import print_function + + + +import os, time +import lldb +from lldbsuite.test.lldbtest import * + +class ARMEmulationTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @no_debug_info_test + def test_thumb_emulations (self): + current_dir = os.getcwd(); + test_dir = os.path.join (current_dir, "new-test-files") + files = os.listdir (test_dir) + thumb_files = list() + for f in files: + if '-thumb.dat' in f: + thumb_files.append (f) + + for f in thumb_files: + test_file = os.path.join (test_dir, f) + self.run_a_single_test (test_file) + + @no_debug_info_test + def test_arm_emulations (self): + current_dir = os.getcwd(); + test_dir = os.path.join (current_dir, "new-test-files") + files = os.listdir (test_dir) + arm_files = list() + for f in files: + if '-arm.dat' in f: + arm_files.append (f) + + for f in arm_files: + test_file = os.path.join (test_dir, f) + self.run_a_single_test (test_file) + + def run_a_single_test (self, filename): + insn = lldb.SBInstruction (); + stream = lldb.SBStream (); + success = insn.TestEmulation (stream, filename); + output = stream.GetData(); + if self.TraceOn(): + print('\nRunning test ' + os.path.basename(filename)) + print(output) + + self.assertTrue (success, 'Emulation test succeeded.') diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-1-arm.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-1-arm.dat new file mode 100644 index 000000000000..64b2506f9d56 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-1-arm.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r0, r0, r15" +triple=arm-apple-ios +opcode=0xe080000f +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe58 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe58 +r14=0x00002e7c +r15=0x00002ff8 +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +after_state={ +registers={ +r0=0x00003000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe58 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe58 +r14=0x00002e7c +r15=0x00002ffc +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-1-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-1-thumb.dat new file mode 100644 index 000000000000..daa32d25a41a --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-1-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r0, r13, #0" +triple=thumb-apple-ios +opcode=0xa800 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002f84 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x2fdffe50 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002f84 +r15=0x00002ffe +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-10-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-10-thumb.dat new file mode 100644 index 000000000000..bb3d760219b4 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-10-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add sp, r13" +triple=thumb-apple-ios +opcode=0x44ed +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002f84 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x5fbffca0 +r14=0x00002f84 +r15=0x00002ffe +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-11-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-11-thumb.dat new file mode 100644 index 000000000000..e26f2218cbcd --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-11-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add sp, r15" +triple=thumb-apple-ios +opcode=0x44fd +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002f84 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fe02e50 +r14=0x00002f84 +r15=0x00002ffe +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-12-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-12-thumb.dat new file mode 100644 index 000000000000..a7f7344e7d97 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-12-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add sp, r8" +triple=thumb-apple-ios +opcode=0x44c5 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe58 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe58 +r14=0x00002f84 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe58 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe60 +r14=0x00002f84 +r15=0x00002ffe +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-2-arm.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-2-arm.dat new file mode 100644 index 000000000000..cf6e0a9779a9 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-2-arm.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r0, r13, #0" +triple=arm-apple-ios +opcode=0xe28d0000 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe58 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe58 +r14=0x00002e7c +r15=0x00002ff8 +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +after_state={ +registers={ +r0=0x2fdffe58 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe58 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe58 +r14=0x00002e7c +r15=0x00002ffc +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-2-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-2-thumb.dat new file mode 100644 index 000000000000..9a178a0a159d --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-2-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r0, sp, r0" +triple=thumb-apple-ios +opcode=0x4468 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002f84 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x2fdffe50 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002f84 +r15=0x00002ffe +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-3-arm.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-3-arm.dat new file mode 100644 index 000000000000..9fc44b79395c --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-3-arm.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r0, r1, r0, lsl #2" +triple=arm-apple-ios +opcode=0xe0810100 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe48 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe48 +r14=0x00002e7c +r15=0x00002ff8 +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +after_state={ +registers={ +r0=0x00000001 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe48 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe48 +r14=0x00002e7c +r15=0x00002ffc +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-3-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-3-thumb.dat new file mode 100644 index 000000000000..c8f96ec09d3e --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-3-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add.w r10, r13, #31" +triple=thumb-apple-ios +opcode=0xf10d0a1f +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe40 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe40 +r14=0x00002f80 +r15=0x00002ff8 +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe40 +r8=0x00000008 +r9=0x00000009 +r10=0x2fdffe5f +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe40 +r14=0x00002f80 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-4-arm.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-4-arm.dat new file mode 100644 index 000000000000..12b40ed76fce --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-4-arm.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r0, r2, r7, lsl r1" +triple=arm-apple-ios +opcode=0xe0820117 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe40 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe40 +r14=0x00002e7c +r15=0x00002ff8 +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +after_state={ +registers={ +r0=0x5fbffc82 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe40 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe40 +r14=0x00002e7c +r15=0x00002ffc +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-4-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-4-thumb.dat new file mode 100644 index 000000000000..922b8ecdba53 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-4-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r3, r13, #16" +triple=thumb-apple-ios +opcode=0xab04 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe48 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe48 +r14=0x00002f84 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x2fdffe58 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe48 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe48 +r14=0x00002f84 +r15=0x00002ffe +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-5-arm.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-5-arm.dat new file mode 100644 index 000000000000..dfb6a87f014d --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-5-arm.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r10, r13, #31" +triple=arm-apple-ios +opcode=0xe28da01f +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002e7c +r15=0x00002ff8 +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x2fdffe6f +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002e7c +r15=0x00002ffc +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-5-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-5-thumb.dat new file mode 100644 index 000000000000..16ff517436b0 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-5-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r3, sp, r3" +triple=thumb-apple-ios +opcode=0x446b +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002f84 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x2fdffe53 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002f84 +r15=0x00002ffe +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-6-arm.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-6-arm.dat new file mode 100644 index 000000000000..8a87eff5f002 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-6-arm.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r12, r13, #24" +triple=arm-apple-ios +opcode=0xe28dc018 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe50 +r14=0x00002e7c +r15=0x00002ff8 +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe50 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x2fdffe68 +r13=0x2fdffe50 +r14=0x00002e7c +r15=0x00002ffc +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-6-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-6-thumb.dat new file mode 100644 index 000000000000..e8abd6950f20 --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-6-thumb.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r5, r13, #32" +triple=thumb-apple-ios +opcode=0xad08 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe48 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe48 +r14=0x00002f84 +r15=0x00002ffc +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x00000003 +r4=0x00000004 +r5=0x2fdffe68 +r6=0x00000006 +r7=0x2fdffe48 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe48 +r14=0x00002f84 +r15=0x00002ffe +cpsr=0x60000030 +s0=0x00000000 +s1=0x00000000 +s2=0x00000000 +s3=0x00000000 +s4=0x00000000 +s5=0x00000000 +s6=0x00000000 +s7=0x00000000 +s8=0x00000000 +s9=0x00000000 +s10=0x00000000 +s11=0x00000000 +s12=0x00000000 +s13=0x00000000 +s14=0x00000000 +s15=0x00000000 +s16=0x00000000 +s17=0x00000000 +s18=0x00000000 +s19=0x00000000 +s20=0x00000000 +s21=0x00000000 +s22=0x00000000 +s23=0x00000000 +s24=0x00000000 +s25=0x00000000 +s26=0x00000000 +s27=0x00000000 +s28=0x00000000 +s29=0x00000000 +s30=0x00000000 +s31=0x00000000 +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-7-arm.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-7-arm.dat new file mode 100644 index 000000000000..312514246e3e --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-7-arm.dat @@ -0,0 +1,111 @@ +InstructionEmulationState={ +assembly_string="add r6, sp, #8" +triple=arm-apple-ios +opcode=0xe28d6008 +before_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x00000006 +r7=0x2fdffe60 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe60 +r14=0x00002e7c +r15=0x00002ff8 +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +after_state={ +registers={ +r0=0x00000000 +r1=0x00000001 +r2=0x00000002 +r3=0x0000001f +r4=0x00000004 +r5=0x00000005 +r6=0x2fdffe68 +r7=0x2fdffe60 +r8=0x00000008 +r9=0x00000009 +r10=0x0000000a +r11=0x0000000b +r12=0x0000000c +r13=0x2fdffe60 +r14=0x00002e7c +r15=0x00002ffc +cpsr=0x60000010 +s0=0x00000000 +s1=0x00000001 +s2=0x00000002 +s3=0x00000003 +s4=0x00000004 +s5=0x00000005 +s6=0x00000006 +s7=0x00000007 +s8=0x00000008 +s9=0x00000009 +s10=0x0000000a +s11=0x0000000b +s12=0x0000000c +s13=0x0000000d +s14=0x0000000e +s15=0x0000000f +s16=0x00000010 +s17=0x00000011 +s18=0x00000012 +s19=0x00000013 +s20=0x00000014 +s21=0x00000015 +s22=0x00000016 +s23=0x00000017 +s24=0x00000018 +s25=0x00000019 +s26=0x0000001a +s27=0x0000001b +s28=0x0000001c +s29=0x0000001d +s30=0x0000001e +s31=0x0000001f +} +} +} diff --git a/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-7-thumb.dat b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-7-thumb.dat new file mode 100644 index 000000000000..506071309d7c --- /dev/null +++ b/packages/Python/lldbsuite/test/arm_emulation/new-test-files/test-add-7-thumb.dat |