Author: Michał Górny
Date: 2021-10-15T16:04:16+02:00
New Revision: 1583c41d07a45a2daa1e9d8347dcea4329794657

URL: 
https://github.com/llvm/llvm-project/commit/1583c41d07a45a2daa1e9d8347dcea4329794657
DIFF: 
https://github.com/llvm/llvm-project/commit/1583c41d07a45a2daa1e9d8347dcea4329794657.diff

LOG: [lldb] [test] Add TestGDBServerTargetXML tests for x86 duplicate subregs

Added: 
    

Modified: 
    lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py

Removed: 
    


################################################################################
diff  --git 
a/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py 
b/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py
index 35ee8dc090df..0bb332402539 100644
--- a/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py
+++ b/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py
@@ -567,6 +567,148 @@ def haltReason(self):
         self.match("register read s31",
                    ["s31 = 128"])
 
+    @skipIfXmlSupportMissing
+    @skipIfRemote
+    @skipIfLLVMTargetMissing("X86")
+    def test_x86_64_no_duplicate_subregs(self):
+        """Test that duplicate subregisters are not added (on x86_64)."""
+        class MyResponder(MockGDBServerResponder):
+            reg_data = (
+                "0102030405060708"  # rcx
+                "1112131415161718"  # rdx
+                "2122232425262728"  # rsi
+                "3132333435363738"  # rdi
+                "4142434445464748"  # rbp
+                "5152535455565758"  # rsp
+                "6162636465666768"  # r8
+                "7172737475767778"  # r9
+                "8182838485868788"  # rip
+                "91929394"  # eflags
+            )
+
+            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="rcx" bitsize="64" type="int64" 
regnum="2"/>
+                            <reg name="rdx" bitsize="64" type="int64" 
regnum="3"/>
+                            <reg name="rsi" bitsize="64" type="int64" 
regnum="4"/>
+                            <reg name="rdi" bitsize="64" type="int64" 
regnum="5"/>
+                            <reg name="rbp" bitsize="64" type="data_ptr" 
regnum="6"/>
+                            <reg name="rsp" bitsize="64" type="data_ptr" 
regnum="7"/>
+                            <reg name="r8" bitsize="64" type="int64" 
regnum="8"/>
+                            <reg name="r9" bitsize="64" type="int64" 
regnum="9"/>
+                            <reg name="rip" bitsize="64" type="code_ptr" 
regnum="16"/>
+                            <reg name="eflags" bitsize="32" type="i386_eflags" 
regnum="17"/>
+                            <reg name="ecx" bitsize="32" type="int" 
regnum="18" value_regnums="2"/>
+                          </feature>
+                        </target>""", False
+                else:
+                    return None, False
+
+            def readRegister(self, regnum):
+                return ""
+
+            def readRegisters(self):
+                return self.reg_data
+
+            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])
+
+        self.match("register read rcx",
+                   ["rcx = 0x0807060504030201"])
+        # ecx is supplied via target.xml
+        self.match("register read ecx",
+                   ["ecx = 0x04030201"])
+        self.match("register read rdx",
+                   ["rdx = 0x1817161514131211"])
+        # edx should not be added
+        self.match("register read edx",
+                   ["error: Invalid register name 'edx'."],
+                   error=True)
+
+    @skipIfXmlSupportMissing
+    @skipIfRemote
+    @skipIfLLVMTargetMissing("X86")
+    def test_i386_no_duplicate_subregs(self):
+        """Test that duplicate subregisters are not added (on i386)."""
+        class MyResponder(MockGDBServerResponder):
+            reg_data = (
+                "01020304"  # eax
+                "11121314"  # ecx
+                "21222324"  # edx
+                "31323334"  # ebx
+                "41424344"  # esp
+                "51525354"  # ebp
+                "61626364"  # esi
+                "71727374"  # edi
+                "81828384"  # eip
+                "91929394"  # eflags
+            )
+
+            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</architecture>
+                          <osabi>GNU/Linux</osabi>
+                          <feature name="org.gnu.gdb.i386.core">
+                            <reg name="eax" bitsize="32" type="int32" 
regnum="0"/>
+                            <reg name="ecx" bitsize="32" type="int32" 
regnum="1"/>
+                            <reg name="edx" bitsize="32" type="int32" 
regnum="2"/>
+                            <reg name="ebx" bitsize="32" type="int32" 
regnum="3"/>
+                            <reg name="esp" bitsize="32" type="data_ptr" 
regnum="4"/>
+                            <reg name="ebp" bitsize="32" type="data_ptr" 
regnum="5"/>
+                            <reg name="esi" bitsize="32" type="int32" 
regnum="6"/>
+                            <reg name="edi" bitsize="32" type="int32" 
regnum="7"/>
+                            <reg name="eip" bitsize="32" type="code_ptr" 
regnum="8"/>
+                            <reg name="eflags" bitsize="32" type="i386_eflags" 
regnum="9"/>
+                            <reg name="ax" bitsize="16" type="int" regnum="10" 
value_regnums="0"/>
+                          </feature>
+                        </target>""", False
+                else:
+                    return None, False
+
+            def readRegister(self, regnum):
+                return ""
+
+            def readRegisters(self):
+                return self.reg_data
+
+            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-i386.yaml")
+        process = self.connect(target)
+        lldbutil.expect_state_changes(self, self.dbg.GetListener(), process,
+                                      [lldb.eStateStopped])
+
+        self.match("register read eax",
+                   ["eax = 0x04030201"])
+        # cx is supplied via target.xml
+        self.match("register read ax",
+                   ["ax = 0x0201"])
+        self.match("register read ecx",
+                   ["ecx = 0x14131211"])
+        # dx should not be added
+        self.match("register read cx",
+                   ["error: Invalid register name 'cx'."],
+                   error=True)
+
     @skipIfXmlSupportMissing
     @skipIfRemote
     @skipIfLLVMTargetMissing("AArch64")


        
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to