mgorny updated this revision to Diff 369415.
mgorny added a comment.

Correct the test case to actually include data for all XMM registers (NFC).


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108468/new/

https://reviews.llvm.org/D108468

Files:
  lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
  lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py

Index: lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py
@@ -0,0 +1,98 @@
+from __future__ import print_function
+import lldb
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.decorators import *
+from gdbclientutils import *
+
+
+class TestGDBServerTargetXML(GDBRemoteTestBase):
+
+    @skipIfXmlSupportMissing
+    @skipIfRemote
+    def test_x86_64_vec_regs(self):
+        """Test rendering of x86_64 vector registers from gdbserver."""
+        class MyResponder(MockGDBServerResponder):
+            def qXferRead(self, obj, annex, offset, length):
+                if annex == "target.xml":
+                    return """<?xml version="1.0"?>
+                        <!DOCTYPE feature SYSTEM "gdb-target.dtd">
+                        <target>
+                          <architecture>i386:x86-64</architecture>
+                          <osabi>GNU/Linux</osabi>
+                          <feature name="org.gnu.gdb.i386.core">
+                            <reg name="rsp" bitsize="64" type="data_ptr" regnum="7"/>
+                            <reg name="rip" bitsize="64" type="code_ptr" regnum="16"/>
+                            <reg name="st0" bitsize="80" type="i387_ext" regnum="24"/>
+                            <reg name="st1" bitsize="80" type="i387_ext" regnum="25"/>
+                            <reg name="st2" bitsize="80" type="i387_ext" regnum="26"/>
+                            <reg name="st3" bitsize="80" type="i387_ext" regnum="27"/>
+                            <reg name="st4" bitsize="80" type="i387_ext" regnum="28"/>
+                            <reg name="st5" bitsize="80" type="i387_ext" regnum="29"/>
+                            <reg name="st6" bitsize="80" type="i387_ext" regnum="30"/>
+                            <reg name="st7" bitsize="80" type="i387_ext" regnum="31"/>
+                          </feature>
+                          <feature name="org.gnu.gdb.i386.sse">
+                            <reg name="xmm0" bitsize="128" type="vec128" regnum="40"/>
+                            <reg name="xmm1" bitsize="128" type="vec128" regnum="41"/>
+                            <reg name="xmm2" bitsize="128" type="vec128" regnum="42"/>
+                            <reg name="xmm3" bitsize="128" type="vec128" regnum="43"/>
+                            <reg name="xmm4" bitsize="128" type="vec128" regnum="44"/>
+                            <reg name="xmm5" bitsize="128" type="vec128" regnum="45"/>
+                            <reg name="xmm6" bitsize="128" type="vec128" regnum="46"/>
+                            <reg name="xmm7" bitsize="128" type="vec128" regnum="47"/>
+                            <reg name="xmm8" bitsize="128" type="vec128" regnum="48"/>
+                            <reg name="xmm9" bitsize="128" type="vec128" regnum="49"/>
+                            <reg name="xmm10" bitsize="128" type="vec128" regnum="50"/>
+                            <reg name="xmm11" bitsize="128" type="vec128" regnum="51"/>
+                            <reg name="xmm12" bitsize="128" type="vec128" regnum="52"/>
+                            <reg name="xmm13" bitsize="128" type="vec128" regnum="53"/>
+                            <reg name="xmm14" bitsize="128" type="vec128" regnum="54"/>
+                            <reg name="xmm15" bitsize="128" type="vec128" regnum="55"/>
+                            <reg name="mxcsr" bitsize="32" type="i386_mxcsr" regnum="56" group="vector"/>
+                          </feature>
+                        </target>""", False
+                else:
+                    return None, False
+
+            def readRegister(self, regnum):
+                return ""
+
+            def readRegisters(self):
+                return (
+                    "0102030405060708"  # rsp
+                    "1112131415161718"  # rip
+                    "0102030405060708090a"  # st0
+                    "1112131415161718191a" +  # st1
+                    "2122232425262728292a" * 6 +  # st2..st7
+                    "8182838485868788898a8b8c8d8e8f90"  # xmm0
+                    "9192939495969798999a9b9c9d9e9fa0"  # xmm1
+                    "a1a2a3a4a5a6a7a8a9aaabacadaeafb0" * 6  # xmm2..xmm7
+                )
+
+            def haltReason(self):
+                return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"
+
+        self.server.responder = MyResponder()
+
+        target = self.createTarget("basic_eh_frame.yaml")
+        process = self.connect(target)
+        lldbutil.expect_state_changes(self, self.dbg.GetListener(), process,
+                                      [lldb.eStateStopped])
+
+        # rsp and rip should be displayed as uints
+        self.match("register read rsp",
+                   ["rsp = 0x0807060504030201"])
+        self.match("register read rip",
+                   ["rip = 0x1817161514131211"])
+
+        # both stX and xmmX should be displayed as vectors
+        self.match("register read st0",
+                   ["st0 = {0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a}"])
+        self.match("register read st1",
+                   ["st1 = {0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a}"])
+        self.match("register read xmm0",
+                   ["xmm0 = {0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 "
+                    "0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90}"])
+        self.match("register read xmm1",
+                   ["xmm1 = {0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 "
+                    "0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f 0xa0}"])
Index: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -4525,9 +4525,13 @@
           } else if (gdb_type == "data_ptr" || gdb_type == "code_ptr") {
             reg_info.format = eFormatAddressInfo;
             reg_info.encoding = eEncodingUint;
-          } else if (gdb_type == "i387_ext" || gdb_type == "float") {
+          } else if (gdb_type == "float") {
             reg_info.format = eFormatFloat;
             reg_info.encoding = eEncodingIEEE754;
+          } else if (llvm::StringRef(gdb_type).startswith("vec") ||
+                     gdb_type == "i387_ext") {
+            reg_info.format = eFormatVectorOfUInt8;
+            reg_info.encoding = eEncodingVector;
           }
         }
 
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to