[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