1*99451b44SJordan Rupprecht"""Test the SBData APIs.""" 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprecht 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprechtfrom math import fabs 6*99451b44SJordan Rupprechtimport lldb 7*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 8*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 9*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 10*99451b44SJordan Rupprecht 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprechtclass SBDataAPICase(TestBase): 13*99451b44SJordan Rupprecht 14*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 15*99451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 16*99451b44SJordan Rupprecht 17*99451b44SJordan Rupprecht def setUp(self): 18*99451b44SJordan Rupprecht # Call super's setUp(). 19*99451b44SJordan Rupprecht TestBase.setUp(self) 20*99451b44SJordan Rupprecht # Find the line number to break on inside main.cpp. 21*99451b44SJordan Rupprecht self.line = line_number('main.cpp', '// set breakpoint here') 22*99451b44SJordan Rupprecht 23*99451b44SJordan Rupprecht @add_test_categories(['pyapi']) 24*99451b44SJordan Rupprecht def test_byte_order_and_address_byte_size(self): 25*99451b44SJordan Rupprecht """Test the SBData::SetData() to ensure the byte order and address 26*99451b44SJordan Rupprecht byte size are obeyed""" 27*99451b44SJordan Rupprecht addr_data = b'\x11\x22\x33\x44\x55\x66\x77\x88' 28*99451b44SJordan Rupprecht error = lldb.SBError() 29*99451b44SJordan Rupprecht data = lldb.SBData() 30*99451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderBig, 4) 31*99451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 32*99451b44SJordan Rupprecht self.assertTrue(addr == 0x11223344); 33*99451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderBig, 8) 34*99451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 35*99451b44SJordan Rupprecht self.assertTrue(addr == 0x1122334455667788); 36*99451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderLittle, 4) 37*99451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 38*99451b44SJordan Rupprecht self.assertTrue(addr == 0x44332211); 39*99451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderLittle, 8) 40*99451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 41*99451b44SJordan Rupprecht self.assertTrue(addr == 0x8877665544332211); 42*99451b44SJordan Rupprecht 43*99451b44SJordan Rupprecht @add_test_categories(['pyapi']) 44*99451b44SJordan Rupprecht def test_with_run_command(self): 45*99451b44SJordan Rupprecht """Test the SBData APIs.""" 46*99451b44SJordan Rupprecht self.build() 47*99451b44SJordan Rupprecht self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 48*99451b44SJordan Rupprecht 49*99451b44SJordan Rupprecht lldbutil.run_break_set_by_file_and_line( 50*99451b44SJordan Rupprecht self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True) 51*99451b44SJordan Rupprecht 52*99451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 53*99451b44SJordan Rupprecht 54*99451b44SJordan Rupprecht # The stop reason of the thread should be breakpoint. 55*99451b44SJordan Rupprecht self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 56*99451b44SJordan Rupprecht substrs=['stopped', 57*99451b44SJordan Rupprecht 'stop reason = breakpoint']) 58*99451b44SJordan Rupprecht 59*99451b44SJordan Rupprecht target = self.dbg.GetSelectedTarget() 60*99451b44SJordan Rupprecht 61*99451b44SJordan Rupprecht process = target.GetProcess() 62*99451b44SJordan Rupprecht 63*99451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread( 64*99451b44SJordan Rupprecht process, lldb.eStopReasonBreakpoint) 65*99451b44SJordan Rupprecht self.assertIsNotNone(thread) 66*99451b44SJordan Rupprecht 67*99451b44SJordan Rupprecht frame = thread.GetSelectedFrame() 68*99451b44SJordan Rupprecht foobar = frame.FindVariable('foobar') 69*99451b44SJordan Rupprecht self.assertTrue(foobar.IsValid()) 70*99451b44SJordan Rupprecht data = foobar.GetPointeeData(0, 2) 71*99451b44SJordan Rupprecht offset = 0 72*99451b44SJordan Rupprecht error = lldb.SBError() 73*99451b44SJordan Rupprecht 74*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 75*99451b44SJordan Rupprecht offset += 4 76*99451b44SJordan Rupprecht low = data.GetSignedInt16(error, offset) 77*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 78*99451b44SJordan Rupprecht offset += 2 79*99451b44SJordan Rupprecht high = data.GetSignedInt16(error, offset) 80*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 81*99451b44SJordan Rupprecht offset += 2 82*99451b44SJordan Rupprecht self.assertTrue( 83*99451b44SJordan Rupprecht (low == 9 and high == 0) or ( 84*99451b44SJordan Rupprecht low == 0 and high == 9), 85*99451b44SJordan Rupprecht 'foo[0].b == 9') 86*99451b44SJordan Rupprecht self.assertTrue( 87*99451b44SJordan Rupprecht fabs( 88*99451b44SJordan Rupprecht data.GetFloat( 89*99451b44SJordan Rupprecht error, 90*99451b44SJordan Rupprecht offset) - 91*99451b44SJordan Rupprecht 3.14) < 1, 92*99451b44SJordan Rupprecht 'foo[0].c == 3.14') 93*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 94*99451b44SJordan Rupprecht offset += 4 95*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 96*99451b44SJordan Rupprecht offset += 4 97*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 98*99451b44SJordan Rupprecht offset += 4 99*99451b44SJordan Rupprecht 100*99451b44SJordan Rupprecht self.runCmd("n") 101*99451b44SJordan Rupprecht 102*99451b44SJordan Rupprecht offset = 16 103*99451b44SJordan Rupprecht 104*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 105*99451b44SJordan Rupprecht 106*99451b44SJordan Rupprecht data = foobar.GetPointeeData(1, 1) 107*99451b44SJordan Rupprecht 108*99451b44SJordan Rupprecht offset = 0 109*99451b44SJordan Rupprecht 110*99451b44SJordan Rupprecht self.assert_data(data.GetSignedInt32, offset, 8) 111*99451b44SJordan Rupprecht offset += 4 112*99451b44SJordan Rupprecht self.assert_data(data.GetSignedInt32, offset, 7) 113*99451b44SJordan Rupprecht offset += 8 114*99451b44SJordan Rupprecht self.assertTrue( 115*99451b44SJordan Rupprecht data.GetUnsignedInt32( 116*99451b44SJordan Rupprecht error, 117*99451b44SJordan Rupprecht offset) == 0, 118*99451b44SJordan Rupprecht 'do not read beyond end') 119*99451b44SJordan Rupprecht self.assertTrue(not error.Success()) 120*99451b44SJordan Rupprecht error.Clear() # clear the error for the next test 121*99451b44SJordan Rupprecht 122*99451b44SJordan Rupprecht star_foobar = foobar.Dereference() 123*99451b44SJordan Rupprecht self.assertTrue(star_foobar.IsValid()) 124*99451b44SJordan Rupprecht 125*99451b44SJordan Rupprecht data = star_foobar.GetData() 126*99451b44SJordan Rupprecht 127*99451b44SJordan Rupprecht offset = 0 128*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 129*99451b44SJordan Rupprecht offset += 4 130*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 9) 131*99451b44SJordan Rupprecht 132*99451b44SJordan Rupprecht foobar_addr = star_foobar.GetLoadAddress() 133*99451b44SJordan Rupprecht foobar_addr += 12 134*99451b44SJordan Rupprecht 135*99451b44SJordan Rupprecht # http://llvm.org/bugs/show_bug.cgi?id=11579 136*99451b44SJordan Rupprecht # lldb::SBValue::CreateValueFromAddress does not verify SBType::GetPointerType succeeds 137*99451b44SJordan Rupprecht # This should not crash LLDB. 138*99451b44SJordan Rupprecht nothing = foobar.CreateValueFromAddress( 139*99451b44SJordan Rupprecht "nothing", foobar_addr, star_foobar.GetType().GetBasicType( 140*99451b44SJordan Rupprecht lldb.eBasicTypeInvalid)) 141*99451b44SJordan Rupprecht 142*99451b44SJordan Rupprecht new_foobar = foobar.CreateValueFromAddress( 143*99451b44SJordan Rupprecht "f00", foobar_addr, star_foobar.GetType()) 144*99451b44SJordan Rupprecht self.assertTrue(new_foobar.IsValid()) 145*99451b44SJordan Rupprecht data = new_foobar.GetData() 146*99451b44SJordan Rupprecht 147*99451b44SJordan Rupprecht self.assertTrue(data.uint32[0] == 8, 'then foo[1].a == 8') 148*99451b44SJordan Rupprecht self.assertTrue(data.uint32[1] == 7, 'then foo[1].b == 7') 149*99451b44SJordan Rupprecht # exploiting that sizeof(uint32) == sizeof(float) 150*99451b44SJordan Rupprecht self.assertTrue(fabs(data.float[2] - 3.14) < 1, 'foo[1].c == 3.14') 151*99451b44SJordan Rupprecht 152*99451b44SJordan Rupprecht self.runCmd("n") 153*99451b44SJordan Rupprecht 154*99451b44SJordan Rupprecht offset = 0 155*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 156*99451b44SJordan Rupprecht offset += 4 157*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 7) 158*99451b44SJordan Rupprecht offset += 4 159*99451b44SJordan Rupprecht self.assertTrue( 160*99451b44SJordan Rupprecht fabs( 161*99451b44SJordan Rupprecht data.GetFloat( 162*99451b44SJordan Rupprecht error, 163*99451b44SJordan Rupprecht offset) - 164*99451b44SJordan Rupprecht 3.14) < 1, 165*99451b44SJordan Rupprecht 'foo[1].c == 3.14') 166*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 167*99451b44SJordan Rupprecht 168*99451b44SJordan Rupprecht data = new_foobar.GetData() 169*99451b44SJordan Rupprecht 170*99451b44SJordan Rupprecht offset = 0 171*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 172*99451b44SJordan Rupprecht offset += 4 173*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 7) 174*99451b44SJordan Rupprecht offset += 4 175*99451b44SJordan Rupprecht self.assertTrue( 176*99451b44SJordan Rupprecht fabs( 177*99451b44SJordan Rupprecht data.GetFloat( 178*99451b44SJordan Rupprecht error, 179*99451b44SJordan Rupprecht offset) - 180*99451b44SJordan Rupprecht 6.28) < 1, 181*99451b44SJordan Rupprecht 'foo[1].c == 6.28') 182*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 183*99451b44SJordan Rupprecht 184*99451b44SJordan Rupprecht self.runCmd("n") 185*99451b44SJordan Rupprecht 186*99451b44SJordan Rupprecht barfoo = frame.FindVariable('barfoo') 187*99451b44SJordan Rupprecht 188*99451b44SJordan Rupprecht data = barfoo.GetData() 189*99451b44SJordan Rupprecht offset = 0 190*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 191*99451b44SJordan Rupprecht offset += 4 192*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 2) 193*99451b44SJordan Rupprecht offset += 4 194*99451b44SJordan Rupprecht self.assertTrue( 195*99451b44SJordan Rupprecht fabs( 196*99451b44SJordan Rupprecht data.GetFloat( 197*99451b44SJordan Rupprecht error, 198*99451b44SJordan Rupprecht offset) - 199*99451b44SJordan Rupprecht 3) < 1, 200*99451b44SJordan Rupprecht 'barfoo[0].c == 3') 201*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 202*99451b44SJordan Rupprecht offset += 4 203*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 4) 204*99451b44SJordan Rupprecht offset += 4 205*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 206*99451b44SJordan Rupprecht offset += 4 207*99451b44SJordan Rupprecht self.assertTrue( 208*99451b44SJordan Rupprecht fabs( 209*99451b44SJordan Rupprecht data.GetFloat( 210*99451b44SJordan Rupprecht error, 211*99451b44SJordan Rupprecht offset) - 212*99451b44SJordan Rupprecht 6) < 1, 213*99451b44SJordan Rupprecht 'barfoo[1].c == 6') 214*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 215*99451b44SJordan Rupprecht 216*99451b44SJordan Rupprecht new_object = barfoo.CreateValueFromData( 217*99451b44SJordan Rupprecht "new_object", data, barfoo.GetType().GetBasicType( 218*99451b44SJordan Rupprecht lldb.eBasicTypeInt)) 219*99451b44SJordan Rupprecht self.assertTrue(new_object.GetValue() == "1", 'new_object == 1') 220*99451b44SJordan Rupprecht 221*99451b44SJordan Rupprecht if data.GetByteOrder() == lldb.eByteOrderBig: 222*99451b44SJordan Rupprecht data.SetData( 223*99451b44SJordan Rupprecht error, 224*99451b44SJordan Rupprecht '\0\0\0A', 225*99451b44SJordan Rupprecht data.GetByteOrder(), 226*99451b44SJordan Rupprecht data.GetAddressByteSize()) 227*99451b44SJordan Rupprecht else: 228*99451b44SJordan Rupprecht data.SetData( 229*99451b44SJordan Rupprecht error, 230*99451b44SJordan Rupprecht 'A\0\0\0', 231*99451b44SJordan Rupprecht data.GetByteOrder(), 232*99451b44SJordan Rupprecht data.GetAddressByteSize()) 233*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 234*99451b44SJordan Rupprecht 235*99451b44SJordan Rupprecht data2 = lldb.SBData() 236*99451b44SJordan Rupprecht data2.SetData( 237*99451b44SJordan Rupprecht error, 238*99451b44SJordan Rupprecht 'BCD', 239*99451b44SJordan Rupprecht data.GetByteOrder(), 240*99451b44SJordan Rupprecht data.GetAddressByteSize()) 241*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 242*99451b44SJordan Rupprecht 243*99451b44SJordan Rupprecht data.Append(data2) 244*99451b44SJordan Rupprecht 245*99451b44SJordan Rupprecht # this breaks on EBCDIC 246*99451b44SJordan Rupprecht offset = 0 247*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 65) 248*99451b44SJordan Rupprecht offset += 4 249*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 66) 250*99451b44SJordan Rupprecht offset += 1 251*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 67) 252*99451b44SJordan Rupprecht offset += 1 253*99451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 68) 254*99451b44SJordan Rupprecht offset += 1 255*99451b44SJordan Rupprecht 256*99451b44SJordan Rupprecht # check the new API calls introduced per LLVM llvm.org/prenhancement request 257*99451b44SJordan Rupprecht # 11619 (Allow creating SBData values from arrays or primitives in 258*99451b44SJordan Rupprecht # Python) 259*99451b44SJordan Rupprecht 260*99451b44SJordan Rupprecht hello_str = "hello!" 261*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromCString( 262*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), hello_str) 263*99451b44SJordan Rupprecht self.assertTrue(len(data2.uint8) == len(hello_str)) 264*99451b44SJordan Rupprecht self.assertTrue(data2.uint8[0] == 104, 'h == 104') 265*99451b44SJordan Rupprecht self.assertTrue(data2.uint8[1] == 101, 'e == 101') 266*99451b44SJordan Rupprecht self.assertTrue(data2.uint8[2] == 108, 'l == 108') 267*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 3, 108) # l 268*99451b44SJordan Rupprecht self.assertTrue(data2.uint8[4] == 111, 'o == 111') 269*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 5, 33) # ! 270*99451b44SJordan Rupprecht 271*99451b44SJordan Rupprecht uint_lists = [[1, 2, 3, 4, 5], [int(i) for i in [1, 2, 3, 4, 5]]] 272*99451b44SJordan Rupprecht int_lists = [[2, -2], [int(i) for i in [2, -2]]] 273*99451b44SJordan Rupprecht 274*99451b44SJordan Rupprecht for l in uint_lists: 275*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt64Array( 276*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 277*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 0, 1) 278*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 8, 2) 279*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 16, 3) 280*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 24, 4) 281*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 32, 5) 282*99451b44SJordan Rupprecht 283*99451b44SJordan Rupprecht self.assertTrue( 284*99451b44SJordan Rupprecht data2.uint64s == [ 285*99451b44SJordan Rupprecht 1, 286*99451b44SJordan Rupprecht 2, 287*99451b44SJordan Rupprecht 3, 288*99451b44SJordan Rupprecht 4, 289*99451b44SJordan Rupprecht 5], 290*99451b44SJordan Rupprecht 'read_data_helper failure: data2 == [1,2,3,4,5]') 291*99451b44SJordan Rupprecht 292*99451b44SJordan Rupprecht for l in int_lists: 293*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt32Array( 294*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 295*99451b44SJordan Rupprecht self.assertTrue( 296*99451b44SJordan Rupprecht data2.sint32[ 297*99451b44SJordan Rupprecht 0:2] == [ 298*99451b44SJordan Rupprecht 2, -2], 'signed32 data2 = [2,-2]') 299*99451b44SJordan Rupprecht 300*99451b44SJordan Rupprecht data2.Append( 301*99451b44SJordan Rupprecht lldb.SBData.CreateDataFromSInt64Array( 302*99451b44SJordan Rupprecht process.GetByteOrder(), 303*99451b44SJordan Rupprecht process.GetAddressByteSize(), 304*99451b44SJordan Rupprecht int_lists[0])) 305*99451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 0, 2) 306*99451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 4, -2) 307*99451b44SJordan Rupprecht self.assertTrue( 308*99451b44SJordan Rupprecht data2.sint64[ 309*99451b44SJordan Rupprecht 1:3] == [ 310*99451b44SJordan Rupprecht 2, -2], 'signed64 data2 = [2,-2]') 311*99451b44SJordan Rupprecht 312*99451b44SJordan Rupprecht for l in int_lists: 313*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt64Array( 314*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 315*99451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 0, 2) 316*99451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 8, -2) 317*99451b44SJordan Rupprecht self.assertTrue( 318*99451b44SJordan Rupprecht data2.sint64[ 319*99451b44SJordan Rupprecht 0:2] == [ 320*99451b44SJordan Rupprecht 2, -2], 'signed64 data2 = [2,-2]') 321*99451b44SJordan Rupprecht 322*99451b44SJordan Rupprecht for l in uint_lists: 323*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt32Array( 324*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 325*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 0, 1) 326*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 4, 2) 327*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 8, 3) 328*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 12, 4) 329*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 16, 5) 330*99451b44SJordan Rupprecht 331*99451b44SJordan Rupprecht bool_list = [True, True, False, False, True, False] 332*99451b44SJordan Rupprecht 333*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt32Array( 334*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 335*99451b44SJordan Rupprecht self.assertTrue( 336*99451b44SJordan Rupprecht data2.sint32[ 337*99451b44SJordan Rupprecht 0:6] == [ 338*99451b44SJordan Rupprecht 1, 339*99451b44SJordan Rupprecht 1, 340*99451b44SJordan Rupprecht 0, 341*99451b44SJordan Rupprecht 0, 342*99451b44SJordan Rupprecht 1, 343*99451b44SJordan Rupprecht 0], 344*99451b44SJordan Rupprecht 'signed32 data2 = [1, 1, 0, 0, 1, 0]') 345*99451b44SJordan Rupprecht 346*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt32Array( 347*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 348*99451b44SJordan Rupprecht self.assertTrue( 349*99451b44SJordan Rupprecht data2.uint32[ 350*99451b44SJordan Rupprecht 0:6] == [ 351*99451b44SJordan Rupprecht 1, 352*99451b44SJordan Rupprecht 1, 353*99451b44SJordan Rupprecht 0, 354*99451b44SJordan Rupprecht 0, 355*99451b44SJordan Rupprecht 1, 356*99451b44SJordan Rupprecht 0], 357*99451b44SJordan Rupprecht 'unsigned32 data2 = [1, 1, 0, 0, 1, 0]') 358*99451b44SJordan Rupprecht 359*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt64Array( 360*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 361*99451b44SJordan Rupprecht self.assertTrue( 362*99451b44SJordan Rupprecht data2.sint64[ 363*99451b44SJordan Rupprecht 0:6] == [ 364*99451b44SJordan Rupprecht 1, 365*99451b44SJordan Rupprecht 1, 366*99451b44SJordan Rupprecht 0, 367*99451b44SJordan Rupprecht 0, 368*99451b44SJordan Rupprecht 1, 369*99451b44SJordan Rupprecht 0], 370*99451b44SJordan Rupprecht 'signed64 data2 = [1, 1, 0, 0, 1, 0]') 371*99451b44SJordan Rupprecht 372*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt64Array( 373*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 374*99451b44SJordan Rupprecht self.assertTrue( 375*99451b44SJordan Rupprecht data2.uint64[ 376*99451b44SJordan Rupprecht 0:6] == [ 377*99451b44SJordan Rupprecht 1, 378*99451b44SJordan Rupprecht 1, 379*99451b44SJordan Rupprecht 0, 380*99451b44SJordan Rupprecht 0, 381*99451b44SJordan Rupprecht 1, 382*99451b44SJordan Rupprecht 0], 383*99451b44SJordan Rupprecht 'signed64 data2 = [1, 1, 0, 0, 1, 0]') 384*99451b44SJordan Rupprecht 385*99451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromDoubleArray( 386*99451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), [ 387*99451b44SJordan Rupprecht 3.14, 6.28, 2.71]) 388*99451b44SJordan Rupprecht self.assertTrue( 389*99451b44SJordan Rupprecht fabs( 390*99451b44SJordan Rupprecht data2.GetDouble( 391*99451b44SJordan Rupprecht error, 392*99451b44SJordan Rupprecht 0) - 393*99451b44SJordan Rupprecht 3.14) < 0.5, 394*99451b44SJordan Rupprecht 'double data2[0] = 3.14') 395*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 396*99451b44SJordan Rupprecht self.assertTrue( 397*99451b44SJordan Rupprecht fabs( 398*99451b44SJordan Rupprecht data2.GetDouble( 399*99451b44SJordan Rupprecht error, 400*99451b44SJordan Rupprecht 8) - 401*99451b44SJordan Rupprecht 6.28) < 0.5, 402*99451b44SJordan Rupprecht 'double data2[1] = 6.28') 403*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 404*99451b44SJordan Rupprecht self.assertTrue( 405*99451b44SJordan Rupprecht fabs( 406*99451b44SJordan Rupprecht data2.GetDouble( 407*99451b44SJordan Rupprecht error, 408*99451b44SJordan Rupprecht 16) - 409*99451b44SJordan Rupprecht 2.71) < 0.5, 410*99451b44SJordan Rupprecht 'double data2[2] = 2.71') 411*99451b44SJordan Rupprecht self.assertTrue(error.Success()) 412*99451b44SJordan Rupprecht 413*99451b44SJordan Rupprecht data2 = lldb.SBData() 414*99451b44SJordan Rupprecht 415*99451b44SJordan Rupprecht data2.SetDataFromCString(hello_str) 416*99451b44SJordan Rupprecht self.assertTrue(len(data2.uint8) == len(hello_str)) 417*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 0, 104) 418*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 1, 101) 419*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 2, 108) 420*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 3, 108) 421*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 4, 111) 422*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 5, 33) 423*99451b44SJordan Rupprecht 424*99451b44SJordan Rupprecht data2.SetDataFromUInt64Array([1, 2, 3, 4, 5]) 425*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 0, 1) 426*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 8, 2) 427*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 16, 3) 428*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 24, 4) 429*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 32, 5) 430*99451b44SJordan Rupprecht 431*99451b44SJordan Rupprecht self.assertTrue( 432*99451b44SJordan Rupprecht data2.uint64[0] == 1, 433*99451b44SJordan Rupprecht 'read_data_helper failure: set data2[0] = 1') 434*99451b44SJordan Rupprecht self.assertTrue( 435*99451b44SJordan Rupprecht data2.uint64[1] == 2, 436*99451b44SJordan Rupprecht 'read_data_helper failure: set data2[1] = 2') 437*99451b44SJordan Rupprecht self.assertTrue( 438*99451b44SJordan Rupprecht data2.uint64[2] == 3, 439*99451b44SJordan Rupprecht 'read_data_helper failure: set data2[2] = 3') 440*99451b44SJordan Rupprecht self.assertTrue( 441*99451b44SJordan Rupprecht data2.uint64[3] == 4, 442*99451b44SJordan Rupprecht 'read_data_helper failure: set data2[3] = 4') 443*99451b44SJordan Rupprecht self.assertTrue( 444*99451b44SJordan Rupprecht data2.uint64[4] == 5, 445*99451b44SJordan Rupprecht 'read_data_helper failure: set data2[4] = 5') 446*99451b44SJordan Rupprecht 447*99451b44SJordan Rupprecht self.assertTrue( 448*99451b44SJordan Rupprecht data2.uint64[ 449*99451b44SJordan Rupprecht 0:2] == [ 450*99451b44SJordan Rupprecht 1, 451*99451b44SJordan Rupprecht 2], 452*99451b44SJordan Rupprecht 'read_data_helper failure: set data2[0:2] = [1,2]') 453*99451b44SJordan Rupprecht 454*99451b44SJordan Rupprecht data2.SetDataFromSInt32Array([2, -2]) 455*99451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 0, 2) 456*99451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 4, -2) 457*99451b44SJordan Rupprecht 458*99451b44SJordan Rupprecht data2.SetDataFromSInt64Array([2, -2]) 459*99451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 0, 2) 460*99451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 8, -2) 461*99451b44SJordan Rupprecht 462*99451b44SJordan Rupprecht data2.SetDataFromUInt32Array([1, 2, 3, 4, 5]) 463*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 0, 1) 464*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 4, 2) 465*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 8, 3) 466*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 12, 4) 467*99451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 16, 5) 468*99451b44SJordan Rupprecht 469*99451b44SJordan Rupprecht self.assertTrue( 470*99451b44SJordan Rupprecht data2.uint32[0] == 1, 471*99451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[0] = 1') 472*99451b44SJordan Rupprecht self.assertTrue( 473*99451b44SJordan Rupprecht data2.uint32[1] == 2, 474*99451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[1] = 2') 475*99451b44SJordan Rupprecht self.assertTrue( 476*99451b44SJordan Rupprecht data2.uint32[2] == 3, 477*99451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[2] = 3') 478*99451b44SJordan Rupprecht self.assertTrue( 479*99451b44SJordan Rupprecht data2.uint32[3] == 4, 480*99451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[3] = 4') 481*99451b44SJordan Rupprecht self.assertTrue( 482*99451b44SJordan Rupprecht data2.uint32[4] == 5, 483*99451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[4] = 5') 484*99451b44SJordan Rupprecht 485*99451b44SJordan Rupprecht data2.SetDataFromDoubleArray([3.14, 6.28, 2.71]) 486*99451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 0) - 3.14) 487*99451b44SJordan Rupprecht < 0.5, 'set double data2[0] = 3.14') 488*99451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 8) - 6.28) 489*99451b44SJordan Rupprecht < 0.5, 'set double data2[1] = 6.28') 490*99451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 16) - 2.71) 491*99451b44SJordan Rupprecht < 0.5, 'set double data2[2] = 2.71') 492*99451b44SJordan Rupprecht 493*99451b44SJordan Rupprecht self.assertTrue( 494*99451b44SJordan Rupprecht fabs( 495*99451b44SJordan Rupprecht data2.double[0] - 496*99451b44SJordan Rupprecht 3.14) < 0.5, 497*99451b44SJordan Rupprecht 'read_data_helper failure: set double data2[0] = 3.14') 498*99451b44SJordan Rupprecht self.assertTrue( 499*99451b44SJordan Rupprecht fabs( 500*99451b44SJordan Rupprecht data2.double[1] - 501*99451b44SJordan Rupprecht 6.28) < 0.5, 502*99451b44SJordan Rupprecht 'read_data_helper failure: set double data2[1] = 6.28') 503*99451b44SJordan Rupprecht self.assertTrue( 504*99451b44SJordan Rupprecht fabs( 505*99451b44SJordan Rupprecht data2.double[2] - 506*99451b44SJordan Rupprecht 2.71) < 0.5, 507*99451b44SJordan Rupprecht 'read_data_helper failure: set double data2[2] = 2.71') 508*99451b44SJordan Rupprecht 509*99451b44SJordan Rupprecht def assert_data(self, func, arg, expected): 510*99451b44SJordan Rupprecht """ Asserts func(SBError error, arg) == expected. """ 511*99451b44SJordan Rupprecht error = lldb.SBError() 512*99451b44SJordan Rupprecht result = func(error, arg) 513*99451b44SJordan Rupprecht if not error.Success(): 514*99451b44SJordan Rupprecht stream = lldb.SBStream() 515*99451b44SJordan Rupprecht error.GetDescription(stream) 516*99451b44SJordan Rupprecht self.assertTrue( 517*99451b44SJordan Rupprecht error.Success(), "%s(error, %s) did not succeed: %s" % 518*99451b44SJordan Rupprecht (func.__name__, arg, stream.GetData())) 519*99451b44SJordan Rupprecht self.assertTrue( 520*99451b44SJordan Rupprecht expected == result, "%s(error, %s) == %s != %s" % 521*99451b44SJordan Rupprecht (func.__name__, arg, result, expected)) 522