diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/plugins')
| -rw-r--r-- | packages/Python/lldbsuite/test/functionalities/plugins/commands/TestPluginCommands.py | 26 | ||||
| -rw-r--r-- | packages/Python/lldbsuite/test/functionalities/plugins/commands/plugin.cpp.template (renamed from packages/Python/lldbsuite/test/functionalities/plugins/commands/plugin.cpp) | 10 | ||||
| -rw-r--r-- | packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/TestPythonOSPlugin.py | 157 | ||||
| -rw-r--r-- | packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system.py | 120 | ||||
| -rw-r--r-- | packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system2.py | 104 | 
5 files changed, 266 insertions, 151 deletions
| diff --git a/packages/Python/lldbsuite/test/functionalities/plugins/commands/TestPluginCommands.py b/packages/Python/lldbsuite/test/functionalities/plugins/commands/TestPluginCommands.py index 619ed7afe328..18fcc41fa9f6 100644 --- a/packages/Python/lldbsuite/test/functionalities/plugins/commands/TestPluginCommands.py +++ b/packages/Python/lldbsuite/test/functionalities/plugins/commands/TestPluginCommands.py @@ -5,20 +5,27 @@ Test that plugins that load commands work correctly.  from __future__ import print_function - -import os, time +import os +import time  import re  import lldb  from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import *  from lldbsuite.test import lldbutil +  class PluginCommandTestCase(TestBase):      mydir = TestBase.compute_mydir(__file__) +    def setUp(self): +        TestBase.setUp(self) +        self.generateSource('plugin.cpp') +      @skipIfNoSBHeaders -    @skipIfHostIncompatibleWithRemote # Requires a compatible arch and platform to link against the host's built lldb lib. +    # Requires a compatible arch and platform to link against the host's built +    # lldb lib. +    @skipIfHostIncompatibleWithRemote      @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")      @no_debug_info_test      def test_load_plugin(self): @@ -37,23 +44,26 @@ class PluginCommandTestCase(TestBase):          retobj = lldb.SBCommandReturnObject() -        retval = debugger.GetCommandInterpreter().HandleCommand("plugin load %s" % plugin_lib_name, retobj) +        retval = debugger.GetCommandInterpreter().HandleCommand( +            "plugin load %s" % plugin_lib_name, retobj)          retobj.Clear() -        retval = debugger.GetCommandInterpreter().HandleCommand("plugin_loaded_command child abc def ghi",retobj) +        retval = debugger.GetCommandInterpreter().HandleCommand( +            "plugin_loaded_command child abc def ghi", retobj)          if self.TraceOn():              print(retobj.GetOutput()) -        self.expect(retobj,substrs = ['abc def ghi'], exe=False) +        self.expect(retobj, substrs=['abc def ghi'], exe=False)          retobj.Clear()          # check that abbreviations work correctly in plugin commands. -        retval = debugger.GetCommandInterpreter().HandleCommand("plugin_loaded_ ch abc def ghi",retobj) +        retval = debugger.GetCommandInterpreter().HandleCommand( +            "plugin_loaded_ ch abc def ghi", retobj)          if self.TraceOn():              print(retobj.GetOutput()) -        self.expect(retobj,substrs = ['abc def ghi'], exe=False) +        self.expect(retobj, substrs=['abc def ghi'], exe=False) diff --git a/packages/Python/lldbsuite/test/functionalities/plugins/commands/plugin.cpp b/packages/Python/lldbsuite/test/functionalities/plugins/commands/plugin.cpp.template index be3d29325de1..393e9feec796 100644 --- a/packages/Python/lldbsuite/test/functionalities/plugins/commands/plugin.cpp +++ b/packages/Python/lldbsuite/test/functionalities/plugins/commands/plugin.cpp.template @@ -13,15 +13,7 @@ Compile this into a dylib foo.dylib and load by placing in appropriate locations  by typing plugin load foo.dylib at the LLDB command line  */ -#if defined (__APPLE__) -#include <LLDB/SBCommandInterpreter.h> -#include <LLDB/SBCommandReturnObject.h> -#include <LLDB/SBDebugger.h> -#else -#include <lldb/API/SBCommandInterpreter.h> -#include <lldb/API/SBCommandReturnObject.h> -#include <lldb/API/SBDebugger.h> -#endif +%include_SB_APIs%  namespace lldb {      bool diff --git a/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/TestPythonOSPlugin.py b/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/TestPythonOSPlugin.py index ebd96d9d4c02..9a5d320dce55 100644 --- a/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/TestPythonOSPlugin.py +++ b/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/TestPythonOSPlugin.py @@ -5,13 +5,14 @@ Test that the Python operating system plugin works correctly  from __future__ import print_function - -import os, time +import os +import time  import re  import lldb  from lldbsuite.test.lldbtest import *  import lldbsuite.test.lldbutil as lldbutil +  class PluginPythonOSPlugin(TestBase):      mydir = TestBase.compute_mydir(__file__) @@ -31,9 +32,11 @@ class PluginPythonOSPlugin(TestBase):          registers = frame.GetRegisters().GetValueAtIndex(0)          reg_value = thread.GetThreadID() + 1          for reg in registers: -            self.assertTrue(reg.GetValueAsUnsigned() == reg_value, "Verify the registers contains the correct value") +            self.assertTrue( +                reg.GetValueAsUnsigned() == reg_value, +                "Verify the registers contains the correct value")              reg_value = reg_value + 1 -         +      def run_python_os_funcionality(self):          """Test that the Python operating system plugin works correctly""" @@ -47,52 +50,76 @@ class PluginPythonOSPlugin(TestBase):          target = self.dbg.CreateTarget(exe)          self.assertTrue(target, VALID_TARGET) -        # Set breakpoints inside and outside methods that take pointers to the containing struct. -        lldbutil.run_break_set_by_source_regexp (self, "// Set breakpoint here") +        # Set breakpoints inside and outside methods that take pointers to the +        # containing struct. +        lldbutil.run_break_set_by_source_regexp(self, "// Set breakpoint here") -        # Register our shared libraries for remote targets so they get automatically uploaded +        # Register our shared libraries for remote targets so they get +        # automatically uploaded          arguments = None -        environment = None  +        environment = None          # Now launch the process, and do not stop at entry point. -        process = target.LaunchSimple (arguments, environment, self.get_process_working_directory()) +        process = target.LaunchSimple( +            arguments, environment, self.get_process_working_directory())          self.assertTrue(process, PROCESS_IS_VALID) -        # Make sure there are no OS plug-in created thread when we first stop at our breakpoint in main -        thread = process.GetThreadByID(0x111111111); -        self.assertFalse (thread.IsValid(), "Make sure there is no thread 0x111111111 before we load the python OS plug-in"); -        thread = process.GetThreadByID(0x222222222); -        self.assertFalse (thread.IsValid(), "Make sure there is no thread 0x222222222 before we load the python OS plug-in"); -        thread = process.GetThreadByID(0x333333333); -        self.assertFalse (thread.IsValid(), "Make sure there is no thread 0x333333333 before we load the python OS plug-in"); - +        # Make sure there are no OS plug-in created thread when we first stop +        # at our breakpoint in main +        thread = process.GetThreadByID(0x111111111) +        self.assertFalse( +            thread.IsValid(), +            "Make sure there is no thread 0x111111111 before we load the python OS plug-in") +        thread = process.GetThreadByID(0x222222222) +        self.assertFalse( +            thread.IsValid(), +            "Make sure there is no thread 0x222222222 before we load the python OS plug-in") +        thread = process.GetThreadByID(0x333333333) +        self.assertFalse( +            thread.IsValid(), +            "Make sure there is no thread 0x333333333 before we load the python OS plug-in")          # Now load the python OS plug-in which should update the thread list and we should have -        # OS plug-in created threads with the IDs: 0x111111111, 0x222222222, 0x333333333 +        # OS plug-in created threads with the IDs: 0x111111111, 0x222222222, +        # 0x333333333          command = "settings set target.process.python-os-plugin-path '%s'" % python_os_plugin_path          self.dbg.HandleCommand(command)          # Verify our OS plug-in threads showed up -        thread = process.GetThreadByID(0x111111111); -        self.assertTrue (thread.IsValid(), "Make sure there is a thread 0x111111111 after we load the python OS plug-in"); +        thread = process.GetThreadByID(0x111111111) +        self.assertTrue( +            thread.IsValid(), +            "Make sure there is a thread 0x111111111 after we load the python OS plug-in")          self.verify_os_thread_registers(thread) -        thread = process.GetThreadByID(0x222222222); -        self.assertTrue (thread.IsValid(), "Make sure there is a thread 0x222222222 after we load the python OS plug-in"); +        thread = process.GetThreadByID(0x222222222) +        self.assertTrue( +            thread.IsValid(), +            "Make sure there is a thread 0x222222222 after we load the python OS plug-in")          self.verify_os_thread_registers(thread) -        thread = process.GetThreadByID(0x333333333); -        self.assertTrue (thread.IsValid(), "Make sure there is a thread 0x333333333 after we load the python OS plug-in"); +        thread = process.GetThreadByID(0x333333333) +        self.assertTrue( +            thread.IsValid(), +            "Make sure there is a thread 0x333333333 after we load the python OS plug-in")          self.verify_os_thread_registers(thread) -         -        # Now clear the OS plug-in path to make the OS plug-in created threads dissappear -        self.dbg.HandleCommand("settings clear target.process.python-os-plugin-path") -         + +        # Now clear the OS plug-in path to make the OS plug-in created threads +        # dissappear +        self.dbg.HandleCommand( +            "settings clear target.process.python-os-plugin-path") +          # Verify the threads are gone after unloading the python OS plug-in -        thread = process.GetThreadByID(0x111111111); -        self.assertFalse (thread.IsValid(), "Make sure there is no thread 0x111111111 after we unload the python OS plug-in"); -        thread = process.GetThreadByID(0x222222222); -        self.assertFalse (thread.IsValid(), "Make sure there is no thread 0x222222222 after we unload the python OS plug-in"); -        thread = process.GetThreadByID(0x333333333); -        self.assertFalse (thread.IsValid(), "Make sure there is no thread 0x333333333 after we unload the python OS plug-in"); +        thread = process.GetThreadByID(0x111111111) +        self.assertFalse( +            thread.IsValid(), +            "Make sure there is no thread 0x111111111 after we unload the python OS plug-in") +        thread = process.GetThreadByID(0x222222222) +        self.assertFalse( +            thread.IsValid(), +            "Make sure there is no thread 0x222222222 after we unload the python OS plug-in") +        thread = process.GetThreadByID(0x333333333) +        self.assertFalse( +            thread.IsValid(), +            "Make sure there is no thread 0x333333333 after we unload the python OS plug-in")      def run_python_os_step(self):          """Test that the Python operating system plugin works correctly and allows single stepping of a virtual thread that is backed by a real thread""" @@ -107,44 +134,64 @@ class PluginPythonOSPlugin(TestBase):          target = self.dbg.CreateTarget(exe)          self.assertTrue(target, VALID_TARGET) -        # Set breakpoints inside and outside methods that take pointers to the containing struct. -        lldbutil.run_break_set_by_source_regexp (self, "// Set breakpoint here") +        # Set breakpoints inside and outside methods that take pointers to the +        # containing struct. +        lldbutil.run_break_set_by_source_regexp(self, "// Set breakpoint here") -        # Register our shared libraries for remote targets so they get automatically uploaded +        # Register our shared libraries for remote targets so they get +        # automatically uploaded          arguments = None -        environment = None  +        environment = None          # Now launch the process, and do not stop at entry point. -        process = target.LaunchSimple (arguments, environment, self.get_process_working_directory()) +        process = target.LaunchSimple( +            arguments, environment, self.get_process_working_directory())          self.assertTrue(process, PROCESS_IS_VALID) -        # Make sure there are no OS plug-in created thread when we first stop at our breakpoint in main -        thread = process.GetThreadByID(0x111111111); -        self.assertFalse (thread.IsValid(), "Make sure there is no thread 0x111111111 before we load the python OS plug-in"); - +        # Make sure there are no OS plug-in created thread when we first stop +        # at our breakpoint in main +        thread = process.GetThreadByID(0x111111111) +        self.assertFalse( +            thread.IsValid(), +            "Make sure there is no thread 0x111111111 before we load the python OS plug-in")          # Now load the python OS plug-in which should update the thread list and we should have -        # OS plug-in created threads with the IDs: 0x111111111, 0x222222222, 0x333333333 +        # OS plug-in created threads with the IDs: 0x111111111, 0x222222222, +        # 0x333333333          command = "settings set target.process.python-os-plugin-path '%s'" % python_os_plugin_path          self.dbg.HandleCommand(command)          # Verify our OS plug-in threads showed up -        thread = process.GetThreadByID(0x111111111); -        self.assertTrue (thread.IsValid(), "Make sure there is a thread 0x111111111 after we load the python OS plug-in"); +        thread = process.GetThreadByID(0x111111111) +        self.assertTrue( +            thread.IsValid(), +            "Make sure there is a thread 0x111111111 after we load the python OS plug-in")          frame = thread.GetFrameAtIndex(0) -        self.assertTrue(frame.IsValid(), "Make sure we get a frame from thread 0x111111111") +        self.assertTrue( +            frame.IsValid(), +            "Make sure we get a frame from thread 0x111111111")          line_entry = frame.GetLineEntry() -        self.assertTrue(line_entry.GetFileSpec().GetFilename() == 'main.c', "Make sure we stopped on line 5 in main.c") -        self.assertTrue(line_entry.GetLine() == 5, "Make sure we stopped on line 5 in main.c") +        self.assertTrue( +            line_entry.GetFileSpec().GetFilename() == 'main.c', +            "Make sure we stopped on line 5 in main.c") +        self.assertTrue( +            line_entry.GetLine() == 5, +            "Make sure we stopped on line 5 in main.c") -        # Now single step thread 0x111111111 and make sure it does what we need it to +        # Now single step thread 0x111111111 and make sure it does what we need +        # it to          thread.StepOver() -         +          frame = thread.GetFrameAtIndex(0) -        self.assertTrue(frame.IsValid(), "Make sure we get a frame from thread 0x111111111") +        self.assertTrue( +            frame.IsValid(), +            "Make sure we get a frame from thread 0x111111111")          line_entry = frame.GetLineEntry() -         -        self.assertTrue(line_entry.GetFileSpec().GetFilename() == 'main.c', "Make sure we stepped from line 5 to line 6 in main.c") -        self.assertTrue(line_entry.GetLine() == 6, "Make sure we stepped from line 5 to line 6 in main.c") + +        self.assertTrue( +            line_entry.GetFileSpec().GetFilename() == 'main.c', +            "Make sure we stepped from line 5 to line 6 in main.c") +        self.assertTrue(line_entry.GetLine() == 6, +                        "Make sure we stepped from line 5 to line 6 in main.c") diff --git a/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system.py b/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system.py index 536092e40b38..394c24b4a880 100644 --- a/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system.py +++ b/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system.py @@ -3,21 +3,22 @@  import lldb  import struct +  class OperatingSystemPlugIn(object):      """Class that provides data for an instance of a LLDB 'OperatingSystemPython' plug-in class""" -     +      def __init__(self, process):          '''Initialization needs a valid.SBProcess object. -         +          This plug-in will get created after a live process is valid and has stopped for the          first time.'''          self.process = None          self.registers = None          self.threads = None -        if type(process) is lldb.SBProcess and process.IsValid(): +        if isinstance(process, lldb.SBProcess) and process.IsValid():              self.process = process -            self.threads = None # Will be an dictionary containing info for each thread -     +            self.threads = None  # Will be an dictionary containing info for each thread +      def get_target(self):          # NOTE: Don't use "lldb.target" when trying to get your target as the "lldb.target"          # tracks the current target in the LLDB command interpreter which isn't the @@ -26,11 +27,16 @@ class OperatingSystemPlugIn(object):      def create_thread(self, tid, context):          if tid == 0x444444444: -            thread_info = { 'tid' : tid, 'name' : 'four'  , 'queue' : 'queue4', 'state' : 'stopped', 'stop_reason' : 'none' } +            thread_info = { +                'tid': tid, +                'name': 'four', +                'queue': 'queue4', +                'state': 'stopped', +                'stop_reason': 'none'}              self.threads.append(thread_info)              return thread_info          return None -         +      def get_thread_info(self):          if not self.threads:              # The sample dictionary below shows the values that can be returned for a thread @@ -48,43 +54,75 @@ class OperatingSystemPlugIn(object):              #   Specifying this key/value pair for a thread will avoid a call to get_register_data()              #   and can be used when your registers are in a thread context structure that is contiguous              #   in memory. Don't specify this if your register layout in memory doesn't match the layout -            #   described by the dictionary returned from a call to the get_register_info() method. -            self.threads = [ -                    { 'tid' : 0x111111111, 'name' : 'one'  , 'queue' : 'queue1', 'state' : 'stopped', 'stop_reason' : 'breakpoint'}, -                    { 'tid' : 0x222222222, 'name' : 'two'  , 'queue' : 'queue2', 'state' : 'stopped', 'stop_reason' : 'none'      }, -                    { 'tid' : 0x333333333, 'name' : 'three', 'queue' : 'queue3', 'state' : 'stopped', 'stop_reason' : 'trace'     } -                ] +            # described by the dictionary returned from a call to the +            # get_register_info() method. +            self.threads = [{'tid': 0x111111111, +                             'name': 'one', +                             'queue': 'queue1', +                             'state': 'stopped', +                             'stop_reason': 'breakpoint'}, +                            {'tid': 0x222222222, +                             'name': 'two', +                             'queue': 'queue2', +                             'state': 'stopped', +                             'stop_reason': 'none'}, +                            {'tid': 0x333333333, +                             'name': 'three', +                             'queue': 'queue3', +                             'state': 'stopped', +                             'stop_reason': 'trace'}]          return self.threads -     +      def get_register_info(self): -        if self.registers == None: -            self.registers = dict()             +        if self.registers is None: +            self.registers = dict()              self.registers['sets'] = ['GPR']              self.registers['registers'] = [ -                { 'name':'rax'       , 'bitsize' :  64, 'offset' :   0, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 0, 'dwarf' : 0}, -                { 'name':'rbx'       , 'bitsize' :  64, 'offset' :   8, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 3, 'dwarf' : 3}, -                { 'name':'rcx'       , 'bitsize' :  64, 'offset' :  16, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 2, 'dwarf' : 2, 'generic':'arg4', 'alt-name':'arg4', }, -                { 'name':'rdx'       , 'bitsize' :  64, 'offset' :  24, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 1, 'dwarf' : 1, 'generic':'arg3', 'alt-name':'arg3', }, -                { 'name':'rdi'       , 'bitsize' :  64, 'offset' :  32, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 5, 'dwarf' : 5, 'generic':'arg1', 'alt-name':'arg1', }, -                { 'name':'rsi'       , 'bitsize' :  64, 'offset' :  40, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 4, 'dwarf' : 4, 'generic':'arg2', 'alt-name':'arg2', }, -                { 'name':'rbp'       , 'bitsize' :  64, 'offset' :  48, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 6, 'dwarf' : 6, 'generic':'fp'  , 'alt-name':'fp', }, -                { 'name':'rsp'       , 'bitsize' :  64, 'offset' :  56, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 7, 'dwarf' : 7, 'generic':'sp'  , 'alt-name':'sp', }, -                { 'name':'r8'        , 'bitsize' :  64, 'offset' :  64, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 8, 'dwarf' : 8, 'generic':'arg5', 'alt-name':'arg5', }, -                { 'name':'r9'        , 'bitsize' :  64, 'offset' :  72, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 9, 'dwarf' : 9, 'generic':'arg6', 'alt-name':'arg6', }, -                { 'name':'r10'       , 'bitsize' :  64, 'offset' :  80, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 10, 'dwarf' : 10}, -                { 'name':'r11'       , 'bitsize' :  64, 'offset' :  88, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 11, 'dwarf' : 11}, -                { 'name':'r12'       , 'bitsize' :  64, 'offset' :  96, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 12, 'dwarf' : 12}, -                { 'name':'r13'       , 'bitsize' :  64, 'offset' : 104, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 13, 'dwarf' : 13}, -                { 'name':'r14'       , 'bitsize' :  64, 'offset' : 112, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 14, 'dwarf' : 14}, -                { 'name':'r15'       , 'bitsize' :  64, 'offset' : 120, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 15, 'dwarf' : 15}, -                { 'name':'rip'       , 'bitsize' :  64, 'offset' : 128, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 16, 'dwarf' : 16, 'generic':'pc', 'alt-name':'pc' }, -                { 'name':'rflags'    , 'bitsize' :  64, 'offset' : 136, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'generic':'flags', 'alt-name':'flags' }, -                { 'name':'cs'        , 'bitsize' :  64, 'offset' : 144, 'encoding':'uint'  , 'format':'hex'         , 'set': 0                          }, -                { 'name':'fs'        , 'bitsize' :  64, 'offset' : 152, 'encoding':'uint'  , 'format':'hex'         , 'set': 0                          }, -                { 'name':'gs'        , 'bitsize' :  64, 'offset' : 160, 'encoding':'uint'  , 'format':'hex'         , 'set': 0                          }, -                ] +                {'name': 'rax', 'bitsize': 64, 'offset': 0, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 0, 'dwarf': 0}, +                {'name': 'rbx', 'bitsize': 64, 'offset': 8, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 3, 'dwarf': 3}, +                {'name': 'rcx', 'bitsize': 64, 'offset': 16, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 2, 'dwarf': 2, 'generic': 'arg4', 'alt-name': 'arg4', }, +                {'name': 'rdx', 'bitsize': 64, 'offset': 24, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 1, 'dwarf': 1, 'generic': 'arg3', 'alt-name': 'arg3', }, +                {'name': 'rdi', 'bitsize': 64, 'offset': 32, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 5, 'dwarf': 5, 'generic': 'arg1', 'alt-name': 'arg1', }, +                {'name': 'rsi', 'bitsize': 64, 'offset': 40, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 4, 'dwarf': 4, 'generic': 'arg2', 'alt-name': 'arg2', }, +                {'name': 'rbp', 'bitsize': 64, 'offset': 48, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 6, 'dwarf': 6, 'generic': 'fp', 'alt-name': 'fp', }, +                {'name': 'rsp', 'bitsize': 64, 'offset': 56, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 7, 'dwarf': 7, 'generic': 'sp', 'alt-name': 'sp', }, +                {'name': 'r8', 'bitsize': 64, 'offset': 64, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 8, 'dwarf': 8, 'generic': 'arg5', 'alt-name': 'arg5', }, +                {'name': 'r9', 'bitsize': 64, 'offset': 72, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 9, 'dwarf': 9, 'generic': 'arg6', 'alt-name': 'arg6', }, +                {'name': 'r10', 'bitsize': 64, 'offset': 80, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 10, 'dwarf': 10}, +                {'name': 'r11', 'bitsize': 64, 'offset': 88, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 11, 'dwarf': 11}, +                {'name': 'r12', 'bitsize': 64, 'offset': 96, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 12, 'dwarf': 12}, +                {'name': 'r13', 'bitsize': 64, 'offset': 104, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 13, 'dwarf': 13}, +                {'name': 'r14', 'bitsize': 64, 'offset': 112, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 14, 'dwarf': 14}, +                {'name': 'r15', 'bitsize': 64, 'offset': 120, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 15, 'dwarf': 15}, +                {'name': 'rip', 'bitsize': 64, 'offset': 128, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 16, 'dwarf': 16, 'generic': 'pc', 'alt-name': 'pc'}, +                {'name': 'rflags', 'bitsize': 64, 'offset': 136, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'generic': 'flags', 'alt-name': 'flags'}, +                {'name': 'cs', 'bitsize': 64, 'offset': 144, 'encoding': 'uint', 'format': 'hex', 'set': 0}, +                {'name': 'fs', 'bitsize': 64, 'offset': 152, 'encoding': 'uint', 'format': 'hex', 'set': 0}, +                {'name': 'gs', 'bitsize': 64, 'offset': 160, 'encoding': 'uint', 'format': 'hex', 'set': 0}, +            ]          return self.registers -             +      def get_register_data(self, tid): -        return struct.pack('21Q',tid + 1,tid + 2,tid + 3,tid + 4,tid + 5,tid + 6,tid + 7,tid + 8,tid + 9,tid + 10,tid + 11,tid + 12,tid + 13,tid + 14,tid + 15,tid + 16,tid + 17,tid + 18,tid + 19,tid + 20,tid + 21); -     +        return struct.pack( +            '21Q', +            tid + 1, +            tid + 2, +            tid + 3, +            tid + 4, +            tid + 5, +            tid + 6, +            tid + 7, +            tid + 8, +            tid + 9, +            tid + 10, +            tid + 11, +            tid + 12, +            tid + 13, +            tid + 14, +            tid + 15, +            tid + 16, +            tid + 17, +            tid + 18, +            tid + 19, +            tid + 20, +            tid + 21) diff --git a/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system2.py b/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system2.py index 7a9435d44ed4..438538ca922e 100644 --- a/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system2.py +++ b/packages/Python/lldbsuite/test/functionalities/plugins/python_os_plugin/operating_system2.py @@ -3,21 +3,22 @@  import lldb  import struct +  class OperatingSystemPlugIn(object):      """Class that provides data for an instance of a LLDB 'OperatingSystemPython' plug-in class""" -     +      def __init__(self, process):          '''Initialization needs a valid.SBProcess object. -         +          This plug-in will get created after a live process is valid and has stopped for the          first time.'''          self.process = None          self.registers = None          self.threads = None -        if type(process) is lldb.SBProcess and process.IsValid(): +        if isinstance(process, lldb.SBProcess) and process.IsValid():              self.process = process -            self.threads = None # Will be an dictionary containing info for each thread -     +            self.threads = None  # Will be an dictionary containing info for each thread +      def get_target(self):          # NOTE: Don't use "lldb.target" when trying to get your target as the "lldb.target"          # tracks the current target in the LLDB command interpreter which isn't the @@ -26,11 +27,16 @@ class OperatingSystemPlugIn(object):      def create_thread(self, tid, context):          if tid == 0x444444444: -            thread_info = { 'tid' : tid, 'name' : 'four'  , 'queue' : 'queue4', 'state' : 'stopped', 'stop_reason' : 'none' } +            thread_info = { +                'tid': tid, +                'name': 'four', +                'queue': 'queue4', +                'state': 'stopped', +                'stop_reason': 'none'}              self.threads.append(thread_info)              return thread_info          return None -         +      def get_thread_info(self):          if not self.threads:              # The sample dictionary below shows the values that can be returned for a thread @@ -48,41 +54,63 @@ class OperatingSystemPlugIn(object):              #   Specifying this key/value pair for a thread will avoid a call to get_register_data()              #   and can be used when your registers are in a thread context structure that is contiguous              #   in memory. Don't specify this if your register layout in memory doesn't match the layout -            #   described by the dictionary returned from a call to the get_register_info() method. +            # described by the dictionary returned from a call to the +            # get_register_info() method.              self.threads = [ -                    { 'tid' : 0x111111111, 'core' : 0 } -                ] +                {'tid': 0x111111111, 'core': 0} +            ]          return self.threads -     +      def get_register_info(self): -        if self.registers == None: -            self.registers = dict()             +        if self.registers is None: +            self.registers = dict()              self.registers['sets'] = ['GPR']              self.registers['registers'] = [ -                { 'name':'rax'       , 'bitsize' :  64, 'offset' :   0, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 0, 'dwarf' : 0}, -                { 'name':'rbx'       , 'bitsize' :  64, 'offset' :   8, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 3, 'dwarf' : 3}, -                { 'name':'rcx'       , 'bitsize' :  64, 'offset' :  16, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 2, 'dwarf' : 2, 'generic':'arg4', 'alt-name':'arg4', }, -                { 'name':'rdx'       , 'bitsize' :  64, 'offset' :  24, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 1, 'dwarf' : 1, 'generic':'arg3', 'alt-name':'arg3', }, -                { 'name':'rdi'       , 'bitsize' :  64, 'offset' :  32, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 5, 'dwarf' : 5, 'generic':'arg1', 'alt-name':'arg1', }, -                { 'name':'rsi'       , 'bitsize' :  64, 'offset' :  40, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 4, 'dwarf' : 4, 'generic':'arg2', 'alt-name':'arg2', }, -                { 'name':'rbp'       , 'bitsize' :  64, 'offset' :  48, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 6, 'dwarf' : 6, 'generic':'fp'  , 'alt-name':'fp', }, -                { 'name':'rsp'       , 'bitsize' :  64, 'offset' :  56, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 7, 'dwarf' : 7, 'generic':'sp'  , 'alt-name':'sp', }, -                { 'name':'r8'        , 'bitsize' :  64, 'offset' :  64, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 8, 'dwarf' : 8, 'generic':'arg5', 'alt-name':'arg5', }, -                { 'name':'r9'        , 'bitsize' :  64, 'offset' :  72, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 9, 'dwarf' : 9, 'generic':'arg6', 'alt-name':'arg6', }, -                { 'name':'r10'       , 'bitsize' :  64, 'offset' :  80, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 10, 'dwarf' : 10}, -                { 'name':'r11'       , 'bitsize' :  64, 'offset' :  88, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 11, 'dwarf' : 11}, -                { 'name':'r12'       , 'bitsize' :  64, 'offset' :  96, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 12, 'dwarf' : 12}, -                { 'name':'r13'       , 'bitsize' :  64, 'offset' : 104, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 13, 'dwarf' : 13}, -                { 'name':'r14'       , 'bitsize' :  64, 'offset' : 112, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 14, 'dwarf' : 14}, -                { 'name':'r15'       , 'bitsize' :  64, 'offset' : 120, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 15, 'dwarf' : 15}, -                { 'name':'rip'       , 'bitsize' :  64, 'offset' : 128, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'gcc' : 16, 'dwarf' : 16, 'generic':'pc', 'alt-name':'pc' }, -                { 'name':'rflags'    , 'bitsize' :  64, 'offset' : 136, 'encoding':'uint'  , 'format':'hex'         , 'set': 0, 'generic':'flags', 'alt-name':'flags' }, -                { 'name':'cs'        , 'bitsize' :  64, 'offset' : 144, 'encoding':'uint'  , 'format':'hex'         , 'set': 0                          }, -                { 'name':'fs'        , 'bitsize' :  64, 'offset' : 152, 'encoding':'uint'  , 'format':'hex'         , 'set': 0                          }, -                { 'name':'gs'        , 'bitsize' :  64, 'offset' : 160, 'encoding':'uint'  , 'format':'hex'         , 'set': 0                          }, -                ] +                {'name': 'rax', 'bitsize': 64, 'offset': 0, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 0, 'dwarf': 0}, +                {'name': 'rbx', 'bitsize': 64, 'offset': 8, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 3, 'dwarf': 3}, +                {'name': 'rcx', 'bitsize': 64, 'offset': 16, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 2, 'dwarf': 2, 'generic': 'arg4', 'alt-name': 'arg4', }, +                {'name': 'rdx', 'bitsize': 64, 'offset': 24, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 1, 'dwarf': 1, 'generic': 'arg3', 'alt-name': 'arg3', }, +                {'name': 'rdi', 'bitsize': 64, 'offset': 32, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 5, 'dwarf': 5, 'generic': 'arg1', 'alt-name': 'arg1', }, +                {'name': 'rsi', 'bitsize': 64, 'offset': 40, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 4, 'dwarf': 4, 'generic': 'arg2', 'alt-name': 'arg2', }, +                {'name': 'rbp', 'bitsize': 64, 'offset': 48, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 6, 'dwarf': 6, 'generic': 'fp', 'alt-name': 'fp', }, +                {'name': 'rsp', 'bitsize': 64, 'offset': 56, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 7, 'dwarf': 7, 'generic': 'sp', 'alt-name': 'sp', }, +                {'name': 'r8', 'bitsize': 64, 'offset': 64, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 8, 'dwarf': 8, 'generic': 'arg5', 'alt-name': 'arg5', }, +                {'name': 'r9', 'bitsize': 64, 'offset': 72, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 9, 'dwarf': 9, 'generic': 'arg6', 'alt-name': 'arg6', }, +                {'name': 'r10', 'bitsize': 64, 'offset': 80, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 10, 'dwarf': 10}, +                {'name': 'r11', 'bitsize': 64, 'offset': 88, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 11, 'dwarf': 11}, +                {'name': 'r12', 'bitsize': 64, 'offset': 96, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 12, 'dwarf': 12}, +                {'name': 'r13', 'bitsize': 64, 'offset': 104, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 13, 'dwarf': 13}, +                {'name': 'r14', 'bitsize': 64, 'offset': 112, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 14, 'dwarf': 14}, +                {'name': 'r15', 'bitsize': 64, 'offset': 120, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 15, 'dwarf': 15}, +                {'name': 'rip', 'bitsize': 64, 'offset': 128, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 16, 'dwarf': 16, 'generic': 'pc', 'alt-name': 'pc'}, +                {'name': 'rflags', 'bitsize': 64, 'offset': 136, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'generic': 'flags', 'alt-name': 'flags'}, +                {'name': 'cs', 'bitsize': 64, 'offset': 144, 'encoding': 'uint', 'format': 'hex', 'set': 0}, +                {'name': 'fs', 'bitsize': 64, 'offset': 152, 'encoding': 'uint', 'format': 'hex', 'set': 0}, +                {'name': 'gs', 'bitsize': 64, 'offset': 160, 'encoding': 'uint', 'format': 'hex', 'set': 0}, +            ]          return self.registers -             +      def get_register_data(self, tid): -        return struct.pack('21Q',tid + 1,tid + 2,tid + 3,tid + 4,tid + 5,tid + 6,tid + 7,tid + 8,tid + 9,tid + 10,tid + 11,tid + 12,tid + 13,tid + 14,tid + 15,tid + 16,tid + 17,tid + 18,tid + 19,tid + 20,tid + 21); -     +        return struct.pack( +            '21Q', +            tid + 1, +            tid + 2, +            tid + 3, +            tid + 4, +            tid + 5, +            tid + 6, +            tid + 7, +            tid + 8, +            tid + 9, +            tid + 10, +            tid + 11, +            tid + 12, +            tid + 13, +            tid + 14, +            tid + 15, +            tid + 16, +            tid + 17, +            tid + 18, +            tid + 19, +            tid + 20, +            tid + 21) | 
