199451b44SJordan Rupprecht"""Test the SBData APIs.""" 299451b44SJordan Rupprecht 399451b44SJordan Rupprecht 499451b44SJordan Rupprechtfrom math import fabs 599451b44SJordan Rupprechtimport lldb 699451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 799451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 899451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 999451b44SJordan Rupprecht 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprechtclass SBDataAPICase(TestBase): 1299451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprecht def setUp(self): 1599451b44SJordan Rupprecht # Call super's setUp(). 1699451b44SJordan Rupprecht TestBase.setUp(self) 1799451b44SJordan Rupprecht # Find the line number to break on inside main.cpp. 182238dcc3SJonas Devlieghere self.line = line_number("main.cpp", "// set breakpoint here") 1999451b44SJordan Rupprecht 2099451b44SJordan Rupprecht def test_byte_order_and_address_byte_size(self): 2199451b44SJordan Rupprecht """Test the SBData::SetData() to ensure the byte order and address 2299451b44SJordan Rupprecht byte size are obeyed""" 232238dcc3SJonas Devlieghere addr_data = b"\x11\x22\x33\x44\x55\x66\x77\x88" 2499451b44SJordan Rupprecht error = lldb.SBError() 2599451b44SJordan Rupprecht data = lldb.SBData() 2699451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderBig, 4) 2799451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 282238dcc3SJonas Devlieghere self.assertEqual(addr, 0x11223344) 2999451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderBig, 8) 3099451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 312238dcc3SJonas Devlieghere self.assertEqual(addr, 0x1122334455667788) 3299451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderLittle, 4) 3399451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 342238dcc3SJonas Devlieghere self.assertEqual(addr, 0x44332211) 3599451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderLittle, 8) 3699451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 372238dcc3SJonas Devlieghere self.assertEqual(addr, 0x8877665544332211) 3899451b44SJordan Rupprecht 3972e25978SMed Ismail Bennani def test_byte_order_and_address_byte_size_with_ownership(self): 4072e25978SMed Ismail Bennani """Test the SBData::SetDataWithOwnership() to ensure the byte order 4172e25978SMed Ismail Bennani and address byte size are obeyed even when source date is released""" 422238dcc3SJonas Devlieghere addr_data = b"\x11\x22\x33\x44\x55\x66\x77\x88" 4372e25978SMed Ismail Bennani error = lldb.SBError() 4472e25978SMed Ismail Bennani data = lldb.SBData() 4572e25978SMed Ismail Bennani data.SetDataWithOwnership(error, addr_data, lldb.eByteOrderBig, 8) 4672e25978SMed Ismail Bennani del addr_data 4772e25978SMed Ismail Bennani addr = data.GetAddress(error, 0) 482238dcc3SJonas Devlieghere self.assertEqual(addr, 0x1122334455667788) 4972e25978SMed Ismail Bennani 5099451b44SJordan Rupprecht def test_with_run_command(self): 5199451b44SJordan Rupprecht """Test the SBData APIs.""" 5299451b44SJordan Rupprecht self.build() 5399451b44SJordan Rupprecht self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 5499451b44SJordan Rupprecht 5599451b44SJordan Rupprecht lldbutil.run_break_set_by_file_and_line( 562238dcc3SJonas Devlieghere self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True 572238dcc3SJonas Devlieghere ) 5899451b44SJordan Rupprecht 5999451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 6099451b44SJordan Rupprecht 6199451b44SJordan Rupprecht # The stop reason of the thread should be breakpoint. 622238dcc3SJonas Devlieghere self.expect( 632238dcc3SJonas Devlieghere "thread list", 642238dcc3SJonas Devlieghere STOPPED_DUE_TO_BREAKPOINT, 652238dcc3SJonas Devlieghere substrs=["stopped", "stop reason = breakpoint"], 662238dcc3SJonas Devlieghere ) 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht target = self.dbg.GetSelectedTarget() 6999451b44SJordan Rupprecht 7099451b44SJordan Rupprecht process = target.GetProcess() 7199451b44SJordan Rupprecht 722238dcc3SJonas Devlieghere thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) 7399451b44SJordan Rupprecht self.assertIsNotNone(thread) 7499451b44SJordan Rupprecht 7599451b44SJordan Rupprecht frame = thread.GetSelectedFrame() 762238dcc3SJonas Devlieghere foobar = frame.FindVariable("foobar") 7799451b44SJordan Rupprecht self.assertTrue(foobar.IsValid()) 7899451b44SJordan Rupprecht data = foobar.GetPointeeData(0, 2) 7999451b44SJordan Rupprecht offset = 0 8099451b44SJordan Rupprecht error = lldb.SBError() 8199451b44SJordan Rupprecht 8299451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 8399451b44SJordan Rupprecht offset += 4 8499451b44SJordan Rupprecht low = data.GetSignedInt16(error, offset) 85779bbbf2SDave Lee self.assertSuccess(error) 8699451b44SJordan Rupprecht offset += 2 8799451b44SJordan Rupprecht high = data.GetSignedInt16(error, offset) 88779bbbf2SDave Lee self.assertSuccess(error) 8999451b44SJordan Rupprecht offset += 2 9099451b44SJordan Rupprecht self.assertTrue( 912238dcc3SJonas Devlieghere (low == 9 and high == 0) or (low == 0 and high == 9), "foo[0].b == 9" 922238dcc3SJonas Devlieghere ) 93*9c246882SJordan Rupprecht self.assertLess( 94*9c246882SJordan Rupprecht fabs(data.GetFloat(error, offset) - 3.14), 1, "foo[0].c == 3.14" 952238dcc3SJonas Devlieghere ) 96779bbbf2SDave Lee self.assertSuccess(error) 9799451b44SJordan Rupprecht offset += 4 9899451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 9999451b44SJordan Rupprecht offset += 4 10099451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 10199451b44SJordan Rupprecht offset += 4 10299451b44SJordan Rupprecht 10399451b44SJordan Rupprecht self.runCmd("n") 10499451b44SJordan Rupprecht 10599451b44SJordan Rupprecht offset = 16 10699451b44SJordan Rupprecht 10799451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 10899451b44SJordan Rupprecht 10999451b44SJordan Rupprecht data = foobar.GetPointeeData(1, 1) 11099451b44SJordan Rupprecht 11199451b44SJordan Rupprecht offset = 0 11299451b44SJordan Rupprecht 11399451b44SJordan Rupprecht self.assert_data(data.GetSignedInt32, offset, 8) 11499451b44SJordan Rupprecht offset += 4 11599451b44SJordan Rupprecht self.assert_data(data.GetSignedInt32, offset, 7) 11699451b44SJordan Rupprecht offset += 8 1171fb5c7a2SDave Lee self.assertEqual( 1182238dcc3SJonas Devlieghere data.GetUnsignedInt32(error, offset), 0, "do not read beyond end" 1192238dcc3SJonas Devlieghere ) 12099451b44SJordan Rupprecht self.assertTrue(not error.Success()) 12199451b44SJordan Rupprecht error.Clear() # clear the error for the next test 12299451b44SJordan Rupprecht 12399451b44SJordan Rupprecht star_foobar = foobar.Dereference() 12499451b44SJordan Rupprecht self.assertTrue(star_foobar.IsValid()) 12599451b44SJordan Rupprecht 12699451b44SJordan Rupprecht data = star_foobar.GetData() 12799451b44SJordan Rupprecht 12899451b44SJordan Rupprecht offset = 0 12999451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 13099451b44SJordan Rupprecht offset += 4 13199451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 9) 13299451b44SJordan Rupprecht 13399451b44SJordan Rupprecht foobar_addr = star_foobar.GetLoadAddress() 13499451b44SJordan Rupprecht foobar_addr += 12 13599451b44SJordan Rupprecht 13699451b44SJordan Rupprecht # http://llvm.org/bugs/show_bug.cgi?id=11579 13799451b44SJordan Rupprecht # lldb::SBValue::CreateValueFromAddress does not verify SBType::GetPointerType succeeds 13899451b44SJordan Rupprecht # This should not crash LLDB. 13999451b44SJordan Rupprecht nothing = foobar.CreateValueFromAddress( 1402238dcc3SJonas Devlieghere "nothing", 1412238dcc3SJonas Devlieghere foobar_addr, 1422238dcc3SJonas Devlieghere star_foobar.GetType().GetBasicType(lldb.eBasicTypeInvalid), 1432238dcc3SJonas Devlieghere ) 14499451b44SJordan Rupprecht 14599451b44SJordan Rupprecht new_foobar = foobar.CreateValueFromAddress( 1462238dcc3SJonas Devlieghere "f00", foobar_addr, star_foobar.GetType() 1472238dcc3SJonas Devlieghere ) 14899451b44SJordan Rupprecht self.assertTrue(new_foobar.IsValid()) 14999451b44SJordan Rupprecht data = new_foobar.GetData() 15099451b44SJordan Rupprecht 1512238dcc3SJonas Devlieghere self.assertEqual(data.uint32[0], 8, "then foo[1].a == 8") 1522238dcc3SJonas Devlieghere self.assertEqual(data.uint32[1], 7, "then foo[1].b == 7") 15399451b44SJordan Rupprecht # exploiting that sizeof(uint32) == sizeof(float) 154*9c246882SJordan Rupprecht self.assertLess(fabs(data.float[2] - 3.14), 1, "foo[1].c == 3.14") 15599451b44SJordan Rupprecht 15699451b44SJordan Rupprecht self.runCmd("n") 15799451b44SJordan Rupprecht 15899451b44SJordan Rupprecht offset = 0 15999451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 16099451b44SJordan Rupprecht offset += 4 16199451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 7) 16299451b44SJordan Rupprecht offset += 4 163*9c246882SJordan Rupprecht self.assertLess( 164*9c246882SJordan Rupprecht fabs(data.GetFloat(error, offset) - 3.14), 1, "foo[1].c == 3.14" 1652238dcc3SJonas Devlieghere ) 166779bbbf2SDave Lee self.assertSuccess(error) 16799451b44SJordan Rupprecht 16899451b44SJordan Rupprecht data = new_foobar.GetData() 16999451b44SJordan Rupprecht 17099451b44SJordan Rupprecht offset = 0 17199451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 17299451b44SJordan Rupprecht offset += 4 17399451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 7) 17499451b44SJordan Rupprecht offset += 4 175*9c246882SJordan Rupprecht self.assertLess( 176*9c246882SJordan Rupprecht fabs(data.GetFloat(error, offset) - 6.28), 1, "foo[1].c == 6.28" 1772238dcc3SJonas Devlieghere ) 178779bbbf2SDave Lee self.assertSuccess(error) 17999451b44SJordan Rupprecht 18099451b44SJordan Rupprecht self.runCmd("n") 18199451b44SJordan Rupprecht 1822238dcc3SJonas Devlieghere barfoo = frame.FindVariable("barfoo") 18399451b44SJordan Rupprecht 18499451b44SJordan Rupprecht data = barfoo.GetData() 18599451b44SJordan Rupprecht offset = 0 18699451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 18799451b44SJordan Rupprecht offset += 4 18899451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 2) 18999451b44SJordan Rupprecht offset += 4 190*9c246882SJordan Rupprecht self.assertLess(fabs(data.GetFloat(error, offset) - 3), 1, "barfoo[0].c == 3") 191779bbbf2SDave Lee self.assertSuccess(error) 19299451b44SJordan Rupprecht offset += 4 19399451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 4) 19499451b44SJordan Rupprecht offset += 4 19599451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 19699451b44SJordan Rupprecht offset += 4 197*9c246882SJordan Rupprecht self.assertLess(fabs(data.GetFloat(error, offset) - 6), 1, "barfoo[1].c == 6") 198779bbbf2SDave Lee self.assertSuccess(error) 19999451b44SJordan Rupprecht 20099451b44SJordan Rupprecht new_object = barfoo.CreateValueFromData( 2012238dcc3SJonas Devlieghere "new_object", data, barfoo.GetType().GetBasicType(lldb.eBasicTypeInt) 2022238dcc3SJonas Devlieghere ) 2032238dcc3SJonas Devlieghere self.assertEqual(new_object.GetValue(), "1", "new_object == 1") 20499451b44SJordan Rupprecht 20599451b44SJordan Rupprecht if data.GetByteOrder() == lldb.eByteOrderBig: 20699451b44SJordan Rupprecht data.SetData( 2072238dcc3SJonas Devlieghere error, "\0\0\0A", data.GetByteOrder(), data.GetAddressByteSize() 2082238dcc3SJonas Devlieghere ) 20999451b44SJordan Rupprecht else: 21099451b44SJordan Rupprecht data.SetData( 2112238dcc3SJonas Devlieghere error, "A\0\0\0", data.GetByteOrder(), data.GetAddressByteSize() 2122238dcc3SJonas Devlieghere ) 213779bbbf2SDave Lee self.assertSuccess(error) 21499451b44SJordan Rupprecht 21599451b44SJordan Rupprecht data2 = lldb.SBData() 2162238dcc3SJonas Devlieghere data2.SetData(error, "BCD", data.GetByteOrder(), data.GetAddressByteSize()) 217779bbbf2SDave Lee self.assertSuccess(error) 21899451b44SJordan Rupprecht 21999451b44SJordan Rupprecht data.Append(data2) 22099451b44SJordan Rupprecht 22199451b44SJordan Rupprecht # this breaks on EBCDIC 22299451b44SJordan Rupprecht offset = 0 22399451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 65) 22499451b44SJordan Rupprecht offset += 4 22599451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 66) 22699451b44SJordan Rupprecht offset += 1 22799451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 67) 22899451b44SJordan Rupprecht offset += 1 22999451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 68) 23099451b44SJordan Rupprecht offset += 1 23199451b44SJordan Rupprecht 23299451b44SJordan Rupprecht # check the new API calls introduced per LLVM llvm.org/prenhancement request 23399451b44SJordan Rupprecht # 11619 (Allow creating SBData values from arrays or primitives in 23499451b44SJordan Rupprecht # Python) 23599451b44SJordan Rupprecht 23699451b44SJordan Rupprecht hello_str = "hello!" 23799451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromCString( 2382238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), hello_str 2392238dcc3SJonas Devlieghere ) 240619e2e09SDave Lee self.assertEqual(len(data2.uint8), len(hello_str)) 2412238dcc3SJonas Devlieghere self.assertEqual(data2.uint8[0], 104, "h == 104") 2422238dcc3SJonas Devlieghere self.assertEqual(data2.uint8[1], 101, "e == 101") 2432238dcc3SJonas Devlieghere self.assertEqual(data2.uint8[2], 108, "l == 108") 24499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 3, 108) # l 2452238dcc3SJonas Devlieghere self.assertEqual(data2.uint8[4], 111, "o == 111") 24699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 5, 33) # ! 24799451b44SJordan Rupprecht 24899451b44SJordan Rupprecht uint_lists = [[1, 2, 3, 4, 5], [int(i) for i in [1, 2, 3, 4, 5]]] 24999451b44SJordan Rupprecht int_lists = [[2, -2], [int(i) for i in [2, -2]]] 25099451b44SJordan Rupprecht 25199451b44SJordan Rupprecht for l in uint_lists: 25299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt64Array( 2532238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), l 2542238dcc3SJonas Devlieghere ) 25599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 0, 1) 25699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 8, 2) 25799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 16, 3) 25899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 24, 4) 25999451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 32, 5) 26099451b44SJordan Rupprecht 2611fb5c7a2SDave Lee self.assertEqual( 2622238dcc3SJonas Devlieghere data2.uint64s, 2632238dcc3SJonas Devlieghere [1, 2, 3, 4, 5], 2642238dcc3SJonas Devlieghere "read_data_helper failure: data2 == [1,2,3,4,5]", 2652238dcc3SJonas Devlieghere ) 26699451b44SJordan Rupprecht 26799451b44SJordan Rupprecht for l in int_lists: 26899451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt32Array( 2692238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), l 2702238dcc3SJonas Devlieghere ) 2712238dcc3SJonas Devlieghere self.assertEqual(data2.sint32[0:2], [2, -2], "signed32 data2 = [2,-2]") 27299451b44SJordan Rupprecht 27399451b44SJordan Rupprecht data2.Append( 27499451b44SJordan Rupprecht lldb.SBData.CreateDataFromSInt64Array( 2752238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), int_lists[0] 2762238dcc3SJonas Devlieghere ) 2772238dcc3SJonas Devlieghere ) 27899451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 0, 2) 27999451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 4, -2) 2802238dcc3SJonas Devlieghere self.assertEqual(data2.sint64[1:3], [2, -2], "signed64 data2 = [2,-2]") 28199451b44SJordan Rupprecht 28299451b44SJordan Rupprecht for l in int_lists: 28399451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt64Array( 2842238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), l 2852238dcc3SJonas Devlieghere ) 28699451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 0, 2) 28799451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 8, -2) 2882238dcc3SJonas Devlieghere self.assertEqual(data2.sint64[0:2], [2, -2], "signed64 data2 = [2,-2]") 28999451b44SJordan Rupprecht 29099451b44SJordan Rupprecht for l in uint_lists: 29199451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt32Array( 2922238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), l 2932238dcc3SJonas Devlieghere ) 29499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 0, 1) 29599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 4, 2) 29699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 8, 3) 29799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 12, 4) 29899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 16, 5) 29999451b44SJordan Rupprecht 30099451b44SJordan Rupprecht bool_list = [True, True, False, False, True, False] 30199451b44SJordan Rupprecht 30299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt32Array( 3032238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), bool_list 3042238dcc3SJonas Devlieghere ) 3051fb5c7a2SDave Lee self.assertEqual( 3062238dcc3SJonas Devlieghere data2.sint32[0:6], [1, 1, 0, 0, 1, 0], "signed32 data2 = [1, 1, 0, 0, 1, 0]" 3072238dcc3SJonas Devlieghere ) 30899451b44SJordan Rupprecht 30999451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt32Array( 3102238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), bool_list 3112238dcc3SJonas Devlieghere ) 3121fb5c7a2SDave Lee self.assertEqual( 3132238dcc3SJonas Devlieghere data2.uint32[0:6], 3142238dcc3SJonas Devlieghere [1, 1, 0, 0, 1, 0], 3152238dcc3SJonas Devlieghere "unsigned32 data2 = [1, 1, 0, 0, 1, 0]", 3162238dcc3SJonas Devlieghere ) 31799451b44SJordan Rupprecht 31899451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt64Array( 3192238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), bool_list 3202238dcc3SJonas Devlieghere ) 3211fb5c7a2SDave Lee self.assertEqual( 3222238dcc3SJonas Devlieghere data2.sint64[0:6], [1, 1, 0, 0, 1, 0], "signed64 data2 = [1, 1, 0, 0, 1, 0]" 3232238dcc3SJonas Devlieghere ) 32499451b44SJordan Rupprecht 32599451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt64Array( 3262238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), bool_list 3272238dcc3SJonas Devlieghere ) 3281fb5c7a2SDave Lee self.assertEqual( 3292238dcc3SJonas Devlieghere data2.uint64[0:6], [1, 1, 0, 0, 1, 0], "signed64 data2 = [1, 1, 0, 0, 1, 0]" 3302238dcc3SJonas Devlieghere ) 33199451b44SJordan Rupprecht 33299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromDoubleArray( 3332238dcc3SJonas Devlieghere process.GetByteOrder(), process.GetAddressByteSize(), [3.14, 6.28, 2.71] 3342238dcc3SJonas Devlieghere ) 335*9c246882SJordan Rupprecht self.assertLess( 336*9c246882SJordan Rupprecht fabs(data2.GetDouble(error, 0) - 3.14), 0.5, "double data2[0] = 3.14" 3372238dcc3SJonas Devlieghere ) 338779bbbf2SDave Lee self.assertSuccess(error) 339*9c246882SJordan Rupprecht self.assertLess( 340*9c246882SJordan Rupprecht fabs(data2.GetDouble(error, 8) - 6.28), 0.5, "double data2[1] = 6.28" 3412238dcc3SJonas Devlieghere ) 342779bbbf2SDave Lee self.assertSuccess(error) 343*9c246882SJordan Rupprecht self.assertLess( 344*9c246882SJordan Rupprecht fabs(data2.GetDouble(error, 16) - 2.71), 0.5, "double data2[2] = 2.71" 3452238dcc3SJonas Devlieghere ) 346779bbbf2SDave Lee self.assertSuccess(error) 34799451b44SJordan Rupprecht 34899451b44SJordan Rupprecht data2 = lldb.SBData() 34999451b44SJordan Rupprecht 35099451b44SJordan Rupprecht data2.SetDataFromCString(hello_str) 351619e2e09SDave Lee self.assertEqual(len(data2.uint8), len(hello_str)) 35299451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 0, 104) 35399451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 1, 101) 35499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 2, 108) 35599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 3, 108) 35699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 4, 111) 35799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 5, 33) 35899451b44SJordan Rupprecht 359984354fbSJorge Gorbe Moya data2.SetDataFromUInt64Array([1, 2, 3, 4, 5, 2**63]) 36099451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 0, 1) 36199451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 8, 2) 36299451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 16, 3) 36399451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 24, 4) 36499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 32, 5) 365984354fbSJorge Gorbe Moya self.assert_data(data2.GetUnsignedInt64, 40, 2**63) 36699451b44SJordan Rupprecht 3670ed758b2SDave Lee self.assertEqual( 3682238dcc3SJonas Devlieghere data2.uint64[0], 1, "read_data_helper failure: set data2[0] = 1" 3692238dcc3SJonas Devlieghere ) 3700ed758b2SDave Lee self.assertEqual( 3712238dcc3SJonas Devlieghere data2.uint64[1], 2, "read_data_helper failure: set data2[1] = 2" 3722238dcc3SJonas Devlieghere ) 3730ed758b2SDave Lee self.assertEqual( 3742238dcc3SJonas Devlieghere data2.uint64[2], 3, "read_data_helper failure: set data2[2] = 3" 3752238dcc3SJonas Devlieghere ) 3760ed758b2SDave Lee self.assertEqual( 3772238dcc3SJonas Devlieghere data2.uint64[3], 4, "read_data_helper failure: set data2[3] = 4" 3782238dcc3SJonas Devlieghere ) 3790ed758b2SDave Lee self.assertEqual( 3802238dcc3SJonas Devlieghere data2.uint64[4], 5, "read_data_helper failure: set data2[4] = 5" 3812238dcc3SJonas Devlieghere ) 38299451b44SJordan Rupprecht 383*9c246882SJordan Rupprecht self.assertEqual( 384*9c246882SJordan Rupprecht data2.uint64[0:2], 385*9c246882SJordan Rupprecht [1, 2], 3862238dcc3SJonas Devlieghere "read_data_helper failure: set data2[0:2] = [1,2]", 3872238dcc3SJonas Devlieghere ) 38899451b44SJordan Rupprecht 38999451b44SJordan Rupprecht data2.SetDataFromSInt32Array([2, -2]) 39099451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 0, 2) 39199451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 4, -2) 39299451b44SJordan Rupprecht 39399451b44SJordan Rupprecht data2.SetDataFromSInt64Array([2, -2]) 39499451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 0, 2) 39599451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 8, -2) 39699451b44SJordan Rupprecht 39799451b44SJordan Rupprecht data2.SetDataFromUInt32Array([1, 2, 3, 4, 5]) 39899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 0, 1) 39999451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 4, 2) 40099451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 8, 3) 40199451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 12, 4) 40299451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 16, 5) 40399451b44SJordan Rupprecht 4040ed758b2SDave Lee self.assertEqual( 4052238dcc3SJonas Devlieghere data2.uint32[0], 1, "read_data_helper failure: set 32-bit data2[0] = 1" 4062238dcc3SJonas Devlieghere ) 4070ed758b2SDave Lee self.assertEqual( 4082238dcc3SJonas Devlieghere data2.uint32[1], 2, "read_data_helper failure: set 32-bit data2[1] = 2" 4092238dcc3SJonas Devlieghere ) 4100ed758b2SDave Lee self.assertEqual( 4112238dcc3SJonas Devlieghere data2.uint32[2], 3, "read_data_helper failure: set 32-bit data2[2] = 3" 4122238dcc3SJonas Devlieghere ) 4130ed758b2SDave Lee self.assertEqual( 4142238dcc3SJonas Devlieghere data2.uint32[3], 4, "read_data_helper failure: set 32-bit data2[3] = 4" 4152238dcc3SJonas Devlieghere ) 4160ed758b2SDave Lee self.assertEqual( 4172238dcc3SJonas Devlieghere data2.uint32[4], 5, "read_data_helper failure: set 32-bit data2[4] = 5" 4182238dcc3SJonas Devlieghere ) 41999451b44SJordan Rupprecht 42099451b44SJordan Rupprecht data2.SetDataFromDoubleArray([3.14, 6.28, 2.71]) 421*9c246882SJordan Rupprecht self.assertLess( 422*9c246882SJordan Rupprecht fabs(data2.GetDouble(error, 0) - 3.14), 0.5, "set double data2[0] = 3.14" 4232238dcc3SJonas Devlieghere ) 424*9c246882SJordan Rupprecht self.assertLess( 425*9c246882SJordan Rupprecht fabs(data2.GetDouble(error, 8) - 6.28), 0.5, "set double data2[1] = 6.28" 4262238dcc3SJonas Devlieghere ) 427*9c246882SJordan Rupprecht self.assertLess( 428*9c246882SJordan Rupprecht fabs(data2.GetDouble(error, 16) - 2.71), 0.5, "set double data2[2] = 2.71" 4292238dcc3SJonas Devlieghere ) 43099451b44SJordan Rupprecht 431*9c246882SJordan Rupprecht self.assertLess( 432*9c246882SJordan Rupprecht fabs(data2.double[0] - 3.14), 433*9c246882SJordan Rupprecht 0.5, 4342238dcc3SJonas Devlieghere "read_data_helper failure: set double data2[0] = 3.14", 4352238dcc3SJonas Devlieghere ) 436*9c246882SJordan Rupprecht self.assertLess( 437*9c246882SJordan Rupprecht fabs(data2.double[1] - 6.28), 438*9c246882SJordan Rupprecht 0.5, 4392238dcc3SJonas Devlieghere "read_data_helper failure: set double data2[1] = 6.28", 4402238dcc3SJonas Devlieghere ) 441*9c246882SJordan Rupprecht self.assertLess( 442*9c246882SJordan Rupprecht fabs(data2.double[2] - 2.71), 443*9c246882SJordan Rupprecht 0.5, 4442238dcc3SJonas Devlieghere "read_data_helper failure: set double data2[2] = 2.71", 4452238dcc3SJonas Devlieghere ) 44699451b44SJordan Rupprecht 44799451b44SJordan Rupprecht def assert_data(self, func, arg, expected): 44899451b44SJordan Rupprecht """Asserts func(SBError error, arg) == expected.""" 44999451b44SJordan Rupprecht error = lldb.SBError() 45099451b44SJordan Rupprecht result = func(error, arg) 45199451b44SJordan Rupprecht if not error.Success(): 45299451b44SJordan Rupprecht stream = lldb.SBStream() 45399451b44SJordan Rupprecht error.GetDescription(stream) 45499451b44SJordan Rupprecht self.assertTrue( 4552238dcc3SJonas Devlieghere error.Success(), 4562238dcc3SJonas Devlieghere "%s(error, %s) did not succeed: %s" 4572238dcc3SJonas Devlieghere % (func.__name__, arg, stream.GetData()), 4582238dcc3SJonas Devlieghere ) 459*9c246882SJordan Rupprecht self.assertEqual( 460*9c246882SJordan Rupprecht expected, 461*9c246882SJordan Rupprecht result, 4622238dcc3SJonas Devlieghere "%s(error, %s) == %s != %s" % (func.__name__, arg, result, expected), 4632238dcc3SJonas Devlieghere ) 464