18567f4d4SMichał Górnyfrom __future__ import print_function 28567f4d4SMichał Górnyimport lldb 38567f4d4SMichał Górnyfrom lldbsuite.test.lldbtest import * 48567f4d4SMichał Górnyfrom lldbsuite.test.decorators import * 5*33c0f93fSPavel Labathfrom lldbsuite.test.gdbclientutils import * 6*33c0f93fSPavel Labathfrom lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 78567f4d4SMichał Górny 88567f4d4SMichał Górny 98567f4d4SMichał Górnyclass TestGDBServerTargetXML(GDBRemoteTestBase): 10*33c0f93fSPavel Labath 118567f4d4SMichał Górny @skipIfXmlSupportMissing 128567f4d4SMichał Górny @skipIfRemote 138567f4d4SMichał Górny @skipIfLLVMTargetMissing("X86") 148567f4d4SMichał Górny def test_x86_64_regs(self): 158567f4d4SMichał Górny """Test grabbing various x86_64 registers from gdbserver.""" 168567f4d4SMichał Górny class MyResponder(MockGDBServerResponder): 17e7418906SMichał Górny reg_data = ( 18e7418906SMichał Górny "0102030405060708" # rcx 19e7418906SMichał Górny "1112131415161718" # rdx 20e7418906SMichał Górny "2122232425262728" # rsi 21e7418906SMichał Górny "3132333435363738" # rdi 22e7418906SMichał Górny "4142434445464748" # rbp 23e7418906SMichał Górny "5152535455565758" # rsp 24e7418906SMichał Górny "6162636465666768" # r8 25e7418906SMichał Górny "7172737475767778" # r9 26e7418906SMichał Górny "8182838485868788" # rip 27e7418906SMichał Górny "91929394" # eflags 28e7418906SMichał Górny "0102030405060708090a" # st0 29e7418906SMichał Górny "1112131415161718191a" # st1 30e7418906SMichał Górny ) + 6 * ( 31e7418906SMichał Górny "2122232425262728292a" # st2..st7 32e7418906SMichał Górny ) + ( 33e7418906SMichał Górny "8182838485868788898a8b8c8d8e8f90" # xmm0 34e7418906SMichał Górny "9192939495969798999a9b9c9d9e9fa0" # xmm1 35e7418906SMichał Górny ) + 14 * ( 36e7418906SMichał Górny "a1a2a3a4a5a6a7a8a9aaabacadaeafb0" # xmm2..xmm15 37e7418906SMichał Górny ) + ( 38e7418906SMichał Górny "00000000" # mxcsr 39e7418906SMichał Górny ) + ( 40e7418906SMichał Górny "b1b2b3b4b5b6b7b8b9babbbcbdbebfc0" # ymm0h 41e7418906SMichał Górny "c1c2c3c4c5c6c7c8c9cacbcccdcecfd0" # ymm1h 42e7418906SMichał Górny ) + 14 * ( 43e7418906SMichał Górny "d1d2d3d4d5d6d7d8d9dadbdcdddedfe0" # ymm2h..ymm15h 44e7418906SMichał Górny ) 45e7418906SMichał Górny 468567f4d4SMichał Górny def qXferRead(self, obj, annex, offset, length): 478567f4d4SMichał Górny if annex == "target.xml": 488567f4d4SMichał Górny return """<?xml version="1.0"?> 498567f4d4SMichał Górny <!DOCTYPE feature SYSTEM "gdb-target.dtd"> 508567f4d4SMichał Górny <target> 518567f4d4SMichał Górny <architecture>i386:x86-64</architecture> 528567f4d4SMichał Górny <osabi>GNU/Linux</osabi> 538567f4d4SMichał Górny <feature name="org.gnu.gdb.i386.core"> 548567f4d4SMichał Górny <reg name="rcx" bitsize="64" type="int64" regnum="2"/> 558567f4d4SMichał Górny <reg name="rdx" bitsize="64" type="int64" regnum="3"/> 568567f4d4SMichał Górny <reg name="rsi" bitsize="64" type="int64" regnum="4"/> 578567f4d4SMichał Górny <reg name="rdi" bitsize="64" type="int64" regnum="5"/> 588567f4d4SMichał Górny <reg name="rbp" bitsize="64" type="data_ptr" regnum="6"/> 598567f4d4SMichał Górny <reg name="rsp" bitsize="64" type="data_ptr" regnum="7"/> 608567f4d4SMichał Górny <reg name="r8" bitsize="64" type="int64" regnum="8"/> 618567f4d4SMichał Górny <reg name="r9" bitsize="64" type="int64" regnum="9"/> 628567f4d4SMichał Górny <reg name="rip" bitsize="64" type="code_ptr" regnum="16"/> 638567f4d4SMichał Górny <reg name="eflags" bitsize="32" type="i386_eflags" regnum="17"/> 648567f4d4SMichał Górny <reg name="st0" bitsize="80" type="i387_ext" regnum="24"/> 658567f4d4SMichał Górny <reg name="st1" bitsize="80" type="i387_ext" regnum="25"/> 668567f4d4SMichał Górny <reg name="st2" bitsize="80" type="i387_ext" regnum="26"/> 678567f4d4SMichał Górny <reg name="st3" bitsize="80" type="i387_ext" regnum="27"/> 688567f4d4SMichał Górny <reg name="st4" bitsize="80" type="i387_ext" regnum="28"/> 698567f4d4SMichał Górny <reg name="st5" bitsize="80" type="i387_ext" regnum="29"/> 708567f4d4SMichał Górny <reg name="st6" bitsize="80" type="i387_ext" regnum="30"/> 718567f4d4SMichał Górny <reg name="st7" bitsize="80" type="i387_ext" regnum="31"/> 728567f4d4SMichał Górny </feature> 738567f4d4SMichał Górny <feature name="org.gnu.gdb.i386.sse"> 748567f4d4SMichał Górny <reg name="xmm0" bitsize="128" type="vec128" regnum="40"/> 758567f4d4SMichał Górny <reg name="xmm1" bitsize="128" type="vec128" regnum="41"/> 768567f4d4SMichał Górny <reg name="xmm2" bitsize="128" type="vec128" regnum="42"/> 778567f4d4SMichał Górny <reg name="xmm3" bitsize="128" type="vec128" regnum="43"/> 788567f4d4SMichał Górny <reg name="xmm4" bitsize="128" type="vec128" regnum="44"/> 798567f4d4SMichał Górny <reg name="xmm5" bitsize="128" type="vec128" regnum="45"/> 808567f4d4SMichał Górny <reg name="xmm6" bitsize="128" type="vec128" regnum="46"/> 818567f4d4SMichał Górny <reg name="xmm7" bitsize="128" type="vec128" regnum="47"/> 828567f4d4SMichał Górny <reg name="xmm8" bitsize="128" type="vec128" regnum="48"/> 838567f4d4SMichał Górny <reg name="xmm9" bitsize="128" type="vec128" regnum="49"/> 848567f4d4SMichał Górny <reg name="xmm10" bitsize="128" type="vec128" regnum="50"/> 858567f4d4SMichał Górny <reg name="xmm11" bitsize="128" type="vec128" regnum="51"/> 868567f4d4SMichał Górny <reg name="xmm12" bitsize="128" type="vec128" regnum="52"/> 878567f4d4SMichał Górny <reg name="xmm13" bitsize="128" type="vec128" regnum="53"/> 888567f4d4SMichał Górny <reg name="xmm14" bitsize="128" type="vec128" regnum="54"/> 898567f4d4SMichał Górny <reg name="xmm15" bitsize="128" type="vec128" regnum="55"/> 908567f4d4SMichał Górny <reg name="mxcsr" bitsize="32" type="i386_mxcsr" regnum="56" group="vector"/> 918567f4d4SMichał Górny </feature> 928567f4d4SMichał Górny <feature name="org.gnu.gdb.i386.avx"> 938567f4d4SMichał Górny <reg name="ymm0h" bitsize="128" type="uint128" regnum="60"/> 948567f4d4SMichał Górny <reg name="ymm1h" bitsize="128" type="uint128" regnum="61"/> 958567f4d4SMichał Górny <reg name="ymm2h" bitsize="128" type="uint128" regnum="62"/> 968567f4d4SMichał Górny <reg name="ymm3h" bitsize="128" type="uint128" regnum="63"/> 978567f4d4SMichał Górny <reg name="ymm4h" bitsize="128" type="uint128" regnum="64"/> 988567f4d4SMichał Górny <reg name="ymm5h" bitsize="128" type="uint128" regnum="65"/> 998567f4d4SMichał Górny <reg name="ymm6h" bitsize="128" type="uint128" regnum="66"/> 1008567f4d4SMichał Górny <reg name="ymm7h" bitsize="128" type="uint128" regnum="67"/> 1018567f4d4SMichał Górny <reg name="ymm8h" bitsize="128" type="uint128" regnum="68"/> 1028567f4d4SMichał Górny <reg name="ymm9h" bitsize="128" type="uint128" regnum="69"/> 1038567f4d4SMichał Górny <reg name="ymm10h" bitsize="128" type="uint128" regnum="70"/> 1048567f4d4SMichał Górny <reg name="ymm11h" bitsize="128" type="uint128" regnum="71"/> 1058567f4d4SMichał Górny <reg name="ymm12h" bitsize="128" type="uint128" regnum="72"/> 1068567f4d4SMichał Górny <reg name="ymm13h" bitsize="128" type="uint128" regnum="73"/> 1078567f4d4SMichał Górny <reg name="ymm14h" bitsize="128" type="uint128" regnum="74"/> 1088567f4d4SMichał Górny <reg name="ymm15h" bitsize="128" type="uint128" regnum="75"/> 1098567f4d4SMichał Górny </feature> 1108567f4d4SMichał Górny </target>""", False 1118567f4d4SMichał Górny else: 1128567f4d4SMichał Górny return None, False 1138567f4d4SMichał Górny 1148567f4d4SMichał Górny def readRegister(self, regnum): 1158567f4d4SMichał Górny return "" 1168567f4d4SMichał Górny 1178567f4d4SMichał Górny def readRegisters(self): 118e7418906SMichał Górny return self.reg_data 1198567f4d4SMichał Górny 1208567f4d4SMichał Górny def writeRegisters(self, reg_hex): 121e7418906SMichał Górny self.reg_data = reg_hex 1228567f4d4SMichał Górny return "OK" 1238567f4d4SMichał Górny 1248567f4d4SMichał Górny def haltReason(self): 1258567f4d4SMichał Górny return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;" 1268567f4d4SMichał Górny 1278567f4d4SMichał Górny self.server.responder = MyResponder() 1288567f4d4SMichał Górny 1298567f4d4SMichał Górny target = self.createTarget("basic_eh_frame.yaml") 1308567f4d4SMichał Górny process = self.connect(target) 1318567f4d4SMichał Górny lldbutil.expect_state_changes(self, self.dbg.GetListener(), process, 1328567f4d4SMichał Górny [lldb.eStateStopped]) 1338567f4d4SMichał Górny 1348567f4d4SMichał Górny # test generic aliases 1358567f4d4SMichał Górny self.match("register read arg4", 1368567f4d4SMichał Górny ["rcx = 0x0807060504030201"]) 1378567f4d4SMichał Górny self.match("register read arg3", 1388567f4d4SMichał Górny ["rdx = 0x1817161514131211"]) 1398567f4d4SMichał Górny self.match("register read arg2", 1408567f4d4SMichał Górny ["rsi = 0x2827262524232221"]) 1418567f4d4SMichał Górny self.match("register read arg1", 1428567f4d4SMichał Górny ["rdi = 0x3837363534333231"]) 1438567f4d4SMichał Górny self.match("register read fp", 1448567f4d4SMichał Górny ["rbp = 0x4847464544434241"]) 1458567f4d4SMichał Górny self.match("register read sp", 1468567f4d4SMichał Górny ["rsp = 0x5857565554535251"]) 1478567f4d4SMichał Górny self.match("register read arg5", 1488567f4d4SMichał Górny ["r8 = 0x6867666564636261"]) 1498567f4d4SMichał Górny self.match("register read arg6", 1508567f4d4SMichał Górny ["r9 = 0x7877767574737271"]) 1518567f4d4SMichał Górny self.match("register read pc", 1528567f4d4SMichał Górny ["rip = 0x8887868584838281"]) 1538567f4d4SMichał Górny self.match("register read flags", 1548567f4d4SMichał Górny ["eflags = 0x94939291"]) 15566249323SMichał Górny 156bda5fe8fSMichał Górny # both stX and xmmX should be displayed as vectors 157bda5fe8fSMichał Górny self.match("register read st0", 158bda5fe8fSMichał Górny ["st0 = {0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a}"]) 159bda5fe8fSMichał Górny self.match("register read st1", 160bda5fe8fSMichał Górny ["st1 = {0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a}"]) 161bda5fe8fSMichał Górny self.match("register read xmm0", 162bda5fe8fSMichał Górny ["xmm0 = {0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 " 163bda5fe8fSMichał Górny "0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90}"]) 164bda5fe8fSMichał Górny self.match("register read xmm1", 165bda5fe8fSMichał Górny ["xmm1 = {0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 " 166bda5fe8fSMichał Górny "0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f 0xa0}"]) 167bda5fe8fSMichał Górny 1682712d181SMichał Górny # test pseudo-registers 1692712d181SMichał Górny self.filecheck("register read --all", 1702712d181SMichał Górny os.path.join(os.path.dirname(__file__), 1712712d181SMichał Górny "amd64-partial-regs.FileCheck")) 1722712d181SMichał Górny 1732712d181SMichał Górny # test writing into pseudo-registers 1742712d181SMichał Górny self.runCmd("register write ecx 0xfffefdfc") 1752712d181SMichał Górny self.match("register read rcx", 1762712d181SMichał Górny ["rcx = 0x08070605fffefdfc"]) 1772712d181SMichał Górny 1782712d181SMichał Górny self.runCmd("register write cx 0xfbfa") 1792712d181SMichał Górny self.match("register read ecx", 1802712d181SMichał Górny ["ecx = 0xfffefbfa"]) 1812712d181SMichał Górny self.match("register read rcx", 1822712d181SMichał Górny ["rcx = 0x08070605fffefbfa"]) 1832712d181SMichał Górny 1842712d181SMichał Górny self.runCmd("register write ch 0xf9") 1852712d181SMichał Górny self.match("register read cx", 1862712d181SMichał Górny ["cx = 0xf9fa"]) 1872712d181SMichał Górny self.match("register read ecx", 1882712d181SMichał Górny ["ecx = 0xfffef9fa"]) 1892712d181SMichał Górny self.match("register read rcx", 1902712d181SMichał Górny ["rcx = 0x08070605fffef9fa"]) 1912712d181SMichał Górny 1922712d181SMichał Górny self.runCmd("register write cl 0xf8") 1932712d181SMichał Górny self.match("register read cx", 1942712d181SMichał Górny ["cx = 0xf9f8"]) 1952712d181SMichał Górny self.match("register read ecx", 1962712d181SMichał Górny ["ecx = 0xfffef9f8"]) 1972712d181SMichał Górny self.match("register read rcx", 1982712d181SMichał Górny ["rcx = 0x08070605fffef9f8"]) 1992712d181SMichał Górny 2002712d181SMichał Górny self.runCmd("register write mm0 0xfffefdfcfbfaf9f8") 2012712d181SMichał Górny self.match("register read st0", 2022712d181SMichał Górny ["st0 = {0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff 0x09 0x0a}"]) 2032712d181SMichał Górny 204f290efc3SMichał Górny self.runCmd("register write xmm0 \"{0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 " 205f290efc3SMichał Górny "0xf8 0xf7 0xf6 0xf5 0xf4 0xf3 0xf2 0xf1 0xf0}\"") 206f290efc3SMichał Górny self.match("register read ymm0", 207f290efc3SMichał Górny ["ymm0 = {0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 " 208f290efc3SMichał Górny "0xf5 0xf4 0xf3 0xf2 0xf1 0xf0 0xb1 0xb2 0xb3 0xb4 0xb5 " 209f290efc3SMichał Górny "0xb6 0xb7 0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0}"]) 210f290efc3SMichał Górny 211f290efc3SMichał Górny self.runCmd("register write ymm0h \"{0xef 0xee 0xed 0xec 0xeb 0xea 0xe9 " 212f290efc3SMichał Górny "0xe8 0xe7 0xe6 0xe5 0xe4 0xe3 0xe2 0xe1 0xe0}\"") 213f290efc3SMichał Górny self.match("register read ymm0", 214f290efc3SMichał Górny ["ymm0 = {0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 " 215f290efc3SMichał Górny "0xf5 0xf4 0xf3 0xf2 0xf1 0xf0 0xef 0xee 0xed 0xec 0xeb " 216f290efc3SMichał Górny "0xea 0xe9 0xe8 0xe7 0xe6 0xe5 0xe4 0xe3 0xe2 0xe1 0xe0}"]) 217f290efc3SMichał Górny 218f290efc3SMichał Górny self.runCmd("register write ymm0 \"{0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 " 219f290efc3SMichał Górny "0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 " 220f290efc3SMichał Górny "0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec " 221f290efc3SMichał Górny "0xed 0xee 0xef}\"") 222f290efc3SMichał Górny self.match("register read ymm0", 223f290efc3SMichał Górny ["ymm0 = {0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 " 224f290efc3SMichał Górny "0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 0xe2 0xe3 0xe4 " 225f290efc3SMichał Górny "0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef}"]) 226f290efc3SMichał Górny 22766249323SMichał Górny @skipIfXmlSupportMissing 22866249323SMichał Górny @skipIfRemote 22966249323SMichał Górny @skipIfLLVMTargetMissing("X86") 23066249323SMichał Górny def test_i386_regs(self): 23166249323SMichał Górny """Test grabbing various i386 registers from gdbserver.""" 23266249323SMichał Górny class MyResponder(MockGDBServerResponder): 233e7418906SMichał Górny reg_data = ( 234e7418906SMichał Górny "01020304" # eax 235e7418906SMichał Górny "11121314" # ecx 236e7418906SMichał Górny "21222324" # edx 237e7418906SMichał Górny "31323334" # ebx 238e7418906SMichał Górny "41424344" # esp 239e7418906SMichał Górny "51525354" # ebp 240e7418906SMichał Górny "61626364" # esi 241e7418906SMichał Górny "71727374" # edi 242e7418906SMichał Górny "81828384" # eip 243e7418906SMichał Górny "91929394" # eflags 244e7418906SMichał Górny "0102030405060708090a" # st0 245e7418906SMichał Górny "1112131415161718191a" # st1 246e7418906SMichał Górny ) + 6 * ( 247e7418906SMichał Górny "2122232425262728292a" # st2..st7 248e7418906SMichał Górny ) + ( 249e7418906SMichał Górny "8182838485868788898a8b8c8d8e8f90" # xmm0 250e7418906SMichał Górny "9192939495969798999a9b9c9d9e9fa0" # xmm1 251e7418906SMichał Górny ) + 6 * ( 252e7418906SMichał Górny "a1a2a3a4a5a6a7a8a9aaabacadaeafb0" # xmm2..xmm7 253e7418906SMichał Górny ) + ( 254e7418906SMichał Górny "00000000" # mxcsr 255e7418906SMichał Górny ) + ( 256e7418906SMichał Górny "b1b2b3b4b5b6b7b8b9babbbcbdbebfc0" # ymm0h 257e7418906SMichał Górny "c1c2c3c4c5c6c7c8c9cacbcccdcecfd0" # ymm1h 258e7418906SMichał Górny ) + 6 * ( 259e7418906SMichał Górny "d1d2d3d4d5d6d7d8d9dadbdcdddedfe0" # ymm2h..ymm7h 260e7418906SMichał Górny ) 261e7418906SMichał Górny 26266249323SMichał Górny def qXferRead(self, obj, annex, offset, length): 26366249323SMichał Górny if annex == "target.xml": 26466249323SMichał Górny return """<?xml version="1.0"?> 26566249323SMichał Górny <!DOCTYPE feature SYSTEM "gdb-target.dtd"> 26666249323SMichał Górny <target> 26766249323SMichał Górny <architecture>i386</architecture> 26866249323SMichał Górny <osabi>GNU/Linux</osabi> 26966249323SMichał Górny <feature name="org.gnu.gdb.i386.core"> 27066249323SMichał Górny <reg name="eax" bitsize="32" type="int32" regnum="0"/> 27166249323SMichał Górny <reg name="ecx" bitsize="32" type="int32" regnum="1"/> 27266249323SMichał Górny <reg name="edx" bitsize="32" type="int32" regnum="2"/> 27366249323SMichał Górny <reg name="ebx" bitsize="32" type="int32" regnum="3"/> 27466249323SMichał Górny <reg name="esp" bitsize="32" type="data_ptr" regnum="4"/> 27566249323SMichał Górny <reg name="ebp" bitsize="32" type="data_ptr" regnum="5"/> 27666249323SMichał Górny <reg name="esi" bitsize="32" type="int32" regnum="6"/> 27766249323SMichał Górny <reg name="edi" bitsize="32" type="int32" regnum="7"/> 27866249323SMichał Górny <reg name="eip" bitsize="32" type="code_ptr" regnum="8"/> 27966249323SMichał Górny <reg name="eflags" bitsize="32" type="i386_eflags" regnum="9"/> 28066249323SMichał Górny <reg name="st0" bitsize="80" type="i387_ext" regnum="16"/> 28166249323SMichał Górny <reg name="st1" bitsize="80" type="i387_ext" regnum="17"/> 28266249323SMichał Górny <reg name="st2" bitsize="80" type="i387_ext" regnum="18"/> 28366249323SMichał Górny <reg name="st3" bitsize="80" type="i387_ext" regnum="19"/> 28466249323SMichał Górny <reg name="st4" bitsize="80" type="i387_ext" regnum="20"/> 28566249323SMichał Górny <reg name="st5" bitsize="80" type="i387_ext" regnum="21"/> 28666249323SMichał Górny <reg name="st6" bitsize="80" type="i387_ext" regnum="22"/> 28766249323SMichał Górny <reg name="st7" bitsize="80" type="i387_ext" regnum="23"/> 28866249323SMichał Górny </feature> 28966249323SMichał Górny <feature name="org.gnu.gdb.i386.sse"> 29066249323SMichał Górny <reg name="xmm0" bitsize="128" type="vec128" regnum="32"/> 29166249323SMichał Górny <reg name="xmm1" bitsize="128" type="vec128" regnum="33"/> 29266249323SMichał Górny <reg name="xmm2" bitsize="128" type="vec128" regnum="34"/> 29366249323SMichał Górny <reg name="xmm3" bitsize="128" type="vec128" regnum="35"/> 29466249323SMichał Górny <reg name="xmm4" bitsize="128" type="vec128" regnum="36"/> 29566249323SMichał Górny <reg name="xmm5" bitsize="128" type="vec128" regnum="37"/> 29666249323SMichał Górny <reg name="xmm6" bitsize="128" type="vec128" regnum="38"/> 29766249323SMichał Górny <reg name="xmm7" bitsize="128" type="vec128" regnum="39"/> 29866249323SMichał Górny <reg name="mxcsr" bitsize="32" type="i386_mxcsr" regnum="40" group="vector"/> 29966249323SMichał Górny </feature> 30066249323SMichał Górny <feature name="org.gnu.gdb.i386.avx"> 30166249323SMichał Górny <reg name="ymm0h" bitsize="128" type="uint128" regnum="42"/> 30266249323SMichał Górny <reg name="ymm1h" bitsize="128" type="uint128" regnum="43"/> 30366249323SMichał Górny <reg name="ymm2h" bitsize="128" type="uint128" regnum="44"/> 30466249323SMichał Górny <reg name="ymm3h" bitsize="128" type="uint128" regnum="45"/> 30566249323SMichał Górny <reg name="ymm4h" bitsize="128" type="uint128" regnum="46"/> 30666249323SMichał Górny <reg name="ymm5h" bitsize="128" type="uint128" regnum="47"/> 30766249323SMichał Górny <reg name="ymm6h" bitsize="128" type="uint128" regnum="48"/> 30866249323SMichał Górny <reg name="ymm7h" bitsize="128" type="uint128" regnum="49"/> 30966249323SMichał Górny </feature> 31066249323SMichał Górny </target>""", False 31166249323SMichał Górny else: 31266249323SMichał Górny return None, False 31366249323SMichał Górny 31466249323SMichał Górny def readRegister(self, regnum): 31566249323SMichał Górny return "" 31666249323SMichał Górny 31766249323SMichał Górny def readRegisters(self): 318e7418906SMichał Górny return self.reg_data 31966249323SMichał Górny 32066249323SMichał Górny def writeRegisters(self, reg_hex): 321e7418906SMichał Górny self.reg_data = reg_hex 32266249323SMichał Górny return "OK" 32366249323SMichał Górny 32466249323SMichał Górny def haltReason(self): 32566249323SMichał Górny return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;" 32666249323SMichał Górny 32766249323SMichał Górny self.server.responder = MyResponder() 32866249323SMichał Górny 32966249323SMichał Górny target = self.createTarget("basic_eh_frame-i386.yaml") 33066249323SMichał Górny process = self.connect(target) 33166249323SMichał Górny lldbutil.expect_state_changes(self, self.dbg.GetListener(), process, 33266249323SMichał Górny [lldb.eStateStopped]) 33366249323SMichał Górny 33466249323SMichał Górny # test generic aliases 33566249323SMichał Górny self.match("register read fp", 33666249323SMichał Górny ["ebp = 0x54535251"]) 3372712d181SMichał Górny self.match("register read sp", 3382712d181SMichał Górny ["esp = 0x44434241"]) 33966249323SMichał Górny self.match("register read pc", 34066249323SMichał Górny ["eip = 0x84838281"]) 34166249323SMichał Górny self.match("register read flags", 34266249323SMichał Górny ["eflags = 0x94939291"]) 34366249323SMichał Górny 3442712d181SMichał Górny # test pseudo-registers 3452712d181SMichał Górny self.match("register read cx", 3462712d181SMichał Górny ["cx = 0x1211"]) 3472712d181SMichał Górny self.match("register read ch", 3482712d181SMichał Górny ["ch = 0x12"]) 3492712d181SMichał Górny self.match("register read cl", 3502712d181SMichał Górny ["cl = 0x11"]) 3512712d181SMichał Górny self.match("register read mm0", 3522712d181SMichał Górny ["mm0 = 0x0807060504030201"]) 3532712d181SMichał Górny self.match("register read mm1", 3542712d181SMichał Górny ["mm1 = 0x1817161514131211"]) 3552712d181SMichał Górny 356bda5fe8fSMichał Górny # both stX and xmmX should be displayed as vectors 357bda5fe8fSMichał Górny self.match("register read st0", 358bda5fe8fSMichał Górny ["st0 = {0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a}"]) 359bda5fe8fSMichał Górny self.match("register read st1", 360bda5fe8fSMichał Górny ["st1 = {0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a}"]) 361bda5fe8fSMichał Górny self.match("register read xmm0", 362bda5fe8fSMichał Górny ["xmm0 = {0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 " 363bda5fe8fSMichał Górny "0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90}"]) 364bda5fe8fSMichał Górny self.match("register read xmm1", 365bda5fe8fSMichał Górny ["xmm1 = {0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 " 366bda5fe8fSMichał Górny "0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f 0xa0}"]) 367bda5fe8fSMichał Górny 3682712d181SMichał Górny # test writing into pseudo-registers 3692712d181SMichał Górny self.runCmd("register write cx 0xfbfa") 3702712d181SMichał Górny self.match("register read ecx", 3712712d181SMichał Górny ["ecx = 0x1413fbfa"]) 3722712d181SMichał Górny 3732712d181SMichał Górny self.runCmd("register write ch 0xf9") 3742712d181SMichał Górny self.match("register read cx", 3752712d181SMichał Górny ["cx = 0xf9fa"]) 3762712d181SMichał Górny self.match("register read ecx", 3772712d181SMichał Górny ["ecx = 0x1413f9fa"]) 3782712d181SMichał Górny 3792712d181SMichał Górny self.runCmd("register write cl 0xf8") 3802712d181SMichał Górny self.match("register read cx", 3812712d181SMichał Górny ["cx = 0xf9f8"]) 3822712d181SMichał Górny self.match("register read ecx", 3832712d181SMichał Górny ["ecx = 0x1413f9f8"]) 3842712d181SMichał Górny 3852712d181SMichał Górny self.runCmd("register write mm0 0xfffefdfcfbfaf9f8") 3862712d181SMichał Górny self.match("register read st0", 3872712d181SMichał Górny ["st0 = {0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff 0x09 0x0a}"]) 3882712d181SMichał Górny 389f290efc3SMichał Górny self.runCmd("register write xmm0 \"{0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 " 390f290efc3SMichał Górny "0xf8 0xf7 0xf6 0xf5 0xf4 0xf3 0xf2 0xf1 0xf0}\"") 391f290efc3SMichał Górny self.match("register read ymm0", 392f290efc3SMichał Górny ["ymm0 = {0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 " 393f290efc3SMichał Górny "0xf5 0xf4 0xf3 0xf2 0xf1 0xf0 0xb1 0xb2 0xb3 0xb4 0xb5 " 394f290efc3SMichał Górny "0xb6 0xb7 0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0}"]) 395f290efc3SMichał Górny 396f290efc3SMichał Górny self.runCmd("register write ymm0h \"{0xef 0xee 0xed 0xec 0xeb 0xea 0xe9 " 397f290efc3SMichał Górny "0xe8 0xe7 0xe6 0xe5 0xe4 0xe3 0xe2 0xe1 0xe0}\"") 398f290efc3SMichał Górny self.match("register read ymm0", 399f290efc3SMichał Górny ["ymm0 = {0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 " 400f290efc3SMichał Górny "0xf5 0xf4 0xf3 0xf2 0xf1 0xf0 0xef 0xee 0xed 0xec 0xeb " 401f290efc3SMichał Górny "0xea 0xe9 0xe8 0xe7 0xe6 0xe5 0xe4 0xe3 0xe2 0xe1 0xe0}"]) 402f290efc3SMichał Górny 403f290efc3SMichał Górny self.runCmd("register write ymm0 \"{0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 " 404f290efc3SMichał Górny "0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 " 405f290efc3SMichał Górny "0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec " 406f290efc3SMichał Górny "0xed 0xee 0xef}\"") 407f290efc3SMichał Górny self.match("register read ymm0", 408f290efc3SMichał Górny ["ymm0 = {0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 " 409f290efc3SMichał Górny "0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 0xe2 0xe3 0xe4 " 410f290efc3SMichał Górny "0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef}"]) 411f290efc3SMichał Górny 41266249323SMichał Górny @skipIfXmlSupportMissing 41366249323SMichał Górny @skipIfRemote 41466249323SMichał Górny @skipIfLLVMTargetMissing("AArch64") 41566249323SMichał Górny def test_aarch64_regs(self): 41666249323SMichał Górny """Test grabbing various aarch64 registers from gdbserver.""" 41766249323SMichał Górny class MyResponder(MockGDBServerResponder): 418583f67cbSMichał Górny reg_data = ( 419583f67cbSMichał Górny "0102030405060708" # x0 420583f67cbSMichał Górny "1112131415161718" # x1 421583f67cbSMichał Górny ) + 27 * ( 422583f67cbSMichał Górny "2122232425262728" # x2..x28 423583f67cbSMichał Górny ) + ( 424583f67cbSMichał Górny "3132333435363738" # x29 (fp) 425583f67cbSMichał Górny "4142434445464748" # x30 (lr) 426583f67cbSMichał Górny "5152535455565758" # x31 (sp) 427583f67cbSMichał Górny "6162636465666768" # pc 428583f67cbSMichał Górny "71727374" # cpsr 429583f67cbSMichał Górny "8182838485868788898a8b8c8d8e8f90" # v0 430583f67cbSMichał Górny "9192939495969798999a9b9c9d9e9fa0" # v1 431583f67cbSMichał Górny ) + 30 * ( 432583f67cbSMichał Górny "a1a2a3a4a5a6a7a8a9aaabacadaeafb0" # v2..v31 433583f67cbSMichał Górny ) + ( 434583f67cbSMichał Górny "00000000" # fpsr 435583f67cbSMichał Górny "00000000" # fpcr 436583f67cbSMichał Górny ) 437583f67cbSMichał Górny 43866249323SMichał Górny def qXferRead(self, obj, annex, offset, length): 43966249323SMichał Górny if annex == "target.xml": 44066249323SMichał Górny return """<?xml version="1.0"?> 44166249323SMichał Górny <!DOCTYPE feature SYSTEM "gdb-target.dtd"> 44266249323SMichał Górny <target> 44366249323SMichał Górny <architecture>aarch64</architecture> 44466249323SMichał Górny <feature name="org.gnu.gdb.aarch64.core"> 44566249323SMichał Górny <reg name="x0" bitsize="64" type="int" regnum="0"/> 44666249323SMichał Górny <reg name="x1" bitsize="64" type="int" regnum="1"/> 44766249323SMichał Górny <reg name="x2" bitsize="64" type="int" regnum="2"/> 44866249323SMichał Górny <reg name="x3" bitsize="64" type="int" regnum="3"/> 44966249323SMichał Górny <reg name="x4" bitsize="64" type="int" regnum="4"/> 45066249323SMichał Górny <reg name="x5" bitsize="64" type="int" regnum="5"/> 45166249323SMichał Górny <reg name="x6" bitsize="64" type="int" regnum="6"/> 45266249323SMichał Górny <reg name="x7" bitsize="64" type="int" regnum="7"/> 45366249323SMichał Górny <reg name="x8" bitsize="64" type="int" regnum="8"/> 45466249323SMichał Górny <reg name="x9" bitsize="64" type="int" regnum="9"/> 45566249323SMichał Górny <reg name="x10" bitsize="64" type="int" regnum="10"/> 45666249323SMichał Górny <reg name="x11" bitsize="64" type="int" regnum="11"/> 45766249323SMichał Górny <reg name="x12" bitsize="64" type="int" regnum="12"/> 45866249323SMichał Górny <reg name="x13" bitsize="64" type="int" regnum="13"/> 45966249323SMichał Górny <reg name="x14" bitsize="64" type="int" regnum="14"/> 46066249323SMichał Górny <reg name="x15" bitsize="64" type="int" regnum="15"/> 46166249323SMichał Górny <reg name="x16" bitsize="64" type="int" regnum="16"/> 46266249323SMichał Górny <reg name="x17" bitsize="64" type="int" regnum="17"/> 46366249323SMichał Górny <reg name="x18" bitsize="64" type="int" regnum="18"/> 46466249323SMichał Górny <reg name="x19" bitsize="64" type="int" regnum="19"/> 46566249323SMichał Górny <reg name="x20" bitsize="64" type="int" regnum="20"/> 46666249323SMichał Górny <reg name="x21" bitsize="64" type="int" regnum="21"/> 46766249323SMichał Górny <reg name="x22" bitsize="64" type="int" regnum="22"/> 46866249323SMichał Górny <reg name="x23" bitsize="64" type="int" regnum="23"/> 46966249323SMichał Górny <reg name="x24" bitsize="64" type="int" regnum="24"/> 47066249323SMichał Górny <reg name="x25" bitsize="64" type="int" regnum="25"/> 47166249323SMichał Górny <reg name="x26" bitsize="64" type="int" regnum="26"/> 47266249323SMichał Górny <reg name="x27" bitsize="64" type="int" regnum="27"/> 47366249323SMichał Górny <reg name="x28" bitsize="64" type="int" regnum="28"/> 47466249323SMichał Górny <reg name="x29" bitsize="64" type="int" regnum="29"/> 47566249323SMichał Górny <reg name="x30" bitsize="64" type="int" regnum="30"/> 47666249323SMichał Górny <reg name="sp" bitsize="64" type="data_ptr" regnum="31"/> 47766249323SMichał Górny <reg name="pc" bitsize="64" type="code_ptr" regnum="32"/> 47866249323SMichał Górny <reg name="cpsr" bitsize="32" type="cpsr_flags" regnum="33"/> 47966249323SMichał Górny </feature> 48066249323SMichał Górny <feature name="org.gnu.gdb.aarch64.fpu"> 48166249323SMichał Górny <reg name="v0" bitsize="128" type="aarch64v" regnum="34"/> 48266249323SMichał Górny <reg name="v1" bitsize="128" type="aarch64v" regnum="35"/> 48366249323SMichał Górny <reg name="v2" bitsize="128" type="aarch64v" regnum="36"/> 48466249323SMichał Górny <reg name="v3" bitsize="128" type="aarch64v" regnum="37"/> 48566249323SMichał Górny <reg name="v4" bitsize="128" type="aarch64v" regnum="38"/> 48666249323SMichał Górny <reg name="v5" bitsize="128" type="aarch64v" regnum="39"/> 48766249323SMichał Górny <reg name="v6" bitsize="128" type="aarch64v" regnum="40"/> 48866249323SMichał Górny <reg name="v7" bitsize="128" type="aarch64v" regnum="41"/> 48966249323SMichał Górny <reg name="v8" bitsize="128" type="aarch64v" regnum="42"/> 49066249323SMichał Górny <reg name="v9" bitsize="128" type="aarch64v" regnum="43"/> 49166249323SMichał Górny <reg name="v10" bitsize="128" type="aarch64v" regnum="44"/> 49266249323SMichał Górny <reg name="v11" bitsize="128" type="aarch64v" regnum="45"/> 49366249323SMichał Górny <reg name="v12" bitsize="128" type="aarch64v" regnum="46"/> 49466249323SMichał Górny <reg name="v13" bitsize="128" type="aarch64v" regnum="47"/> 49566249323SMichał Górny <reg name="v14" bitsize="128" type="aarch64v" regnum="48"/> 49666249323SMichał Górny <reg name="v15" bitsize="128" type="aarch64v" regnum="49"/> 49766249323SMichał Górny <reg name="v16" bitsize="128" type="aarch64v" regnum="50"/> 49866249323SMichał Górny <reg name="v17" bitsize="128" type="aarch64v" regnum="51"/> 49966249323SMichał Górny <reg name="v18" bitsize="128" type="aarch64v" regnum="52"/> 50066249323SMichał Górny <reg name="v19" bitsize="128" type="aarch64v" regnum="53"/> 50166249323SMichał Górny <reg name="v20" bitsize="128" type="aarch64v" regnum="54"/> 50266249323SMichał Górny <reg name="v21" bitsize="128" type="aarch64v" regnum="55"/> 50366249323SMichał Górny <reg name="v22" bitsize="128" type="aarch64v" regnum="56"/> 50466249323SMichał Górny <reg name="v23" bitsize="128" type="aarch64v" regnum="57"/> 50566249323SMichał Górny <reg name="v24" bitsize="128" type="aarch64v" regnum="58"/> 50666249323SMichał Górny <reg name="v25" bitsize="128" type="aarch64v" regnum="59"/> 50766249323SMichał Górny <reg name="v26" bitsize="128" type="aarch64v" regnum="60"/> 50866249323SMichał Górny <reg name="v27" bitsize="128" type="aarch64v" regnum="61"/> 50966249323SMichał Górny <reg name="v28" bitsize="128" type="aarch64v" regnum="62"/> 51066249323SMichał Górny <reg name="v29" bitsize="128" type="aarch64v" regnum="63"/> 51166249323SMichał Górny <reg name="v30" bitsize="128" type="aarch64v" regnum="64"/> 51266249323SMichał Górny <reg name="v31" bitsize="128" type="aarch64v" regnum="65"/> 51366249323SMichał Górny <reg name="fpsr" bitsize="32" type="int" regnum="66"/> 51466249323SMichał Górny <reg name="fpcr" bitsize="32" type="int" regnum="67"/> 51566249323SMichał Górny </feature> 51666249323SMichał Górny </target>""", False 51766249323SMichał Górny else: 51866249323SMichał Górny return None, False 51966249323SMichał Górny 52066249323SMichał Górny def readRegister(self, regnum): 52166249323SMichał Górny return "" 52266249323SMichał Górny 52366249323SMichał Górny def readRegisters(self): 524583f67cbSMichał Górny return self.reg_data 52566249323SMichał Górny 52666249323SMichał Górny def writeRegisters(self, reg_hex): 527583f67cbSMichał Górny self.reg_data = reg_hex 52866249323SMichał Górny return "OK" 52966249323SMichał Górny 53066249323SMichał Górny def haltReason(self): 53166249323SMichał Górny return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;" 53266249323SMichał Górny 53366249323SMichał Górny self.server.responder = MyResponder() 53466249323SMichał Górny 53566249323SMichał Górny target = self.createTarget("basic_eh_frame-aarch64.yaml") 53666249323SMichał Górny process = self.connect(target) 53766249323SMichał Górny lldbutil.expect_state_changes(self, self.dbg.GetListener(), process, 53866249323SMichał Górny [lldb.eStateStopped]) 53966249323SMichał Górny 54066249323SMichał Górny # test GPRs 54166249323SMichał Górny self.match("register read x0", 54266249323SMichał Górny ["x0 = 0x0807060504030201"]) 54366249323SMichał Górny self.match("register read x1", 54466249323SMichał Górny ["x1 = 0x1817161514131211"]) 54547d57547SMichał Górny self.match("register read x29", 54647d57547SMichał Górny ["x29 = 0x3837363534333231"]) 54747d57547SMichał Górny self.match("register read x30", 54847d57547SMichał Górny ["x30 = 0x4847464544434241"]) 54947d57547SMichał Górny self.match("register read x31", 55047d57547SMichał Górny ["sp = 0x5857565554535251"]) 55166249323SMichał Górny self.match("register read sp", 55266249323SMichał Górny ["sp = 0x5857565554535251"]) 55366249323SMichał Górny self.match("register read pc", 55466249323SMichał Górny ["pc = 0x6867666564636261"]) 55566249323SMichał Górny self.match("register read cpsr", 55666249323SMichał Górny ["cpsr = 0x74737271"]) 55766249323SMichał Górny 55866249323SMichał Górny # test generic aliases 55966249323SMichał Górny self.match("register read arg1", 56066249323SMichał Górny ["x0 = 0x0807060504030201"]) 56166249323SMichał Górny self.match("register read arg2", 56266249323SMichał Górny ["x1 = 0x1817161514131211"]) 563c208deb9SMichał Górny self.match("register read fp", 564c208deb9SMichał Górny ["x29 = 0x3837363534333231"]) 565c208deb9SMichał Górny self.match("register read lr", 566c208deb9SMichał Górny ["x30 = 0x4847464544434241"]) 567c208deb9SMichał Górny self.match("register read ra", 568c208deb9SMichał Górny ["x30 = 0x4847464544434241"]) 56966249323SMichał Górny self.match("register read flags", 57066249323SMichał Górny ["cpsr = 0x74737271"]) 571f6e0edc2SMichał Górny 572f6e0edc2SMichał Górny # test vector registers 573f6e0edc2SMichał Górny self.match("register read v0", 574f6e0edc2SMichał Górny ["v0 = {0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90}"]) 575f6e0edc2SMichał Górny self.match("register read v31", 576f6e0edc2SMichał Górny ["v31 = {0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf 0xb0}"]) 577583f67cbSMichał Górny 578583f67cbSMichał Górny # test partial registers 579583f67cbSMichał Górny self.match("register read w0", 580583f67cbSMichał Górny ["w0 = 0x04030201"]) 581583f67cbSMichał Górny self.runCmd("register write w0 0xfffefdfc") 582583f67cbSMichał Górny self.match("register read x0", 583583f67cbSMichał Górny ["x0 = 0x08070605fffefdfc"]) 584583f67cbSMichał Górny 585583f67cbSMichał Górny self.match("register read w1", 586583f67cbSMichał Górny ["w1 = 0x14131211"]) 587583f67cbSMichał Górny self.runCmd("register write w1 0xefeeedec") 588583f67cbSMichał Górny self.match("register read x1", 589583f67cbSMichał Górny ["x1 = 0x18171615efeeedec"]) 590583f67cbSMichał Górny 591583f67cbSMichał Górny self.match("register read w30", 592583f67cbSMichał Górny ["w30 = 0x44434241"]) 593583f67cbSMichał Górny self.runCmd("register write w30 0xdfdedddc") 594583f67cbSMichał Górny self.match("register read x30", 595583f67cbSMichał Górny ["x30 = 0x48474645dfdedddc"]) 596583f67cbSMichał Górny 597583f67cbSMichał Górny self.match("register read w31", 598583f67cbSMichał Górny ["w31 = 0x54535251"]) 599583f67cbSMichał Górny self.runCmd("register write w31 0xcfcecdcc") 600583f67cbSMichał Górny self.match("register read x31", 601583f67cbSMichał Górny ["sp = 0x58575655cfcecdcc"]) 602583f67cbSMichał Górny 603583f67cbSMichał Górny # test FPU registers (overlapping with vector registers) 604583f67cbSMichał Górny self.runCmd("register write d0 16") 605583f67cbSMichał Górny self.match("register read v0", 606583f67cbSMichał Górny ["v0 = {0x00 0x00 0x00 0x00 0x00 0x00 0x30 0x40 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90}"]) 607583f67cbSMichał Górny self.runCmd("register write v31 '{0x00 0x00 0x00 0x00 0x00 0x00 0x50 0x40 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff}'") 608583f67cbSMichał Górny self.match("register read d31", 609583f67cbSMichał Górny ["d31 = 64"]) 610583f67cbSMichał Górny 611583f67cbSMichał Górny self.runCmd("register write s0 32") 612583f67cbSMichał Górny self.match("register read v0", 613583f67cbSMichał Górny ["v0 = {0x00 0x00 0x00 0x42 0x00 0x00 0x30 0x40 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90}"]) 614583f67cbSMichał Górny self.runCmd("register write v31 '{0x00 0x00 0x00 0x43 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff}'") 615583f67cbSMichał Górny self.match("register read s31", 616583f67cbSMichał Górny ["s31 = 128"]) 617f70f9620SMichał Górny 618f70f9620SMichał Górny @skipIfXmlSupportMissing 619f70f9620SMichał Górny @skipIfRemote 6201583c41dSMichał Górny @skipIfLLVMTargetMissing("X86") 6211583c41dSMichał Górny def test_x86_64_no_duplicate_subregs(self): 6221583c41dSMichał Górny """Test that duplicate subregisters are not added (on x86_64).""" 6231583c41dSMichał Górny class MyResponder(MockGDBServerResponder): 6241583c41dSMichał Górny reg_data = ( 6251583c41dSMichał Górny "0102030405060708" # rcx 6261583c41dSMichał Górny "1112131415161718" # rdx 6271583c41dSMichał Górny "2122232425262728" # rsi 6281583c41dSMichał Górny "3132333435363738" # rdi 6291583c41dSMichał Górny "4142434445464748" # rbp 6301583c41dSMichał Górny "5152535455565758" # rsp 6311583c41dSMichał Górny "6162636465666768" # r8 6321583c41dSMichał Górny "7172737475767778" # r9 6331583c41dSMichał Górny "8182838485868788" # rip 6341583c41dSMichał Górny "91929394" # eflags 6351583c41dSMichał Górny ) 6361583c41dSMichał Górny 6371583c41dSMichał Górny def qXferRead(self, obj, annex, offset, length): 6381583c41dSMichał Górny if annex == "target.xml": 6391583c41dSMichał Górny return """<?xml version="1.0"?> 6401583c41dSMichał Górny <!DOCTYPE feature SYSTEM "gdb-target.dtd"> 6411583c41dSMichał Górny <target> 6421583c41dSMichał Górny <architecture>i386:x86-64</architecture> 6431583c41dSMichał Górny <osabi>GNU/Linux</osabi> 6441583c41dSMichał Górny <feature name="org.gnu.gdb.i386.core"> 6451583c41dSMichał Górny <reg name="rcx" bitsize="64" type="int64" regnum="2"/> 6461583c41dSMichał Górny <reg name="rdx" bitsize="64" type="int64" regnum="3"/> 6471583c41dSMichał Górny <reg name="rsi" bitsize="64" type="int64" regnum="4"/> 6481583c41dSMichał Górny <reg name="rdi" bitsize="64" type="int64" regnum="5"/> 6491583c41dSMichał Górny <reg name="rbp" bitsize="64" type="data_ptr" regnum="6"/> 6501583c41dSMichał Górny <reg name="rsp" bitsize="64" type="data_ptr" regnum="7"/> 6511583c41dSMichał Górny <reg name="r8" bitsize="64" type="int64" regnum="8"/> 6521583c41dSMichał Górny <reg name="r9" bitsize="64" type="int64" regnum="9"/> 6531583c41dSMichał Górny <reg name="rip" bitsize="64" type="code_ptr" regnum="16"/> 6541583c41dSMichał Górny <reg name="eflags" bitsize="32" type="i386_eflags" regnum="17"/> 6551583c41dSMichał Górny <reg name="ecx" bitsize="32" type="int" regnum="18" value_regnums="2"/> 6561583c41dSMichał Górny </feature> 6571583c41dSMichał Górny </target>""", False 6581583c41dSMichał Górny else: 6591583c41dSMichał Górny return None, False 6601583c41dSMichał Górny 6611583c41dSMichał Górny def readRegister(self, regnum): 6621583c41dSMichał Górny return "" 6631583c41dSMichał Górny 6641583c41dSMichał Górny def readRegisters(self): 6651583c41dSMichał Górny return self.reg_data 6661583c41dSMichał Górny 6671583c41dSMichał Górny def haltReason(self): 6681583c41dSMichał Górny return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;" 6691583c41dSMichał Górny 6701583c41dSMichał Górny self.server.responder = MyResponder() 6711583c41dSMichał Górny 6721583c41dSMichał Górny target = self.createTarget("basic_eh_frame.yaml") 6731583c41dSMichał Górny process = self.connect(target) 6741583c41dSMichał Górny lldbutil.expect_state_changes(self, self.dbg.GetListener(), process, 6751583c41dSMichał Górny [lldb.eStateStopped]) 6761583c41dSMichał Górny 6771583c41dSMichał Górny self.match("register read rcx", 6781583c41dSMichał Górny ["rcx = 0x0807060504030201"]) 6791583c41dSMichał Górny # ecx is supplied via target.xml 6801583c41dSMichał Górny self.match("register read ecx", 6811583c41dSMichał Górny ["ecx = 0x04030201"]) 6821583c41dSMichał Górny self.match("register read rdx", 6831583c41dSMichał Górny ["rdx = 0x1817161514131211"]) 6841583c41dSMichał Górny # edx should not be added 6851583c41dSMichał Górny self.match("register read edx", 6861583c41dSMichał Górny ["error: Invalid register name 'edx'."], 6871583c41dSMichał Górny error=True) 6881583c41dSMichał Górny 6891583c41dSMichał Górny @skipIfXmlSupportMissing 6901583c41dSMichał Górny @skipIfRemote 6911583c41dSMichał Górny @skipIfLLVMTargetMissing("X86") 6921583c41dSMichał Górny def test_i386_no_duplicate_subregs(self): 6931583c41dSMichał Górny """Test that duplicate subregisters are not added (on i386).""" 6941583c41dSMichał Górny class MyResponder(MockGDBServerResponder): 6951583c41dSMichał Górny reg_data = ( 6961583c41dSMichał Górny "01020304" # eax 6971583c41dSMichał Górny "11121314" # ecx 6981583c41dSMichał Górny "21222324" # edx 6991583c41dSMichał Górny "31323334" # ebx 7001583c41dSMichał Górny "41424344" # esp 7011583c41dSMichał Górny "51525354" # ebp 7021583c41dSMichał Górny "61626364" # esi 7031583c41dSMichał Górny "71727374" # edi 7041583c41dSMichał Górny "81828384" # eip 7051583c41dSMichał Górny "91929394" # eflags 7061583c41dSMichał Górny ) 7071583c41dSMichał Górny 7081583c41dSMichał Górny def qXferRead(self, obj, annex, offset, length): 7091583c41dSMichał Górny if annex == "target.xml": 7101583c41dSMichał Górny return """<?xml version="1.0"?> 7111583c41dSMichał Górny <!DOCTYPE feature SYSTEM "gdb-target.dtd"> 7121583c41dSMichał Górny <target> 7131583c41dSMichał Górny <architecture>i386</architecture> 7141583c41dSMichał Górny <osabi>GNU/Linux</osabi> 7151583c41dSMichał Górny <feature name="org.gnu.gdb.i386.core"> 7161583c41dSMichał Górny <reg name="eax" bitsize="32" type="int32" regnum="0"/> 7171583c41dSMichał Górny <reg name="ecx" bitsize="32" type="int32" regnum="1"/> 7181583c41dSMichał Górny <reg name="edx" bitsize="32" type="int32" regnum="2"/> 7191583c41dSMichał Górny <reg name="ebx" bitsize="32" type="int32" regnum="3"/> 7201583c41dSMichał Górny <reg name="esp" bitsize="32" type="data_ptr" regnum="4"/> 7211583c41dSMichał Górny <reg name="ebp" bitsize="32" type="data_ptr" regnum="5"/> 7221583c41dSMichał Górny <reg name="esi" bitsize="32" type="int32" regnum="6"/> 7231583c41dSMichał Górny <reg name="edi" bitsize="32" type="int32" regnum="7"/> 7241583c41dSMichał Górny <reg name="eip" bitsize="32" type="code_ptr" regnum="8"/> 7251583c41dSMichał Górny <reg name="eflags" bitsize="32" type="i386_eflags" regnum="9"/> 7261583c41dSMichał Górny <reg name="ax" bitsize="16" type="int" regnum="10" value_regnums="0"/> 7271583c41dSMichał Górny </feature> 7281583c41dSMichał Górny </target>""", False 7291583c41dSMichał Górny else: 7301583c41dSMichał Górny return None, False 7311583c41dSMichał Górny 7321583c41dSMichał Górny def readRegister(self, regnum): 7331583c41dSMichał Górny return "" 7341583c41dSMichał Górny 7351583c41dSMichał Górny def readRegisters(self): 7361583c41dSMichał Górny return self.reg_data 7371583c41dSMichał Górny 7381583c41dSMichał Górny def haltReason(self): 7391583c41dSMichał Górny return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;" 7401583c41dSMichał Górny 7411583c41dSMichał Górny self.server.responder = MyResponder() 7421583c41dSMichał Górny 7431583c41dSMichał Górny target = self.createTarget("basic_eh_frame-i386.yaml") 7441583c41dSMichał Górny process = self.connect(target) 7451583c41dSMichał Górny lldbutil.expect_state_changes(self, self.dbg.GetListener(), process, 7461583c41dSMichał Górny [lldb.eStateStopped]) 7471583c41dSMichał Górny 7481583c41dSMichał Górny self.match("register read eax", 7491583c41dSMichał Górny ["eax = 0x04030201"]) 7501583c41dSMichał Górny # cx is supplied via target.xml 7511583c41dSMichał Górny self.match("register read ax", 7521583c41dSMichał Górny ["ax = 0x0201"]) 7531583c41dSMichał Górny self.match("register read ecx", 7541583c41dSMichał Górny ["ecx = 0x14131211"]) 7551583c41dSMichał Górny # dx should not be added 7561583c41dSMichał Górny self.match("register read cx", 7571583c41dSMichał Górny ["error: Invalid register name 'cx'."], 7581583c41dSMichał Górny error=True) 7591583c41dSMichał Górny 7601583c41dSMichał Górny @skipIfXmlSupportMissing 7611583c41dSMichał Górny @skipIfRemote 762f70f9620SMichał Górny @skipIfLLVMTargetMissing("AArch64") 763f70f9620SMichał Górny def test_aarch64_no_duplicate_subregs(self): 764f70f9620SMichał Górny """Test that duplicate subregisters are not added.""" 765f70f9620SMichał Górny class MyResponder(MockGDBServerResponder): 766f70f9620SMichał Górny reg_data = ( 767f70f9620SMichał Górny "0102030405060708" # x0 768f70f9620SMichał Górny "1112131415161718" # x1 769f70f9620SMichał Górny ) + 27 * ( 770f70f9620SMichał Górny "2122232425262728" # x2..x28 771f70f9620SMichał Górny ) + ( 772f70f9620SMichał Górny "3132333435363738" # x29 (fp) 773f70f9620SMichał Górny "4142434445464748" # x30 (lr) 774f70f9620SMichał Górny "5152535455565758" # x31 (sp) 775f70f9620SMichał Górny "6162636465666768" # pc 776f70f9620SMichał Górny "71727374" # cpsr 777f70f9620SMichał Górny ) 778f70f9620SMichał Górny 779f70f9620SMichał Górny def qXferRead(self, obj, annex, offset, length): 780f70f9620SMichał Górny if annex == "target.xml": 781f70f9620SMichał Górny return """<?xml version="1.0"?> 782f70f9620SMichał Górny <!DOCTYPE feature SYSTEM "gdb-target.dtd"> 783f70f9620SMichał Górny <target> 784f70f9620SMichał Górny <architecture>aarch64</architecture> 785f70f9620SMichał Górny <feature name="org.gnu.gdb.aarch64.core"> 786f70f9620SMichał Górny <reg name="x0" bitsize="64" type="int" regnum="0"/> 787f70f9620SMichał Górny <reg name="x1" bitsize="64" type="int" regnum="1"/> 788f70f9620SMichał Górny <reg name="x2" bitsize="64" type="int" regnum="2"/> 789f70f9620SMichał Górny <reg name="x3" bitsize="64" type="int" regnum="3"/> 790f70f9620SMichał Górny <reg name="x4" bitsize="64" type="int" regnum="4"/> 791f70f9620SMichał Górny <reg name="x5" bitsize="64" type="int" regnum="5"/> 792f70f9620SMichał Górny <reg name="x6" bitsize="64" type="int" regnum="6"/> 793f70f9620SMichał Górny <reg name="x7" bitsize="64" type="int" regnum="7"/> 794f70f9620SMichał Górny <reg name="x8" bitsize="64" type="int" regnum="8"/> 795f70f9620SMichał Górny <reg name="x9" bitsize="64" type="int" regnum="9"/> 796f70f9620SMichał Górny <reg name="x10" bitsize="64" type="int" regnum="10"/> 797f70f9620SMichał Górny <reg name="x11" bitsize="64" type="int" regnum="11"/> 798f70f9620SMichał Górny <reg name="x12" bitsize="64" type="int" regnum="12"/> 799f70f9620SMichał Górny <reg name="x13" bitsize="64" type="int" regnum="13"/> 800f70f9620SMichał Górny <reg name="x14" bitsize="64" type="int" regnum="14"/> 801f70f9620SMichał Górny <reg name="x15" bitsize="64" type="int" regnum="15"/> 802f70f9620SMichał Górny <reg name="x16" bitsize="64" type="int" regnum="16"/> 803f70f9620SMichał Górny <reg name="x17" bitsize="64" type="int" regnum="17"/> 804f70f9620SMichał Górny <reg name="x18" bitsize="64" type="int" regnum="18"/> 805f70f9620SMichał Górny <reg name="x19" bitsize="64" type="int" regnum="19"/> 806f70f9620SMichał Górny <reg name="x20" bitsize="64" type="int" regnum="20"/> 807f70f9620SMichał Górny <reg name="x21" bitsize="64" type="int" regnum="21"/> 808f70f9620SMichał Górny <reg name="x22" bitsize="64" type="int" regnum="22"/> 809f70f9620SMichał Górny <reg name="x23" bitsize="64" type="int" regnum="23"/> 810f70f9620SMichał Górny <reg name="x24" bitsize="64" type="int" regnum="24"/> 811f70f9620SMichał Górny <reg name="x25" bitsize="64" type="int" regnum="25"/> 812f70f9620SMichał Górny <reg name="x26" bitsize="64" type="int" regnum="26"/> 813f70f9620SMichał Górny <reg name="x27" bitsize="64" type="int" regnum="27"/> 814f70f9620SMichał Górny <reg name="x28" bitsize="64" type="int" regnum="28"/> 815f70f9620SMichał Górny <reg name="x29" bitsize="64" type="int" regnum="29"/> 816f70f9620SMichał Górny <reg name="x30" bitsize="64" type="int" regnum="30"/> 817f70f9620SMichał Górny <reg name="sp" bitsize="64" type="data_ptr" regnum="31"/> 818f70f9620SMichał Górny <reg name="pc" bitsize="64" type="code_ptr" regnum="32"/> 819f70f9620SMichał Górny <reg name="cpsr" bitsize="32" type="cpsr_flags" regnum="33"/> 820f70f9620SMichał Górny <reg name="w0" bitsize="32" type="int" regnum="34" value_regnums="0"/> 821f70f9620SMichał Górny </feature> 822f70f9620SMichał Górny </target>""", False 823f70f9620SMichał Górny else: 824f70f9620SMichał Górny return None, False 825f70f9620SMichał Górny 826f70f9620SMichał Górny def readRegister(self, regnum): 827f70f9620SMichał Górny return "" 828f70f9620SMichał Górny 829f70f9620SMichał Górny def readRegisters(self): 830f70f9620SMichał Górny return self.reg_data 831f70f9620SMichał Górny 832f70f9620SMichał Górny def haltReason(self): 833f70f9620SMichał Górny return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;" 834f70f9620SMichał Górny 835f70f9620SMichał Górny self.server.responder = MyResponder() 836f70f9620SMichał Górny 837f70f9620SMichał Górny target = self.createTarget("basic_eh_frame-aarch64.yaml") 838f70f9620SMichał Górny process = self.connect(target) 839f70f9620SMichał Górny lldbutil.expect_state_changes(self, self.dbg.GetListener(), process, 840f70f9620SMichał Górny [lldb.eStateStopped]) 841f70f9620SMichał Górny 842f70f9620SMichał Górny self.match("register read x0", 843f70f9620SMichał Górny ["x0 = 0x0807060504030201"]) 844f70f9620SMichał Górny # w0 comes from target.xml 845f70f9620SMichał Górny self.match("register read w0", 846f70f9620SMichał Górny ["w0 = 0x04030201"]) 847f70f9620SMichał Górny self.match("register read x1", 848f70f9620SMichał Górny ["x1 = 0x1817161514131211"]) 849f70f9620SMichał Górny # w1 should not be added 850f70f9620SMichał Górny self.match("register read w1", 851f70f9620SMichał Górny ["error: Invalid register name 'w1'."], 852f70f9620SMichał Górny error=True) 853