1*99451b44SJordan Rupprecht"""
2*99451b44SJordan RupprechtSet the contents of variables and registers using raw data
3*99451b44SJordan Rupprecht"""
4*99451b44SJordan Rupprecht
5*99451b44SJordan Rupprecht
6*99451b44SJordan Rupprecht
7*99451b44SJordan Rupprechtimport lldb
8*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
9*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
10*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
11*99451b44SJordan Rupprecht
12*99451b44SJordan Rupprecht
13*99451b44SJordan Rupprechtclass SetDataTestCase(TestBase):
14*99451b44SJordan Rupprecht
15*99451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
16*99451b44SJordan Rupprecht
17*99451b44SJordan Rupprecht    @skipUnlessDarwin
18*99451b44SJordan Rupprecht    def test_set_data(self):
19*99451b44SJordan Rupprecht        """Test setting the contents of variables and registers using raw data."""
20*99451b44SJordan Rupprecht        self.build()
21*99451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
22*99451b44SJordan Rupprecht        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
23*99451b44SJordan Rupprecht
24*99451b44SJordan Rupprecht        self.runCmd("br s -p First")
25*99451b44SJordan Rupprecht        self.runCmd("br s -p Second")
26*99451b44SJordan Rupprecht
27*99451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
28*99451b44SJordan Rupprecht
29*99451b44SJordan Rupprecht        self.expect("p myFoo.x", VARIABLES_DISPLAYED_CORRECTLY,
30*99451b44SJordan Rupprecht                    substrs=['2'])
31*99451b44SJordan Rupprecht
32*99451b44SJordan Rupprecht        process = self.dbg.GetSelectedTarget().GetProcess()
33*99451b44SJordan Rupprecht        frame = process.GetSelectedThread().GetFrameAtIndex(0)
34*99451b44SJordan Rupprecht
35*99451b44SJordan Rupprecht        x = frame.FindVariable("myFoo").GetChildMemberWithName("x")
36*99451b44SJordan Rupprecht
37*99451b44SJordan Rupprecht        my_data = lldb.SBData.CreateDataFromSInt32Array(
38*99451b44SJordan Rupprecht            lldb.eByteOrderLittle, 8, [4])
39*99451b44SJordan Rupprecht        err = lldb.SBError()
40*99451b44SJordan Rupprecht
41*99451b44SJordan Rupprecht        self.assertTrue(x.SetData(my_data, err))
42*99451b44SJordan Rupprecht
43*99451b44SJordan Rupprecht        self.runCmd("continue")
44*99451b44SJordan Rupprecht
45*99451b44SJordan Rupprecht        self.expect("p myFoo.x", VARIABLES_DISPLAYED_CORRECTLY,
46*99451b44SJordan Rupprecht                    substrs=['4'])
47*99451b44SJordan Rupprecht
48*99451b44SJordan Rupprecht        frame = process.GetSelectedThread().GetFrameAtIndex(0)
49*99451b44SJordan Rupprecht
50*99451b44SJordan Rupprecht        x = frame.FindVariable("string")
51*99451b44SJordan Rupprecht
52*99451b44SJordan Rupprecht        if process.GetAddressByteSize() == 8:
53*99451b44SJordan Rupprecht            my_data = lldb.SBData.CreateDataFromUInt64Array(
54*99451b44SJordan Rupprecht                process.GetByteOrder(), 8, [0])
55*99451b44SJordan Rupprecht        else:
56*99451b44SJordan Rupprecht            my_data = lldb.SBData.CreateDataFromUInt32Array(
57*99451b44SJordan Rupprecht                process.GetByteOrder(), 4, [0])
58*99451b44SJordan Rupprecht
59*99451b44SJordan Rupprecht        err = lldb.SBError()
60*99451b44SJordan Rupprecht
61*99451b44SJordan Rupprecht        self.assertTrue(x.SetData(my_data, err))
62*99451b44SJordan Rupprecht
63*99451b44SJordan Rupprecht        self.expect(
64*99451b44SJordan Rupprecht            "fr var -d run-target string",
65*99451b44SJordan Rupprecht            VARIABLES_DISPLAYED_CORRECTLY,
66*99451b44SJordan Rupprecht            substrs=[
67*99451b44SJordan Rupprecht                'NSString *',
68*99451b44SJordan Rupprecht                'nil'])
69