xref: /llvm-project/lldb/test/API/functionalities/set-data/TestSetData.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtSet the contents of variables and registers using raw data
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtimport lldb
799451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
999451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprechtclass SetDataTestCase(TestBase):
13a852cf66SMichał Górny    @add_test_categories(["objc"])
1499451b44SJordan Rupprecht    def test_set_data(self):
1599451b44SJordan Rupprecht        """Test setting the contents of variables and registers using raw data."""
1699451b44SJordan Rupprecht        self.build()
1799451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
1899451b44SJordan Rupprecht        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
1999451b44SJordan Rupprecht
2099451b44SJordan Rupprecht        self.runCmd("br s -p First")
2199451b44SJordan Rupprecht        self.runCmd("br s -p Second")
2299451b44SJordan Rupprecht
2399451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
2499451b44SJordan Rupprecht
25*2238dcc3SJonas Devlieghere        self.expect("expression myFoo.x", VARIABLES_DISPLAYED_CORRECTLY, substrs=["2"])
2699451b44SJordan Rupprecht
2799451b44SJordan Rupprecht        process = self.dbg.GetSelectedTarget().GetProcess()
2899451b44SJordan Rupprecht        frame = process.GetSelectedThread().GetFrameAtIndex(0)
2999451b44SJordan Rupprecht
3099451b44SJordan Rupprecht        x = frame.FindVariable("myFoo").GetChildMemberWithName("x")
3199451b44SJordan Rupprecht
32*2238dcc3SJonas Devlieghere        my_data = lldb.SBData.CreateDataFromSInt32Array(lldb.eByteOrderLittle, 8, [4])
3399451b44SJordan Rupprecht        err = lldb.SBError()
3499451b44SJordan Rupprecht
3599451b44SJordan Rupprecht        self.assertTrue(x.SetData(my_data, err))
3699451b44SJordan Rupprecht
3799451b44SJordan Rupprecht        self.runCmd("continue")
3899451b44SJordan Rupprecht
39*2238dcc3SJonas Devlieghere        self.expect("expression myFoo.x", VARIABLES_DISPLAYED_CORRECTLY, substrs=["4"])
4099451b44SJordan Rupprecht
4199451b44SJordan Rupprecht        frame = process.GetSelectedThread().GetFrameAtIndex(0)
4299451b44SJordan Rupprecht
4399451b44SJordan Rupprecht        x = frame.FindVariable("string")
4499451b44SJordan Rupprecht
4599451b44SJordan Rupprecht        if process.GetAddressByteSize() == 8:
4699451b44SJordan Rupprecht            my_data = lldb.SBData.CreateDataFromUInt64Array(
47*2238dcc3SJonas Devlieghere                process.GetByteOrder(), 8, [0]
48*2238dcc3SJonas Devlieghere            )
4999451b44SJordan Rupprecht        else:
5099451b44SJordan Rupprecht            my_data = lldb.SBData.CreateDataFromUInt32Array(
51*2238dcc3SJonas Devlieghere                process.GetByteOrder(), 4, [0]
52*2238dcc3SJonas Devlieghere            )
5399451b44SJordan Rupprecht
5499451b44SJordan Rupprecht        err = lldb.SBError()
5599451b44SJordan Rupprecht
5699451b44SJordan Rupprecht        self.assertTrue(x.SetData(my_data, err))
5799451b44SJordan Rupprecht
5899451b44SJordan Rupprecht        self.expect(
5999451b44SJordan Rupprecht            "fr var -d run-target string",
6099451b44SJordan Rupprecht            VARIABLES_DISPLAYED_CORRECTLY,
61*2238dcc3SJonas Devlieghere            substrs=["NSString *", "nil"],
62*2238dcc3SJonas Devlieghere        )
63