[Lldb-commits] [lldb] r328488 - Add and fix some tests for PPC64

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Mon Mar 26 05:42:08 PDT 2018


Author: labath
Date: Mon Mar 26 05:42:07 2018
New Revision: 328488

URL: http://llvm.org/viewvc/llvm-project?rev=328488&view=rev
Log:
Add and fix some tests for PPC64

Summary:
TestExprsChar.py
Char is unsigned char by default in PowerPC.

TestDisassembleBreakpoint.py
Modify disassemble testcase to consider multiple architectures.

TestThreadJump.py
Jumping directly to the return line on PowerPC architecture dos not
means returning the value that is seen on the code. The last test fails,
because it needs the execution of some assembly in the beginning of the
function. Avoiding this test for this architecture.

TestEhFrameUnwind.py
Implement func for ppc64le test case.

TestWatchLocation.py
TestStepOverWatchpoint.py
PowerPC currently supports only one H/W watchpoint.

TestDisassembleRawData.py
Add PowerPC opcode and instruction for disassemble testcase.

Reviewers: labath

Reviewed By: labath

Subscribers: davide, labath, alexandreyy, lldb-commits, luporl, lbianc

Differential Revision: https://reviews.llvm.org/D44472
Patch by Alexandre Yukio Yamashita <alexandre.yamashita at eldorado.org.br>.

Modified:
    lldb/trunk/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/disassembly/TestDisassembleBreakpoint.py
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/unwind/ehframe/main.c
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py
    lldb/trunk/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py

Modified: lldb/trunk/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py?rev=328488&r1=328487&r2=328488&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/expression_command/char/TestExprsChar.py Mon Mar 26 05:42:07 2018
@@ -49,6 +49,7 @@ class ExprCharTestCase(TestBase):
         archs=[
             "arm",
             "aarch64",
+            "powerpc64le",
             "s390x"],
         bugnumber="llvm.org/pr23069")
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr21765")

Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/disassembly/TestDisassembleBreakpoint.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/disassembly/TestDisassembleBreakpoint.py?rev=328488&r1=328487&r2=328488&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/disassembly/TestDisassembleBreakpoint.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/disassembly/TestDisassembleBreakpoint.py Mon Mar 26 05:42:07 2018
@@ -26,6 +26,9 @@ class DisassemblyTestCase(TestBase):
         self.expect("file " + exe,
                     patterns=["Current executable set to .*a.out.*"])
 
+        self.runCmd("dis -n main")
+        disassembly_before_break = self.res.GetOutput().splitlines()
+
         match_object = lldbutil.run_break_set_command(self, "br s -n sum")
         lldbutil.check_breakpoint_result(
             self,
@@ -37,36 +40,16 @@ class DisassemblyTestCase(TestBase):
         self.expect("run",
                     patterns=["Process .* launched: "])
 
-        self.runCmd("dis -f")
-        disassembly = self.res.GetOutput()
+        self.runCmd("dis -n main")
+        disassembly_after_break = self.res.GetOutput().splitlines()
 
-        # ARCH, if not specified, defaults to x86_64.
-        arch = self.getArchitecture()
-        if arch in ["", 'x86_64', 'i386', 'i686']:
-            breakpoint_opcodes = ["int3"]
-            instructions = [' mov', ' addl ', 'ret']
-        elif arch in ["arm", "aarch64", "arm64", "armv7", "armv7k"]:
-            breakpoint_opcodes = ["brk", "udf"]
-            instructions = [' add ', ' ldr ', ' str ']
-        elif re.match("mips", arch):
-            breakpoint_opcodes = ["break"]
-            instructions = ['lw', 'sw']
-        elif arch in ["s390x"]:
-            breakpoint_opcodes = [".long"]
-            instructions = [' l ', ' a ', ' st ']
-        else:
-            # TODO please add your arch here
-            self.fail(
-                'unimplemented for arch = "{arch}"'.format(
-                    arch=self.getArchitecture()))
-
-        # make sure that the software breakpoint has been removed
-        for op in breakpoint_opcodes:
-            self.assertFalse(op in disassembly)
-
-        # make sure a few reasonable assembly instructions are here
-        self.expect(
-            disassembly,
-            exe=False,
-            startstr="a.out`sum",
-            substrs=instructions)
+        # make sure all assembly instructions are the same as the original
+        # instructions before inserting breakpoints.
+        self.assertEqual(len(disassembly_before_break),
+                         len(disassembly_after_break))
+
+        for dis_inst_before, dis_inst_after in \
+                zip(disassembly_before_break, disassembly_after_break):
+            inst_before = dis_inst_before.split(':')[-1]
+            inst_after = dis_inst_after.split(':')[-1]
+            self.assertEqual(inst_before, inst_after)

Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/unwind/ehframe/main.c
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/unwind/ehframe/main.c?rev=328488&r1=328487&r2=328488&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/unwind/ehframe/main.c (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/unwind/ehframe/main.c Mon Mar 26 05:42:07 2018
@@ -1,6 +1,18 @@
 void func() {
 
-#ifndef __mips__
+#ifdef __powerpc64__
+  __asm__ (
+    "mflr 0;"
+    "std 0,16(1);"
+    "addi 1,1,-24;"
+    "mr 31,1;"
+    ".cfi_def_cfa_offset 24;"
+    "addi 0,0,0;"
+    "addi 1,1,24;"
+    "ld 0,16(1);"
+    ".cfi_def_cfa_offset 0;"
+  );
+#elif !defined __mips__
 	__asm__ (
 		"pushq $0x10;"
 		".cfi_def_cfa_offset 16;"

Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py?rev=328488&r1=328487&r2=328488&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py Mon Mar 26 05:42:07 2018
@@ -39,8 +39,8 @@ class HelloWatchLocationTestCase(TestBas
     # Most of the MIPS boards provide only one H/W watchpoints, and S/W
     # watchpoints are not supported yet
     @expectedFailureAll(triple=re.compile('^mips'))
-    # SystemZ also currently supports only one H/W watchpoint
-    @expectedFailureAll(archs=['s390x'])
+    # SystemZ and PowerPC also currently supports only one H/W watchpoint
+    @expectedFailureAll(archs=['powerpc64le', 's390x'])
     @skipIfDarwin
     def test_hello_watchlocation(self):
         """Test watching a location with '-s size' option."""

Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py?rev=328488&r1=328487&r2=328488&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py Mon Mar 26 05:42:07 2018
@@ -81,7 +81,7 @@ class TestStepOverWatchpoint(TestBase):
         # Most of the MIPS boards provide only one H/W watchpoints, and S/W
         # watchpoints are not supported yet
         arch = self.getArchitecture()
-        if re.match("^mips", arch):
+        if re.match("^mips", arch) or re.match("powerpc64le", arch):
             self.runCmd("watchpoint delete 1")
 
         # resolve_location=True, read=False, write=True

Modified: lldb/trunk/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py?rev=328488&r1=328487&r2=328488&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py Mon Mar 26 05:42:07 2018
@@ -31,6 +31,9 @@ class DisassembleRawDataTestCase(TestBas
         elif re.match("mips", arch):
             target = self.dbg.CreateTargetWithFileAndTargetTriple("", "mips")
             raw_bytes = bytearray([0x03, 0xa0, 0xf0, 0x21])
+        elif re.match("powerpc64le", arch):
+            target = self.dbg.CreateTargetWithFileAndTargetTriple("", "powerpc64le")
+            raw_bytes = bytearray([0x00, 0x00, 0x80, 0x38])
         else:
             target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64")
             raw_bytes = bytearray([0x48, 0x89, 0xe5])
@@ -48,6 +51,9 @@ class DisassembleRawDataTestCase(TestBas
             self.assertTrue(inst.GetMnemonic(target) == "move")
             self.assertTrue(inst.GetOperands(target) ==
                             '$' + "fp, " + '$' + "sp")
+        elif re.match("powerpc64le", arch):
+            self.assertTrue(inst.GetMnemonic(target) == "li")
+            self.assertTrue(inst.GetOperands(target) == "4, 0")
         else:
             self.assertTrue(inst.GetMnemonic(target) == "movq")
             self.assertTrue(inst.GetOperands(target) ==




More information about the lldb-commits mailing list